From cdb205e696ea3fb717d06c986d29a328e1009128 Mon Sep 17 00:00:00 2001 From: upthorn Date: Fri, 31 Aug 2018 21:21:34 -0700 Subject: [PATCH 001/301] Initial API Work --- .../BizHawk.Client.Common.csproj | 11 + .../lua/EmuLuaLibrary.SQL.cs | 3 +- BizHawk.Client.Common/plugins/PluginBase.cs | 58 ++ .../plugins/PluginLibrary.Emu.cs | 353 +++++++++++++ .../plugins/PluginLibrary.GUIDraw.cs | 498 ++++++++++++++++++ .../plugins/PluginLibrary.Gameinfo.cs | 86 +++ .../plugins/PluginLibrary.Joypad.cs | 186 +++++++ .../plugins/PluginLibrary.Memory.cs | 284 ++++++++++ .../plugins/PluginLibrary.MemorySavestate.cs | 60 +++ .../plugins/PluginLibrary.Movie.cs | 263 +++++++++ .../plugins/PluginLibrary.UserData.cs | 52 ++ .../plugins/PluginMemoryBase.cs | 242 +++++++++ .../BizHawk.Client.EmuHawk.csproj | 2 + .../Plugins/Libraries/GUIDrawLibrary.cs | 167 ++++++ 14 files changed, 2263 insertions(+), 2 deletions(-) create mode 100644 BizHawk.Client.Common/plugins/PluginBase.cs create mode 100644 BizHawk.Client.Common/plugins/PluginLibrary.Emu.cs create mode 100644 BizHawk.Client.Common/plugins/PluginLibrary.GUIDraw.cs create mode 100644 BizHawk.Client.Common/plugins/PluginLibrary.Gameinfo.cs create mode 100644 BizHawk.Client.Common/plugins/PluginLibrary.Joypad.cs create mode 100644 BizHawk.Client.Common/plugins/PluginLibrary.Memory.cs create mode 100644 BizHawk.Client.Common/plugins/PluginLibrary.MemorySavestate.cs create mode 100644 BizHawk.Client.Common/plugins/PluginLibrary.Movie.cs create mode 100644 BizHawk.Client.Common/plugins/PluginLibrary.UserData.cs create mode 100644 BizHawk.Client.Common/plugins/PluginMemoryBase.cs create mode 100644 BizHawk.Client.EmuHawk/Plugins/Libraries/GUIDrawLibrary.cs diff --git a/BizHawk.Client.Common/BizHawk.Client.Common.csproj b/BizHawk.Client.Common/BizHawk.Client.Common.csproj index 9816bf2bfb..18110a72f2 100644 --- a/BizHawk.Client.Common/BizHawk.Client.Common.csproj +++ b/BizHawk.Client.Common/BizHawk.Client.Common.csproj @@ -64,6 +64,7 @@ + @@ -131,6 +132,16 @@ + + + + + + + + + + diff --git a/BizHawk.Client.Common/lua/EmuLuaLibrary.SQL.cs b/BizHawk.Client.Common/lua/EmuLuaLibrary.SQL.cs index 5738e975db..5cbc8d2df2 100644 --- a/BizHawk.Client.Common/lua/EmuLuaLibrary.SQL.cs +++ b/BizHawk.Client.Common/lua/EmuLuaLibrary.SQL.cs @@ -1,9 +1,8 @@ using System; -using System.Collections; +using System.Collections.Generic; using System.ComponentModel; using System.Data.SQLite; using NLua; -using System.Collections.Generic; namespace BizHawk.Client.Common { diff --git a/BizHawk.Client.Common/plugins/PluginBase.cs b/BizHawk.Client.Common/plugins/PluginBase.cs new file mode 100644 index 0000000000..44f88da68c --- /dev/null +++ b/BizHawk.Client.Common/plugins/PluginBase.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; + +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Common.IEmulatorExtensions; + +namespace BizHawk.Client.Common +{ + public abstract class PluginBase + { + [RequiredService] + private IEmulator Emulator { get; set; } + + [RequiredService] + private IMemoryDomains Domains { get; set; } + + [OptionalService] + private IInputPollable InputPollableCore { get; set; } + + [OptionalService] + private IDebuggable DebuggableCore { get; set; } + + public abstract void PreFrameCallback(); + public abstract void PostFrameCallback(); + public abstract void SaveStateCallback(string name); + public abstract void LoadStateCallback(string name); + public abstract void InputPollCallback(); + + protected virtual void AddReadCallback(Action cb, uint address, string domain) + { + if (DebuggableCore.MemoryCallbacksAvailable()) + { + DebuggableCore.MemoryCallbacks.Add(new MemoryCallback(domain, MemoryCallbackType.Read, "Lua Hook", cb, address, null)); + } + } + protected virtual void AddWriteCallback(Action cb, uint address, string domain) + { + if (DebuggableCore.MemoryCallbacksAvailable()) + { + DebuggableCore.MemoryCallbacks.Add(new MemoryCallback(domain, MemoryCallbackType.Write, "Lua Hook", cb, address, null)); + } + } + protected virtual void AddExecCallback(Action cb, uint address, string domain) + { + if (DebuggableCore.MemoryCallbacksAvailable() && DebuggableCore.MemoryCallbacks.ExecuteCallbacksAvailable) + { + DebuggableCore.MemoryCallbacks.Add(new MemoryCallback(domain, MemoryCallbackType.Execute, "Lua Hook", cb, address, null)); + } + } + protected virtual void RemoveMemoryCallback(Action cb) + { + if (DebuggableCore.MemoryCallbacksAvailable()) + { + DebuggableCore.MemoryCallbacks.Remove(cb); + } + } + } +} diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.Emu.cs b/BizHawk.Client.Common/plugins/PluginLibrary.Emu.cs new file mode 100644 index 0000000000..eb3dd485b9 --- /dev/null +++ b/BizHawk.Client.Common/plugins/PluginLibrary.Emu.cs @@ -0,0 +1,353 @@ +using System; +using System.ComponentModel; +using System.Collections.Generic; + +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Common.IEmulatorExtensions; +using BizHawk.Emulation.Cores.Nintendo.NES; +using BizHawk.Emulation.Cores.Nintendo.SNES; +using BizHawk.Emulation.Cores.PCEngine; +using BizHawk.Emulation.Cores.Consoles.Sega.gpgx; +using BizHawk.Emulation.Cores.Sega.MasterSystem; +using BizHawk.Emulation.Cores.WonderSwan; +using BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES; + +namespace BizHawk.Client.Common +{ + [Description("A library for interacting with the currently loaded emulator core")] + public sealed class EmulatorPluginLibrary + { + [RequiredService] + private IEmulator Emulator { get; set; } + + [OptionalService] + private IDebuggable DebuggableCore { get; set; } + + [OptionalService] + private IDisassemblable DisassemblableCore { get; set; } + + [OptionalService] + private IMemoryDomains MemoryDomains { get; set; } + + [OptionalService] + private IInputPollable InputPollableCore { get; set; } + + [OptionalService] + private IRegionable RegionableCore { get; set; } + + [OptionalService] + private IBoardInfo BoardInfo { get; set; } + + public Action FrameAdvanceCallback { get; set; } + public Action YieldCallback { get; set; } + + public EmulatorPluginLibrary() + { } + + public static void DisplayVsync(bool enabled) + { + Global.Config.VSync = enabled; + } + + public void FrameAdvance() + { + FrameAdvanceCallback(); + } + + public int FrameCount() + { + return Emulator.Frame; + } + + public object Disassemble(uint pc, string name = "") + { + try + { + if (DisassemblableCore == null) + { + throw new NotImplementedException(); + } + + MemoryDomain domain = MemoryDomains.SystemBus; + + if (!string.IsNullOrEmpty(name)) + { + domain = MemoryDomains[name]; + } + + var d = DisassemblableCore.Disassemble(domain, pc, out int l); + return new { disasm = d, length = l }; + } + catch (NotImplementedException) + { + Console.WriteLine($"Error: {Emulator.Attributes().CoreName} does not yet implement disassemble()"); + return null; + } + } + + public ulong? GetRegister(string name) + { + try + { + if (DebuggableCore == null) + { + throw new NotImplementedException(); + } + + var registers = DebuggableCore.GetCpuFlagsAndRegisters(); + ulong? value = null; + if (registers.ContainsKey(name)) value = registers[name].Value; + return value; + } + catch (NotImplementedException) + { + Console.WriteLine($"Error: {Emulator.Attributes().CoreName} does not yet implement getregister()"); + return null; + } + } + + public Dictionary GetRegisters() + { + var table = new Dictionary(); + + try + { + if (DebuggableCore == null) + { + throw new NotImplementedException(); + } + + foreach (var kvp in DebuggableCore.GetCpuFlagsAndRegisters()) + { + table[kvp.Key] = kvp.Value.Value; + } + } + catch (NotImplementedException) + { + Console.WriteLine($"Error: {Emulator.Attributes().CoreName} does not yet implement getregisters()"); + } + + return table; + } + + public void SetRegister(string register, int value) + { + try + { + if (DebuggableCore == null) + { + throw new NotImplementedException(); + } + + DebuggableCore.SetCpuRegister(register, value); + } + catch (NotImplementedException) + { + Console.WriteLine($"Error: {Emulator.Attributes().CoreName} does not yet implement setregister()"); + } + } + + public long TotalExecutedycles() + { + try + { + if (DebuggableCore == null) + { + throw new NotImplementedException(); + } + + return DebuggableCore.TotalExecutedCycles; + } + catch (NotImplementedException) + { + Console.WriteLine($"Error: {Emulator.Attributes().CoreName} does not yet implement totalexecutedcycles()"); + + return 0; + } + } + + public static string GetSystemId() + { + return Global.Game.System; + } + + public bool IsLagged() + { + if (InputPollableCore != null) + { + return InputPollableCore.IsLagFrame; + } + + Console.WriteLine($"Can not get lag information, {Emulator.Attributes().CoreName} does not implement IInputPollable"); + return false; + } + + public void SetIsLagged(bool value = true) + { + if (InputPollableCore != null) + { + InputPollableCore.IsLagFrame = value; + } + else + { + Console.WriteLine($"Can not set lag information, {Emulator.Attributes().CoreName} does not implement IInputPollable"); + } + } + + public int LagCount() + { + if (InputPollableCore != null) + { + return InputPollableCore.LagCount; + } + + Console.WriteLine($"Can not get lag information, {Emulator.Attributes().CoreName} does not implement IInputPollable"); + return 0; + } + + public void SetLagCount(int count) + { + if (InputPollableCore != null) + { + InputPollableCore.LagCount = count; + } + else + { + Console.WriteLine($"Can not set lag information, {Emulator.Attributes().CoreName} does not implement IInputPollable"); + } + } + + public static void LimitFramerate(bool enabled) + { + Global.Config.ClockThrottle = enabled; + } + + public static void MinimizeFrameskip(bool enabled) + { + Global.Config.AutoMinimizeSkipping = enabled; + } + + public void SetRenderPlanes(params bool[] luaParam) + { + if (Emulator is GPGX) + { + var gpgx = Emulator as GPGX; + var s = gpgx.GetSettings(); + s.DrawBGA = luaParam[0]; + s.DrawBGB = luaParam[1]; + s.DrawBGW = luaParam[2]; + s.DrawObj = luaParam[3]; + gpgx.PutSettings(s); + + } + else if (Emulator is LibsnesCore) + { + var snes = Emulator as LibsnesCore; + var s = snes.GetSettings(); + s.ShowBG1_0 = s.ShowBG1_1 = luaParam[0]; + s.ShowBG2_0 = s.ShowBG2_1 = luaParam[1]; + s.ShowBG3_0 = s.ShowBG3_1 = luaParam[2]; + s.ShowBG4_0 = s.ShowBG4_1 = luaParam[3]; + s.ShowOBJ_0 = luaParam[4]; + s.ShowOBJ_1 = luaParam[5]; + s.ShowOBJ_2 = luaParam[6]; + s.ShowOBJ_3 = luaParam[7]; + snes.PutSettings(s); + } + else if (Emulator is NES) + { + // in the future, we could do something more arbitrary here. + // but this isn't any worse than the old system + var nes = Emulator as NES; + var s = nes.GetSettings(); + s.DispSprites = luaParam[0]; + s.DispBackground = luaParam[1]; + nes.PutSettings(s); + } + else if (Emulator is QuickNES) + { + var quicknes = Emulator as QuickNES; + var s = quicknes.GetSettings(); + + // this core doesn't support disabling BG + bool showsp = GetSetting(0, luaParam); + if (showsp && s.NumSprites == 0) + { + s.NumSprites = 8; + } + else if (!showsp && s.NumSprites > 0) + { + s.NumSprites = 0; + } + + quicknes.PutSettings(s); + } + else if (Emulator is PCEngine) + { + var pce = Emulator as PCEngine; + var s = pce.GetSettings(); + s.ShowOBJ1 = GetSetting(0, luaParam); + s.ShowBG1 = GetSetting(1, luaParam); + if (luaParam.Length > 2) + { + s.ShowOBJ2 = GetSetting(2, luaParam); + s.ShowBG2 = GetSetting(3, luaParam); + } + + pce.PutSettings(s); + } + else if (Emulator is SMS) + { + var sms = Emulator as SMS; + var s = sms.GetSettings(); + s.DispOBJ = GetSetting(0, luaParam); + s.DispBG = GetSetting(1, luaParam); + sms.PutSettings(s); + } + else if (Emulator is WonderSwan) + { + var ws = Emulator as WonderSwan; + var s = ws.GetSettings(); + s.EnableSprites = GetSetting(0, luaParam); + s.EnableFG = GetSetting(1, luaParam); + s.EnableBG = GetSetting(2, luaParam); + ws.PutSettings(s); + } + } + + private static bool GetSetting(int index, bool[] settings) + { + if (index < settings.Length) + { + return settings[index]; + } + + return true; + } + + public void Yield() + { + YieldCallback(); + } + + public string GetDisplayType() + { + if (RegionableCore != null) + { + return RegionableCore.Region.ToString(); + } + + return ""; + } + + public string GetBoardName() + { + if (BoardInfo != null) + { + return BoardInfo.BoardName; + } + + return ""; + } + } +} diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.GUIDraw.cs b/BizHawk.Client.Common/plugins/PluginLibrary.GUIDraw.cs new file mode 100644 index 0000000000..46081390d2 --- /dev/null +++ b/BizHawk.Client.Common/plugins/PluginLibrary.GUIDraw.cs @@ -0,0 +1,498 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; +using System.IO; + +using BizHawk.Emulation.Common; + +namespace BizHawk.Client.Common +{ + public abstract class GUIDrawPluginLibrary + { + [RequiredService] + protected IEmulator Emulator { get; set; } + + public GUIDrawPluginLibrary() + { + + } + + public bool HasGUISurface = false; + + protected Color _defaultForeground = Color.White; + protected Color? _defaultBackground; + protected Color? _defaultTextBackground = Color.FromArgb(128, 0, 0, 0); + protected int _defaultPixelFont = 1; // gens + protected Padding _padding = new Padding(0); + + #region Gui API + public virtual void Dispose() + { + foreach (var brush in _solidBrushes.Values) + { + brush.Dispose(); + } + + foreach (var brush in _pens.Values) + { + brush.Dispose(); + } + } + + public abstract void DrawNew(string name, bool? clear = true); + public abstract void DrawFinish(); + #endregion + + #region Helpers + protected readonly Dictionary _imageCache = new Dictionary(); + + protected readonly Dictionary _solidBrushes = new Dictionary(); + protected readonly Dictionary _pens = new Dictionary(); + protected SolidBrush GetBrush(Color color) + { + SolidBrush b; + if (!_solidBrushes.TryGetValue(color, out b)) + { + b = new SolidBrush(color); + _solidBrushes[color] = b; + } + + return b; + } + + protected Pen GetPen(Color color) + { + Pen p; + if (!_pens.TryGetValue(color, out p)) + { + p = new Pen(color); + _pens[color] = p; + } + + return p; + } + + protected abstract Graphics GetGraphics(); + public void SetPadding(int all) + { + _padding = new Padding(all); + } + public void SetPadding(int x, int y) + { + _padding = new Padding(x / 2, y / 2, x / 2 + x & 1, y / 2 + y & 1); + } + public void SetPadding(int l,int t,int r, int b) + { + _padding = new Padding(l, t, r, b); + } + public Padding GetPadding() + { + return _padding; + } + #endregion + + public abstract void AddMessage(string message); + + public abstract void ClearGraphics(); + + public abstract void ClearText(); + + public void SetDefaultForegroundColor(Color color) + { + _defaultForeground = color; + } + + public void SetDefaultBackgroundColor(Color color) + { + _defaultBackground = color; + } + + public void SetDefaultTextBackground(Color color) + { + _defaultTextBackground = color; + } + + public void SetDefaultPixelFont(string fontfamily) + { + switch (fontfamily) + { + case "fceux": + case "0": + _defaultPixelFont = 0; + break; + case "gens": + case "1": + _defaultPixelFont = 1; + break; + default: + Console.WriteLine($"Unable to find font family: {fontfamily}"); + return; + } + } + + public void DrawBezier(Point p1, Point p2, Point p3, Point p4, Color? color = null) + { + using (var g = GetGraphics()) + { + try + { + g.DrawBezier(GetPen(color ?? _defaultForeground), p1, p2, p3, p4); + } + catch (Exception) + { + return; + } + } + } + + public void DrawBeziers(Point[] points, Color? color = null) + { + using (var g = GetGraphics()) + { + try + { + g.DrawBeziers(GetPen(color ?? _defaultForeground), points); + } + catch (Exception) + { + return; + } + } + } + public void DrawBox(int x, int y, int x2, int y2, Color? line = null, Color? background = null) + { + using (var g = GetGraphics()) + { + try + { + if (x < x2) + { + x2 = Math.Abs(x - x2); + } + else + { + x2 = x - x2; + x -= x2; + } + + if (y < y2) + { + y2 = Math.Abs(y - y2); + } + else + { + y2 = y - y2; + y -= y2; + } + + g.DrawRectangle(GetPen(line ?? _defaultForeground), x, y, x2, y2); + + var bg = background ?? _defaultBackground; + if (bg.HasValue) + { + g.FillRectangle(GetBrush(bg.Value), x + 1, y + 1, x2 - 1, y2 - 1); + } + } + catch (Exception) + { + // need to stop the script from here + return; + } + } + } + + public void DrawEllipse(int x, int y, int width, int height, Color? line = null, Color? background = null) + { + using (var g = GetGraphics()) + { + try + { + var bg = background ?? _defaultBackground; + if (bg.HasValue) + { + var brush = GetBrush(bg.Value); + g.FillEllipse(brush, x, y, width, height); + } + + g.DrawEllipse(GetPen(line ?? _defaultForeground), x, y, width, height); + } + catch (Exception) + { + // need to stop the script from here + return; + } + } + } + + public void DrawIcon(string path, int x, int y, int? width = null, int? height = null) + { + using (var g = GetGraphics()) + { + try + { + if (!File.Exists(path)) + { + AddMessage("File not found: " + path); + return; + } + + Icon icon; + if (width.HasValue && height.HasValue) + { + icon = new Icon(path, width.Value, height.Value); + } + else + { + icon = new Icon(path); + } + + g.DrawIcon(icon, x, y); + } + catch (Exception) + { + return; + } + } + } + + public void DrawImage(string path, int x, int y, int? width = null, int? height = null, bool cache = true) + { + if (!File.Exists(path)) + { + Console.WriteLine("File not found: " + path); + return; + } + + using (var g = GetGraphics()) + { + Image img; + if (_imageCache.ContainsKey(path)) + { + img = _imageCache[path]; + } + else + { + img = Image.FromFile(path); + if (cache) + { + _imageCache.Add(path, img); + } + } + + g.DrawImage(img, x, y, width ?? img.Width, height ?? img.Height); + } + } + + public void ClearImageCache() + { + foreach (var image in _imageCache) + { + image.Value.Dispose(); + } + + _imageCache.Clear(); + } + + public void DrawImageRegion(string path, int source_x, int source_y, int source_width, int source_height, int dest_x, int dest_y, int? dest_width = null, int? dest_height = null) + { + if (!File.Exists(path)) + { + Console.WriteLine("File not found: " + path); + return; + } + + using (var g = GetGraphics()) + { + Image img; + if (_imageCache.ContainsKey(path)) + { + img = _imageCache[path]; + } + else + { + img = Image.FromFile(path); + _imageCache.Add(path, img); + } + + var destRect = new Rectangle(dest_x, dest_y, dest_width ?? source_width, dest_height ?? source_height); + + g.DrawImage(img, destRect, source_x, source_y, source_width, source_height, GraphicsUnit.Pixel); + } + } + + public void DrawLine(int x1, int y1, int x2, int y2, Color? color = null) + { + using (var g = GetGraphics()) + { + g.DrawLine(GetPen(color ?? _defaultForeground), x1, y1, x2, y2); + } + } + + public void DrawAxis(int x, int y, int size, Color? color = null) + { + DrawLine(x + size, y, x - size, y, color ?? _defaultForeground); + DrawLine(x, y + size, x, y - size, color ?? _defaultForeground); + } + + public void DrawPie(int x, int y, int width, int height, int startangle, int sweepangle, Color? line = null, Color? background = null) + { + using (var g = GetGraphics()) + { + var bg = background ?? _defaultBackground; + if (bg.HasValue) + { + var brush = GetBrush(bg.Value); + g.FillPie(brush, x, y, width, height, startangle, sweepangle); + } + + g.DrawPie(GetPen(line ?? _defaultForeground), x + 1, y + 1, width - 1, height - 1, startangle, sweepangle); + } + } + + public void DrawPixel(int x, int y, Color? color = null) + { + using (var g = GetGraphics()) + { + try + { + g.DrawLine(GetPen(color ?? _defaultForeground), x, y, x + 0.1F, y); + } + catch (Exception) + { + return; + } + } + } + + public void DrawPolygon(Point[] points, Color? line = null, Color? background = null) + { + using (var g = GetGraphics()) + { + try + { + g.DrawPolygon(GetPen(line ?? _defaultForeground), points); + var bg = background ?? _defaultBackground; + if (bg.HasValue) + { + g.FillPolygon(GetBrush(bg.Value), points); + } + } + catch (Exception) + { + return; + } + } + } + + public void DrawRectangle(int x, int y, int width, int height, Color? line = null, Color? background = null) + { + using (var g = GetGraphics()) + { + g.DrawRectangle(GetPen(line ?? _defaultForeground), x, y, width, height); + var bg = background ?? _defaultBackground; + if (bg.HasValue) + { + g.FillRectangle(GetBrush(bg.Value), x + 1, y + 1, width - 1, height - 1); + } + } + } + + public void DrawString(int x, int y, string message, Color? forecolor = null, Color? backcolor = null, int? fontsize = null, + string fontfamily = null, string fontstyle = null, string horizalign = null, string vertalign = null) + { + using (var g = GetGraphics()) + { + try + { + var family = FontFamily.GenericMonospace; + if (fontfamily != null) + { + family = new FontFamily(fontfamily); + } + + var fstyle = FontStyle.Regular; + if (fontstyle != null) + { + switch (fontstyle.ToLower()) + { + default: + case "regular": + break; + case "bold": + fstyle = FontStyle.Bold; + break; + case "italic": + fstyle = FontStyle.Italic; + break; + case "strikethrough": + fstyle = FontStyle.Strikeout; + break; + case "underline": + fstyle = FontStyle.Underline; + break; + } + } + + // The text isn't written out using GenericTypographic, so measuring it using GenericTypographic seemed to make it worse. + // And writing it out with GenericTypographic just made it uglier. :p + var f = new StringFormat(StringFormat.GenericDefault); + var font = new Font(family, fontsize ?? 12, fstyle, GraphicsUnit.Pixel); + Size sizeOfText = g.MeasureString(message, font, 0, f).ToSize(); + if (horizalign != null) + { + switch (horizalign.ToLower()) + { + default: + case "left": + break; + case "center": + x -= sizeOfText.Width / 2; + break; + case "right": + x -= sizeOfText.Width; + break; + } + } + + if (vertalign != null) + { + switch (vertalign.ToLower()) + { + default: + case "bottom": + break; + case "middle": + y -= sizeOfText.Height / 2; + break; + case "top": + y -= sizeOfText.Height; + break; + } + } + + var bg = backcolor ?? _defaultBackground; + if (bg.HasValue) + { + for (var xd = -1; xd <= 1; xd++) + { + for (var yd = -1; yd <= 1; yd++) + { + g.DrawString(message, font, GetBrush(bg.Value), x+xd, y+yd); + } + } + } + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit; + g.DrawString(message, font, GetBrush(forecolor ?? _defaultForeground), x, y); + } + catch (Exception) + { + return; + } + } + } + + public abstract void DrawText(int x, int y, string message, Color? forecolor = null, Color? backcolor = null, string fontfamily = null); + public abstract void Text(int x, int y, string message, Color? forecolor = null, string anchor = null); + } +} \ No newline at end of file diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.Gameinfo.cs b/BizHawk.Client.Common/plugins/PluginLibrary.Gameinfo.cs new file mode 100644 index 0000000000..6c9c21b070 --- /dev/null +++ b/BizHawk.Client.Common/plugins/PluginLibrary.Gameinfo.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; + +using BizHawk.Emulation.Common; + +namespace BizHawk.Client.Common +{ + public sealed class GameInfoPluginLibrary + { + [OptionalService] + private IBoardInfo BoardInfo { get; set; } + + public GameInfoPluginLibrary() + { } + + public string GetRomName() + { + if (Global.Game != null) + { + return Global.Game.Name ?? ""; + } + + return ""; + } + + public string GetRomHash() + { + if (Global.Game != null) + { + return Global.Game.Hash ?? ""; + } + + return ""; + } + + public bool InDatabase() + { + if (Global.Game != null) + { + return !Global.Game.NotInDatabase; + } + + return false; + } + + public string GetStatus() + { + if (Global.Game != null) + { + return Global.Game.Status.ToString(); + } + + return ""; + } + + public bool IsStatusBad() + { + if (Global.Game != null) + { + return Global.Game.IsRomStatusBad(); + } + + return true; + } + + public string GetBoardType() + { + return BoardInfo?.BoardName ?? ""; + } + + public Dictionary GetOptions() + { + var options = new Dictionary(); + + if (Global.Game != null) + { + foreach (var option in Global.Game.GetOptionsDict()) + { + options[option.Key] = option.Value; + } + } + + return options; + } + } +} diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.Joypad.cs b/BizHawk.Client.Common/plugins/PluginLibrary.Joypad.cs new file mode 100644 index 0000000000..e981b0ef31 --- /dev/null +++ b/BizHawk.Client.Common/plugins/PluginLibrary.Joypad.cs @@ -0,0 +1,186 @@ +using System; +using System.Collections.Generic; + +namespace BizHawk.Client.Common +{ + public sealed class JoypadPluginLibrary + { + public JoypadPluginLibrary() { } + + public Dictionary Get(int? controller = null) + { + var buttons = new Dictionary(); + var adaptor = Global.AutofireStickyXORAdapter; + foreach (var button in adaptor.Source.Definition.BoolButtons) + { + if (!controller.HasValue) + { + buttons[button] = adaptor.IsPressed(button); + } + else if (button.Length >= 3 && button.Substring(0, 2) == "P" + controller) + { + buttons[button.Substring(3)] = adaptor.IsPressed("P" + controller + " " + button.Substring(3)); + } + } + + foreach (var button in adaptor.Source.Definition.FloatControls) + { + if (controller == null) + { + buttons[button] = adaptor.GetFloat(button); + } + else if (button.Length >= 3 && button.Substring(0, 2) == "P" + controller) + { + buttons[button.Substring(3)] = adaptor.GetFloat("P" + controller + " " + button.Substring(3)); + } + } + + buttons["clear"] = null; + buttons["getluafunctionslist"] = null; + buttons["output"] = null; + + return buttons; + } + + // TODO: what about float controls? + public Dictionary GetImmediate() + { + var buttons = new Dictionary(); + var adaptor = Global.ActiveController; + foreach (var button in adaptor.Definition.BoolButtons) + { + buttons[button] = adaptor.IsPressed(button); + } + foreach (var button in adaptor.Definition.FloatControls) + { + buttons[button] = adaptor.GetFloat(button); + } + + return buttons; + } + + public void SetFromMnemonicStr(string inputLogEntry) + { + try + { + var lg = Global.MovieSession.MovieControllerInstance(); + lg.SetControllersAsMnemonic(inputLogEntry); + + foreach (var button in lg.Definition.BoolButtons) + { + Global.LuaAndAdaptor.SetButton(button, lg.IsPressed(button)); + } + + foreach (var floatButton in lg.Definition.FloatControls) + { + Global.LuaAndAdaptor.SetFloat(floatButton, lg.GetFloat(floatButton)); + } + } + catch (Exception) + { + Console.WriteLine("invalid mnemonic string: " + inputLogEntry); + } + } + + [LuaMethodExample("joypad.set( { [\"Left\"] = true, [ \"A\" ] = true, [ \"B\" ] = true } );")] + [LuaMethod("set", "sets the given buttons to their provided values for the current frame")] + public void Set(Dictionary buttons, int? controller = null) + { + try + { + foreach (var button in buttons.Keys) + { + var invert = false; + bool? theValue; + var theValueStr = buttons[button].ToString(); + + if (!string.IsNullOrWhiteSpace(theValueStr)) + { + if (theValueStr.ToLower() == "false") + { + theValue = false; + } + else if (theValueStr.ToLower() == "true") + { + theValue = true; + } + else + { + invert = true; + theValue = null; + } + } + else + { + theValue = null; + } + + var toPress = button.ToString(); + if (controller.HasValue) + { + toPress = "P" + controller + " " + button; + } + + if (!invert) + { + if (theValue.HasValue) // Force + { + Global.LuaAndAdaptor.SetButton(toPress, theValue.Value); + Global.ActiveController.Overrides(Global.LuaAndAdaptor); + } + else // Unset + { + Global.LuaAndAdaptor.UnSet(toPress); + Global.ActiveController.Overrides(Global.LuaAndAdaptor); + } + } + else // Inverse + { + Global.LuaAndAdaptor.SetInverse(toPress); + Global.ActiveController.Overrides(Global.LuaAndAdaptor); + } + } + } + catch + { + /*Eat it*/ + } + } + + [LuaMethodExample("joypad.setanalog( { [ \"Tilt X\" ] = true, [ \"Tilt Y\" ] = false } );")] + [LuaMethod("setanalog", "sets the given analog controls to their provided values for the current frame. Note that unlike set() there is only the logic of overriding with the given value.")] + public void SetAnalog(Dictionary controls, object controller = null) + { + try + { + foreach (var name in controls.Keys) + { + var theValueStr = controls[name].ToString(); + float? theValue = null; + + if (!string.IsNullOrWhiteSpace(theValueStr)) + { + float f; + if (float.TryParse(theValueStr, out f)) + { + theValue = f; + } + } + + if (controller == null) + { + Global.StickyXORAdapter.SetFloat(name.ToString(), theValue); + } + else + { + Global.StickyXORAdapter.SetFloat("P" + controller + " " + name, theValue); + } + } + } + catch + { + /*Eat it*/ + } + } + } +} diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.Memory.cs b/BizHawk.Client.Common/plugins/PluginLibrary.Memory.cs new file mode 100644 index 0000000000..aa9daf90d3 --- /dev/null +++ b/BizHawk.Client.Common/plugins/PluginLibrary.Memory.cs @@ -0,0 +1,284 @@ +using System; +using System.Collections.Generic; + +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Common.IEmulatorExtensions; +using BizHawk.Common.BufferExtensions; + +namespace BizHawk.Client.Common +{ + public sealed class MemoryPluginLibrary : PluginMemoryBase + { + private MemoryDomain _currentMemoryDomain; + private bool _isBigEndian; + public MemoryPluginLibrary(bool Big = false) + : base() + { + _isBigEndian = Big; + } + + protected override MemoryDomain Domain + { + get + { + if (MemoryDomainCore != null) + { + if (_currentMemoryDomain == null) + { + _currentMemoryDomain = MemoryDomainCore.HasSystemBus + ? MemoryDomainCore.SystemBus + : MemoryDomainCore.MainMemory; + } + + return _currentMemoryDomain; + } + + var error = $"Error: {Emulator.Attributes().CoreName} does not implement memory domains"; + Console.WriteLine(error); + throw new NotImplementedException(error); + } + } + + #region Unique Library Methods + + public List GetMemoryDomainList() + { + var list = new List(); + + foreach (var domain in DomainList) + { + list.Add(domain.Name); + } + + return list; + } + + public uint GetMemoryDomainSize(string name = "") + { + if (string.IsNullOrEmpty(name)) + { + return (uint)Domain.Size; + } + + return (uint)DomainList[VerifyMemoryDomain(name)].Size; + } + + public string GetCurrentMemoryDomain() + { + return Domain.Name; + } + + public uint GetCurrentMemoryDomainSize() + { + return (uint)Domain.Size; + } + + public bool UseMemoryDomain(string domain) + { + try + { + if (DomainList[domain] != null) + { + _currentMemoryDomain = DomainList[domain]; + return true; + } + + Console.WriteLine($"Unable to find domain: {domain}"); + return false; + } + catch // Just in case + { + Console.WriteLine($"Unable to find domain: {domain}"); + } + + return false; + } + + public string HashRegion(int addr, int count, string domain = null) + { + var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)]; + + // checks + if (addr < 0 || addr >= d.Size) + { + string error = $"Address {addr} is outside the bounds of domain {d.Name}"; + Console.WriteLine(error); + throw new ArgumentOutOfRangeException(error); + } + if (addr + count > d.Size) + { + string error = $"Address {addr} + count {count} is outside the bounds of domain {d.Name}"; + Console.WriteLine(error); + throw new ArgumentOutOfRangeException(error); + } + + byte[] data = new byte[count]; + for (int i = 0; i < count; i++) + { + data[i] = d.PeekByte(addr + i); + } + + using (var hasher = System.Security.Cryptography.SHA256.Create()) + { + return hasher.ComputeHash(data).BytesToHexString(); + } + } + + #endregion + + #region Endian Handling + + private int ReadSigned(int addr, int size, string domain = null) + { + if (_isBigEndian) return ReadSignedBig(addr, size, domain); + else return ReadSignedLittle(addr, size, domain); + } + + private uint ReadUnsigned(int addr, int size, string domain = null) + { + if (_isBigEndian) return ReadUnsignedBig(addr, size, domain); + else return ReadUnsignedLittle(addr, size, domain); + } + + private void WriteSigned(int addr, int value, int size, string domain = null) + { + if (_isBigEndian) WriteSignedBig(addr, value, size, domain); + else WriteSignedLittle(addr, value, size, domain); + } + + private void WriteUnsigned(int addr, uint value, int size, string domain = null) + { + if (_isBigEndian) WriteUnsignedBig(addr, value, size, domain); + else WriteUnsignedLittle(addr, value, size, domain); + } + + #endregion + + #region Common Special and Legacy Methods + + public uint ReadByte(int addr, string domain = null) + { + return ReadUnsignedByte(addr, domain); + } + + public void WriteByte(int addr, uint value, string domain = null) + { + WriteUnsignedByte(addr, value, domain); + } + + public new List ReadByteRange(int addr, int length, string domain = null) + { + return base.ReadByteRange(addr, length, domain); + } + + public new void WriteByteRange(int addr, List memoryblock, string domain = null) + { + base.WriteByteRange(addr, memoryblock, domain); + } + + public float ReadFloat(int addr, string domain = null) + { + return base.ReadFloat(addr, _isBigEndian, domain); + } + + public void WriteFloat(int addr, double value, string domain = null) + { + base.WriteFloat(addr, value, _isBigEndian, domain); + } + + #endregion + + #region 1 Byte + + public int ReadS8(int addr, string domain = null) + { + return (sbyte)ReadUnsignedByte(addr, domain); + } + + public void WriteS8(int addr, uint value, string domain = null) + { + WriteUnsignedByte(addr, value, domain); + } + + public uint ReadU8(int addr, string domain = null) + { + return ReadUnsignedByte(addr, domain); + } + + public void WriteU8(int addr, uint value, string domain = null) + { + WriteUnsignedByte(addr, value, domain); + } + + #endregion + + #region 2 Byte + public int ReadS16(int addr, string domain = null) + { + return ReadSigned(addr, 2, domain); + } + + public void WriteS16(int addr, int value, string domain = null) + { + WriteSigned(addr, value, 2, domain); + } + + public uint ReadU16(int addr, string domain = null) + { + return ReadUnsigned(addr, 2, domain); + } + + public void WriteU16(int addr, uint value, string domain = null) + { + WriteUnsigned(addr, value, 2, domain); + } + #endregion + + #region 3 Byte + + public int ReadS24(int addr, string domain = null) + { + return ReadSigned(addr, 3, domain); + } + public void WriteS24(int addr, int value, string domain = null) + { + WriteSigned(addr, value, 3, domain); + } + + public uint ReadU24(int addr, string domain = null) + { + return ReadUnsigned(addr, 3, domain); + } + + public void WriteU24(int addr, uint value, string domain = null) + { + WriteUnsigned(addr, value, 3, domain); + } + + #endregion + + #region 4 Byte + + public int ReadS32(int addr, string domain = null) + { + return ReadSigned(addr, 4, domain); + } + + public void WriteS32(int addr, int value, string domain = null) + { + WriteSigned(addr, value, 4, domain); + } + + public uint ReadU32(int addr, string domain = null) + { + return ReadUnsigned(addr, 4, domain); + } + + public void WriteU32(int addr, uint value, string domain = null) + { + WriteUnsigned(addr, value, 4, domain); + } + + #endregion + } +} \ No newline at end of file diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.MemorySavestate.cs b/BizHawk.Client.Common/plugins/PluginLibrary.MemorySavestate.cs new file mode 100644 index 0000000000..f0916a518a --- /dev/null +++ b/BizHawk.Client.Common/plugins/PluginLibrary.MemorySavestate.cs @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.IO; + +using BizHawk.Emulation.Common; + +namespace BizHawk.Client.Common +{ + public sealed class MemorySavestatePluginLibrary + { + public MemorySavestatePluginLibrary() + { } + + [RequiredService] + private IStatable StatableCore { get; set; } + + private readonly Dictionary _memorySavestates = new Dictionary(); + + public string SaveCoreStateToMemory() + { + var guid = Guid.NewGuid(); + var bytes = (byte[])StatableCore.SaveStateBinary().Clone(); + + _memorySavestates.Add(guid, bytes); + + return guid.ToString(); + } + + public void LoadCoreStateFromMemory(string identifier) + { + var guid = new Guid(identifier); + + try + { + var state = _memorySavestates[guid]; + + using (var ms = new MemoryStream(state)) + using (var br = new BinaryReader(ms)) + { + StatableCore.LoadStateBinary(br); + } + } + catch + { + Console.WriteLine("Unable to find the given savestate in memory"); + } + } + + public void DeleteState(string identifier) + { + var guid = new Guid(identifier); + _memorySavestates.Remove(guid); + } + + public void ClearInMemoryStates() + { + _memorySavestates.Clear(); + } + } +} diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.Movie.cs b/BizHawk.Client.Common/plugins/PluginLibrary.Movie.cs new file mode 100644 index 0000000000..6673f561ff --- /dev/null +++ b/BizHawk.Client.Common/plugins/PluginLibrary.Movie.cs @@ -0,0 +1,263 @@ +using System; +using System.Collections.Generic; +using System.IO; + +namespace BizHawk.Client.Common +{ + public sealed class MoviePluginLibrary + { + public MoviePluginLibrary() + { } + + [LuaMethodExample("if ( movie.startsfromsavestate( ) ) then\r\n\tconsole.log( \"Returns whether or not the movie is a savestate-anchored movie\" );\r\nend;")] + [LuaMethod("startsfromsavestate", "Returns whether or not the movie is a savestate-anchored movie")] + public bool StartsFromSavestate() + { + return Global.MovieSession.Movie.IsActive && Global.MovieSession.Movie.StartsFromSavestate; + } + + [LuaMethodExample("if ( movie.startsfromsaveram( ) ) then\r\n\tconsole.log( \"Returns whether or not the movie is a saveram-anchored movie\" );\r\nend;")] + [LuaMethod("startsfromsaveram", "Returns whether or not the movie is a saveram-anchored movie")] + public bool StartsFromSaveram() + { + return Global.MovieSession.Movie.IsActive && Global.MovieSession.Movie.StartsFromSaveRam; + } + + [LuaMethodExample("local stmovfil = movie.filename( );")] + [LuaMethod("filename", "Returns the file name including path of the currently loaded movie")] + public static string Filename() + { + return Global.MovieSession.Movie.Filename; + } + + [LuaMethodExample("local nlmovget = movie.getinput( 500 );")] + [LuaMethod("getinput", "Returns a table of buttons pressed on a given frame of the loaded movie")] + public Dictionary GetInput(int frame) + { + if (!Global.MovieSession.Movie.IsActive) + { + Console.WriteLine("No movie loaded"); + return null; + } + + var input = new Dictionary(); + var adapter = Global.MovieSession.Movie.GetInputState(frame); + + if (adapter == null) + { + Console.WriteLine("Can't get input of the last frame of the movie. Use the previous frame"); + return null; + } + + foreach (var button in adapter.Definition.BoolButtons) + { + input[button] = adapter.IsPressed(button); + } + + foreach (var button in adapter.Definition.FloatControls) + { + input[button] = adapter.GetFloat(button); + } + + return input; + } + + [LuaMethodExample("local stmovget = movie.getinputasmnemonic( 500 );")] + [LuaMethod("getinputasmnemonic", "Returns the input of a given frame of the loaded movie in a raw inputlog string")] + public string GetInputAsMnemonic(int frame) + { + if (Global.MovieSession.Movie.IsActive && frame < Global.MovieSession.Movie.InputLogLength) + { + var lg = Global.MovieSession.LogGeneratorInstance(); + lg.SetSource(Global.MovieSession.Movie.GetInputState(frame)); + return lg.GenerateLogEntry(); + } + + return ""; + } + + [LuaMethodExample("if ( movie.getreadonly( ) ) then\r\n\tconsole.log( \"Returns true if the movie is in read-only mode, false if in read+write\" );\r\nend;")] + [LuaMethod("getreadonly", "Returns true if the movie is in read-only mode, false if in read+write")] + public static bool GetReadOnly() + { + return Global.MovieSession.ReadOnly; + } + + [LuaMethodExample("local ulmovget = movie.getrerecordcount();")] + [LuaMethod("getrerecordcount", "Gets the rerecord count of the current movie.")] + public static ulong GetRerecordCount() + { + return Global.MovieSession.Movie.Rerecords; + } + + [LuaMethodExample("if ( movie.getrerecordcounting( ) ) then\r\n\tconsole.log( \"Returns whether or not the current movie is incrementing rerecords on loadstate\" );\r\nend;")] + [LuaMethod("getrerecordcounting", "Returns whether or not the current movie is incrementing rerecords on loadstate")] + public static bool GetRerecordCounting() + { + return Global.MovieSession.Movie.IsCountingRerecords; + } + + [LuaMethodExample("if ( movie.isloaded( ) ) then\r\n\tconsole.log( \"Returns true if a movie is loaded in memory ( play, record, or finished modes ), false if not ( inactive mode )\" );\r\nend;")] + [LuaMethod("isloaded", "Returns true if a movie is loaded in memory (play, record, or finished modes), false if not (inactive mode)")] + public static bool IsLoaded() + { + return Global.MovieSession.Movie.IsActive; + } + + [LuaMethodExample("local domovlen = movie.length( );")] + [LuaMethod("length", "Returns the total number of frames of the loaded movie")] + public static double Length() + { + return Global.MovieSession.Movie.FrameCount; + } + + [LuaMethodExample("local stmovmod = movie.mode( );")] + [LuaMethod("mode", "Returns the mode of the current movie. Possible modes: \"PLAY\", \"RECORD\", \"FINISHED\", \"INACTIVE\"")] + public static string Mode() + { + if (Global.MovieSession.Movie.IsFinished) + { + return "FINISHED"; + } + + if (Global.MovieSession.Movie.IsPlaying) + { + return "PLAY"; + } + + if (Global.MovieSession.Movie.IsRecording) + { + return "RECORD"; + } + + return "INACTIVE"; + } + + [LuaMethodExample("movie.save( \"C:\\moviename.ext\" );")] + [LuaMethod("save", "Saves the current movie to the disc. If the filename is provided (no extension or path needed), the movie is saved under the specified name to the current movie directory. The filename may contain a subdirectory, it will be created if it doesn't exist. Existing files won't get overwritten.")] + public void Save(string filename = "") + { + if (!Global.MovieSession.Movie.IsActive) + { + return; + } + + if (!string.IsNullOrEmpty(filename)) + { + filename += "." + Global.MovieSession.Movie.PreferredExtension; + var test = new FileInfo(filename); + if (test.Exists) + { + Console.WriteLine($"File {filename} already exists, will not overwrite"); + return; + } + + Global.MovieSession.Movie.Filename = filename; + } + + Global.MovieSession.Movie.Save(); + } + + [LuaMethodExample("movie.setreadonly( false );")] + [LuaMethod("setreadonly", "Sets the read-only state to the given value. true for read only, false for read+write")] + public static void SetReadOnly(bool readOnly) + { + Global.MovieSession.ReadOnly = readOnly; + } + + [LuaMethodExample("movie.setrerecordcount( 20.0 );")] + [LuaMethod("setrerecordcount", "Sets the rerecord count of the current movie.")] + public static void SetRerecordCount(double count) + { + // Lua numbers are always double, integer precision holds up + // to 53 bits, so throw an error if it's bigger than that. + const double PrecisionLimit = 9007199254740992d; + + if (count > PrecisionLimit) + { + throw new Exception("Rerecord count exceeds Lua integer precision."); + } + + Global.MovieSession.Movie.Rerecords = (ulong)count; + } + + [LuaMethodExample("movie.setrerecordcounting( true );")] + [LuaMethod("setrerecordcounting", "Sets whether or not the current movie will increment the rerecord counter on loadstate")] + public static void SetRerecordCounting(bool counting) + { + Global.MovieSession.Movie.IsCountingRerecords = counting; + } + + [LuaMethodExample("movie.stop( );")] + [LuaMethod("stop", "Stops the current movie")] + public static void Stop() + { + Global.MovieSession.Movie.Stop(); + } + + [LuaMethodExample("local domovget = movie.getfps( );")] + [LuaMethod("getfps", "If a movie is loaded, gets the frames per second used by the movie to determine the movie length time")] + public static double GetFps() + { + if (Global.MovieSession.Movie.IsActive) + { + var movie = Global.MovieSession.Movie; + var system = movie.HeaderEntries[HeaderKeys.PLATFORM]; + var pal = movie.HeaderEntries.ContainsKey(HeaderKeys.PAL) && + movie.HeaderEntries[HeaderKeys.PAL] == "1"; + + return new PlatformFrameRates()[system, pal]; + } + + return 0.0; + } + + [LuaMethodExample("local nlmovget = movie.getheader( );")] + [LuaMethod("getheader", "If a movie is active, will return the movie header as a lua table")] + public Dictionary GetHeader() + { + var table = new Dictionary(); + if (Global.MovieSession.Movie.IsActive) + { + foreach (var kvp in Global.MovieSession.Movie.HeaderEntries) + { + table[kvp.Key] = kvp.Value; + } + } + + return table; + } + + [LuaMethodExample("local nlmovget = movie.getcomments( );")] + [LuaMethod("getcomments", "If a movie is active, will return the movie comments as a lua table")] + public List GetComments() + { + var list = new List(Global.MovieSession.Movie.Comments.Count); + if (Global.MovieSession.Movie.IsActive) + { + for (int i = 0; i < Global.MovieSession.Movie.Comments.Count; i++) + { + list[i] = Global.MovieSession.Movie.Comments[i]; + } + } + + return list; + } + + [LuaMethodExample("local nlmovget = movie.getsubtitles( );")] + [LuaMethod("getsubtitles", "If a movie is active, will return the movie subtitles as a lua table")] + public List GetSubtitles() + { + var list = new List(Global.MovieSession.Movie.Subtitles.Count); + if (Global.MovieSession.Movie.IsActive) + { + for (int i = 0; i < Global.MovieSession.Movie.Subtitles.Count; i++) + { + list[i] = Global.MovieSession.Movie.Subtitles[i].ToString(); + } + } + + return list; + } + } +} diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.UserData.cs b/BizHawk.Client.Common/plugins/PluginLibrary.UserData.cs new file mode 100644 index 0000000000..1613ac46ce --- /dev/null +++ b/BizHawk.Client.Common/plugins/PluginLibrary.UserData.cs @@ -0,0 +1,52 @@ +using System; +using System.ComponentModel; + +using BizHawk.Client.Common; + +namespace BizHawk.Client.EmuHawk +{ + public sealed class UserDataPluginLibrary + { + public UserDataPluginLibrary() + { } + + public void Set(string name, object value) + { + if (value != null) + { + var t = value.GetType(); + if (!t.IsPrimitive && t != typeof(string)) + { + throw new InvalidOperationException("Invalid type for userdata"); + } + } + + Global.UserBag[name] = value; + } + + public object Get(string key) + { + if (Global.UserBag.ContainsKey(key)) + { + return Global.UserBag[key]; + } + + return null; + } + + public void Clear() + { + Global.UserBag.Clear(); + } + + public bool Remove(string key) + { + return Global.UserBag.Remove(key); + } + + public bool ContainsKey(string key) + { + return Global.UserBag.ContainsKey(key); + } + } +} diff --git a/BizHawk.Client.Common/plugins/PluginMemoryBase.cs b/BizHawk.Client.Common/plugins/PluginMemoryBase.cs new file mode 100644 index 0000000000..92bfad1a81 --- /dev/null +++ b/BizHawk.Client.Common/plugins/PluginMemoryBase.cs @@ -0,0 +1,242 @@ +using System; +using System.Collections.Generic; +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Common.IEmulatorExtensions; + +namespace BizHawk.Client.Common +{ + /// + /// Base class for the Memory and MainMemory plugin libraries + /// + public abstract class PluginMemoryBase + { + [RequiredService] + protected IEmulator Emulator { get; set; } + + [OptionalService] + protected IMemoryDomains MemoryDomainCore { get; set; } + + protected abstract MemoryDomain Domain { get; } + + protected PluginMemoryBase() + { + + } + + protected IMemoryDomains DomainList + { + get + { + if (MemoryDomainCore != null) + { + return MemoryDomainCore; + } + + var error = $"Error: {Emulator.Attributes().CoreName} does not implement memory domains"; + Console.WriteLine(error); + throw new NotImplementedException(error); + } + } + + public string VerifyMemoryDomain(string domain) + { + try + { + if (DomainList[domain] == null) + { + Console.WriteLine($"Unable to find domain: {domain}, falling back to current"); + return Domain.Name; + } + + return domain; + } + catch // Just in case + { + Console.WriteLine($"Unable to find domain: {domain}, falling back to current"); + } + + return Domain.Name; + } + + protected uint ReadUnsignedByte(int addr, string domain = null) + { + var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)]; + if (addr < d.Size) + { + return d.PeekByte(addr); + } + + Console.WriteLine("Warning: attempted read of " + addr + " outside the memory size of " + d.Size); + return 0; + } + + protected void WriteUnsignedByte(int addr, uint v, string domain = null) + { + var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)]; + if (d.CanPoke()) + { + if (addr < d.Size) + { + d.PokeByte(addr, (byte)v); + } + else + { + Console.WriteLine("Warning: attempted write to " + addr + " outside the memory size of " + d.Size); + } + } + else + { + Console.WriteLine($"Error: the domain {d.Name} is not writable"); + } + } + + protected static int U2S(uint u, int size) + { + var s = (int)u; + s <<= 8 * (4 - size); + s >>= 8 * (4 - size); + return s; + } + + protected int ReadSignedLittle(int addr, int size, string domain = null) + { + return U2S(ReadUnsignedLittle(addr, size, domain), size); + } + + protected uint ReadUnsignedLittle(int addr, int size, string domain = null) + { + uint v = 0; + for (var i = 0; i < size; ++i) + { + v |= ReadUnsignedByte(addr + i, domain) << (8 * i); + } + + return v; + } + + protected int ReadSignedBig(int addr, int size, string domain = null) + { + return U2S(ReadUnsignedBig(addr, size, domain), size); + } + + protected uint ReadUnsignedBig(int addr, int size, string domain = null) + { + uint v = 0; + for (var i = 0; i < size; ++i) + { + v |= ReadUnsignedByte(addr + i, domain) << (8 * (size - 1 - i)); + } + + return v; + } + + protected void WriteSignedLittle(int addr, int v, int size, string domain = null) + { + WriteUnsignedLittle(addr, (uint)v, size, domain); + } + + protected void WriteUnsignedLittle(int addr, uint v, int size, string domain = null) + { + for (var i = 0; i < size; ++i) + { + WriteUnsignedByte(addr + i, (v >> (8 * i)) & 0xFF, domain); + } + } + + protected void WriteSignedBig(int addr, int v, int size, string domain = null) + { + WriteUnsignedBig(addr, (uint)v, size, domain); + } + + protected void WriteUnsignedBig(int addr, uint v, int size, string domain = null) + { + for (var i = 0; i < size; ++i) + { + WriteUnsignedByte(addr + i, (v >> (8 * (size - 1 - i))) & 0xFF, domain); + } + } + + #region public Library implementations + + protected List ReadByteRange(int addr, int length, string domain = null) + { + var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)]; + var lastAddr = length + addr; + var list = new List(); + for (; addr <= lastAddr; addr++) + { + if (addr < d.Size) + list.Add(d.PeekByte(addr)); + else { + Console.WriteLine("Warning: Attempted read " + addr + " outside memory domain size of " + d.Size + " in readbyterange()"); + list.Add(0); + } + } + + return list; + } + + protected void WriteByteRange(int addr, List memoryblock, string domain = null) + { + var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)]; + if (d.CanPoke()) + { + for (var i = 0; i < memoryblock.Count; i++) + { + if (addr < d.Size) + { + d.PokeByte(addr++, memoryblock[i]); + } + else + { + Console.WriteLine("Warning: Attempted write " + addr + " outside memory domain size of " + d.Size + " in writebyterange()"); + } + } + } + else + { + Console.WriteLine($"Error: the domain {d.Name} is not writable"); + } + } + + protected float ReadFloat(int addr, bool bigendian, string domain = null) + { + var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)]; + if (addr < d.Size) + { + var val = d.PeekUint(addr, bigendian); + var bytes = BitConverter.GetBytes(val); + return BitConverter.ToSingle(bytes, 0); + } + + Console.WriteLine("Warning: Attempted read " + addr + " outside memory size of " + d.Size); + + return 0; + } + + protected void WriteFloat(int addr, double value, bool bigendian, string domain = null) + { + var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)]; + if (d.CanPoke()) + { + if (addr < d.Size) + { + var dv = (float)value; + var bytes = BitConverter.GetBytes(dv); + var v = BitConverter.ToUInt32(bytes, 0); + d.PokeUint(addr, v, bigendian); + } + else + { + Console.WriteLine("Warning: Attempted write " + addr + " outside memory size of " + d.Size); + } + } + else + { + Console.WriteLine($"Error: the domain {Domain.Name} is not writable"); + } + } + + #endregion + } +} diff --git a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj index a5b9eaf9d6..9161107c04 100644 --- a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj +++ b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj @@ -634,6 +634,8 @@ + + diff --git a/BizHawk.Client.EmuHawk/Plugins/Libraries/GUIDrawLibrary.cs b/BizHawk.Client.EmuHawk/Plugins/Libraries/GUIDrawLibrary.cs new file mode 100644 index 0000000000..71e0d1ec6f --- /dev/null +++ b/BizHawk.Client.EmuHawk/Plugins/Libraries/GUIDrawLibrary.cs @@ -0,0 +1,167 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Windows.Forms; +using System.IO; + +using BizHawk.Emulation.Common; +using BizHawk.Client.Common; + +namespace BizHawk.Client.EmuHawk +{ + public sealed class GUIDrawLibrary : GUIDrawPluginLibrary + { + public GUIDrawLibrary() + { + } + + private DisplaySurface _GUISurface = null; + + #region Gui API + + public override void DrawNew(string name, bool? clear = true) + { + try + { + DrawFinish(); + _GUISurface = GlobalWin.DisplayManager.LockLuaSurface(name, clear ?? true); + HasGUISurface = (_GUISurface != null); + + } + catch (InvalidOperationException ex) + { + Console.WriteLine(ex.ToString()); + } + } + + public override void DrawFinish() + { + if (_GUISurface != null) + { + GlobalWin.DisplayManager.UnlockLuaSurface(_GUISurface); + } + + _GUISurface = null; + HasGUISurface = false; + + } + #endregion + + #region Helpers + protected override Graphics GetGraphics() + { + var g = _GUISurface == null ? Graphics.FromImage(new Bitmap(1,1)) : _GUISurface.GetGraphics(); + + // we don't like CoreComm, right? Someone should find a different way to do this then. + var tx = Emulator.CoreComm.ScreenLogicalOffsetX; + var ty = Emulator.CoreComm.ScreenLogicalOffsetY; + if (tx != 0 || ty != 0) + { + var transform = g.Transform; + transform.Translate(-tx, -ty); + g.Transform = transform; + } + + return g; + } + #endregion + + public override void AddMessage(string message) + { + GlobalWin.OSD.AddMessage(message); + } + + public override void ClearGraphics() + { + _GUISurface.Clear(); + DrawFinish(); + } + + public override void ClearText() + { + GlobalWin.OSD.ClearGUIText(); + } + + public override void DrawText(int x, int y, string message, Color? forecolor = null, Color? backcolor = null, string fontfamily = null) + { + using (var g = GetGraphics()) + { + try + { + var index = 0; + if (string.IsNullOrEmpty(fontfamily)) + { + index = _defaultPixelFont; + } + else + { + switch (fontfamily) + { + case "fceux": + case "0": + index = 0; + break; + case "gens": + case "1": + index = 1; + break; + default: + Console.WriteLine($"Unable to find font family: {fontfamily}"); + return; + } + } + + var f = new StringFormat(StringFormat.GenericTypographic) + { + FormatFlags = StringFormatFlags.MeasureTrailingSpaces + }; + var font = new Font(GlobalWin.DisplayManager.CustomFonts.Families[index], 8, FontStyle.Regular, GraphicsUnit.Pixel); + Size sizeOfText = g.MeasureString(message, font, 0, f).ToSize(); + var rect = new Rectangle(new Point(x, y), sizeOfText + new Size(1, 0)); + g.FillRectangle(GetBrush(backcolor ?? _defaultTextBackground.Value), rect); + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit; + g.DrawString(message, font, GetBrush(forecolor ?? _defaultForeground), x, y); + } + catch (Exception) + { + return; + } + } + } + + public override void Text(int x, int y, string message, Color? forecolor = null, string anchor = null) + { + var a = 0; + + if (!string.IsNullOrEmpty(anchor)) + { + switch (anchor) + { + case "0": + case "topleft": + a = 0; + break; + case "1": + case "topright": + a = 1; + break; + case "2": + case "bottomleft": + a = 2; + break; + case "3": + case "bottomright": + a = 3; + break; + } + } + else + { + x -= Emulator.CoreComm.ScreenLogicalOffsetX; + y -= Emulator.CoreComm.ScreenLogicalOffsetY; + } + + GlobalWin.OSD.AddGUIText(message, x, y, Color.Black, forecolor ?? Color.White, a); + } + } +} \ No newline at end of file From bb020540eb9dd207f0998104bae11977446b9d60 Mon Sep 17 00:00:00 2001 From: upthorn Date: Fri, 31 Aug 2018 21:26:38 -0700 Subject: [PATCH 002/301] Remove extraneous non-existent file/folders from project. --- BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj | 1 - BizHawk.sln | 8 +++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj index 9161107c04..e4d50eb1de 100644 --- a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj +++ b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj @@ -635,7 +635,6 @@ - diff --git a/BizHawk.sln b/BizHawk.sln index 63b4c5be18..2b1a0659ef 100644 --- a/BizHawk.sln +++ b/BizHawk.sln @@ -1,7 +1,6 @@ - Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio 14 -VisualStudioVersion = 14.0.25420.1 +# Visual Studio 15 +VisualStudioVersion = 15.0.27703.2047 MinimumVisualStudioVersion = 12.0.31101.0 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Version", "Version\Version.csproj", "{0CE8B337-08E3-4602-BF10-C4D4C75D2F13}" EndProject @@ -145,6 +144,9 @@ Global {B95649F5-A0AE-41EB-B62B-578A2AFF5E18} = {B51F1139-3D2C-41BE-A762-EF1F9B41EACA} {8E2F11F2-3955-4382-8C3A-CEBA1276CAEA} = {B51F1139-3D2C-41BE-A762-EF1F9B41EACA} EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {1A77376C-2741-489C-90E1-03E415910B65} + EndGlobalSection GlobalSection(MonoDevelopProperties) = preSolution StartupItem = BizHawk.Client.EmuHawk\BizHawk.Client.EmuHawk.csproj EndGlobalSection From 0a6aa912cfa1891176b8316ba5dd91cbd4f66a90 Mon Sep 17 00:00:00 2001 From: upthorn Date: Sat, 1 Sep 2018 03:19:05 -0700 Subject: [PATCH 003/301] Further plugin interface design/development work --- .../BizHawk.Client.Common.csproj | 2 + BizHawk.Client.Common/plugins/IPlugin.cs | 12 ++ BizHawk.Client.Common/plugins/IPluginAPI.cs | 23 ++++ BizHawk.Client.Common/plugins/PluginBase.cs | 43 +----- .../plugins/PluginLibrary.MemoryEvents.cs | 45 ++++++ .../plugins/PluginLibrary.SQL.cs | 130 ++++++++++++++++++ .../plugins/PluginLibrary.UserData.cs | 2 +- .../plugins/PluginLibraryBase.cs | 30 ++++ ...GUIDrawLibrary.cs => Plugin.GUILibrary.cs} | 8 +- 9 files changed, 247 insertions(+), 48 deletions(-) create mode 100644 BizHawk.Client.Common/plugins/IPlugin.cs create mode 100644 BizHawk.Client.Common/plugins/IPluginAPI.cs create mode 100644 BizHawk.Client.Common/plugins/PluginLibrary.MemoryEvents.cs create mode 100644 BizHawk.Client.Common/plugins/PluginLibrary.SQL.cs create mode 100644 BizHawk.Client.Common/plugins/PluginLibraryBase.cs rename BizHawk.Client.EmuHawk/Plugins/Libraries/{GUIDrawLibrary.cs => Plugin.GUILibrary.cs} (95%) diff --git a/BizHawk.Client.Common/BizHawk.Client.Common.csproj b/BizHawk.Client.Common/BizHawk.Client.Common.csproj index 18110a72f2..65c07d9649 100644 --- a/BizHawk.Client.Common/BizHawk.Client.Common.csproj +++ b/BizHawk.Client.Common/BizHawk.Client.Common.csproj @@ -137,8 +137,10 @@ + + diff --git a/BizHawk.Client.Common/plugins/IPlugin.cs b/BizHawk.Client.Common/plugins/IPlugin.cs new file mode 100644 index 0000000000..9220e90dbd --- /dev/null +++ b/BizHawk.Client.Common/plugins/IPlugin.cs @@ -0,0 +1,12 @@ +namespace BizHawk.Client.Common +{ + interface IPlugin + { + void PreFrameCallback(); + void PostFrameCallback(); + void SaveStateCallback(string name); + void LoadStateCallback(string name); + void InputPollCallback(); + void Init(IPluginAPI api); + } +} diff --git a/BizHawk.Client.Common/plugins/IPluginAPI.cs b/BizHawk.Client.Common/plugins/IPluginAPI.cs new file mode 100644 index 0000000000..786858d96a --- /dev/null +++ b/BizHawk.Client.Common/plugins/IPluginAPI.cs @@ -0,0 +1,23 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace BizHawk.Client.Common +{ + interface IPluginAPI + { + EmulatorPluginLibrary EmuLib { get; set; } + GameInfoPluginLibrary GameInfoLib { get; set; } + GUIDrawPluginLibrary GuiLib { get; set; } + JoypadPluginLibrary JoypadLib { get; set; } + MemoryPluginLibrary MemLib { get; set; } + MemoryEventsPluginLibrary MemEventsLib { get; set; } + MemorySavestatePluginLibrary MemStateLib { get; set; } + MoviePluginLibrary MovieLib { get; set; } + SQLPluginLibrary SQLLib { get; set; } + UserDataPluginLibrary UserDataLib { get; set; } + List ClientLibs { get; set; } + } +} diff --git a/BizHawk.Client.Common/plugins/PluginBase.cs b/BizHawk.Client.Common/plugins/PluginBase.cs index 44f88da68c..1e457e94f4 100644 --- a/BizHawk.Client.Common/plugins/PluginBase.cs +++ b/BizHawk.Client.Common/plugins/PluginBase.cs @@ -1,12 +1,8 @@ -using System; -using System.Collections.Generic; - -using BizHawk.Emulation.Common; -using BizHawk.Emulation.Common.IEmulatorExtensions; +using BizHawk.Emulation.Common; namespace BizHawk.Client.Common { - public abstract class PluginBase + public abstract class PluginBase : IPlugin { [RequiredService] private IEmulator Emulator { get; set; } @@ -19,40 +15,5 @@ namespace BizHawk.Client.Common [OptionalService] private IDebuggable DebuggableCore { get; set; } - - public abstract void PreFrameCallback(); - public abstract void PostFrameCallback(); - public abstract void SaveStateCallback(string name); - public abstract void LoadStateCallback(string name); - public abstract void InputPollCallback(); - - protected virtual void AddReadCallback(Action cb, uint address, string domain) - { - if (DebuggableCore.MemoryCallbacksAvailable()) - { - DebuggableCore.MemoryCallbacks.Add(new MemoryCallback(domain, MemoryCallbackType.Read, "Lua Hook", cb, address, null)); - } - } - protected virtual void AddWriteCallback(Action cb, uint address, string domain) - { - if (DebuggableCore.MemoryCallbacksAvailable()) - { - DebuggableCore.MemoryCallbacks.Add(new MemoryCallback(domain, MemoryCallbackType.Write, "Lua Hook", cb, address, null)); - } - } - protected virtual void AddExecCallback(Action cb, uint address, string domain) - { - if (DebuggableCore.MemoryCallbacksAvailable() && DebuggableCore.MemoryCallbacks.ExecuteCallbacksAvailable) - { - DebuggableCore.MemoryCallbacks.Add(new MemoryCallback(domain, MemoryCallbackType.Execute, "Lua Hook", cb, address, null)); - } - } - protected virtual void RemoveMemoryCallback(Action cb) - { - if (DebuggableCore.MemoryCallbacksAvailable()) - { - DebuggableCore.MemoryCallbacks.Remove(cb); - } - } } } diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.MemoryEvents.cs b/BizHawk.Client.Common/plugins/PluginLibrary.MemoryEvents.cs new file mode 100644 index 0000000000..12dfc1ab3f --- /dev/null +++ b/BizHawk.Client.Common/plugins/PluginLibrary.MemoryEvents.cs @@ -0,0 +1,45 @@ +using System; + +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Common.IEmulatorExtensions; + +namespace BizHawk.Client.Common +{ + public sealed class MemoryEventsPluginLibrary + { + [RequiredService] + private IDebuggable DebuggableCore { get; set; } + + public MemoryEventsPluginLibrary () + { } + + public void AddReadCallback(Action cb, uint address, string domain) + { + if (DebuggableCore.MemoryCallbacksAvailable()) + { + DebuggableCore.MemoryCallbacks.Add(new MemoryCallback(domain, MemoryCallbackType.Read, "Plugin Hook", cb, address, null)); + } + } + public void AddWriteCallback(Action cb, uint address, string domain) + { + if (DebuggableCore.MemoryCallbacksAvailable()) + { + DebuggableCore.MemoryCallbacks.Add(new MemoryCallback(domain, MemoryCallbackType.Write, "Plugin Hook", cb, address, null)); + } + } + public void AddExecCallback(Action cb, uint address, string domain) + { + if (DebuggableCore.MemoryCallbacksAvailable() && DebuggableCore.MemoryCallbacks.ExecuteCallbacksAvailable) + { + DebuggableCore.MemoryCallbacks.Add(new MemoryCallback(domain, MemoryCallbackType.Execute, "Plugin Hook", cb, address, null)); + } + } + public void RemoveMemoryCallback(Action cb) + { + if (DebuggableCore.MemoryCallbacksAvailable()) + { + DebuggableCore.MemoryCallbacks.Remove(cb); + } + } + } +} diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.SQL.cs b/BizHawk.Client.Common/plugins/PluginLibrary.SQL.cs new file mode 100644 index 0000000000..5271b82219 --- /dev/null +++ b/BizHawk.Client.Common/plugins/PluginLibrary.SQL.cs @@ -0,0 +1,130 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data.SQLite; + +namespace BizHawk.Client.Common +{ + public sealed class SQLPluginLibrary + { + public SQLPluginLibrary() + { } + + SQLiteConnection m_dbConnection; + string connectionString; + + public string CreateDatabase(string name) + { + try + { + SQLiteConnection.CreateFile(name); + return "Database Created Successfully"; + } + catch (SQLiteException sqlEX) + { + return sqlEX.Message; + } + + } + + public string OpenDatabase(string name) + { + try + { + SQLiteConnectionStringBuilder connBuilder = new SQLiteConnectionStringBuilder(); + connBuilder.DataSource = name; + connBuilder.Version = 3; //SQLite version + connBuilder.JournalMode = SQLiteJournalModeEnum.Wal; //Allows for reads and writes to happen at the same time + connBuilder.DefaultIsolationLevel = System.Data.IsolationLevel.ReadCommitted; //This only helps make the database lock left. May be pointless now + connBuilder.SyncMode = SynchronizationModes.Off; //This shortens the delay for do synchronous calls. + m_dbConnection = new SQLiteConnection(connBuilder.ToString()); + connectionString = connBuilder.ToString(); + m_dbConnection.Open(); + m_dbConnection.Close(); + return "Database Opened Successfully"; + } + catch (SQLiteException sqlEX) + { + return sqlEX.Message; + } + } + + public string WriteCommand(string query = "") + { + if (query == "") + { + return "query is empty"; + } + try + { + m_dbConnection.Open(); + string sql = query; + SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection); + command.ExecuteNonQuery(); + m_dbConnection.Close(); + + return "Command ran successfully"; + + } + catch (NullReferenceException nullEX) + { + return "Database not open."; + } + catch (SQLiteException sqlEX) + { + m_dbConnection.Close(); + return sqlEX.Message; + } + } + + public dynamic ReadCommand(string query = "") + { + if (query == "") + { + return "query is empty"; + } + try + { + var table = new Dictionary(); + m_dbConnection.Open(); + string sql = "PRAGMA read_uncommitted =1;" + query; + SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection); + SQLiteDataReader reader = command.ExecuteReader(); + bool rows = reader.HasRows; + long rowCount = 0; + var columns = new List(); + for (int i = 0; i < reader.FieldCount; ++i) //Add all column names into list + { + columns.Add(reader.GetName(i)); + } + while (reader.Read()) + { + for (int i = 0; i < reader.FieldCount; ++i) + { + table[columns[i] + " " + rowCount.ToString()] = reader.GetValue(i); + } + rowCount += 1; + } + reader.Close(); + m_dbConnection.Close(); + if (rows == false) + { + return "No rows found"; + } + + return table; + + } + catch (NullReferenceException) + { + return "Database not opened."; + } + catch (SQLiteException sqlEX) + { + m_dbConnection.Close(); + return sqlEX.Message; + } + } + + } +} diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.UserData.cs b/BizHawk.Client.Common/plugins/PluginLibrary.UserData.cs index 1613ac46ce..3d60ad8fb1 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.UserData.cs +++ b/BizHawk.Client.Common/plugins/PluginLibrary.UserData.cs @@ -3,7 +3,7 @@ using System.ComponentModel; using BizHawk.Client.Common; -namespace BizHawk.Client.EmuHawk +namespace BizHawk.Client.Common { public sealed class UserDataPluginLibrary { diff --git a/BizHawk.Client.Common/plugins/PluginLibraryBase.cs b/BizHawk.Client.Common/plugins/PluginLibraryBase.cs new file mode 100644 index 0000000000..c480871c69 --- /dev/null +++ b/BizHawk.Client.Common/plugins/PluginLibraryBase.cs @@ -0,0 +1,30 @@ +using System.Drawing; + +namespace BizHawk.Client.Common +{ + public abstract class PluginLibraryBase + { + protected PluginLibraryBase() { } + public abstract string Name { get; } + + protected static Color? ToColor(object o) + { + if (o == null) + { + return null; + } + + if (o.GetType() == typeof(double)) + { + return Color.FromArgb((int)(long)(double)o); + } + + if (o.GetType() == typeof(string)) + { + return Color.FromName(o.ToString()); + } + + return null; + } + } +} diff --git a/BizHawk.Client.EmuHawk/Plugins/Libraries/GUIDrawLibrary.cs b/BizHawk.Client.EmuHawk/Plugins/Libraries/Plugin.GUILibrary.cs similarity index 95% rename from BizHawk.Client.EmuHawk/Plugins/Libraries/GUIDrawLibrary.cs rename to BizHawk.Client.EmuHawk/Plugins/Libraries/Plugin.GUILibrary.cs index 71e0d1ec6f..90b6ddba27 100644 --- a/BizHawk.Client.EmuHawk/Plugins/Libraries/GUIDrawLibrary.cs +++ b/BizHawk.Client.EmuHawk/Plugins/Libraries/Plugin.GUILibrary.cs @@ -1,17 +1,13 @@ using System; -using System.Collections.Generic; using System.Drawing; -using System.Windows.Forms; -using System.IO; -using BizHawk.Emulation.Common; using BizHawk.Client.Common; namespace BizHawk.Client.EmuHawk { - public sealed class GUIDrawLibrary : GUIDrawPluginLibrary + public sealed class GUIPluginLibrary : GUIDrawPluginLibrary { - public GUIDrawLibrary() + public GUIPluginLibrary() { } From 9e814896cb68cdc7de91b7f46f7d1eb418c400e1 Mon Sep 17 00:00:00 2001 From: upthorn Date: Mon, 3 Sep 2018 19:31:01 -0700 Subject: [PATCH 004/301] Some plugin interface libraries, and further refactoring. --- .../BizHawk.Client.Common.csproj | 3 + BizHawk.Client.Common/plugins/IPluginAPI.cs | 27 +- BizHawk.Client.Common/plugins/PluginBase.cs | 47 ++- .../plugins/PluginLibrary.Emu.cs | 4 +- .../plugins/PluginLibrary.GUIDraw.cs | 27 +- .../plugins/PluginLibrary.Gameinfo.cs | 4 +- .../plugins/PluginLibrary.Joypad.cs | 44 ++- .../plugins/PluginLibrary.Memory.cs | 69 ++-- .../plugins/PluginLibrary.MemoryEvents.cs | 4 +- .../plugins/PluginLibrary.MemorySavestate.cs | 6 +- .../plugins/PluginLibrary.Movie.cs | 4 +- .../plugins/PluginLibrary.SQL.cs | 4 +- .../plugins/PluginLibrary.UserData.cs | 4 +- .../plugins/PluginLibraryBase.cs | 1 - .../plugins/PluginMemoryBase.cs | 36 +- .../Plugins/Libraries/PluginLibrary.Client.cs | 351 ++++++++++++++++++ .../Libraries/PluginLibrary.Communications.cs | 121 ++++++ ...gin.GUILibrary.cs => PluginLibrary.GUI.cs} | 9 +- .../Plugins/Libraries/PluginLibrary.Input.cs | 43 +++ .../Libraries/PluginLibrary.Savestate.cs | 47 +++ .../Plugins/Libraries/PluginLibrary.cs | 135 +++++++ BizHawk.Client.EmuHawk/Plugins/PluginAPI.cs | 28 ++ 22 files changed, 904 insertions(+), 114 deletions(-) create mode 100644 BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Client.cs create mode 100644 BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Communications.cs rename BizHawk.Client.EmuHawk/Plugins/Libraries/{Plugin.GUILibrary.cs => PluginLibrary.GUI.cs} (95%) create mode 100644 BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Input.cs create mode 100644 BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Savestate.cs create mode 100644 BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.cs create mode 100644 BizHawk.Client.EmuHawk/Plugins/PluginAPI.cs diff --git a/BizHawk.Client.Common/BizHawk.Client.Common.csproj b/BizHawk.Client.Common/BizHawk.Client.Common.csproj index 65c07d9649..f3bcc12f20 100644 --- a/BizHawk.Client.Common/BizHawk.Client.Common.csproj +++ b/BizHawk.Client.Common/BizHawk.Client.Common.csproj @@ -132,6 +132,8 @@ + + @@ -142,6 +144,7 @@ + diff --git a/BizHawk.Client.Common/plugins/IPluginAPI.cs b/BizHawk.Client.Common/plugins/IPluginAPI.cs index 786858d96a..175df3af92 100644 --- a/BizHawk.Client.Common/plugins/IPluginAPI.cs +++ b/BizHawk.Client.Common/plugins/IPluginAPI.cs @@ -1,23 +1,20 @@ using System; using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; namespace BizHawk.Client.Common { - interface IPluginAPI + public interface IPluginAPI { - EmulatorPluginLibrary EmuLib { get; set; } - GameInfoPluginLibrary GameInfoLib { get; set; } - GUIDrawPluginLibrary GuiLib { get; set; } - JoypadPluginLibrary JoypadLib { get; set; } - MemoryPluginLibrary MemLib { get; set; } - MemoryEventsPluginLibrary MemEventsLib { get; set; } - MemorySavestatePluginLibrary MemStateLib { get; set; } - MoviePluginLibrary MovieLib { get; set; } - SQLPluginLibrary SQLLib { get; set; } - UserDataPluginLibrary UserDataLib { get; set; } - List ClientLibs { get; set; } + EmulatorPluginLibrary EmuLib { get; } + GameInfoPluginLibrary GameInfoLib { get; } + GUIDrawPluginBase GUILib { get; } + JoypadPluginLibrary JoypadLib { get; } + MemoryPluginLibrary MemLib { get; } + MemoryEventsPluginLibrary MemEventsLib { get; } + MemorySavestatePluginLibrary MemStateLib { get; } + MoviePluginLibrary MovieLib { get; } + SQLPluginLibrary SQLLib { get; } + UserDataPluginLibrary UserDataLib { get; } + Dictionary Libraries { get; } } } diff --git a/BizHawk.Client.Common/plugins/PluginBase.cs b/BizHawk.Client.Common/plugins/PluginBase.cs index 1e457e94f4..7ef2f4453d 100644 --- a/BizHawk.Client.Common/plugins/PluginBase.cs +++ b/BizHawk.Client.Common/plugins/PluginBase.cs @@ -4,16 +4,47 @@ namespace BizHawk.Client.Common { public abstract class PluginBase : IPlugin { - [RequiredService] - private IEmulator Emulator { get; set; } + /// + /// The base class from which all + /// plugins will be derived + /// + /// Actual plugins should implement + /// one of the below callback methods + /// or register memory callbacks in + /// their Init function. + /// + protected IPluginAPI _api; - [RequiredService] - private IMemoryDomains Domains { get; set; } + public PluginBase() { } - [OptionalService] - private IInputPollable InputPollableCore { get; set; } + public abstract string Name { get; } + public abstract string Description { get; } + + public bool Enabled => Running; + public bool Paused => !Running; - [OptionalService] - private IDebuggable DebuggableCore { get; set; } + public bool Running { get; set; } + + public void Stop() + { + Running = false; + } + + public void Toggle() + { + Running = !Running; + } + + public virtual void PreFrameCallback() { } + public virtual void PostFrameCallback() { } + public virtual void SaveStateCallback(string name) { } + public virtual void LoadStateCallback(string name) { } + public virtual void InputPollCallback() { } + public virtual void ExitCallback() { } + public virtual void Init (IPluginAPI api) + { + _api = api; + Running = true; + } } } diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.Emu.cs b/BizHawk.Client.Common/plugins/PluginLibrary.Emu.cs index eb3dd485b9..b205516989 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.Emu.cs +++ b/BizHawk.Client.Common/plugins/PluginLibrary.Emu.cs @@ -15,7 +15,7 @@ using BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES; namespace BizHawk.Client.Common { [Description("A library for interacting with the currently loaded emulator core")] - public sealed class EmulatorPluginLibrary + public sealed class EmulatorPluginLibrary : PluginLibraryBase { [RequiredService] private IEmulator Emulator { get; set; } @@ -41,7 +41,7 @@ namespace BizHawk.Client.Common public Action FrameAdvanceCallback { get; set; } public Action YieldCallback { get; set; } - public EmulatorPluginLibrary() + public EmulatorPluginLibrary() : base() { } public static void DisplayVsync(bool enabled) diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.GUIDraw.cs b/BizHawk.Client.Common/plugins/PluginLibrary.GUIDraw.cs index 46081390d2..e6612ad7f7 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.GUIDraw.cs +++ b/BizHawk.Client.Common/plugins/PluginLibrary.GUIDraw.cs @@ -8,15 +8,13 @@ using BizHawk.Emulation.Common; namespace BizHawk.Client.Common { - public abstract class GUIDrawPluginLibrary + public abstract class GUIDrawPluginBase : PluginLibraryBase { [RequiredService] protected IEmulator Emulator { get; set; } - public GUIDrawPluginLibrary() - { - - } + public GUIDrawPluginBase() : base() + { } public bool HasGUISurface = false; @@ -166,32 +164,36 @@ namespace BizHawk.Client.Common { try { + float w; + float h; if (x < x2) { - x2 = Math.Abs(x - x2); + w = x2 - x; } else { x2 = x - x2; x -= x2; + w = Math.Max(x2, 0.1f); } if (y < y2) { - y2 = Math.Abs(y - y2); + h = y2 - y; } else { y2 = y - y2; y -= y2; + h = Math.Max(y2, 0.1f); } - g.DrawRectangle(GetPen(line ?? _defaultForeground), x, y, x2, y2); + g.DrawRectangle(GetPen(line ?? _defaultForeground), x, y, w, h); var bg = background ?? _defaultBackground; if (bg.HasValue) { - g.FillRectangle(GetBrush(bg.Value), x + 1, y + 1, x2 - 1, y2 - 1); + g.FillRectangle(GetBrush(bg.Value), x + 1, y + 1, Math.Max(w - 1, 0), Math.Max(h - 1, 0)); } } catch (Exception) @@ -389,12 +391,13 @@ namespace BizHawk.Client.Common { using (var g = GetGraphics()) { - g.DrawRectangle(GetPen(line ?? _defaultForeground), x, y, width, height); + var w = Math.Max(width, 0.1F); + var h = Math.Max(height, 0.1F); + g.DrawRectangle(GetPen(line ?? _defaultForeground), x, y, w, h); var bg = background ?? _defaultBackground; if (bg.HasValue) { - g.FillRectangle(GetBrush(bg.Value), x + 1, y + 1, width - 1, height - 1); - } + g.FillRectangle(GetBrush(bg.Value), x + 1, y + 1, Math.Max(w - 1, 0), Math.Max(h - 1, 0)); } } } diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.Gameinfo.cs b/BizHawk.Client.Common/plugins/PluginLibrary.Gameinfo.cs index 6c9c21b070..e74ea5f21b 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.Gameinfo.cs +++ b/BizHawk.Client.Common/plugins/PluginLibrary.Gameinfo.cs @@ -5,12 +5,12 @@ using BizHawk.Emulation.Common; namespace BizHawk.Client.Common { - public sealed class GameInfoPluginLibrary + public sealed class GameInfoPluginLibrary : PluginLibraryBase { [OptionalService] private IBoardInfo BoardInfo { get; set; } - public GameInfoPluginLibrary() + public GameInfoPluginLibrary() : base() { } public string GetRomName() diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.Joypad.cs b/BizHawk.Client.Common/plugins/PluginLibrary.Joypad.cs index e981b0ef31..f09a1e5cb1 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.Joypad.cs +++ b/BizHawk.Client.Common/plugins/PluginLibrary.Joypad.cs @@ -3,9 +3,10 @@ using System.Collections.Generic; namespace BizHawk.Client.Common { - public sealed class JoypadPluginLibrary + public sealed class JoypadPluginLibrary : PluginLibraryBase { - public JoypadPluginLibrary() { } + public JoypadPluginLibrary() : base() + { } public Dictionary Get(int? controller = null) { @@ -82,8 +83,6 @@ namespace BizHawk.Client.Common } } - [LuaMethodExample("joypad.set( { [\"Left\"] = true, [ \"A\" ] = true, [ \"B\" ] = true } );")] - [LuaMethod("set", "sets the given buttons to their provided values for the current frame")] public void Set(Dictionary buttons, int? controller = null) { try @@ -146,9 +145,24 @@ namespace BizHawk.Client.Common /*Eat it*/ } } + public void Set(string button, bool state, int? controller = null) + { + try + { + var toPress = button; + if (controller.HasValue) + { + toPress = "P" + controller + " " + button; + } - [LuaMethodExample("joypad.setanalog( { [ \"Tilt X\" ] = true, [ \"Tilt Y\" ] = false } );")] - [LuaMethod("setanalog", "sets the given analog controls to their provided values for the current frame. Note that unlike set() there is only the logic of overriding with the given value.")] + Global.LuaAndAdaptor.SetButton(toPress, state); + Global.ActiveController.Overrides(Global.LuaAndAdaptor); + } + catch + { + /*Eat it*/ + } + } public void SetAnalog(Dictionary controls, object controller = null) { try @@ -182,5 +196,23 @@ namespace BizHawk.Client.Common /*Eat it*/ } } + public void SetAnalog(string control, float value, object controller = null) + { + try + { + if (controller == null) + { + Global.StickyXORAdapter.SetFloat(control, value); + } + else + { + Global.StickyXORAdapter.SetFloat("P" + controller + " " + control, value); + } + } + catch + { + /*Eat it*/ + } + } } } diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.Memory.cs b/BizHawk.Client.Common/plugins/PluginLibrary.Memory.cs index aa9daf90d3..543ea1780b 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.Memory.cs +++ b/BizHawk.Client.Common/plugins/PluginLibrary.Memory.cs @@ -10,11 +10,14 @@ namespace BizHawk.Client.Common public sealed class MemoryPluginLibrary : PluginMemoryBase { private MemoryDomain _currentMemoryDomain; - private bool _isBigEndian; - public MemoryPluginLibrary(bool Big = false) + private bool _isBigEndian = false; + public MemoryPluginLibrary() : base() { - _isBigEndian = Big; + } + public void SetBigEndian() + { + _isBigEndian = true; } protected override MemoryDomain Domain @@ -94,7 +97,7 @@ namespace BizHawk.Client.Common return false; } - public string HashRegion(int addr, int count, string domain = null) + public string HashRegion(long addr, int count, string domain = null) { var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)]; @@ -128,25 +131,25 @@ namespace BizHawk.Client.Common #region Endian Handling - private int ReadSigned(int addr, int size, string domain = null) + private int ReadSigned(long addr, int size, string domain = null) { if (_isBigEndian) return ReadSignedBig(addr, size, domain); else return ReadSignedLittle(addr, size, domain); } - private uint ReadUnsigned(int addr, int size, string domain = null) + private uint ReadUnsigned(long addr, int size, string domain = null) { if (_isBigEndian) return ReadUnsignedBig(addr, size, domain); else return ReadUnsignedLittle(addr, size, domain); } - private void WriteSigned(int addr, int value, int size, string domain = null) + private void WriteSigned(long addr, int value, int size, string domain = null) { if (_isBigEndian) WriteSignedBig(addr, value, size, domain); else WriteSignedLittle(addr, value, size, domain); } - private void WriteUnsigned(int addr, uint value, int size, string domain = null) + private void WriteUnsigned(long addr, uint value, int size, string domain = null) { if (_isBigEndian) WriteUnsignedBig(addr, value, size, domain); else WriteUnsignedLittle(addr, value, size, domain); @@ -156,32 +159,32 @@ namespace BizHawk.Client.Common #region Common Special and Legacy Methods - public uint ReadByte(int addr, string domain = null) + public uint ReadByte(long addr, string domain = null) { return ReadUnsignedByte(addr, domain); } - public void WriteByte(int addr, uint value, string domain = null) + public void WriteByte(long addr, uint value, string domain = null) { WriteUnsignedByte(addr, value, domain); } - public new List ReadByteRange(int addr, int length, string domain = null) + public new List ReadByteRange(long addr, int length, string domain = null) { return base.ReadByteRange(addr, length, domain); } - public new void WriteByteRange(int addr, List memoryblock, string domain = null) + public new void WriteByteRange(long addr, List memoryblock, string domain = null) { base.WriteByteRange(addr, memoryblock, domain); } - public float ReadFloat(int addr, string domain = null) + public float ReadFloat(long addr, string domain = null) { return base.ReadFloat(addr, _isBigEndian, domain); } - public void WriteFloat(int addr, double value, string domain = null) + public void WriteFloat(long addr, double value, string domain = null) { base.WriteFloat(addr, value, _isBigEndian, domain); } @@ -190,22 +193,22 @@ namespace BizHawk.Client.Common #region 1 Byte - public int ReadS8(int addr, string domain = null) + public int ReadS8(long addr, string domain = null) { return (sbyte)ReadUnsignedByte(addr, domain); } - public void WriteS8(int addr, uint value, string domain = null) + public void WriteS8(long addr, uint value, string domain = null) { WriteUnsignedByte(addr, value, domain); } - public uint ReadU8(int addr, string domain = null) + public uint ReadU8(long addr, string domain = null) { - return ReadUnsignedByte(addr, domain); + return (byte)ReadUnsignedByte(addr, domain); } - public void WriteU8(int addr, uint value, string domain = null) + public void WriteU8(long addr, uint value, string domain = null) { WriteUnsignedByte(addr, value, domain); } @@ -213,22 +216,22 @@ namespace BizHawk.Client.Common #endregion #region 2 Byte - public int ReadS16(int addr, string domain = null) + public int ReadS16(long addr, string domain = null) { - return ReadSigned(addr, 2, domain); + return (short)ReadSigned(addr, 2, domain); } - public void WriteS16(int addr, int value, string domain = null) + public void WriteS16(long addr, int value, string domain = null) { WriteSigned(addr, value, 2, domain); } - public uint ReadU16(int addr, string domain = null) + public uint ReadU16(long addr, string domain = null) { - return ReadUnsigned(addr, 2, domain); + return (ushort)ReadUnsigned(addr, 2, domain); } - public void WriteU16(int addr, uint value, string domain = null) + public void WriteU16(long addr, uint value, string domain = null) { WriteUnsigned(addr, value, 2, domain); } @@ -236,21 +239,21 @@ namespace BizHawk.Client.Common #region 3 Byte - public int ReadS24(int addr, string domain = null) + public int ReadS24(long addr, string domain = null) { return ReadSigned(addr, 3, domain); } - public void WriteS24(int addr, int value, string domain = null) + public void WriteS24(long addr, int value, string domain = null) { WriteSigned(addr, value, 3, domain); } - public uint ReadU24(int addr, string domain = null) + public uint ReadU24(long addr, string domain = null) { return ReadUnsigned(addr, 3, domain); } - public void WriteU24(int addr, uint value, string domain = null) + public void WriteU24(long addr, uint value, string domain = null) { WriteUnsigned(addr, value, 3, domain); } @@ -259,22 +262,22 @@ namespace BizHawk.Client.Common #region 4 Byte - public int ReadS32(int addr, string domain = null) + public int ReadS32(long addr, string domain = null) { return ReadSigned(addr, 4, domain); } - public void WriteS32(int addr, int value, string domain = null) + public void WriteS32(long addr, int value, string domain = null) { WriteSigned(addr, value, 4, domain); } - public uint ReadU32(int addr, string domain = null) + public uint ReadU32(long addr, string domain = null) { return ReadUnsigned(addr, 4, domain); } - public void WriteU32(int addr, uint value, string domain = null) + public void WriteU32(long addr, uint value, string domain = null) { WriteUnsigned(addr, value, 4, domain); } diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.MemoryEvents.cs b/BizHawk.Client.Common/plugins/PluginLibrary.MemoryEvents.cs index 12dfc1ab3f..9816e9344d 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.MemoryEvents.cs +++ b/BizHawk.Client.Common/plugins/PluginLibrary.MemoryEvents.cs @@ -5,12 +5,12 @@ using BizHawk.Emulation.Common.IEmulatorExtensions; namespace BizHawk.Client.Common { - public sealed class MemoryEventsPluginLibrary + public sealed class MemoryEventsPluginLibrary : PluginLibraryBase { [RequiredService] private IDebuggable DebuggableCore { get; set; } - public MemoryEventsPluginLibrary () + public MemoryEventsPluginLibrary () : base() { } public void AddReadCallback(Action cb, uint address, string domain) diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.MemorySavestate.cs b/BizHawk.Client.Common/plugins/PluginLibrary.MemorySavestate.cs index f0916a518a..90950d6f73 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.MemorySavestate.cs +++ b/BizHawk.Client.Common/plugins/PluginLibrary.MemorySavestate.cs @@ -6,10 +6,10 @@ using BizHawk.Emulation.Common; namespace BizHawk.Client.Common { - public sealed class MemorySavestatePluginLibrary + public sealed class MemorySavestatePluginLibrary : PluginLibraryBase { - public MemorySavestatePluginLibrary() - { } + public MemorySavestatePluginLibrary() : base() + { } [RequiredService] private IStatable StatableCore { get; set; } diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.Movie.cs b/BizHawk.Client.Common/plugins/PluginLibrary.Movie.cs index 6673f561ff..ac9552d9cd 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.Movie.cs +++ b/BizHawk.Client.Common/plugins/PluginLibrary.Movie.cs @@ -4,9 +4,9 @@ using System.IO; namespace BizHawk.Client.Common { - public sealed class MoviePluginLibrary + public sealed class MoviePluginLibrary : PluginLibraryBase { - public MoviePluginLibrary() + public MoviePluginLibrary() : base() { } [LuaMethodExample("if ( movie.startsfromsavestate( ) ) then\r\n\tconsole.log( \"Returns whether or not the movie is a savestate-anchored movie\" );\r\nend;")] diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.SQL.cs b/BizHawk.Client.Common/plugins/PluginLibrary.SQL.cs index 5271b82219..dae76333af 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.SQL.cs +++ b/BizHawk.Client.Common/plugins/PluginLibrary.SQL.cs @@ -5,9 +5,9 @@ using System.Data.SQLite; namespace BizHawk.Client.Common { - public sealed class SQLPluginLibrary + public sealed class SQLPluginLibrary : PluginLibraryBase { - public SQLPluginLibrary() + public SQLPluginLibrary() : base() { } SQLiteConnection m_dbConnection; diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.UserData.cs b/BizHawk.Client.Common/plugins/PluginLibrary.UserData.cs index 3d60ad8fb1..27d2dc5af4 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.UserData.cs +++ b/BizHawk.Client.Common/plugins/PluginLibrary.UserData.cs @@ -5,9 +5,9 @@ using BizHawk.Client.Common; namespace BizHawk.Client.Common { - public sealed class UserDataPluginLibrary + public sealed class UserDataPluginLibrary : PluginLibraryBase { - public UserDataPluginLibrary() + public UserDataPluginLibrary() : base() { } public void Set(string name, object value) diff --git a/BizHawk.Client.Common/plugins/PluginLibraryBase.cs b/BizHawk.Client.Common/plugins/PluginLibraryBase.cs index c480871c69..17485c7103 100644 --- a/BizHawk.Client.Common/plugins/PluginLibraryBase.cs +++ b/BizHawk.Client.Common/plugins/PluginLibraryBase.cs @@ -5,7 +5,6 @@ namespace BizHawk.Client.Common public abstract class PluginLibraryBase { protected PluginLibraryBase() { } - public abstract string Name { get; } protected static Color? ToColor(object o) { diff --git a/BizHawk.Client.Common/plugins/PluginMemoryBase.cs b/BizHawk.Client.Common/plugins/PluginMemoryBase.cs index 92bfad1a81..21bf8b89e0 100644 --- a/BizHawk.Client.Common/plugins/PluginMemoryBase.cs +++ b/BizHawk.Client.Common/plugins/PluginMemoryBase.cs @@ -8,7 +8,7 @@ namespace BizHawk.Client.Common /// /// Base class for the Memory and MainMemory plugin libraries /// - public abstract class PluginMemoryBase + public abstract class PluginMemoryBase : PluginLibraryBase { [RequiredService] protected IEmulator Emulator { get; set; } @@ -18,10 +18,8 @@ namespace BizHawk.Client.Common protected abstract MemoryDomain Domain { get; } - protected PluginMemoryBase() - { - - } + protected PluginMemoryBase() : base() + { } protected IMemoryDomains DomainList { @@ -58,7 +56,7 @@ namespace BizHawk.Client.Common return Domain.Name; } - protected uint ReadUnsignedByte(int addr, string domain = null) + protected uint ReadUnsignedByte(long addr, string domain = null) { var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)]; if (addr < d.Size) @@ -70,7 +68,7 @@ namespace BizHawk.Client.Common return 0; } - protected void WriteUnsignedByte(int addr, uint v, string domain = null) + protected void WriteUnsignedByte(long addr, uint v, string domain = null) { var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)]; if (d.CanPoke()) @@ -98,12 +96,12 @@ namespace BizHawk.Client.Common return s; } - protected int ReadSignedLittle(int addr, int size, string domain = null) + protected int ReadSignedLittle(long addr, int size, string domain = null) { return U2S(ReadUnsignedLittle(addr, size, domain), size); } - protected uint ReadUnsignedLittle(int addr, int size, string domain = null) + protected uint ReadUnsignedLittle(long addr, int size, string domain = null) { uint v = 0; for (var i = 0; i < size; ++i) @@ -114,12 +112,12 @@ namespace BizHawk.Client.Common return v; } - protected int ReadSignedBig(int addr, int size, string domain = null) + protected int ReadSignedBig(long addr, int size, string domain = null) { return U2S(ReadUnsignedBig(addr, size, domain), size); } - protected uint ReadUnsignedBig(int addr, int size, string domain = null) + protected uint ReadUnsignedBig(long addr, int size, string domain = null) { uint v = 0; for (var i = 0; i < size; ++i) @@ -130,12 +128,12 @@ namespace BizHawk.Client.Common return v; } - protected void WriteSignedLittle(int addr, int v, int size, string domain = null) + protected void WriteSignedLittle(long addr, int v, int size, string domain = null) { WriteUnsignedLittle(addr, (uint)v, size, domain); } - protected void WriteUnsignedLittle(int addr, uint v, int size, string domain = null) + protected void WriteUnsignedLittle(long addr, uint v, int size, string domain = null) { for (var i = 0; i < size; ++i) { @@ -143,12 +141,12 @@ namespace BizHawk.Client.Common } } - protected void WriteSignedBig(int addr, int v, int size, string domain = null) + protected void WriteSignedBig(long addr, int v, int size, string domain = null) { WriteUnsignedBig(addr, (uint)v, size, domain); } - protected void WriteUnsignedBig(int addr, uint v, int size, string domain = null) + protected void WriteUnsignedBig(long addr, uint v, int size, string domain = null) { for (var i = 0; i < size; ++i) { @@ -158,7 +156,7 @@ namespace BizHawk.Client.Common #region public Library implementations - protected List ReadByteRange(int addr, int length, string domain = null) + protected List ReadByteRange(long addr, int length, string domain = null) { var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)]; var lastAddr = length + addr; @@ -176,7 +174,7 @@ namespace BizHawk.Client.Common return list; } - protected void WriteByteRange(int addr, List memoryblock, string domain = null) + protected void WriteByteRange(long addr, List memoryblock, string domain = null) { var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)]; if (d.CanPoke()) @@ -199,7 +197,7 @@ namespace BizHawk.Client.Common } } - protected float ReadFloat(int addr, bool bigendian, string domain = null) + protected float ReadFloat(long addr, bool bigendian, string domain = null) { var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)]; if (addr < d.Size) @@ -214,7 +212,7 @@ namespace BizHawk.Client.Common return 0; } - protected void WriteFloat(int addr, double value, bool bigendian, string domain = null) + protected void WriteFloat(long addr, double value, bool bigendian, string domain = null) { var d = string.IsNullOrEmpty(domain) ? Domain : DomainList[VerifyMemoryDomain(domain)]; if (d.CanPoke()) diff --git a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Client.cs b/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Client.cs new file mode 100644 index 0000000000..b37d5f37dc --- /dev/null +++ b/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Client.cs @@ -0,0 +1,351 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +using BizHawk.Common; +using BizHawk.Emulation.Common; +using BizHawk.Client.Common; + +namespace BizHawk.Client.EmuHawk +{ + public sealed class EmuHawkPluginLibrary : PluginLibraryBase + { + [RequiredService] + private IEmulator Emulator { get; set; } + + [RequiredService] + private IVideoProvider VideoProvider { get; set; } + + private readonly Dictionary _filterMappings = new Dictionary + { + { 0, "None" }, + { 1, "x2SAI" }, + { 2, "SuperX2SAI" }, + { 3, "SuperEagle" }, + { 4, "Scanlines" }, + }; + + public EmuHawkPluginLibrary() : base() + { } + + public void CloseEmulator() + { + GlobalWin.MainForm.CloseEmulator(); + } + + public void CloseEmulatorWithCode(int exitCode) + { + GlobalWin.MainForm.CloseEmulator(exitCode); + } + + public static int BorderHeight() + { + var point = new System.Drawing.Point(0, 0); + return GlobalWin.DisplayManager.TransformPoint(point).Y; + } + + public static int BorderWidth() + { + var point = new System.Drawing.Point(0, 0); + return GlobalWin.DisplayManager.TransformPoint(point).X; + } + + public int BufferHeight() + { + return VideoProvider.BufferHeight; + } + + public int BufferWidth() + { + return VideoProvider.BufferWidth; + } + + public void ClearAutohold() + { + GlobalWin.MainForm.ClearHolds(); + } + + public static void CloseRom() + { + GlobalWin.MainForm.CloseRom(); + } + + public void EnableRewind(bool enabled) + { + GlobalWin.MainForm.EnableRewind(enabled); + } + + public void FrameSkip(int numFrames) + { + if (numFrames > 0) + { + Global.Config.FrameSkip = numFrames; + GlobalWin.MainForm.FrameSkipMessage(); + } + else + { + Console.WriteLine("Invalid frame skip value"); + } + } + + public static int GetTargetScanlineIntensity() + { + return Global.Config.TargetScanlineFilterIntensity; + } + + public int GetWindowSize() + { + return Global.Config.TargetZoomFactors[Emulator.SystemId]; + } + + public static void SetGameExtraPadding(int left, int top, int right, int bottom) + { + GlobalWin.DisplayManager.GameExtraPadding = new System.Windows.Forms.Padding(left, top, right, bottom); + GlobalWin.MainForm.FrameBufferResized(); + } + + public static void SetSoundOn(bool enable) + { + Global.Config.SoundEnabled = enable; + } + + public static bool GetSoundOn() + { + return Global.Config.SoundEnabled; + } + + public static void SetClientExtraPadding(int left, int top, int right, int bottom) + { + GlobalWin.DisplayManager.ClientExtraPadding = new System.Windows.Forms.Padding(left, top, right, bottom); + GlobalWin.MainForm.FrameBufferResized(); + } + + public static bool IsPaused() + { + return GlobalWin.MainForm.EmulatorPaused; + } + + public static bool IsTurbo() + { + return GlobalWin.MainForm.IsTurboing; + } + + public static bool IsSeeking() + { + return GlobalWin.MainForm.IsSeeking; + } + + public static void OpenCheats() + { + GlobalWin.Tools.Load(); + } + + public static void OpenHexEditor() + { + GlobalWin.Tools.Load(); + } + + public static void OpenRamWatch() + { + GlobalWin.Tools.LoadRamWatch(loadDialog: true); + } + + public static void OpenRamSearch() + { + GlobalWin.Tools.Load(); + } + + public static void OpenRom(string path) + { + var ioa = OpenAdvancedSerializer.ParseWithLegacy(path); + GlobalWin.MainForm.LoadRom(path, new MainForm.LoadRomArgs { OpenAdvanced = ioa }); + } + + public static void OpenTasStudio() + { + GlobalWin.Tools.Load(); + } + + public static void OpenToolBox() + { + GlobalWin.Tools.Load(); + } + + public static void OpenTraceLogger() + { + GlobalWin.Tools.Load(); + } + + public static void Pause() + { + GlobalWin.MainForm.PauseEmulator(); + } + + public static void PauseAv() + { + GlobalWin.MainForm.PauseAvi = true; + } + + public static void RebootCore() + { + ((LuaConsole)GlobalWin.Tools.Get()).LuaImp.IsRebootingCore = true; + GlobalWin.MainForm.RebootCore(); + ((LuaConsole)GlobalWin.Tools.Get()).LuaImp.IsRebootingCore = false; + } + + public static int ScreenHeight() + { + return GlobalWin.MainForm.PresentationPanel.NativeSize.Height; + } + + public static void Screenshot(string path = null) + { + if (path == null) + { + GlobalWin.MainForm.TakeScreenshot(); + } + else + { + GlobalWin.MainForm.TakeScreenshot(path); + } + } + + public static void ScreenshotToClipboard() + { + GlobalWin.MainForm.TakeScreenshotToClipboard(); + } + + public static void SetTargetScanlineIntensity(int val) + { + Global.Config.TargetScanlineFilterIntensity = val; + } + + public static void SetScreenshotOSD(bool value) + { + Global.Config.Screenshot_CaptureOSD = value; + } + + public static int ScreenWidth() + { + return GlobalWin.MainForm.PresentationPanel.NativeSize.Width; + } + + public void SetWindowSize(int size) + { + if (size == 1 || size == 2 || size == 3 || size == 4 || size == 5 || size == 10) + { + Global.Config.TargetZoomFactors[Emulator.SystemId] = size; + GlobalWin.MainForm.FrameBufferResized(); + GlobalWin.OSD.AddMessage("Window size set to " + size + "x"); + } + else + { + Console.WriteLine("Invalid window size"); + } + } + + public void SpeedMode(int percent) + { + if (percent > 0 && percent < 6400) + { + GlobalWin.MainForm.ClickSpeedItem(percent); + } + else + { + Console.WriteLine("Invalid speed value"); + } + } + + public static void TogglePause() + { + GlobalWin.MainForm.TogglePause(); + } + + public static int TransformPointX(int x) + { + var point = new System.Drawing.Point(x, 0); + return GlobalWin.DisplayManager.TransformPoint(point).X; + } + + public static int TransformPointY(int y) + { + var point = new System.Drawing.Point(0, y); + return GlobalWin.DisplayManager.TransformPoint(point).Y; + } + + public static void Unpause() + { + GlobalWin.MainForm.UnpauseEmulator(); + } + + public static void UnpauseAv() + { + GlobalWin.MainForm.PauseAvi = false; + } + + public static int Xpos() + { + return GlobalWin.MainForm.DesktopLocation.X; + } + + public static int Ypos() + { + return GlobalWin.MainForm.DesktopLocation.Y; + } + + public List GetAvailableTools() + { + var tools = GlobalWin.Tools.AvailableTools.ToList(); + var t = new List(tools.Count); + for (int i = 0; i < tools.Count; i++) + { + t[i] = tools[i].Name.ToLower(); + } + + return t; + } + + public Type GetTool(string name) + { + var toolType = ReflectionUtil.GetTypeByName(name) + .FirstOrDefault(x => typeof(IToolForm).IsAssignableFrom(x) && !x.IsInterface); + + if (toolType != null) + { + GlobalWin.Tools.Load(toolType); + } + + var selectedTool = GlobalWin.Tools.AvailableTools + .FirstOrDefault(tool => tool.GetType().Name.ToLower() == name.ToLower()); + + if (selectedTool != null) + { + return selectedTool; + } + + return null; + } + + public object CreateInstance(string name) + { + var possibleTypes = ReflectionUtil.GetTypeByName(name); + + if (possibleTypes.Any()) + { + return Activator.CreateInstance(possibleTypes.First()); + } + + return null; + } + + public void DisplayMessages(bool value) + { + Global.Config.DisplayMessages = value; + } + + public void SaveRam() + { + GlobalWin.MainForm.FlushSaveRAM(); + } + } +} diff --git a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Communications.cs b/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Communications.cs new file mode 100644 index 0000000000..43012c1817 --- /dev/null +++ b/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Communications.cs @@ -0,0 +1,121 @@ +using System; +using System.ComponentModel; + +using BizHawk.Emulation.Common; +using BizHawk.Client.Common; +using System.Text; +using System.Collections.Generic; +using System.Net.Http; +using System.Windows.Forms; + + +namespace BizHawk.Client.EmuHawk +{ + public sealed class CommunicationPluginLibrary : PluginLibraryBase + { + [RequiredService] + private IEmulator Emulator { get; set; } + + [RequiredService] + private IVideoProvider VideoProvider { get; set; } + + public CommunicationPluginLibrary() : base() + { } + + public string SocketServerScreenShot() + { + return GlobalWin.socketServer.SendScreenshot(); + } + public string SocketServerScreenShotResponse() + { + return GlobalWin.socketServer.SendScreenshot(1000).ToString(); + } + + public string SocketServerSend(string SendString) + { + return "Sent : " + GlobalWin.socketServer.SendString(SendString).ToString() + " bytes"; + } + public string SocketServerResponse() + { + return GlobalWin.socketServer.ReceiveMessage(); + } + + public bool SocketServerSuccessful() + { + return GlobalWin.socketServer.Successful(); + } + public void SocketServerSetTimeout(int timeout) + { + GlobalWin.socketServer.SetTimeout(timeout); + } + // All MemoryMappedFile related methods + public void MmfSetFilename(string filename) + { + GlobalWin.memoryMappedFiles.SetFilename(filename); + } + public string MmfSetFilename() + { + return GlobalWin.memoryMappedFiles.GetFilename(); + } + + public int MmfScreenshot() + { + return GlobalWin.memoryMappedFiles.ScreenShotToFile(); + } + + public int MmfWrite(string mmf_filename, string outputString) + { + return GlobalWin.memoryMappedFiles.WriteToFile(mmf_filename, Encoding.ASCII.GetBytes(outputString)); + } + public string MmfRead(string mmf_filename, int expectedSize) + { + return GlobalWin.memoryMappedFiles.ReadFromFile(mmf_filename, expectedSize).ToString(); + } + // All HTTP related methods + public string HttpTest() + { + var list = new StringBuilder(); + list.AppendLine(GlobalWin.httpCommunication.TestGet()); + list.AppendLine(GlobalWin.httpCommunication.SendScreenshot()); + list.AppendLine("done testing"); + return list.ToString(); + } + public string HttpTestGet() + { + return GlobalWin.httpCommunication.TestGet(); + } + public string HttpGet(string url) + { + return GlobalWin.httpCommunication.ExecGet(url); + } + + public string HttpPost(string url, string payload) + { + return GlobalWin.httpCommunication.ExecPost(url, payload); + } + public string HttpPostScreenshot() + { + return GlobalWin.httpCommunication.SendScreenshot(); + } + public void HttpSetTimeout(int timeout) + { + GlobalWin.httpCommunication.SetTimeout(timeout); + } + public void HttpSetPostUrl(string url) + { + GlobalWin.httpCommunication.SetPostUrl(url); + } + public void HttpSetGetUrl(string url) + { + GlobalWin.httpCommunication.SetGetUrl(url); + } + public string HttpGetPostUrl() + { + return GlobalWin.httpCommunication.GetPostUrl(); + } + public string HttpGetGetUrl() + { + return GlobalWin.httpCommunication.GetGetUrl(); + } + } +} diff --git a/BizHawk.Client.EmuHawk/Plugins/Libraries/Plugin.GUILibrary.cs b/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.GUI.cs similarity index 95% rename from BizHawk.Client.EmuHawk/Plugins/Libraries/Plugin.GUILibrary.cs rename to BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.GUI.cs index 90b6ddba27..e22bd3e0fd 100644 --- a/BizHawk.Client.EmuHawk/Plugins/Libraries/Plugin.GUILibrary.cs +++ b/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.GUI.cs @@ -5,11 +5,10 @@ using BizHawk.Client.Common; namespace BizHawk.Client.EmuHawk { - public sealed class GUIPluginLibrary : GUIDrawPluginLibrary + public sealed class GUIPluginLibrary : GUIDrawPluginBase { - public GUIPluginLibrary() - { - } + public GUIPluginLibrary() : base() + { } private DisplaySurface _GUISurface = null; @@ -114,7 +113,7 @@ namespace BizHawk.Client.EmuHawk var font = new Font(GlobalWin.DisplayManager.CustomFonts.Families[index], 8, FontStyle.Regular, GraphicsUnit.Pixel); Size sizeOfText = g.MeasureString(message, font, 0, f).ToSize(); var rect = new Rectangle(new Point(x, y), sizeOfText + new Size(1, 0)); - g.FillRectangle(GetBrush(backcolor ?? _defaultTextBackground.Value), rect); + if (backcolor.HasValue) g.FillRectangle(GetBrush(backcolor.Value), rect); g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit; g.DrawString(message, font, GetBrush(forecolor ?? _defaultForeground), x, y); } diff --git a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Input.cs b/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Input.cs new file mode 100644 index 0000000000..e2e289bae0 --- /dev/null +++ b/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Input.cs @@ -0,0 +1,43 @@ +using System; +using System.Linq; +using System.Collections.Generic; +using System.Windows.Forms; + +using BizHawk.Client.Common; + +namespace BizHawk.Client.EmuHawk +{ + public sealed class InputPluginLibrary : PluginLibraryBase + { + public InputPluginLibrary() : base() + { } + + public Dictionary Get() + { + var buttons = new Dictionary(); + foreach (var kvp in Global.ControllerInputCoalescer.BoolButtons().Where(kvp => kvp.Value)) + { + buttons[kvp.Key] = true; + } + + return buttons; + } + + public Dictionary GetMouse() + { + var buttons = new Dictionary(); + + // TODO - need to specify whether in "emu" or "native" coordinate space. + var p = GlobalWin.DisplayManager.UntransformPoint(Control.MousePosition); + buttons["X"] = p.X; + buttons["Y"] = p.Y; + buttons[MouseButtons.Left.ToString()] = (Control.MouseButtons & MouseButtons.Left) != 0; + buttons[MouseButtons.Middle.ToString()] = (Control.MouseButtons & MouseButtons.Middle) != 0; + buttons[MouseButtons.Right.ToString()] = (Control.MouseButtons & MouseButtons.Right) != 0; + buttons[MouseButtons.XButton1.ToString()] = (Control.MouseButtons & MouseButtons.XButton1) != 0; + buttons[MouseButtons.XButton2.ToString()] = (Control.MouseButtons & MouseButtons.XButton2) != 0; + buttons["Wheel"] = GlobalWin.MainForm.MouseWheelTracker; + return buttons; + } + } +} diff --git a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Savestate.cs b/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Savestate.cs new file mode 100644 index 0000000000..90f4e5e7f6 --- /dev/null +++ b/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Savestate.cs @@ -0,0 +1,47 @@ +using System; +using System.Collections.Generic; +using System.IO; + +using BizHawk.Client.Common; + +namespace BizHawk.Client.EmuHawk +{ + public sealed class SavestatePluginibrary : PluginLibraryBase + { + public SavestatePluginibrary() : base() + { } + + public void Load(string path) + { + if (!File.Exists(path)) + { + Console.WriteLine($"could not find file: {path}"); + } + else + { + GlobalWin.MainForm.LoadState(path, Path.GetFileName(path), true); + } + } + + public void LoadSlot(int slotNum) + { + if (slotNum >= 0 && slotNum <= 9) + { + GlobalWin.MainForm.LoadQuickSave("QuickSave" + slotNum, true); + } + } + + public void Save(string path) + { + GlobalWin.MainForm.SaveState(path, path, true); + } + + public void SaveSlot(int slotNum) + { + if (slotNum >= 0 && slotNum <= 9) + { + GlobalWin.MainForm.SaveQuickSave("QuickSave" + slotNum); + } + } + } +} diff --git a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.cs b/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.cs new file mode 100644 index 0000000000..1396c77334 --- /dev/null +++ b/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.cs @@ -0,0 +1,135 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; + +using BizHawk.Common.ReflectionExtensions; +using BizHawk.Emulation.Common; +using BizHawk.Client.Common; + +namespace BizHawk.Client.EmuHawk + +{ + public class PluginLibrary + { +// public LuaDocumentation Docs { get; } + public PluginLibrary(IEmulatorServiceProvider serviceProvider) + { + // Docs.Clear(); + + // Register lua libraries + var libs = Assembly + .Load("BizHawk.Client.Common") + .GetTypes() + .Where(t => typeof(PluginLibraryBase).IsAssignableFrom(t)) + .Where(t => t.IsSealed) + .Where(t => ServiceInjector.IsAvailable(serviceProvider, t)) + .ToList(); + + libs.AddRange( + Assembly + .GetAssembly(typeof(PluginLibrary)) + .GetTypes() + .Where(t => typeof(PluginLibraryBase).IsAssignableFrom(t)) + .Where(t => t.IsSealed) + .Where(t => ServiceInjector.IsAvailable(serviceProvider, t))); + + foreach (var lib in libs) + { + bool addLibrary = true; + //var attributes = lib.GetCustomAttributes(typeof(LuaLibraryAttribute), false); + //if (attributes.Any()) + //{ + // addLibrary = VersionInfo.DeveloperBuild || (attributes.First() as LuaLibraryAttribute).Released; + //} + + if (addLibrary) + { + var instance = (PluginLibraryBase)Activator.CreateInstance(lib); + //instance.LuaRegister(lib, Docs); + //instance.LogOutputCallback = ConsoleLuaLibrary.LogOutput; + ServiceInjector.UpdateServices(serviceProvider, instance); + Libraries.Add(lib, instance); + } + } + } + private readonly Dictionary Libraries = new Dictionary(); + public List PluginList { get; } = new List(); + + public IEnumerable RunningPlugins + { + get { return PluginList.Where(plug => plug.Enabled); } + } + +// private FormsPluginLibrary FormsLibrary => (FormsLuaLibrary)Libraries[typeof(FormsLuaLibrary)]; + private EmulatorPluginLibrary EmulatorLuaLibrary => (EmulatorPluginLibrary)Libraries[typeof(EmulatorPluginLibrary)]; + public GUIPluginLibrary GuiLibrary => (GUIPluginLibrary)Libraries[typeof(GUIPluginLibrary)]; + + public void Restart(IEmulatorServiceProvider newServiceProvider) + { + foreach (var lib in Libraries) + { + ServiceInjector.UpdateServices(newServiceProvider, lib.Value); + } + foreach (var plugin in PluginList) + { + plugin.Init(new PluginAPI(Libraries)); + } + } + + public void StartPluginDrawing() + { + if (PluginList.Any() && !GuiLibrary.HasGUISurface) + { + GuiLibrary.DrawNew("emu"); + } + } + + public void EndPluginDrawing() + { + if (PluginList.Any()) + { + GuiLibrary.DrawFinish(); + } + } + + public void CallSaveStateEvent(string name) + { + foreach (var plugin in RunningPlugins) plugin.SaveStateCallback(name); + } + + public void CallLoadStateEvent(string name) + { + foreach (var plugin in RunningPlugins) plugin.LoadStateCallback(name); + } + + public void CallFrameBeforeEvent() + { + StartPluginDrawing(); + foreach (var plugin in RunningPlugins) plugin.PreFrameCallback(); + } + + public void CallFrameAfterEvent() + { + foreach (var plugin in RunningPlugins) plugin.PostFrameCallback(); + EndPluginDrawing(); + } + + public void CallExitEvent() + { + foreach (var plugin in RunningPlugins) plugin.ExitCallback(); + } + + public void Close() + { + GuiLibrary.Dispose(); + } + + public void Load(PluginBase plugin) + { + plugin.Init(new PluginAPI(Libraries)); + PluginList.Add(plugin); + } + } +} diff --git a/BizHawk.Client.EmuHawk/Plugins/PluginAPI.cs b/BizHawk.Client.EmuHawk/Plugins/PluginAPI.cs new file mode 100644 index 0000000000..c2e1ea3960 --- /dev/null +++ b/BizHawk.Client.EmuHawk/Plugins/PluginAPI.cs @@ -0,0 +1,28 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Linq; + +using BizHawk.Client.Common; + +namespace BizHawk.Client.EmuHawk +{ + public sealed class PluginAPI : IPluginAPI + { + public EmulatorPluginLibrary EmuLib => (EmulatorPluginLibrary)Libraries[typeof(EmulatorPluginLibrary)]; + public GameInfoPluginLibrary GameInfoLib => (GameInfoPluginLibrary)Libraries[typeof(GameInfoPluginLibrary)]; + public GUIDrawPluginBase GUILib => (GUIDrawPluginBase)Libraries[typeof(GUIPluginLibrary)]; + public JoypadPluginLibrary JoypadLib => (JoypadPluginLibrary)Libraries[typeof(JoypadPluginLibrary)]; + public MemoryPluginLibrary MemLib => (MemoryPluginLibrary)Libraries[typeof(MemoryPluginLibrary)]; + public MemoryEventsPluginLibrary MemEventsLib => (MemoryEventsPluginLibrary)Libraries[typeof(MemoryEventsPluginLibrary)]; + public MemorySavestatePluginLibrary MemStateLib => (MemorySavestatePluginLibrary)Libraries[typeof(MemorySavestatePluginLibrary)]; + public MoviePluginLibrary MovieLib => (MoviePluginLibrary)Libraries[typeof(MoviePluginLibrary)]; + public SQLPluginLibrary SQLLib => (SQLPluginLibrary)Libraries[typeof(SQLPluginLibrary)]; + public UserDataPluginLibrary UserDataLib => (UserDataPluginLibrary)Libraries[typeof(UserDataPluginLibrary)]; + public Dictionary Libraries { get; set; } + public PluginAPI(Dictionary libs) + { + Libraries = libs; + } + } +} From 6eed08f9653a36a3e87d28d0dbfc3e8b1a9b4b87 Mon Sep 17 00:00:00 2001 From: upthorn Date: Mon, 3 Sep 2018 19:31:43 -0700 Subject: [PATCH 005/301] An example plugin. Hard-coded for now. --- .../BizHawk.Client.EmuHawk.csproj | 9 +- BizHawk.Client.EmuHawk/GlobalWin.cs | 1 + BizHawk.Client.EmuHawk/MainForm.cs | 8 + .../Plugins/Example/Ecco2AssistantPlugin.cs | 798 ++++++++++++++++++ 4 files changed, 815 insertions(+), 1 deletion(-) create mode 100644 BizHawk.Client.EmuHawk/Plugins/Example/Ecco2AssistantPlugin.cs diff --git a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj index e4d50eb1de..3b5cf29d1d 100644 --- a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj +++ b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj @@ -634,7 +634,9 @@ - + + + @@ -719,6 +721,10 @@ PlatformChooser.cs + + + + @@ -1841,6 +1847,7 @@ + diff --git a/BizHawk.Client.EmuHawk/GlobalWin.cs b/BizHawk.Client.EmuHawk/GlobalWin.cs index 5df3f651bf..5ede6c61fc 100644 --- a/BizHawk.Client.EmuHawk/GlobalWin.cs +++ b/BizHawk.Client.EmuHawk/GlobalWin.cs @@ -7,6 +7,7 @@ namespace BizHawk.Client.EmuHawk { public static MainForm MainForm; public static ToolManager Tools; + public static PluginLibrary Plugins; /// /// the IGL to be used for rendering diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index a989739283..9e488a00d5 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -253,6 +253,8 @@ namespace BizHawk.Client.EmuHawk GlobalWin.Sound.StartSound(); InputManager.RewireInputChain(); GlobalWin.Tools = new ToolManager(this); + GlobalWin.Plugins = new PluginLibrary(Emulator.ServiceProvider); + GlobalWin.Plugins.Load(new Ecco2AssistantPlugin()); RewireSound(); // Workaround for windows, location is -32000 when minimized, if they close it during this time, that's what gets saved @@ -2925,6 +2927,7 @@ namespace BizHawk.Client.EmuHawk { GlobalWin.Tools.LuaConsole.LuaImp.CallFrameBeforeEvent(); } + GlobalWin.Plugins.CallFrameBeforeEvent(); if (IsTurboing) { @@ -3011,6 +3014,7 @@ namespace BizHawk.Client.EmuHawk { GlobalWin.Tools.LuaConsole.LuaImp.CallFrameAfterEvent(); } + GlobalWin.Plugins.CallFrameAfterEvent(); if (IsTurboing) { @@ -3744,6 +3748,7 @@ namespace BizHawk.Client.EmuHawk } GlobalWin.Tools.Restart(); + GlobalWin.Plugins.Restart(Emulator.ServiceProvider); if (Global.Config.LoadCheatFileByGame) { @@ -3917,6 +3922,7 @@ namespace BizHawk.Client.EmuHawk Global.Game = GameInfo.NullInstance; GlobalWin.Tools.Restart(); + GlobalWin.Plugins.Restart(Emulator.ServiceProvider); RewireSound(); Text = "BizHawk" + (VersionInfo.DeveloperBuild ? " (interim) " : ""); HandlePlatformMenus(); @@ -4012,6 +4018,7 @@ namespace BizHawk.Client.EmuHawk { GlobalWin.Tools.LuaConsole.LuaImp.CallLoadStateEvent(userFriendlyStateName); } + GlobalWin.Plugins.CallLoadStateEvent(userFriendlyStateName); SetMainformMovieInfo(); GlobalWin.Tools.UpdateToolsBefore(fromLua); @@ -4141,6 +4148,7 @@ namespace BizHawk.Client.EmuHawk { GlobalWin.Tools.LuaConsole.LuaImp.CallSaveStateEvent(quickSlotName); } + GlobalWin.Plugins.CallSaveStateEvent(quickSlotName); } private void SaveStateAs() diff --git a/BizHawk.Client.EmuHawk/Plugins/Example/Ecco2AssistantPlugin.cs b/BizHawk.Client.EmuHawk/Plugins/Example/Ecco2AssistantPlugin.cs new file mode 100644 index 0000000000..753bc5d425 --- /dev/null +++ b/BizHawk.Client.EmuHawk/Plugins/Example/Ecco2AssistantPlugin.cs @@ -0,0 +1,798 @@ +using System; +using System.Collections.Generic; +using System.Drawing; + +using BizHawk.Client.Common; + +namespace BizHawk.Client.EmuHawk +{ + public sealed class Ecco2AssistantPlugin : PluginBase + { + public override string Name => "Ecco 2 Assistant"; + + public override string Description => "Displays a hud with hitboxes, etc. Assists with maintaining maximum speed."; + + private enum Modes { disabled, Ecco1, Ecco2 } + private Modes _mode; + + private int _camX = 0; + private int _camY = 0; + private int _camXAddr; + private int _camYAddr; + private bool _prevOn = false; + private uint _prevCharge = 0; + private uint _prevF = 0; + + void DrawEccoOct(int x, int y, int r, Color? color = null, int fillAlpha = 0) + { + Point[] octPoints = { + new Point(x, y - r), + new Point((int)(x + Math.Sin(Math.PI / 4) * r), (int)(y - Math.Sin(Math.PI / 4) *r)), + new Point(x + r, y), + new Point((int)(x + Math.Sin(Math.PI / 4) * r), (int)(y + Math.Sin(Math.PI / 4) *r)), + new Point(x, y + r), + new Point((int)(x - Math.Sin(Math.PI / 4) * r), (int)(y + Math.Sin(Math.PI / 4) *r)), + new Point(x - r, y), + new Point((int)(x - Math.Sin(Math.PI / 4) * r), (int)(y - Math.Sin(Math.PI / 4) *r)) + }; + Color fillColor = color.HasValue ? Color.FromArgb(fillAlpha, color.Value) : Color.Empty; + _api.GUILib.DrawPolygon(octPoints, color, fillColor); + } + void DrawBoxMWH(int x, int y, int w, int h, Color? color = null, int fillAlpha = 0) + { + Color fillColor = color.HasValue ? Color.FromArgb(fillAlpha, color.Value) : Color.Empty; + _api.GUILib.DrawRectangle(x - w, y - h, w << 1, h << 1, color, fillColor); + } + void Print_Text(string message, int size, int x, int y, Color color) + { + _api.GUILib.DrawText(x, y, message, color, null); + } + void PutText(string message, int x, int y, int xl, int yl, int xh, int yh, Color bg, Color fg) + { + xl = Math.Max(xl, 0); + yl = Math.Max(xl, 0); + xh = Math.Min(xh + 639, 639); + yh = Math.Min(yh + 441, 441); + xh -= 4 * message.Length; + x = x - ((5 * (message.Length - 1)) / 2); + x = Math.Min(Math.Max(x, Math.Max(xl, 1)), Math.Min(xh, 638 - 4 * (int)message.Length)); + y = Math.Min(Math.Max(y - 3, Math.Max(yl, 1)), yh); + int[] xOffset = { -1, -1, -1, 0, 1, 1, 1, 0 }; + int[] yOffset = { -1, 0, 1, 1, 1, 0, -1, -1 }; + for (int i = 0; i < 8; i++) + Print_Text(message, message.Length, x + xOffset[i], y + yOffset[i], bg); + Print_Text(message, message.Length, x, y, fg); + } + + + void EccoDraw3D() + { + int ScreenX = (_api.MemLib.ReadS32(0xFFD5E0) >> 0xC); + int ScreenY = (_api.MemLib.ReadS32(0xFFD5E8) >> 0xC); + int ScreenZ = (_api.MemLib.ReadS32(0xFFD5E4) >> 0xB); + uint curObj = _api.MemLib.ReadU24(0xFFD4C1); + while (curObj != 0) + { + int Xpos = (_api.MemLib.ReadS32(curObj + 0x6) >> 0xC); + int Ypos = (_api.MemLib.ReadS32(curObj + 0xE) >> 0xC); + int Zpos = (_api.MemLib.ReadS32(curObj + 0xA) >> 0xB); + int Y = 224 - (Zpos - ScreenZ); + int X = (Xpos - ScreenX) + 0xA0; + uint type = _api.MemLib.ReadU32(curObj + 0x5A); + short height, width; + int display = 0; + if ((type == 0xD817E) || (type == 0xD4AB8)) + { + Y = 113 - (Ypos - ScreenY); + height = 0x10; + if (_api.MemLib.ReadU32(0xFFB166) < 0x1800) height = 0x8; + short radius = 31; + if (type == 0xD4AB8) + { + radius = 7; + height = 0x20; + } + width = radius; + DrawEccoOct(X, Y, radius, Color.Lime, 0); + display = 1; + } + else + { + width = height = 1; + if (curObj == 0xFFB134) display = 3; + } + if ((display & 1) != 0) + { + Y = 224 - (Zpos - ScreenZ); + DrawBoxMWH(X, Y, width, height, Color.Blue, 0); + } + if ((display & 2) != 0) + { + Y = 113 - (Ypos - ScreenY); + DrawBoxMWH(X, Y, width, height, Color.Lime, 0); + } + curObj = _api.MemLib.ReadU24(curObj+1); + } + } + void EccoDrawBoxes() + { + // CamX-=8; + int Width2, Height2; + //Ecco HP and Air + int i = 0; + int HP = _api.MemLib.ReadS16(0xFFAA16) << 3; + int air = _api.MemLib.ReadS16(0xFFAA18); + Color color; + int off = 0; + for (int j = 0; j < air; j++) + { + if (j - off == 448) + { + i++; off += 448; + } + color = Color.FromArgb(j >> 2, j >> 2, j >> 2); + _api.GUILib.DrawLine(128, j - off, 144, j - off, color); + } + for (i = 0; i < 16; i++) + for (int j = 0; j < Math.Min(HP, 448); j++) + { + color = Color.FromArgb(0, 0, (j>>1 & 0xF0)); + _api.GUILib.DrawPixel(144 + i, j, color); + } + + //Asterite + uint curObj = _api.MemLib.ReadU24(0xFFCFC9); + int Xpos, Xpos2, Ypos, Ypos2, Xmid, Ymid, X, X2, Y, Y2; + Xmid = 0; + Ymid = 0; + while (curObj != 0) + { + if (_api.MemLib.ReadU32(curObj + 8) != 0) + { + Xpos = _api.MemLib.ReadS16(curObj + 0x3C); + Xpos2= _api.MemLib.ReadS16(curObj + 0x24); + Ypos = _api.MemLib.ReadS16(curObj + 0x40); + Ypos2= _api.MemLib.ReadS16(curObj + 0x28); + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid = (Xpos + Xpos2) >> 1; + Ymid = (Ypos + Ypos2) >> 1; + if (_api.MemLib.ReadU8(curObj + 0x71) != 0) + { + DrawEccoOct(Xpos, Ypos, 40, Color.FromArgb(255, 192, 0), 0x7F); + DrawEccoOct(Xpos2, Ypos2, 40, Color.FromArgb(255, 192, 0), 0x7F); + } + } + else + { + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + } + Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(0, Xmid-16), 605), Math.Min(Math.Max(0, Ymid-5), 424), Color.Lime); + Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(2, Xmid-14), 607), Math.Min(Math.Max(2, Ymid-3), 426), Color.Lime); + Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(0, Xmid-16), 605), Math.Min(Math.Max(2, Ymid-3), 426), Color.Lime); + Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(2, Xmid-14), 607), Math.Min(Math.Max(0, Ymid-5), 424), Color.Lime); + Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(1, Xmid-15), 606), Math.Min(Math.Max(1, Ymid-4), 425), Color.Blue); + curObj = _api.MemLib.ReadU24(curObj+1); + } + uint curlev = _api.MemLib.ReadU8(0xFFA7E0); + if ((_api.MemLib.ReadU8(0xFFA7D0) == 30)) + { + curObj = _api.MemLib.ReadU24(0xFFD425); + if ((curObj != 0) && (_api.MemLib.ReadU32(curObj + 8) != 0)) + { + Xpos = _api.MemLib.ReadS16(curObj + 0x1C) - _camX; + Ypos = _api.MemLib.ReadS16(curObj + 0x20) - _camY; + DrawEccoOct(Xpos, Ypos, 20, Color.FromArgb(255, 192, 0)); + } + } + //aqua tubes + curObj = _api.MemLib.ReadU24(0xFFCFC5); + while (curObj != 0) + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2= _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2= _api.MemLib.ReadS16(curObj + 0x38); + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid = (Xpos + Xpos2) >> 1; + Ymid = (Ypos + Ypos2) >> 1; + // displayed = false; + uint type = _api.MemLib.ReadU8(curObj + 0x7E); + int yoff = 0; + switch (type) + { + /* case 0x11: + Xpos2 = Xmid; + Xmid = (Xpos + Xpos2) >> 1; + break; + case 0x12: + Xpos = Xmid; + Xmid = (Xpos + Xpos2) >> 1; + break; + case 0x13: + Ypos = Ymid; + Ymid = (Ypos + Ypos2) >> 1; + break; + case 0x14: + Ypos2 = Ymid; + Ymid = (Ypos + Ypos2) >> 1; + break;*/ + case 0x15: + for (int TempX = 0; TempX <= Xmid-Xpos; TempX++, yoff++) + _api.GUILib.DrawPixel(Xpos2 - TempX, Ymid + yoff, Color.FromArgb(127, 0, 255)); + for (int TempX = Math.Min(Math.Max(0, Xmid), 320); TempX <= Math.Min(Math.Max(8, Xpos2), 327); TempX++) + _api.GUILib.DrawPixel(TempX, Ymid, Color.FromArgb(127, 0, 255)); + for (uint TempX = (uint)Math.Min(Math.Max(0, Ymid), 223); TempX <= Math.Min(Math.Max(0, Ypos2), 223); TempX++) + _api.GUILib.DrawPixel(Xmid, (int)TempX, Color.FromArgb(127, 0, 255)); + break; + case 0x18: + case 0x19: + for (int TempX = 0; TempX <= Ymid-Ypos; TempX++) + { + _api.GUILib.DrawPixel(Xmid + yoff, Ypos2-TempX, Color.FromArgb(127, 0, 255)); + if ((TempX & 1) != 0) yoff++; + } + break; + case 0x1A: + for (int TempX = 0; TempX <= Xmid-Xpos; TempX++, yoff++) + _api.GUILib.DrawPixel(Xpos + TempX, Ymid + yoff, Color.FromArgb(127, 0, 255)); + for (int TempX = Math.Min(Math.Max(0, Xpos), 320); TempX <= Math.Min(Math.Max(8, Xmid), 327); TempX++) + _api.GUILib.DrawPixel(TempX, Ymid, Color.FromArgb(127, 0, 255)); + for (uint TempX = (uint)Math.Min(Math.Max(0, Ymid), 223); TempX <= Math.Min(Math.Max(0, Ypos2), 223); TempX++) + _api.GUILib.DrawPixel(Xmid, (int)TempX, Color.FromArgb(127, 0, 255)); + break; + case 0x1D: + for (int TempX = 0; TempX <= Ymid-Ypos; TempX++) + { + _api.GUILib.DrawPixel(Xmid - yoff, Ypos2 - TempX, Color.FromArgb(127, 0, 255)); + if ((TempX & 1) != 0) yoff++; + } + break; + case 0x1F: + for (int TempX = 0; TempX <= Xmid-Xpos; TempX++, yoff++) + _api.GUILib.DrawPixel(Xpos + TempX, Ymid - yoff, Color.FromArgb(127, 0, 255)); + for (int TempX = Math.Min(Math.Max(0, Xpos), 320); TempX <= Math.Min(Math.Max(8, Xmid), 327); TempX++) + _api.GUILib.DrawPixel(TempX, Ymid, Color.FromArgb(127, 0, 255)); + for (uint TempX = (uint)Math.Min(Math.Max(0, Ypos), 223); TempX <= Math.Min(Math.Max(0, Ymid), 223); TempX++) + _api.GUILib.DrawPixel(Xmid, (int)TempX, Color.FromArgb(127, 0, 255)); + break; + case 0x20: + case 0x21: + for (int TempX = 0; TempX <= Xmid-Xpos; TempX++) + { + _api.GUILib.DrawPixel(Xpos + TempX, Ymid - yoff, Color.FromArgb(127, 0, 255)); + if ((TempX & 1) != 0) yoff++; + } + break; + case 0x22: + case 0x23: + for (int TempX = 0; TempX <= Ymid-Ypos; TempX++) + { + _api.GUILib.DrawPixel(Xmid - yoff, Ypos + TempX, Color.FromArgb(127, 0, 255)); + if ((TempX & 1) != 0) yoff++; + } + break; + case 0x24: + for (int TempX = 0; TempX <= Xmid-Xpos; TempX++, yoff++) + _api.GUILib.DrawPixel(Xpos2 - TempX, Ymid - yoff, Color.FromArgb(127, 0, 255)); + break; + case 0x25: + case 0x26: + for (int TempX = 0; TempX <= Xmid-Xpos; TempX++) + { + _api.GUILib.DrawPixel(Xpos2 - TempX, Ymid - yoff, Color.FromArgb(127, 0, 255)); + if ((TempX & 1) != 0) yoff++; + } + break; + case 0x27: + case 0x28: + for (int TempX = 0; TempX <= Ymid-Ypos; TempX++) + { + _api.GUILib.DrawPixel(Xmid + yoff, Ypos + TempX, Color.FromArgb(127, 0, 255)); + if ((TempX & 1) != 0) yoff++; + } + break; + case 0x2B: + _api.GUILib.DrawLine(Xpos, Ymid, Xpos2, Ymid, Color.FromArgb(127, 0, 255)); + for (int TempX = 0; TempX <= Ymid - Ypos; TempX++) + { + _api.GUILib.DrawPixel(Xpos + yoff, Ymid - TempX, Color.FromArgb(127, 0, 255)); + _api.GUILib.DrawPixel(Xpos2 - yoff, Ymid - TempX, Color.FromArgb(127, 0, 255)); + if ((TempX & 1) != 0) yoff++; + } + yoff = Xmid - (Xpos + yoff); + _api.GUILib.DrawLine(Xmid - yoff, Ypos, Xmid + yoff, Ypos, Color.FromArgb(127, 0, 255)); + break; + default: + _api.GUILib.DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(255, 127, 0, 255)); + break; + } + // if (!displayed) + if (type != 0x10) + { + uint temp = _api.MemLib.ReadU8(curObj + 0x7E); + Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(0, Xmid-3), 628), Math.Min(Math.Max(0, Ymid-5), 424), Color.Red); + Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(2, Xmid-1), 630), Math.Min(Math.Max(2, Ymid-3), 426), Color.Red); + Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(0, Xmid-3), 628), Math.Min(Math.Max(2, Ymid-3), 426), Color.Red); + Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(2, Xmid-1), 630), Math.Min(Math.Max(0, Ymid-5), 424), Color.Red); + Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(1, Xmid-2), 629), Math.Min(Math.Max(1, Ymid-4), 425), Color.Blue); + } + curObj = _api.MemLib.ReadU24(curObj+1); + } + //walls + bool displayed; + curObj = _api.MemLib.ReadU24(0xFFCFC1); + while (curObj != 0) + { + + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2= _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2= _api.MemLib.ReadS16(curObj + 0x38); + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid = (Xpos + Xpos2) >> 1; + Ymid = (Ypos + Ypos2) >> 1; + displayed = false; + uint type = _api.MemLib.ReadU8(curObj + 0x7E); + int yoff = 0; + switch (type) + { + case 0x11: + Xpos2 = Xmid; + Xmid = (Xpos + Xpos2) >> 1; + break; + case 0x12: + Xpos = Xmid; + Xmid = (Xpos + Xpos2) >> 1; + break; + case 0x13: + Ypos = Ymid; + Ymid = (Ypos + Ypos2) >> 1; + break; + case 0x14: + Ypos2 = Ymid; + Ymid = (Ypos + Ypos2) >> 1; + break; + case 0x15: + case 0x16: + case 0x17: + case 0x18: + case 0x19: + _api.GUILib.DrawLine(Xmid, Ypos2, Xpos2, Ymid, Color.White); + _api.GUILib.DrawLine(Xmid, Ypos2, Xmid, Ymid, Color.FromArgb(127,Color.White)); + _api.GUILib.DrawLine(Xmid, Ymid, Xpos2, Ymid, Color.FromArgb(127, Color.White)); + displayed = true; + break; + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: + _api.GUILib.DrawLine(Xpos, Ymid, Xmid, Ypos2, Color.White); + _api.GUILib.DrawLine(Xmid, Ymid, Xmid, Ypos2, Color.FromArgb(127, Color.White)); + _api.GUILib.DrawLine(Xpos, Ymid, Xmid, Ymid, Color.FromArgb(127, Color.White)); + displayed = true; + break; + case 0x1F: + case 0x20: + case 0x21: + case 0x22: + case 0x23: + _api.GUILib.DrawLine(Xpos, Ymid, Xmid, Ypos, Color.White); + _api.GUILib.DrawLine(Xmid, Ymid, Xmid, Ypos, Color.FromArgb(127, Color.White)); + _api.GUILib.DrawLine(Xpos, Ymid, Xmid, Ymid, Color.FromArgb(127, Color.White)); + displayed = true; + break; + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + _api.GUILib.DrawLine(Xmid, Ypos, Xpos2, Ymid, Color.White); + _api.GUILib.DrawLine(Xmid, Ypos, Xmid, Ymid, Color.FromArgb(127, Color.White)); + _api.GUILib.DrawLine(Xmid, Ymid, Xpos2, Ymid, Color.FromArgb(127, Color.White)); + displayed = true; + break; + case 0x2B: + _api.GUILib.DrawLine(Xpos, Ymid, Xpos2, Ymid, Color.FromArgb(127, Color.White)); + for (int TempX = 0; TempX <= Ymid-Ypos; TempX++) + { + _api.GUILib.DrawPixel(Xpos + yoff, Ymid - TempX, Color.White); + _api.GUILib.DrawPixel(Xpos2 - yoff, Ymid - TempX, Color.White); + if ((TempX & 1) != 0) yoff++; + } + yoff = Xmid - (Xpos + yoff); + _api.GUILib.DrawLine(Xmid - yoff, Ypos, Xmid + yoff, Ypos); + displayed = true; + break; + default: + if (type != 0x10) + { + var temp = _api.MemLib.ReadU8(curObj + 0x7E); + Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(0, Xmid-3), 628), Math.Min(Math.Max(0, Ymid-5), 424), Color.Red); + Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(2, Xmid-1), 630), Math.Min(Math.Max(2, Ymid-3), 426), Color.Red); + Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(0, Xmid-3), 628), Math.Min(Math.Max(2, Ymid-3), 426), Color.Red); + Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(2, Xmid-1), 630), Math.Min(Math.Max(0, Ymid-5), 424), Color.Red); + Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(1, Xmid-2), 629), Math.Min(Math.Max(1, Ymid-4), 425), Color.Lime); + } + break; + } + if (!displayed) _api.GUILib.DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.White); + curObj = _api.MemLib.ReadU24(curObj+1); + } + //inanimate objects + curObj = _api.MemLib.ReadU24(0xFFCFBD); + while (curObj != 0) + { + if (_api.MemLib.ReadU8(curObj + 0x7E) > 0xF); + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2= _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2= _api.MemLib.ReadS16(curObj + 0x38); + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + _api.GUILib.DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); + } + Xpos += Xpos2; + Ypos += Ypos2; + Xpos >>= 1; + Ypos >>= 1; + Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(0, Xpos-16), 605), Math.Min(Math.Max(0, Ypos-5), 424), Color.Lime); + Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(2, Xpos-14), 607), Math.Min(Math.Max(2, Ypos-3), 426), Color.Lime); + Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(0, Xpos-16), 605), Math.Min(Math.Max(2, Ypos-3), 426), Color.Lime); + Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(2, Xpos-14), 607), Math.Min(Math.Max(0, Ypos-5), 424), Color.Lime); + Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(1, Xpos-15), 606), Math.Min(Math.Max(1, Ypos-4), 425), Color.Blue); + curObj = _api.MemLib.ReadU24(curObj+1); + } + //animate objects + if (_mode == Modes.Ecco2) + curObj = _api.MemLib.ReadU24(0xFFCFB9); + else + curObj = _api.MemLib.ReadU24(0xFFD829); + while (curObj != 0) + { + uint type = 0; + switch (_mode) { + case Modes.Ecco2: + { + uint flags = _api.MemLib.ReadU16(curObj + 0x10); + //if ((flags & 0x2000) || !(flags & 2)); + type = _api.MemLib.ReadU32(curObj + 0xC); + if ((type == 0xBA52E) || (type == 0xBA66E)) + { + uint Adelikat = curObj; + while (Adelikat != 0) + { + Xpos = _api.MemLib.ReadS16(Adelikat + 0x24); + Ypos = _api.MemLib.ReadS16(Adelikat + 0x28); + Xpos -= _camX; + Ypos -= _camY; + DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(Adelikat + 0x44), Color.Lime); + Adelikat = _api.MemLib.ReadU32(Adelikat + 4); + } + Xpos = _api.MemLib.ReadS16(curObj + 0x24); + Ypos = _api.MemLib.ReadS16(curObj + 0x28); + Xpos -= _camX; + Ypos -= _camY; + } + else if (type == 0xE47EE) + { + uint Adelikat = curObj; + while (Adelikat != 0) + { + Xpos = _api.MemLib.ReadS16(Adelikat + 0x1C); + Ypos = _api.MemLib.ReadS16(Adelikat + 0x20); + Xpos -= _camX; + Ypos -= _camY; + DrawEccoOct(Xpos, Ypos, (_api.MemLib.ReadS16(Adelikat + 0x2C) >> 1) + 16, Color.Lime); + Adelikat = _api.MemLib.ReadU32(Adelikat + 4); + } + Xpos = _api.MemLib.ReadS16(curObj + 0x24); + Ypos = _api.MemLib.ReadS16(curObj + 0x28); + Xpos -= _camX; + Ypos -= _camY; + } + else if ((type == 0x9F5B0) || (type == 0xA3B18)) + { + Xpos = _api.MemLib.ReadS16(curObj + 0x24); + Ypos = _api.MemLib.ReadS16(curObj + 0x28); + Xpos -= _camX; + Ypos -= _camY; + DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(curObj + 0x44), Color.Lime); + } + else if (type == 0xDCEE0) + { + Xpos = _api.MemLib.ReadS16(curObj + 0x24); + Ypos = _api.MemLib.ReadS16(curObj + 0x28); + Xpos -= _camX; Ypos -= _camY; + DrawEccoOct(Xpos, Ypos, 0x5C, Color.Lime); + } + else + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); + Xmid = _api.MemLib.ReadS16(curObj + 0x24); + Ymid = _api.MemLib.ReadS16(curObj + 0x28); + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + if ((type == 0xA6C4A) || (type == 0xC43D4)) DrawEccoOct(Xmid, Ymid, 70, Color.Lime); + _api.GUILib.DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); + } + break; + } + case Modes.Ecco1: + type = _api.MemLib.ReadU32(curObj + 0x6); + Xpos = _api.MemLib.ReadS16(curObj + 0x17); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x1F); + Ypos = _api.MemLib.ReadS16(curObj + 0x1B); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x23); + Xmid = _api.MemLib.ReadS16(curObj + 0x0F); + Ymid = _api.MemLib.ReadS16(curObj + 0x13); + Xpos >>= 2; + Xpos2 >>= 2; + Ypos >>= 2; + Ypos2 >>= 2; + Xmid >>= 2; + Ymid >>= 2; + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + _api.GUILib.DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); + break; + } + Print_Text(type.ToString("X8"), 8, Math.Min(Math.Max(0, Xmid-16), 605), Math.Min(Math.Max(0, Ymid-5), 424), Color.Blue); + Print_Text(type.ToString("X8"), 8, Math.Min(Math.Max(2, Xmid-14), 607), Math.Min(Math.Max(2, Ymid-3), 426), Color.Blue); + Print_Text(type.ToString("X8"), 8, Math.Min(Math.Max(0, Xmid-16), 605), Math.Min(Math.Max(2, Ymid-3), 426), Color.Blue); + Print_Text(type.ToString("X8"), 8, Math.Min(Math.Max(2, Xmid-14), 607), Math.Min(Math.Max(0, Ymid-5), 424), Color.Blue); + Print_Text(type.ToString("X8"), 8, Math.Min(Math.Max(1, Xmid-15), 606), Math.Min(Math.Max(1, Ymid-4), 425), Color.Red); + curObj = _api.MemLib.ReadU24(curObj+1); + } + //events + curObj = _api.MemLib.ReadU24(0xFFCFB5); + while (curObj != 0) + { + uint type = _api.MemLib.ReadU32(curObj + 0xC); + if ((type == 0xA44EE) || (type == 0xD120C)) + { + Xmid = _api.MemLib.ReadS16(curObj + 0x1C) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x20) - _camY; + DrawEccoOct(Xmid, Ymid, 0x20, Color.Cyan); + } + else if (type == 0xDEF94) + { + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + DrawEccoOct(Xmid, Ymid, 0x18, Color.Cyan); + } + else + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2= _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2= _api.MemLib.ReadS16(curObj + 0x38); + Xmid = _api.MemLib.ReadS16(curObj + 0x24); + Ymid = _api.MemLib.ReadS16(curObj + 0x28); + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + _api.GUILib.DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Cyan); + } + PutText(type.ToString("X8"), Xmid, Ymid, 1, 1, 0, 0, Color.White, Color.Blue); + PutText(curObj.ToString("X8"), Xmid, Ymid, 1, 9, 0, 0, Color.White, Color.Blue); + curObj = _api.MemLib.ReadU24(curObj+1); + } + //Ecco body + Xpos = _api.MemLib.ReadS16(0xFFAA22); + Ypos = _api.MemLib.ReadS16(0xFFAA26); + Xpos2 = _api.MemLib.ReadS16(0xFFAA2A); + Ypos2 = _api.MemLib.ReadS16(0xFFAA2E); + Xmid = _api.MemLib.ReadS16(0xFFAA1A); + Ymid = _api.MemLib.ReadS16(0xFFAA1E); + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + X = Xpos; + X2 = Xpos2; + Y = Ypos; + Y2 = Ypos2; + int X3 = (Xmid + (ushort) Xpos) >> 1; + int X4 = (Xmid + (ushort) Xpos2) >> 1; + int Y3 = (Ymid + (ushort) Ypos) >> 1; + int Y4 = (Ymid + (ushort) Ypos2) >> 1; + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Magenta); + DrawBoxMWH(X, Y, 1, 1, Color.Magenta); + DrawBoxMWH(X2, Y2, 1, 1, Color.Magenta); + DrawBoxMWH(X3, Y3, 1, 1, Color.Magenta); + DrawBoxMWH(X4, Y4, 1, 1, Color.Magenta); + _api.GUILib.DrawPixel(Xmid, Ymid, Color.Blue); + _api.GUILib.DrawPixel(X, Y, Color.Blue); + _api.GUILib.DrawPixel(X2, Y2, Color.Blue); + _api.GUILib.DrawPixel(X3, Y3, Color.Blue); + _api.GUILib.DrawPixel(X4, Y4, Color.Blue); + _api.GUILib.DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); + //Ecco head + Xpos = _api.MemLib.ReadS16(0xFFA8F8); + Xpos2 = _api.MemLib.ReadS16(0xFFA900); + Ypos = _api.MemLib.ReadS16(0xFFA8FC); + Ypos2 = _api.MemLib.ReadS16(0xFFA904); + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + _api.GUILib.DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.White); + //Ecco tail + Xpos = _api.MemLib.ReadS16(0xFFA978); + Xpos2 = _api.MemLib.ReadS16(0xFFA980); + Ypos = _api.MemLib.ReadS16(0xFFA97C); + Ypos2 = _api.MemLib.ReadS16(0xFFA984); + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + _api.GUILib.DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.White); + // sonar + if (_api.MemLib.ReadU8(0xFFAB77) != 0) + { + Xmid = _api.MemLib.ReadS16(0xFFA9EC); + Width2 = _api.MemLib.ReadS16(0xFFA9FC); + Xmid -= _camX; + Ymid = _api.MemLib.ReadS16(0xFFA9F0); + Ymid -= _camY; + Height2 = _api.MemLib.ReadS16(0xFFAA00); + color = ((_api.MemLib.ReadU8(0xFFAA0C) != 0) ? Color.FromArgb(255, 0, 127) : Color.FromArgb(0, 0, 255)); + DrawBoxMWH(Xmid, Ymid, Width2, Height2, color); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue); + _api.GUILib.DrawPixel(Xmid, Ymid, color); + } + //Pulsar + curObj = _api.MemLib.ReadU24(0xFFCFD1); + if (curObj != 0) + { + // sbyte Blah = _api.MemLib.ReadU8(CardBoard + 0x15); + curObj += 0x26; + // if (!(Blah & 1)) + // CardBoard += 0x14; + for (int l = 0; l < 4; l++) + { + if (_api.MemLib.ReadU16(curObj + 0x12) != 0) + { + Xmid = _api.MemLib.ReadS16(curObj); + Ymid = _api.MemLib.ReadS16(curObj + 4); + Xmid -= _camX; Ymid -= _camY; + DrawBoxMWH(Xmid, Ymid, 0x30, 0x30, Color.Red); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue); + _api.GUILib.DrawPixel(Xmid, Ymid, Color.Red); + } + curObj += 0x14; + } + } + } + + void EccoAutofire(bool on) + { + //Modif N - ECCO HACK - make caps lock (weirdly) autofire player 1's C key + uint charge; + uint mode = _api.MemLib.ReadU8(0xFFA555); + int frameCount = _api.EmuLib.FrameCount(); + int lagCount = _api.EmuLib.LagCount(); + switch (mode) + { + case 0x00: + if (on) + { + if (_api.MemLib.ReadU16(0xFFF342) == 0xFFFD) + _api.JoypadLib.Set("C", false, 1); + else + _api.JoypadLib.Set("C", true, 1); + } + break; + case 0xE6: + if (_api.MemLib.ReadU16(0xFFD5E8) == 0x00000002) { + Dictionary buttons = new Dictionary(); + buttons["B"] = !(buttons["C"] = false); + _api.JoypadLib.Set(buttons, 1); + } + else + { + Dictionary buttons = new Dictionary(); + buttons["B"] = !(buttons["C"] = true); + _api.JoypadLib.Set(buttons, 1); + } + break; + case 0xF6: + charge = _api.MemLib.ReadU8(0xFFB19B); + if (on) + { + if ((charge == 1) || (_prevCharge == 1) || !(_prevOn || (_api.MemLib.ReadU8(0xFFB19B) != 0))) + _api.JoypadLib.Set("B", true, 1); + else + _api.JoypadLib.Set("B", false, 1); + if ((_api.MemLib.ReadU16(0xFFB168) == 0x3800) && ((_api.MemLib.ReadU16(0xFFA7C8) % 2) != 0)) + _api.EmuLib.SetIsLagged(true); + _api.JoypadLib.Set("C", (_api.MemLib.ReadU16(0xFFA7C8) % 2) != 0, 1); + } + _prevCharge = charge; + break; + case 0x20: + case 0x28: + case 0xAC: + if (on) + { + _api.JoypadLib.Set("C", (_api.MemLib.ReadS8(0xFFAA6E) >= 11), 1); + } + break; + default: + break; + } + _prevOn = on; + } + public override void Init(IPluginAPI api) + { + base.Init(api); + _api.MemLib.SetBigEndian(); + string gameName = _api.GameInfoLib.GetRomName(); + if ((gameName == "ECCO - The Tides of Time (J) [!]") || + (gameName == "ECCO - The Tides of Time (U) [!]") || + (gameName == "ECCO - The Tides of Time (E) [!]")) + { + _mode = Modes.Ecco2; + _camXAddr = 0xFFAD9C; + _camYAddr = 0xFFAD9E; + EmuHawkPluginLibrary.SetGameExtraPadding(160, 112, 160, 112); + } + else if ((gameName == "ECCO The Dolphin (J) [!]") || + (gameName == "ECCO The Dolphin (UE) [!]")) + + { + _mode = Modes.Ecco1; + _camXAddr = 0xFFB836; + _camYAddr = 0xFFB834; + EmuHawkPluginLibrary.SetGameExtraPadding(160,112,160,112); + } + else + { + _mode = Modes.disabled; + Running = false; + } + } + public override void PreFrameCallback() + { + if (_mode != Modes.disabled) + { + EccoAutofire(_api.JoypadLib.Get(1)["C"] != _api.JoypadLib.GetImmediate()["P1 C"]); + } + } + public override void PostFrameCallback() + { + uint frame = _api.MemLib.ReadU32(0xFFA524); + uint mode = _api.MemLib.ReadByte(0xFFA555); + switch (mode) { + case 0x20: + case 0x28: + case 0xAC: + EmuHawkPluginLibrary.SetGameExtraPadding(160, 112, 160, 112); + EccoDrawBoxes(); + break; + case 0xF6: + EmuHawkPluginLibrary.SetGameExtraPadding(0, 0, 0, 0); + EccoDraw3D(); + break; + default: + EmuHawkPluginLibrary.SetGameExtraPadding(0, 0, 0, 0); + break; + } + _camX = _api.MemLib.ReadS16(_camXAddr)-160; + _camY = _api.MemLib.ReadS16(_camYAddr)-112; + if (frame <= _prevF) + _api.EmuLib.SetIsLagged(true); + _prevF = frame; + } + public override void LoadStateCallback(string name) + { + _prevF = _api.MemLib.ReadU32(0xFFA524); + } + } +} From 9874c496aca1875a67b905c0cc7e960d6accf377 Mon Sep 17 00:00:00 2001 From: upthorn Date: Wed, 5 Dec 2018 11:58:19 -0800 Subject: [PATCH 006/301] Minor revisions to plugin API --- .../plugins/PluginLibrary.Emu.cs | 85 ++++++++++++++++++- .../plugins/PluginLibrary.GUIDraw.cs | 31 ++++++- .../plugins/PluginLibrary.Joypad.cs | 10 ++- .../Plugins/Libraries/PluginLibrary.cs | 30 +++---- 4 files changed, 129 insertions(+), 27 deletions(-) diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.Emu.cs b/BizHawk.Client.Common/plugins/PluginLibrary.Emu.cs index b205516989..b0ccf94061 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.Emu.cs +++ b/BizHawk.Client.Common/plugins/PluginLibrary.Emu.cs @@ -226,7 +226,90 @@ namespace BizHawk.Client.Common { Global.Config.AutoMinimizeSkipping = enabled; } - + public object GetSettings() + { + if (Emulator is GPGX) + { + var gpgx = Emulator as GPGX; + return gpgx.GetSettings(); + } + else if (Emulator is LibsnesCore) + { + var snes = Emulator as LibsnesCore; + return snes.GetSettings(); + } + else if (Emulator is NES) + { + var nes = Emulator as NES; + return nes.GetSettings(); + } + else if (Emulator is QuickNES) + { + var quicknes = Emulator as QuickNES; + return quicknes.GetSettings(); + } + else if (Emulator is PCEngine) + { + var pce = Emulator as PCEngine; + return pce.GetSettings(); + } + else if (Emulator is SMS) + { + var sms = Emulator as SMS; + return sms.GetSettings(); + } + else if (Emulator is WonderSwan) + { + var ws = Emulator as WonderSwan; + return ws.GetSettings(); + } + else + { + return null; + } + } + public bool PutSettings(object settings) + { + if (Emulator is GPGX) + { + var gpgx = Emulator as GPGX; + return gpgx.PutSettings(settings as GPGX.GPGXSettings); + } + else if (Emulator is LibsnesCore) + { + var snes = Emulator as LibsnesCore; + return snes.PutSettings(settings as LibsnesCore.SnesSettings); + } + else if (Emulator is NES) + { + var nes = Emulator as NES; + return nes.PutSettings(settings as NES.NESSettings); + } + else if (Emulator is QuickNES) + { + var quicknes = Emulator as QuickNES; + return quicknes.PutSettings(settings as QuickNES.QuickNESSettings); + } + else if (Emulator is PCEngine) + { + var pce = Emulator as PCEngine; + return pce.PutSettings(settings as PCEngine.PCESettings); + } + else if (Emulator is SMS) + { + var sms = Emulator as SMS; + return sms.PutSettings(settings as SMS.SMSSettings); + } + else if (Emulator is WonderSwan) + { + var ws = Emulator as WonderSwan; + return ws.PutSettings(settings as WonderSwan.Settings); + } + else + { + return false; + } + } public void SetRenderPlanes(params bool[] luaParam) { if (Emulator is GPGX) diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.GUIDraw.cs b/BizHawk.Client.Common/plugins/PluginLibrary.GUIDraw.cs index e6612ad7f7..2647c19a89 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.GUIDraw.cs +++ b/BizHawk.Client.Common/plugins/PluginLibrary.GUIDraw.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Drawing; +using System.Drawing.Imaging; using System.Windows.Forms; using System.IO; @@ -23,6 +24,22 @@ namespace BizHawk.Client.Common protected Color? _defaultTextBackground = Color.FromArgb(128, 0, 0, 0); protected int _defaultPixelFont = 1; // gens protected Padding _padding = new Padding(0); + protected ImageAttributes _attributes = new ImageAttributes(); + private System.Drawing.Drawing2D.CompositingMode _compositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver; + + public virtual void ToggleCompositingMode() + { + _compositingMode = 1 - _compositingMode; + } + + public virtual ImageAttributes GetAttributes() + { + return _attributes; + } + public virtual void SetAttributes(ImageAttributes a) + { + _attributes = a; + } #region Gui API public virtual void Dispose() @@ -135,6 +152,7 @@ namespace BizHawk.Client.Common { try { + g.CompositingMode = _compositingMode; g.DrawBezier(GetPen(color ?? _defaultForeground), p1, p2, p3, p4); } catch (Exception) @@ -150,6 +168,7 @@ namespace BizHawk.Client.Common { try { + g.CompositingMode = _compositingMode; g.DrawBeziers(GetPen(color ?? _defaultForeground), points); } catch (Exception) @@ -188,6 +207,7 @@ namespace BizHawk.Client.Common h = Math.Max(y2, 0.1f); } + g.CompositingMode = _compositingMode; g.DrawRectangle(GetPen(line ?? _defaultForeground), x, y, w, h); var bg = background ?? _defaultBackground; @@ -217,6 +237,7 @@ namespace BizHawk.Client.Common g.FillEllipse(brush, x, y, width, height); } + g.CompositingMode = _compositingMode; g.DrawEllipse(GetPen(line ?? _defaultForeground), x, y, width, height); } catch (Exception) @@ -249,6 +270,7 @@ namespace BizHawk.Client.Common icon = new Icon(path); } + g.CompositingMode = _compositingMode; g.DrawIcon(icon, x, y); } catch (Exception) @@ -281,8 +303,10 @@ namespace BizHawk.Client.Common _imageCache.Add(path, img); } } + var destRect = new Rectangle(x, y, width ?? img.Width, height ?? img.Height); - g.DrawImage(img, x, y, width ?? img.Width, height ?? img.Height); + g.CompositingMode = _compositingMode; + g.DrawImage(img, destRect, 0, 0, img.Width, img.Height, GraphicsUnit.Pixel, _attributes); } } @@ -319,7 +343,8 @@ namespace BizHawk.Client.Common var destRect = new Rectangle(dest_x, dest_y, dest_width ?? source_width, dest_height ?? source_height); - g.DrawImage(img, destRect, source_x, source_y, source_width, source_height, GraphicsUnit.Pixel); + g.CompositingMode = _compositingMode; + g.DrawImage(img, destRect, source_x, source_y, source_width, source_height, GraphicsUnit.Pixel, _attributes); } } @@ -327,6 +352,7 @@ namespace BizHawk.Client.Common { using (var g = GetGraphics()) { + g.CompositingMode = _compositingMode; g.DrawLine(GetPen(color ?? _defaultForeground), x1, y1, x2, y2); } } @@ -341,6 +367,7 @@ namespace BizHawk.Client.Common { using (var g = GetGraphics()) { + g.CompositingMode = _compositingMode; var bg = background ?? _defaultBackground; if (bg.HasValue) { diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.Joypad.cs b/BizHawk.Client.Common/plugins/PluginLibrary.Joypad.cs index f09a1e5cb1..5eeb3ff1e6 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.Joypad.cs +++ b/BizHawk.Client.Common/plugins/PluginLibrary.Joypad.cs @@ -145,7 +145,7 @@ namespace BizHawk.Client.Common /*Eat it*/ } } - public void Set(string button, bool state, int? controller = null) + public void Set(string button, bool? state = null, int? controller = null) { try { @@ -154,8 +154,10 @@ namespace BizHawk.Client.Common { toPress = "P" + controller + " " + button; } - - Global.LuaAndAdaptor.SetButton(toPress, state); + if (state.HasValue) + Global.LuaAndAdaptor.SetButton(toPress, state.Value); + else + Global.LuaAndAdaptor.UnSet(toPress); Global.ActiveController.Overrides(Global.LuaAndAdaptor); } catch @@ -196,7 +198,7 @@ namespace BizHawk.Client.Common /*Eat it*/ } } - public void SetAnalog(string control, float value, object controller = null) + public void SetAnalog(string control, float? value = null, object controller = null) { try { diff --git a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.cs b/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.cs index 1396c77334..258cd128e3 100644 --- a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.cs +++ b/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.cs @@ -14,7 +14,7 @@ namespace BizHawk.Client.EmuHawk public class PluginLibrary { // public LuaDocumentation Docs { get; } - public PluginLibrary(IEmulatorServiceProvider serviceProvider) + private void Register(IEmulatorServiceProvider serviceProvider) { // Docs.Clear(); @@ -37,23 +37,15 @@ namespace BizHawk.Client.EmuHawk foreach (var lib in libs) { - bool addLibrary = true; - //var attributes = lib.GetCustomAttributes(typeof(LuaLibraryAttribute), false); - //if (attributes.Any()) - //{ - // addLibrary = VersionInfo.DeveloperBuild || (attributes.First() as LuaLibraryAttribute).Released; - //} - - if (addLibrary) - { - var instance = (PluginLibraryBase)Activator.CreateInstance(lib); - //instance.LuaRegister(lib, Docs); - //instance.LogOutputCallback = ConsoleLuaLibrary.LogOutput; - ServiceInjector.UpdateServices(serviceProvider, instance); - Libraries.Add(lib, instance); - } + var instance = (PluginLibraryBase)Activator.CreateInstance(lib); + ServiceInjector.UpdateServices(serviceProvider, instance); + Libraries.Add(lib, instance); } } + public PluginLibrary(IEmulatorServiceProvider serviceProvider) + { + Register(serviceProvider); + } private readonly Dictionary Libraries = new Dictionary(); public List PluginList { get; } = new List(); @@ -68,10 +60,8 @@ namespace BizHawk.Client.EmuHawk public void Restart(IEmulatorServiceProvider newServiceProvider) { - foreach (var lib in Libraries) - { - ServiceInjector.UpdateServices(newServiceProvider, lib.Value); - } + Libraries.Clear(); + Register(newServiceProvider); foreach (var plugin in PluginList) { plugin.Init(new PluginAPI(Libraries)); From a13b9b3a317396568970c6a28b6563e6d68d99c5 Mon Sep 17 00:00:00 2001 From: upthorn Date: Wed, 5 Dec 2018 11:59:13 -0800 Subject: [PATCH 007/301] Significant updates to example Ecco 2 plugin. --- .../Plugins/Example/Ecco2AssistantPlugin.cs | 3454 +++++++++++++++-- 1 file changed, 3048 insertions(+), 406 deletions(-) diff --git a/BizHawk.Client.EmuHawk/Plugins/Example/Ecco2AssistantPlugin.cs b/BizHawk.Client.EmuHawk/Plugins/Example/Ecco2AssistantPlugin.cs index 753bc5d425..75a58dcd79 100644 --- a/BizHawk.Client.EmuHawk/Plugins/Example/Ecco2AssistantPlugin.cs +++ b/BizHawk.Client.EmuHawk/Plugins/Example/Ecco2AssistantPlugin.cs @@ -1,8 +1,11 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Drawing; +using System.Linq; using BizHawk.Client.Common; +using BizHawk.Emulation.Cores.Consoles.Sega.gpgx; namespace BizHawk.Client.EmuHawk { @@ -19,102 +22,490 @@ namespace BizHawk.Client.EmuHawk private int _camY = 0; private int _camXAddr; private int _camYAddr; - private bool _prevOn = false; - private uint _prevCharge = 0; private uint _prevF = 0; - - void DrawEccoOct(int x, int y, int r, Color? color = null, int fillAlpha = 0) + private int _top = 0; + private int _bottom = 0; + private int _left = 0; + private int _right = 0; + private const int _signalAlpha = 255; + private int _tickerY = 81; + private int _dumpMap = 0; + private int _prevX = 0; + private int _prevY = 0; + private int _destX = 0; + private int _destY = 0; + private int _snapPast = 0; + private string _rowStateGuid = string.Empty; + private EmuHawkPluginLibrary _clientLib; + private Color[] _turnSignalColors = { - Point[] octPoints = { - new Point(x, y - r), - new Point((int)(x + Math.Sin(Math.PI / 4) * r), (int)(y - Math.Sin(Math.PI / 4) *r)), - new Point(x + r, y), - new Point((int)(x + Math.Sin(Math.PI / 4) * r), (int)(y + Math.Sin(Math.PI / 4) *r)), - new Point(x, y + r), - new Point((int)(x - Math.Sin(Math.PI / 4) * r), (int)(y + Math.Sin(Math.PI / 4) *r)), - new Point(x - r, y), - new Point((int)(x - Math.Sin(Math.PI / 4) * r), (int)(y - Math.Sin(Math.PI / 4) *r)) - }; - Color fillColor = color.HasValue ? Color.FromArgb(fillAlpha, color.Value) : Color.Empty; - _api.GUILib.DrawPolygon(octPoints, color, fillColor); + Color.FromArgb(_signalAlpha, 127, 127, 0), + Color.FromArgb(_signalAlpha, 255, 0, 0), + Color.FromArgb(_signalAlpha, 192, 0, 63), + Color.FromArgb(_signalAlpha, 63, 0, 192), + Color.FromArgb(_signalAlpha, 0, 0, 255), + Color.FromArgb(_signalAlpha, 0, 63, 192), + Color.FromArgb(_signalAlpha, 0, 192, 63), + Color.FromArgb(_signalAlpha, 0, 255, 0) + }; + private int _rseed = 1; + private int EccoRand(bool refresh = false) + { + if (refresh) + { + _rseed = (int)(_api.MemLib.ReadU16(0xFFE2F8)); + } + bool odd = (_rseed & 1) != 0; + _rseed >>= 1; + if (odd) + { + _rseed ^= 0xB400; + } + return _rseed; } - void DrawBoxMWH(int x, int y, int w, int h, Color? color = null, int fillAlpha = 0) + private void DrawEccoRhomb(int x, int y, int radius, Color color, int fillAlpha = 63) { - Color fillColor = color.HasValue ? Color.FromArgb(fillAlpha, color.Value) : Color.Empty; + Point[] rhombus = { + new Point(x, y - radius), + new Point(x + radius, y), + new Point(x, y + radius), + new Point(x - radius, y) + }; + Color? fillColor = null; + if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); + _api.GUILib.DrawPolygon(rhombus, color, fillColor); + } + private void DrawEccoRhomb_scaled(int x, int y, int width, int height, int rscale, int bscale, int lscale, int tscale, Color color, int fillAlpha = 63) + { + Point[] rhombus = { + new Point(x + (width << rscale), y), + new Point(x, y + (height << bscale)), + new Point(x - (width << lscale), y), + new Point(x, y - (height << tscale)) + }; + Color? fillColor = null; + if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); + _api.GUILib.DrawPolygon(rhombus, color, fillColor); + } + private void DrawEccoOct(int x, int y, int r, Color color, int fillAlpha = 63) + { + var octOff = (int)(Math.Sqrt(2) * r) >> 1; + Point[] octagon = { + new Point(x, y - r), + new Point(x + octOff, y - octOff), + new Point(x + r, y), + new Point(x + octOff, y + octOff), + new Point(x, y + r), + new Point(x - octOff, y + octOff), + new Point(x - r, y), + new Point(x - octOff, y - octOff) + }; + Color? fillColor = null; + if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); + _api.GUILib.DrawPolygon(octagon, color, fillColor); + } + private void DrawEccoOct_scaled(int x, int y, int xscale, int yscale, int r, Color color, int fillAlpha = 63) + { + var octOff = (int)(Math.Sin(Math.PI / 4) * r); + var xoctOff = octOff << xscale; + var yoctOff = octOff << yscale; + var xr = r << xscale; + var yr = r << yscale; + Point[] octagon = { + new Point(x, y - yr), + new Point(x + xoctOff, y - yoctOff), + new Point(x + xr, y), + new Point(x + xoctOff, y + yoctOff), + new Point(x, y + yr), + new Point(x - xoctOff, y + yoctOff), + new Point(x - xr, y), + new Point(x - xoctOff, y - yoctOff) + }; + Color? fillColor = null; + if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); + _api.GUILib.DrawPolygon(octagon, color, fillColor); + } + private Point? Intersection(Point start1, Point end1, Point start2, Point end2) + { + if ((Math.Max(start1.X, end1.X) < Math.Min(start2.X, end2.X)) + || (Math.Min(start1.X, end1.X) > Math.Max(start2.X, end2.X)) + || (Math.Max(start1.Y, end1.Y) < Math.Min(start2.Y, end2.Y)) + || (Math.Min(start1.Y, end1.Y) > Math.Max(start2.Y, end2.Y))) + return null; + + + double ay_cy, ax_cx, px, py; + double dx_cx = end2.X - start2.X, + dy_cy = end2.Y - start2.Y, + bx_ax = end1.X - start1.X, + by_ay = end1.Y - start1.Y; + + double de = (bx_ax) * (dy_cy) - (by_ay) * (dx_cx); + + if (Math.Abs(de) < 0.01) + return null; + + ax_cx = start1.X - start2.X; + ay_cy = start1.Y - start2.Y; + double r = ((ay_cy) * (dx_cx) - (ax_cx) * (dy_cy)) / de; + double s = ((ay_cy) * (bx_ax) - (ax_cx) * (by_ay)) / de; + px = start1.X + r * (bx_ax); + py = start1.Y + r * (by_ay); + if ((px < Math.Min(start1.X, end1.X)) || (px > Math.Max(start1.X, end1.X)) + || (px < Math.Min(start2.X, end2.X)) || (px > Math.Max(start2.X, end2.X)) + || (py < Math.Min(start1.Y, end1.Y)) || (py > Math.Max(start1.Y, end1.Y)) + || (py < Math.Min(start2.Y, end2.Y)) || (py > Math.Max(start2.Y, end2.Y))) + return null; + return new Point((int)px, (int)py); + } + private void DrawRectRhombusIntersection(Point rectMid, Point rhombMid, int rw, int rh, int r, Color color, int fillAlpha = 63) // Octagon provided by the intersection of a rectangle and a rhombus + { + Point[] rect = + { + new Point(rectMid.X - rw, rectMid.Y + rh), + new Point(rectMid.X - rw, rectMid.Y - rh), + new Point(rectMid.X + rw, rectMid.Y - rh), + new Point(rectMid.X + rw, rectMid.Y + rh) + }; + Point[] rhombus = + { + new Point(rhombMid.X - r, rhombMid.Y), + new Point(rhombMid.X, rhombMid.Y - r), + new Point(rhombMid.X + r, rhombMid.Y), + new Point(rhombMid.X, rhombMid.Y + r) + }; + List finalShape = new List(); + foreach (Point p in rect) + { + if (Math.Abs(p.X - rhombMid.X) + Math.Abs(p.Y - rhombMid.Y) <= r) + finalShape.Add(p); + } + foreach (Point p in rhombus) + { + if ((Math.Abs(p.X - rectMid.X) <= rw) && (Math.Abs(p.Y - rectMid.Y) <= rh)) + finalShape.Add(p); + } + for (int i = 0; i < 5; i++) + { + Point? p = Intersection(rhombus[i & 3], rhombus[(i + 1) & 3], rect[i & 3], rect[(i + 1) & 3]); + if (p.HasValue) finalShape.Add(p.Value); + p = Intersection(rhombus[i & 3], rhombus[(i + 1) & 3], rect[(i + 1) & 3], rect[(i + 2) & 3]); + if (p.HasValue) finalShape.Add(p.Value); + } + double mX = 0; + double my = 0; + foreach (Point p in finalShape) + { + mX += p.X; + my += p.Y; + } + mX /= finalShape.ToArray().Length; + my /= finalShape.ToArray().Length; + Color? fillColor = null; + if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); + _api.GUILib.DrawPolygon(finalShape.OrderBy(p => Math.Atan2(p.Y - my, p.X - mX)).ToArray(), color, fillColor); + } + private void DrawEccoTriangle(int x1, int y1, int x2, int y2, int x3, int y3, Color color, int fillAlpha = 63) + { + Color? fillColor = null; + Point[] triPoints = + { + new Point(x1, y1), + new Point(x2, y2), + new Point(x3, y3) + }; + if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); + _api.GUILib.DrawPolygon(triPoints, color, fillColor); + } + private void DrawBoxMWH(int x, int y, int w, int h, Color color, int fillAlpha = 63) + { + Color? fillColor = null; + if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); _api.GUILib.DrawRectangle(x - w, y - h, w << 1, h << 1, color, fillColor); } - void Print_Text(string message, int size, int x, int y, Color color) + private void DrawBox(int x, int y, int x2, int y2, Color color, int fillAlpha = 63) + { + Color? fillColor = null; + if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); + _api.GUILib.DrawBox(x, y, x2, y2, color, fillColor); + } + private void Print_Text(string message, int x, int y, Color color) { _api.GUILib.DrawText(x, y, message, color, null); } - void PutText(string message, int x, int y, int xl, int yl, int xh, int yh, Color bg, Color fg) + private void PutText(string message, int x, int y, int xl, int yl, int xh, int yh, Color bg, Color fg) { xl = Math.Max(xl, 0); - yl = Math.Max(xl, 0); + yl = Math.Max(yl, 0); xh = Math.Min(xh + 639, 639); yh = Math.Min(yh + 441, 441); xh -= 4 * message.Length; x = x - ((5 * (message.Length - 1)) / 2); - x = Math.Min(Math.Max(x, Math.Max(xl, 1)), Math.Min(xh, 638 - 4 * (int)message.Length)); - y = Math.Min(Math.Max(y - 3, Math.Max(yl, 1)), yh); + y -= 3; +// x = Math.Min(Math.Max(x, Math.Max(xl, 1)), Math.Min(xh, 638 - 4 * (int)message.Length)); +// y = Math.Min(Math.Max(y - 3, Math.Max(yl, 1)), yh); int[] xOffset = { -1, -1, -1, 0, 1, 1, 1, 0 }; int[] yOffset = { -1, 0, 1, 1, 1, 0, -1, -1 }; for (int i = 0; i < 8; i++) - Print_Text(message, message.Length, x + xOffset[i], y + yOffset[i], bg); - Print_Text(message, message.Length, x, y, fg); + Print_Text(message, x + xOffset[i], y + yOffset[i], bg); + Print_Text(message, x, y, fg); } - - - void EccoDraw3D() + private void TickerText(string message, Color? fg = null) { - int ScreenX = (_api.MemLib.ReadS32(0xFFD5E0) >> 0xC); - int ScreenY = (_api.MemLib.ReadS32(0xFFD5E8) >> 0xC); - int ScreenZ = (_api.MemLib.ReadS32(0xFFD5E4) >> 0xB); + if (_dumpMap == 0) + _api.GUILib.Text(1, _tickerY, message, fg); + _tickerY += 16; + } + private void EccoDraw3D() + { + int CamX = (_api.MemLib.ReadS32(0xFFD5E0) >> 0xC) - _left; + int CamY = (_api.MemLib.ReadS32(0xFFD5E8) >> 0xC) + _top; + int CamZ = (_api.MemLib.ReadS32(0xFFD5E4) >> 0xC) + _top; uint curObj = _api.MemLib.ReadU24(0xFFD4C1); while (curObj != 0) { int Xpos = (_api.MemLib.ReadS32(curObj + 0x6) >> 0xC); int Ypos = (_api.MemLib.ReadS32(curObj + 0xE) >> 0xC); - int Zpos = (_api.MemLib.ReadS32(curObj + 0xA) >> 0xB); - int Y = 224 - (Zpos - ScreenZ); - int X = (Xpos - ScreenX) + 0xA0; + int Zpos = (_api.MemLib.ReadS32(curObj + 0xA) >> 0xC); + int Xmid = 160 + (Xpos - CamX); + int Ymid = 112 - (Ypos - CamY); + int Zmid = _top + 112 - (Zpos - CamZ); uint type = _api.MemLib.ReadU32(curObj + 0x5A); - short height, width; - int display = 0; - if ((type == 0xD817E) || (type == 0xD4AB8)) + int width, height, depth = height = width = 0; + if (type == 0xD4AB8) // 3D poison Bubble { - Y = 113 - (Ypos - ScreenY); - height = 0x10; - if (_api.MemLib.ReadU32(0xFFB166) < 0x1800) height = 0x8; - short radius = 31; - if (type == 0xD4AB8) - { - radius = 7; - height = 0x20; - } + depth = 0x10; + int radius = 8; width = radius; - DrawEccoOct(X, Y, radius, Color.Lime, 0); - display = 1; + DrawEccoOct(Xmid, Ymid, radius, Color.Lime); + DrawBoxMWH(Xmid, Zmid, width, depth, Color.Blue); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Lime, 0); + DrawBoxMWH(Xmid, Zmid, 1, 1, Color.Blue, 0); + } + else if (type == 0xD817E)// 3D Ring + { + depth = 8; + if (_api.MemLib.ReadU32(0xFFB166) < 0x1800) depth = 4; + int radius = 32; + width = radius; + DrawEccoOct(Xmid, Ymid, radius, (_api.MemLib.ReadS16(curObj + 0x62) == 0) ? Color.Orange : Color.Gray); + DrawBoxMWH(Xmid, Zmid, width, depth, Color.Red); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Orange, 0); + DrawBoxMWH(Xmid, Zmid, 1, 1, Color.Red, 0); + TickerText($"{_api.MemLib.ReadS32(curObj + 0x6) / 4096.0:0.######}:{_api.MemLib.ReadS32(curObj + 0xE) / 4096.0:0.######}:{_api.MemLib.ReadS32(curObj + 0xA) / 2048.0:0.######}:{_api.MemLib.ReadByte(curObj + 0x72)}",Color.Lime); + } + else if (type == 0xD49CC) // Vines collisions are based on draw position, which is a fucking pain in the ass to calculate + { + int Xvel = (_api.MemLib.ReadS32(curObj + 0x3A) - _api.MemLib.ReadS32(curObj + 0x6)); + int Zvel = (_api.MemLib.ReadS32(curObj + 0x3E) - _api.MemLib.ReadS32(curObj + 0xA)); + int dx = _api.MemLib.ReadS32(0xFFD5E0) - _api.MemLib.ReadS32(0xFFD5C8) >> 3; + int dy = _api.MemLib.ReadS32(0xFFD5E8) - _api.MemLib.ReadS32(0xFFD600) >> 3; + int dz = _api.MemLib.ReadS32(0xFFD5E4) - _api.MemLib.ReadS32(0xFFD5CC); + var chargeCount = _api.MemLib.ReadByte(0xFFB19B); + if (chargeCount == 0) + { + dz >>= 2; + } + else if ((chargeCount > 0x20) || (chargeCount <= 0x10)) + { + dz >>= 3; + } + else if (chargeCount > 0x10) + { + dz >>= 4; + } + if (_api.MemLib.ReadByte(curObj + 0x64) == 0) + { + Xvel >>= 0xA; + Zvel >>= 9; + } + else + { + Xvel >>= 9; + Zvel >>= 0xA; + } + Xvel += _api.MemLib.ReadS32(curObj + 0x2E); + Zvel += _api.MemLib.ReadS32(curObj + 0x32); + Zpos = (_api.MemLib.ReadS32(curObj + 0x26) + dz - _api.MemLib.ReadS32(0xFFD5E4)) >> 0xB; + if ((Zpos < 0x600) && (Zpos > 0)) + { + Zpos += 0x20; + int Xcur, Xmax, Ycur, Ymax; + int Zpos2 = (_api.MemLib.ReadS32(curObj + 0xA) + Zvel + dz - _api.MemLib.ReadS32(0xFFD5E4)) >> 0xB; + Zpos2 = Math.Max(Zpos2 + 0x20, 1); + if (_api.MemLib.ReadS16(curObj + 0x62) != 0) + { + Xmid = _api.MemLib.ReadS32(curObj + 0x6) + dx + Xvel - _api.MemLib.ReadS32(0xFFD5E0); + if (Math.Abs(Xmid) > 0x400000) + continue; + Xpos = _api.MemLib.ReadS32(curObj + 0x22) + dx - _api.MemLib.ReadS32(0xFFD5E0); + if (Math.Abs(Xpos) > 0x400000) + continue; + Xcur = (Xmid << 2) / Zpos2 + (Xmid >> 5) + 0xA000 + (Xmid >> 5); + Xmax = (Xpos << 2) / Zpos + (Xpos >> 5) + 0xA000 + (Xpos >> 5); + } + else + { + Xcur = 0; + Xmax = 256; + } + Ymid = _api.MemLib.ReadS32(0xFFD5E8) + dy - _api.MemLib.ReadS32(curObj + 0xE); + Ycur = ((Ymid << 3) / Zpos2) + 0x6000; + Ypos = _api.MemLib.ReadS32(0xFFD5E8) + dy - _api.MemLib.ReadS32(curObj + 0x2A); + Ymax = ((Ypos << 3) / Zpos) + 0x6000; + dx = Xmax - Xcur; + dy = Ymax - Ycur; + int asindx = Math.Abs(dx >> 6) & 0xFFFF; + int asindy = Math.Abs(dy >> 6) & 0xFFFF; + int ang; + if (asindx == asindy) + { + if (dx > 0) + { + if (dy > 0) + { + ang = 0x20; + } + else + { + ang = 0xE0; + } + } + else + { + if (dy > 0) + { + ang = 0x60; + } + else + { + ang = 0xA0; + } + } + } + else + { + if (asindx > asindy) + { + asindy <<= 5; + asindy += asindx - 1; + asindy &= 0xFFFF; + asindy /= asindx; + } + else + { + asindx <<= 5; + asindx += asindy - 1; + asindx &= 0xFFFF; + asindx /= asindy; + asindy = 0x40 - asindx; + } + if (dx > 0) + { + if (dy > 0) + { + ang = asindy; + } + else + { + ang = 0xff - asindy; + } + } + else + { + if (dy > 0) + { + ang = 0x7f - asindy; + } + else + { + ang = 0x81 + asindy; + } + } + } + Xcur += _api.MemLib.ReadS8(0x2CC8 + ang) << 6; + Ycur += _api.MemLib.ReadS8(0x2BC8 + ang) << 6; + var dSml = Math.Abs(dx); + var dBig = Math.Abs(dy); + if (dBig < dSml) + { + dSml ^= dBig; + dBig ^= dSml; + dSml ^= dBig; + } + int OctRad = (dBig + (dSml >> 1) - (dSml >> 3)); + int i = Math.Max(((OctRad >> 8) + 0x1F) >> 5, 1); + dx /= i; + dy /= i; + + Zmid = (_api.MemLib.ReadS32(curObj + 0xA) + _api.MemLib.ReadS32(curObj + 0x26)) >> 1; + Zmid >>= 0xC; + Zmid = 112 + _top - (Zmid - CamZ); + do + { + i--; + DrawEccoRhomb((Xcur >> 8) + _left, (Ycur >> 8) + _top, 8, Color.Lime); + DrawBoxMWH((Xcur >> 8) + _left, Zmid, 8, 0x10, Color.Blue); + Xcur += dx; + Ycur += dy; + } while (i >= 0); + DrawBoxMWH((_api.MemLib.ReadS32(0xFFB1AA) >> 8) + _left, (_api.MemLib.ReadS32(0xFFB1AE) >> 8) + _top, 1, 1, Color.Lime, 0); + } + } + else if ((type == 0xD3B40) || (type == 0xD3DB2)) // 3D Shark and Jellyfish + { + width = (_api.MemLib.ReadS32(curObj + 0x12) >> 0xC); + height = (_api.MemLib.ReadS32(curObj + 0x1A) >> 0xC); + depth = (_api.MemLib.ReadS32(curObj + 0x16) >> 0xC); + DrawBoxMWH(Xmid, Ymid, width, height, Color.Lime); + DrawBoxMWH(Xmid, Zmid, width, depth, Color.Blue); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Lime, 0); + DrawBoxMWH(Xmid, Zmid, 1, 1, Color.Blue, 0); + } + else if ((type == 0xD4028) || (type == 0xD4DBA)) // 3D Eagle and 3D Shell + { + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Lime, 0); + DrawBoxMWH(Xmid, Zmid, 1, 1, Color.Blue, 0); + } + else if (type == 0xD4432) // 3D Sonar Blast + { + DrawEccoOct(Xmid, Ymid, 48, Color.Orange); + DrawEccoOct(Xmid, Ymid, 32, Color.Lime); + DrawBoxMWH(Xmid, Zmid, 32, 32, Color.Blue); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Lime, 0); + DrawBoxMWH(Xmid, Zmid, 1, 1, Color.Blue, 0); + } + else if (type == 0xD463A) // 3D Homing Bubble + { + DrawEccoOct(Xmid, Ymid, 48, Color.Orange); + DrawEccoOct(Xmid, Ymid, 32, Color.Lime); + DrawBoxMWH(Xmid, Zmid, 32, 32, Color.Blue); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Lime, 0); + DrawBoxMWH(Xmid, Zmid, 1, 1, Color.Blue, 0); + } + else if ((type == 0xD37CE) || (type == 0xD4214) || (type == 0xD3808)) // bubbles, splashes, gfx sprites + { + width = height = depth = 0; } else { - width = height = 1; - if (curObj == 0xFFB134) display = 3; - } - if ((display & 1) != 0) - { - Y = 224 - (Zpos - ScreenZ); - DrawBoxMWH(X, Y, width, height, Color.Blue, 0); - } - if ((display & 2) != 0) - { - Y = 113 - (Ypos - ScreenY); - DrawBoxMWH(X, Y, width, height, Color.Lime, 0); + if (curObj != 0xFFB134) + { + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Lime, 0); + DrawBoxMWH(Xmid, Zmid, 1, 1, Color.Blue, 0); + PutText(type.ToString("X8"), Xmid, Ymid - 4, 1, 1, -1, -9, Color.White, Color.Blue); + PutText(curObj.ToString("X8"), Xmid, Ymid + 4, 1, 9, -1, -1, Color.White, Color.Blue); + } + else + { + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Orange); + DrawBoxMWH(Xmid, Zmid, 1, 1, Color.Red); + } } curObj = _api.MemLib.ReadU24(curObj+1); } } - void EccoDrawBoxes() + private void EccoDrawBoxes() { // CamX-=8; int Width2, Height2; @@ -131,59 +522,74 @@ namespace BizHawk.Client.EmuHawk i++; off += 448; } color = Color.FromArgb(j >> 2, j >> 2, j >> 2); - _api.GUILib.DrawLine(128, j - off, 144, j - off, color); + _api.GUILib.DrawLine(_left - 32, j - off, _left - 17, j - off, color); + } + for (int j = 0; j < HP; j += 8) + { + color = Color.FromArgb(Math.Max(0x38 - (j >> 3),0), 0, Math.Min(j >> 1,255)); + _api.GUILib.DrawRectangle(_left - 16, j, 15, 7, color, color); } - for (i = 0; i < 16; i++) - for (int j = 0; j < Math.Min(HP, 448); j++) - { - color = Color.FromArgb(0, 0, (j>>1 & 0xF0)); - _api.GUILib.DrawPixel(144 + i, j, color); - } //Asterite - uint curObj = _api.MemLib.ReadU24(0xFFCFC9); + uint type = _api.MemLib.ReadU32(0xFFD440); + uint curObj = 0; int Xpos, Xpos2, Ypos, Ypos2, Xmid, Ymid, X, X2, Y, Y2; - Xmid = 0; - Ymid = 0; - while (curObj != 0) + Xpos = Ypos = Xpos2 = Ypos2 = Xmid = Ymid = X = X2 = Y = Y2 = 0; + if (type == 0xB119A) { - if (_api.MemLib.ReadU32(curObj + 8) != 0) + curObj = _api.MemLib.ReadU24(_api.MemLib.ReadU24(0xFFD429)+5); + while (curObj != 0) { Xpos = _api.MemLib.ReadS16(curObj + 0x3C); - Xpos2= _api.MemLib.ReadS16(curObj + 0x24); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x24); Ypos = _api.MemLib.ReadS16(curObj + 0x40); - Ypos2= _api.MemLib.ReadS16(curObj + 0x28); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x28); Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid = (Xpos + Xpos2) >> 1; Ymid = (Ypos + Ypos2) >> 1; if (_api.MemLib.ReadU8(curObj + 0x71) != 0) { - DrawEccoOct(Xpos, Ypos, 40, Color.FromArgb(255, 192, 0), 0x7F); - DrawEccoOct(Xpos2, Ypos2, 40, Color.FromArgb(255, 192, 0), 0x7F); + DrawEccoOct(Xpos, Ypos, 48, Color.Blue, 16); + DrawEccoOct(Xpos2, Ypos2, 48, Color.Blue, 16); + } + curObj = _api.MemLib.ReadU24(curObj + 5); + } + if ((_api.MemLib.ReadU8(0xFFA7D0) == 30)) + { + curObj = _api.MemLib.ReadU24(0xFFD425); + if ((curObj != 0) && (_api.MemLib.ReadU32(curObj + 8) != 0)) + { + Xpos = _api.MemLib.ReadS16(curObj + 0x1C) - _camX; + Ypos = _api.MemLib.ReadS16(curObj + 0x20) - _camY; + DrawEccoOct(Xpos, Ypos, 20, Color.Orange); } } - else - { - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; - } - Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(0, Xmid-16), 605), Math.Min(Math.Max(0, Ymid-5), 424), Color.Lime); - Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(2, Xmid-14), 607), Math.Min(Math.Max(2, Ymid-3), 426), Color.Lime); - Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(0, Xmid-16), 605), Math.Min(Math.Max(2, Ymid-3), 426), Color.Lime); - Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(2, Xmid-14), 607), Math.Min(Math.Max(0, Ymid-5), 424), Color.Lime); - Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(1, Xmid-15), 606), Math.Min(Math.Max(1, Ymid-4), 425), Color.Blue); - curObj = _api.MemLib.ReadU24(curObj+1); } - uint curlev = _api.MemLib.ReadU8(0xFFA7E0); - if ((_api.MemLib.ReadU8(0xFFA7D0) == 30)) + else if (type == 0xB2CB8) { - curObj = _api.MemLib.ReadU24(0xFFD425); - if ((curObj != 0) && (_api.MemLib.ReadU32(curObj + 8) != 0)) + curObj = _api.MemLib.ReadU24(_api.MemLib.ReadU24(0xFFD429) + 5); + while (curObj != 0) { - Xpos = _api.MemLib.ReadS16(curObj + 0x1C) - _camX; - Ypos = _api.MemLib.ReadS16(curObj + 0x20) - _camY; - DrawEccoOct(Xpos, Ypos, 20, Color.FromArgb(255, 192, 0)); + Xpos = _api.MemLib.ReadS16(curObj + 0x3C); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x24); + Ypos = _api.MemLib.ReadS16(curObj + 0x40); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x28); + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid = (Xpos + Xpos2) >> 1; + Ymid = (Ypos + Ypos2) >> 1; + if (_api.MemLib.ReadU8(curObj + 0x71) != 0) + { + if (_api.MemLib.ReadByte(0xFFA7D0) != 0x1F) + { + DrawEccoOct(Xpos, Ypos, 40, Color.Lime); + DrawEccoOct(Xpos2, Ypos2, 40, Color.Lime); + } + DrawEccoOct(Xpos, Ypos, 48, Color.Blue, 16); + DrawEccoOct(Xpos2, Ypos2, 48, Color.Blue, 16); + } + curObj = _api.MemLib.ReadU24(curObj + 5); } } //aqua tubes @@ -199,254 +605,408 @@ namespace BizHawk.Client.EmuHawk Xmid = (Xpos + Xpos2) >> 1; Ymid = (Ypos + Ypos2) >> 1; // displayed = false; - uint type = _api.MemLib.ReadU8(curObj + 0x7E); - int yoff = 0; + type = _api.MemLib.ReadU8(curObj + 0x7E); switch (type) { - /* case 0x11: - Xpos2 = Xmid; - Xmid = (Xpos + Xpos2) >> 1; - break; - case 0x12: - Xpos = Xmid; - Xmid = (Xpos + Xpos2) >> 1; - break; - case 0x13: - Ypos = Ymid; - Ymid = (Ypos + Ypos2) >> 1; - break; - case 0x14: - Ypos2 = Ymid; - Ymid = (Ypos + Ypos2) >> 1; - break;*/ case 0x15: - for (int TempX = 0; TempX <= Xmid-Xpos; TempX++, yoff++) - _api.GUILib.DrawPixel(Xpos2 - TempX, Ymid + yoff, Color.FromArgb(127, 0, 255)); - for (int TempX = Math.Min(Math.Max(0, Xmid), 320); TempX <= Math.Min(Math.Max(8, Xpos2), 327); TempX++) - _api.GUILib.DrawPixel(TempX, Ymid, Color.FromArgb(127, 0, 255)); - for (uint TempX = (uint)Math.Min(Math.Max(0, Ymid), 223); TempX <= Math.Min(Math.Max(0, Ypos2), 223); TempX++) - _api.GUILib.DrawPixel(Xmid, (int)TempX, Color.FromArgb(127, 0, 255)); - break; case 0x18: case 0x19: - for (int TempX = 0; TempX <= Ymid-Ypos; TempX++) - { - _api.GUILib.DrawPixel(Xmid + yoff, Ypos2-TempX, Color.FromArgb(127, 0, 255)); - if ((TempX & 1) != 0) yoff++; - } + DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos2, Xpos2, Ymid, Color.Purple); break; case 0x1A: - for (int TempX = 0; TempX <= Xmid-Xpos; TempX++, yoff++) - _api.GUILib.DrawPixel(Xpos + TempX, Ymid + yoff, Color.FromArgb(127, 0, 255)); - for (int TempX = Math.Min(Math.Max(0, Xpos), 320); TempX <= Math.Min(Math.Max(8, Xmid), 327); TempX++) - _api.GUILib.DrawPixel(TempX, Ymid, Color.FromArgb(127, 0, 255)); - for (uint TempX = (uint)Math.Min(Math.Max(0, Ymid), 223); TempX <= Math.Min(Math.Max(0, Ypos2), 223); TempX++) - _api.GUILib.DrawPixel(Xmid, (int)TempX, Color.FromArgb(127, 0, 255)); - break; case 0x1D: - for (int TempX = 0; TempX <= Ymid-Ypos; TempX++) - { - _api.GUILib.DrawPixel(Xmid - yoff, Ypos2 - TempX, Color.FromArgb(127, 0, 255)); - if ((TempX & 1) != 0) yoff++; - } - break; - case 0x1F: - for (int TempX = 0; TempX <= Xmid-Xpos; TempX++, yoff++) - _api.GUILib.DrawPixel(Xpos + TempX, Ymid - yoff, Color.FromArgb(127, 0, 255)); - for (int TempX = Math.Min(Math.Max(0, Xpos), 320); TempX <= Math.Min(Math.Max(8, Xmid), 327); TempX++) - _api.GUILib.DrawPixel(TempX, Ymid, Color.FromArgb(127, 0, 255)); - for (uint TempX = (uint)Math.Min(Math.Max(0, Ypos), 223); TempX <= Math.Min(Math.Max(0, Ymid), 223); TempX++) - _api.GUILib.DrawPixel(Xmid, (int)TempX, Color.FromArgb(127, 0, 255)); - break; case 0x20: case 0x21: - for (int TempX = 0; TempX <= Xmid-Xpos; TempX++) - { - _api.GUILib.DrawPixel(Xpos + TempX, Ymid - yoff, Color.FromArgb(127, 0, 255)); - if ((TempX & 1) != 0) yoff++; - } + DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos2, Xpos, Ymid, Color.Purple); break; + case 0x1F: case 0x22: case 0x23: - for (int TempX = 0; TempX <= Ymid-Ypos; TempX++) - { - _api.GUILib.DrawPixel(Xmid - yoff, Ypos + TempX, Color.FromArgb(127, 0, 255)); - if ((TempX & 1) != 0) yoff++; - } + DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos, Xpos, Ymid, Color.Purple); break; case 0x24: - for (int TempX = 0; TempX <= Xmid-Xpos; TempX++, yoff++) - _api.GUILib.DrawPixel(Xpos2 - TempX, Ymid - yoff, Color.FromArgb(127, 0, 255)); - break; case 0x25: case 0x26: - for (int TempX = 0; TempX <= Xmid-Xpos; TempX++) - { - _api.GUILib.DrawPixel(Xpos2 - TempX, Ymid - yoff, Color.FromArgb(127, 0, 255)); - if ((TempX & 1) != 0) yoff++; - } - break; case 0x27: case 0x28: - for (int TempX = 0; TempX <= Ymid-Ypos; TempX++) - { - _api.GUILib.DrawPixel(Xmid + yoff, Ypos + TempX, Color.FromArgb(127, 0, 255)); - if ((TempX & 1) != 0) yoff++; - } + DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos, Xpos2, Ymid, Color.Purple); break; case 0x2B: - _api.GUILib.DrawLine(Xpos, Ymid, Xpos2, Ymid, Color.FromArgb(127, 0, 255)); - for (int TempX = 0; TempX <= Ymid - Ypos; TempX++) - { - _api.GUILib.DrawPixel(Xpos + yoff, Ymid - TempX, Color.FromArgb(127, 0, 255)); - _api.GUILib.DrawPixel(Xpos2 - yoff, Ymid - TempX, Color.FromArgb(127, 0, 255)); - if ((TempX & 1) != 0) yoff++; - } - yoff = Xmid - (Xpos + yoff); - _api.GUILib.DrawLine(Xmid - yoff, Ypos, Xmid + yoff, Ypos, Color.FromArgb(127, 0, 255)); + Point[] trapPoints = + { + new Point(Xpos, Ymid), + new Point(Xpos + (Ymid - Ypos >> 1), Ypos), + new Point(Xpos2 - (Ymid - Ypos >> 1), Ypos), + new Point(Xpos2, Ymid) + }; + _api.GUILib.DrawPolygon(trapPoints, Color.Purple, Color.FromArgb(63, Color.Purple)); break; default: - _api.GUILib.DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(255, 127, 0, 255)); + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Purple); + if (type != 0x10) + PutText(type.ToString("X2"), Xmid, Ymid, 1, 1, -1, -1, Color.Red, Color.Blue); break; } - // if (!displayed) - if (type != 0x10) - { - uint temp = _api.MemLib.ReadU8(curObj + 0x7E); - Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(0, Xmid-3), 628), Math.Min(Math.Max(0, Ymid-5), 424), Color.Red); - Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(2, Xmid-1), 630), Math.Min(Math.Max(2, Ymid-3), 426), Color.Red); - Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(0, Xmid-3), 628), Math.Min(Math.Max(2, Ymid-3), 426), Color.Red); - Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(2, Xmid-1), 630), Math.Min(Math.Max(0, Ymid-5), 424), Color.Red); - Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(1, Xmid-2), 629), Math.Min(Math.Max(1, Ymid-4), 425), Color.Blue); - } curObj = _api.MemLib.ReadU24(curObj+1); } //walls - bool displayed; curObj = _api.MemLib.ReadU24(0xFFCFC1); while (curObj != 0) { - + Xmid = _api.MemLib.ReadS16(curObj + 0x24); + Xmid = _api.MemLib.ReadS16(curObj + 0x28); Xpos = _api.MemLib.ReadS16(curObj + 0x2C); Xpos2= _api.MemLib.ReadS16(curObj + 0x34); Ypos = _api.MemLib.ReadS16(curObj + 0x30); Ypos2= _api.MemLib.ReadS16(curObj + 0x38); Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; - Xmid = (Xpos + Xpos2) >> 1; - Ymid = (Ypos + Ypos2) >> 1; - displayed = false; - uint type = _api.MemLib.ReadU8(curObj + 0x7E); - int yoff = 0; - switch (type) + Xmid -= _camX; Ymid -= _camY; + int colltype = _api.MemLib.ReadS8(curObj + 0x7E); + switch (colltype) { + case 0x10: + case 0x2D: + case 0x2E: + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); + break; case 0x11: - Xpos2 = Xmid; Xmid = (Xpos + Xpos2) >> 1; + Xpos2 = Xmid; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Yellow)); + _api.GUILib.DrawLine(Xpos2, Ypos, Xpos2, Ypos2, Color.PowderBlue); break; case 0x12: - Xpos = Xmid; Xmid = (Xpos + Xpos2) >> 1; + Xpos = Xmid; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Yellow)); + _api.GUILib.DrawLine(Xpos, Ypos, Xpos, Ypos2, Color.PowderBlue); break; case 0x13: - Ypos = Ymid; Ymid = (Ypos + Ypos2) >> 1; + Ypos = Ymid; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Yellow)); + _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos, Color.PowderBlue); break; case 0x14: - Ypos2 = Ymid; Ymid = (Ypos + Ypos2) >> 1; + Ypos2 = Ymid; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Yellow)); + _api.GUILib.DrawLine(Xpos, Ypos2, Xpos2, Ypos2, Color.PowderBlue); break; case 0x15: case 0x16: case 0x17: case 0x18: case 0x19: - _api.GUILib.DrawLine(Xmid, Ypos2, Xpos2, Ymid, Color.White); - _api.GUILib.DrawLine(Xmid, Ypos2, Xmid, Ymid, Color.FromArgb(127,Color.White)); - _api.GUILib.DrawLine(Xmid, Ymid, Xpos2, Ymid, Color.FromArgb(127, Color.White)); - displayed = true; + Xmid = (Xpos + Xpos2) >> 1; + Ymid = (Ypos + Ypos2) >> 1; + DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos2, Xpos2, Ymid, Color.FromArgb(63, Color.Yellow)); + _api.GUILib.DrawLine(Xmid, Ypos2, Xpos2, Ymid, Color.PowderBlue); break; case 0x1A: case 0x1B: case 0x1C: case 0x1D: case 0x1E: - _api.GUILib.DrawLine(Xpos, Ymid, Xmid, Ypos2, Color.White); - _api.GUILib.DrawLine(Xmid, Ymid, Xmid, Ypos2, Color.FromArgb(127, Color.White)); - _api.GUILib.DrawLine(Xpos, Ymid, Xmid, Ymid, Color.FromArgb(127, Color.White)); - displayed = true; + Xmid = (Xpos + Xpos2) >> 1; + Ymid = (Ypos + Ypos2) >> 1; + DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos2, Xpos, Ymid, Color.FromArgb(63, Color.Yellow)); + _api.GUILib.DrawLine(Xpos, Ymid, Xmid, Ypos2, Color.PowderBlue); break; case 0x1F: case 0x20: case 0x21: case 0x22: case 0x23: - _api.GUILib.DrawLine(Xpos, Ymid, Xmid, Ypos, Color.White); - _api.GUILib.DrawLine(Xmid, Ymid, Xmid, Ypos, Color.FromArgb(127, Color.White)); - _api.GUILib.DrawLine(Xpos, Ymid, Xmid, Ymid, Color.FromArgb(127, Color.White)); - displayed = true; + Xmid = (Xpos + Xpos2) >> 1; + Ymid = (Ypos + Ypos2) >> 1; + DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos, Xpos, Ymid, Color.FromArgb(63,Color.Yellow)); + _api.GUILib.DrawLine(Xpos, Ymid, Xmid, Ypos, Color.PowderBlue); break; case 0x24: case 0x25: case 0x26: case 0x27: case 0x28: - _api.GUILib.DrawLine(Xmid, Ypos, Xpos2, Ymid, Color.White); - _api.GUILib.DrawLine(Xmid, Ypos, Xmid, Ymid, Color.FromArgb(127, Color.White)); - _api.GUILib.DrawLine(Xmid, Ymid, Xpos2, Ymid, Color.FromArgb(127, Color.White)); - displayed = true; + Xmid = (Xpos + Xpos2) >> 1; + Ymid = (Ypos + Ypos2) >> 1; + DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos, Xpos2, Ymid, Color.FromArgb(63,Color.Yellow)); + _api.GUILib.DrawLine(Xmid, Ypos, Xpos2, Ymid, Color.PowderBlue); + break; + case 0x29: + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Black)); + _api.GUILib.DrawLine(Xpos , Ypos, Xpos , Ypos2, Color.Black); + _api.GUILib.DrawLine(Xpos2, Ypos, Xpos2, Ypos2, Color.Black); + break; + case 0x2A: + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Black)); + _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos, Color.Black); + _api.GUILib.DrawLine(Xpos, Ypos2, Xpos2, Ypos2, Color.Black); break; case 0x2B: - _api.GUILib.DrawLine(Xpos, Ymid, Xpos2, Ymid, Color.FromArgb(127, Color.White)); - for (int TempX = 0; TempX <= Ymid-Ypos; TempX++) + Xmid = (Xpos + Xpos2) >> 1; + Ymid = (Ypos + Ypos2) >> 1; + Point[] trapPoints = { - _api.GUILib.DrawPixel(Xpos + yoff, Ymid - TempX, Color.White); - _api.GUILib.DrawPixel(Xpos2 - yoff, Ymid - TempX, Color.White); - if ((TempX & 1) != 0) yoff++; - } - yoff = Xmid - (Xpos + yoff); - _api.GUILib.DrawLine(Xmid - yoff, Ypos, Xmid + yoff, Ypos); - displayed = true; + new Point(Xpos, Ymid), + new Point(Xpos + (Ymid - Ypos >> 1), Ypos), + new Point(Xpos2 - (Ymid - Ypos >> 1), Ypos), + new Point(Xpos2, Ymid) + }; + _api.GUILib.DrawPolygon(trapPoints, Color.PowderBlue, Color.FromArgb(63, Color.PowderBlue)); + //_api.GUILib.DrawLine(Xpos, Ymid, Xpos2, Ymid, Color.Yellow); break; default: - if (type != 0x10) - { - var temp = _api.MemLib.ReadU8(curObj + 0x7E); - Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(0, Xmid-3), 628), Math.Min(Math.Max(0, Ymid-5), 424), Color.Red); - Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(2, Xmid-1), 630), Math.Min(Math.Max(2, Ymid-3), 426), Color.Red); - Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(0, Xmid-3), 628), Math.Min(Math.Max(2, Ymid-3), 426), Color.Red); - Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(2, Xmid-1), 630), Math.Min(Math.Max(0, Ymid-5), 424), Color.Red); - Print_Text(temp.ToString("%02X"), 2, Math.Min(Math.Max(1, Xmid-2), 629), Math.Min(Math.Max(1, Ymid-4), 425), Color.Lime); - } + DrawEccoRhomb_scaled(Xmid, Ymid, _api.MemLib.ReadS16(curObj + 0x44), _api.MemLib.ReadS16(curObj + 0x44), (colltype & 1), (colltype & 2) >> 1, (colltype & 4) >> 2, (colltype & 8) >> 3, Color.PowderBlue); break; } - if (!displayed) _api.GUILib.DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.White); curObj = _api.MemLib.ReadU24(curObj+1); } //inanimate objects curObj = _api.MemLib.ReadU24(0xFFCFBD); while (curObj != 0) { - if (_api.MemLib.ReadU8(curObj + 0x7E) > 0xF); + type = _api.MemLib.ReadU32(curObj + 0xC); + int colltype = _api.MemLib.ReadS8(curObj + 0x7E); + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + int Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54) + _api.MemLib.ReadS32(curObj + 0x5C)) >> 16) - _camX; + int Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58) + _api.MemLib.ReadS32(curObj + 0x60)) >> 16) - _camY; + Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; + Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + if (type == 0x9CE3A) //Remnant Stars { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2= _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2= _api.MemLib.ReadS16(curObj + 0x38); - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - _api.GUILib.DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); - } - Xpos += Xpos2; - Ypos += Ypos2; - Xpos >>= 1; - Ypos >>= 1; - Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(0, Xpos-16), 605), Math.Min(Math.Max(0, Ypos-5), 424), Color.Lime); - Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(2, Xpos-14), 607), Math.Min(Math.Max(2, Ypos-3), 426), Color.Lime); - Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(0, Xpos-16), 605), Math.Min(Math.Max(2, Ypos-3), 426), Color.Lime); - Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(2, Xpos-14), 607), Math.Min(Math.Max(0, Ypos-5), 424), Color.Lime); - Print_Text(curObj.ToString("X8"), 8, Math.Min(Math.Max(1, Xpos-15), 606), Math.Min(Math.Max(1, Ypos-4), 425), Color.Blue); - curObj = _api.MemLib.ReadU24(curObj+1); + uint subObj = _api.MemLib.ReadU24(curObj + 0x5); + uint anim = _api.MemLib.ReadU16(curObj + 0x6C); + if ((anim <= 7) && (subObj == 0xFFA9D4)) + { + DrawEccoRhomb(Xmid, Ymid, 96, Color.Red); + PutText($"{((7 - anim) * 4) - ((_api.MemLib.ReadByte(0xFFA7C9) & 3) - 4)}", Xmid, Ymid + 4, 1, 1, -1, -1, Color.Lime, Color.Blue); + } + } + else if ((type == 0x9CC06) || (type == 0x9CA10)) + { + Xvec = ((_api.MemLib.ReadS32(curObj + 0x24) + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((_api.MemLib.ReadS32(curObj + 0x28) + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + } + else if (type == 0x9B5D8) + { + Xvec = Xmid; + Yvec = Ymid; + } + else if (type == 0xC0152) // Vortex Future Vertical Gate + { + Xvec = _api.MemLib.ReadS16(curObj + 0x1C) - _camX; + Yvec = (_api.MemLib.ReadS32(curObj + 0x20) + _api.MemLib.ReadS32(curObj + 0x60) >> 16) - _camY; + _api.GUILib.DrawLine(Xmid, 0, Xmid, 448, Color.PowderBlue); + DrawBoxMWH(Xvec, Yvec, 1, 1, Color.Blue, 0); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + } + else if (type == 0xC3330) // City Of Forever Horizontal Gate Slave + { + Xvec = (_api.MemLib.ReadS32(curObj + 0x1C) + _api.MemLib.ReadS32(curObj + 0x5C) >> 16) - _camX; + Yvec = _api.MemLib.ReadS16(curObj + 0x20) - _camY; + DrawBoxMWH(Xvec, Yvec, 1, 1, Color.Blue, 0); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + } + else if (type == 0xC35B0) // City Of Forever Horizontal Gate Master + { + var mode = _api.MemLib.ReadByte(curObj + 0x15); + var tmpx = Xpos; + Xpos = _api.MemLib.ReadS32(curObj + 0x1C); + Xvec = (Xpos + _api.MemLib.ReadS32(curObj + 0x5C) >> 16) - _camX; + Xpos >>= 16; Xpos -= _camX; + Yvec = _api.MemLib.ReadS16(curObj + 0x20) - _camY; + if ((mode == 1) || (mode == 3)) + { + DrawEccoOct(Xpos, Yvec, 128, Color.Orange); + } + Xpos = tmpx; + DrawBoxMWH(Xvec, Yvec, 1, 1, Color.Blue, 0); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + } + else if (type == 0xC343A) // City Of Forever Vertical Gate + { + var mode = _api.MemLib.ReadByte(curObj + 0x15); + if ((mode == 1) || (mode == 3)) + { + DrawEccoOct(Xmid, Ymid, 128, Color.Orange); + } + Xvec = _api.MemLib.ReadS16(curObj + 0x1C) - _camX; + Yvec = (_api.MemLib.ReadS32(curObj + 0x20) + _api.MemLib.ReadS32(curObj + 0x60) >> 16) - _camY; + DrawBoxMWH(Xvec, Yvec, 1, 1, Color.Blue, 0); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + } + else if (type == 0xA579A) // Antigrav Ball + { + DrawEccoOct(Xmid, Ymid, _api.MemLib.ReadS16(curObj + 0x4C), (_api.MemLib.ReadU16(0xFFA7C8) & 7) == 7 ? Color.Blue : Color.Gray); + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue, 0); + Xpos = Ypos = Xpos2 = Ypos2 = _camX - 128; + } + else if (type == 0xDF4E2) // Moray Abyss Conch Shell + { + Xpos = _api.MemLib.ReadS16(curObj + 0x1C) - _camX; + Ypos = _api.MemLib.ReadS16(curObj + 0x20) - _camY; + DrawBox(Xpos - 96, 0 - _camY, Xpos + 96, _api.MemLib.ReadS16(0xFFA7AC) - _camY - 64, Color.Orange, 0); + var mode = _api.MemLib.ReadByte(curObj + 0x15); + var modeTimer = _api.MemLib.ReadS16(curObj + 0x6E); + var Xvel1 = _api.MemLib.ReadS32(curObj + 0x54) / 65536.0; + var Yvel1 = _api.MemLib.ReadS32(curObj + 0x58) / 65536.0; + var Xvel2 = _api.MemLib.ReadS32(curObj + 0x5C) / 65536.0; + var Yvel2 = _api.MemLib.ReadS32(curObj + 0x60) / 65536.0; + TickerText($"{mode}:{modeTimer}:{_api.MemLib.ReadS16(0xFFA7AC) - 64 - Ymid - _camY}", Color.Red); + TickerText($"{Xvel1:0.######}:{Yvel1:0.######}", Color.Red); + TickerText($"{Xvel2:0.######}:{Yvel2:0.######}", Color.Red); + TickerText($"{Xvel1 + Xvel2:0.######}:{Yvel1 + Yvel2:0.######}", Color.Red); + switch (mode) + { + case 0: + Xpos2 = Math.Abs(Xmid - Xpos); + if (Xpos2 > 0x48) + { + Xpos2 = (0x60 - Xpos2) << 1; + Ypos2 = Ymid + Xpos2; + } + else + { + Ypos2 = Ymid - (Xpos2 >> 1) + 0x60; + } + DrawBoxMWH(Xpos, Ypos2, 1, 1, Color.Gray, 0); + DrawBoxMWH(Xpos, 112 + _top, 72, 224, (modeTimer <= 1) ? Color.Orange : Color.Gray, 0); + break; + case 1: + DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Orange, 0); + Xpos2 = _api.MemLib.ReadS32(0xFFAA1A) - _api.MemLib.ReadS32(curObj + 0x24); + Ypos2 = _api.MemLib.ReadS32(0xFFAA1E) - _api.MemLib.ReadS32(curObj + 0x28); + var dSml = Math.Abs(Xpos2); + var dBig = Math.Abs(Ypos2); + if (dBig < dSml) + { + dSml ^= dBig; + dBig ^= dSml; + dSml ^= dBig; + } + var rad = (dBig + (dSml >> 1) - (dSml >> 3)) / 65536.0; + Xpos2 = (int)(Xpos2 * (256.0 / (rad+1))) >> 20; + Ypos2 = (int)(Ypos2 * (256.0 / (rad+1))) >> 20; + _api.GUILib.DrawLine(Xmid, Ymid, Xmid + Xpos2, Ymid + Ypos2, Color.Gray); + TickerText($"{Xpos2 / 512.0:0.######}:{Ypos2 / 512.0:0.######}", Color.Red); + break; + case 2: + TickerText($"{_api.MemLib.ReadS32(curObj + 0x4C) / 65536.0:0.######}:{_api.MemLib.ReadS32(curObj + 0x50) / 65536.0:0.######}", Color.Red); + break; + } + } + else if ((type == 0xC57A6) || (type == 0xDEE3C) || (type == 0xDF8A0) || (type == 0xDFA98) + || (type == 0xA0BE4) || (type == 0x9FEB2) || (type == 0xA5670) || (type == 0xAEC1A) + || (type == 0xA6C4A) || (type == 0xAB65A) || (type == 0x9F2EC)) { } + else + { + PutText($"{type:X5}:{_api.MemLib.ReadByte(curObj + 0x13)}", Xmid, Ymid - 4, 1, 1, -1, -9, Color.Lime, Color.Blue); + PutText(curObj.ToString("X6"), Xmid, Ymid + 4, 1, 9, -1, -1, Color.Lime, Color.Blue); + } + colltype = _api.MemLib.ReadS8(curObj + 0x7E); + switch (colltype) + { + case 0x10: + case 0x2D: + case 0x2E: + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); + break; + case 0x11: + Xmid = (Xpos + Xpos2) >> 1; + Xpos2 = Xmid; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); + break; + case 0x12: + Xmid = (Xpos + Xpos2) >> 1; + Xpos = Xmid; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); + break; + case 0x13: + Ymid = (Ypos + Ypos2) >> 1; + Ypos = Ymid; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); + break; + case 0x14: + Ymid = (Ypos + Ypos2) >> 1; + Ypos2 = Ymid; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); + break; + case 0x15: + case 0x16: + case 0x17: + case 0x18: + case 0x19: + Xmid = (Xpos + Xpos2) >> 1; + Ymid = (Ypos + Ypos2) >> 1; + DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos2, Xpos2, Ymid, Color.FromArgb(63, Color.Yellow)); + _api.GUILib.DrawLine(Xmid, Ypos2, Xpos2, Ymid, Color.PowderBlue); + break; + case 0x1A: + case 0x1B: + case 0x1C: + case 0x1D: + case 0x1E: + Xmid = (Xpos + Xpos2) >> 1; + Ymid = (Ypos + Ypos2) >> 1; + DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos2, Xpos, Ymid, Color.FromArgb(63, Color.Yellow)); + _api.GUILib.DrawLine(Xpos, Ymid, Xmid, Ypos2, Color.PowderBlue); + break; + case 0x1F: + case 0x20: + case 0x21: + case 0x22: + case 0x23: + Xmid = (Xpos + Xpos2) >> 1; + Ymid = (Ypos + Ypos2) >> 1; + DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos, Xpos, Ymid, Color.FromArgb(63, Color.Yellow)); + _api.GUILib.DrawLine(Xpos, Ymid, Xmid, Ypos, Color.PowderBlue); + break; + case 0x24: + case 0x25: + case 0x26: + case 0x27: + case 0x28: + Xmid = (Xpos + Xpos2) >> 1; + Ymid = (Ypos + Ypos2) >> 1; + DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos, Xpos2, Ymid, Color.FromArgb(63, Color.Yellow)); + _api.GUILib.DrawLine(Xmid, Ypos, Xpos2, Ymid, Color.PowderBlue); + break; + case 0x2A: + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Black)); + _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos, Color.Black); + _api.GUILib.DrawLine(Xpos, Ypos2, Xpos2, Ypos2, Color.Black); + break; + case 0x2B: + Xmid = (Xpos + Xpos2) >> 1; + Ymid = (Ypos + Ypos2) >> 1; + Point[] trapPoints = + { + new Point(Xpos, Ymid), + new Point(Xpos + (Ymid - Ypos >> 1), Ypos), + new Point(Xpos2 - (Ymid - Ypos >> 1), Ypos), + new Point(Xpos2, Ymid) + }; + _api.GUILib.DrawPolygon(trapPoints, Color.PowderBlue, Color.FromArgb(63, Color.PowderBlue)); + break; + case 0x2C: + break; + default: + DrawEccoRhomb_scaled(Xmid, Ymid, _api.MemLib.ReadS16(curObj + 0x44), _api.MemLib.ReadS16(curObj + 0x44), (colltype & 1), (colltype & 2) >> 1, (colltype & 4) >> 2, (colltype & 8) >> 3, Color.PowderBlue); + break; + } + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + curObj = _api.MemLib.ReadU24(curObj+1); } //animate objects if (_mode == Modes.Ecco2) @@ -455,78 +1015,1416 @@ namespace BizHawk.Client.EmuHawk curObj = _api.MemLib.ReadU24(0xFFD829); while (curObj != 0) { - uint type = 0; + type = 0; switch (_mode) { case Modes.Ecco2: - { - uint flags = _api.MemLib.ReadU16(curObj + 0x10); - //if ((flags & 0x2000) || !(flags & 2)); - type = _api.MemLib.ReadU32(curObj + 0xC); - if ((type == 0xBA52E) || (type == 0xBA66E)) { - uint Adelikat = curObj; - while (Adelikat != 0) + uint flags = _api.MemLib.ReadU16(curObj + 0x10); + int Xvec = 0; + int Yvec = 0; + //if ((flags & 0x2000) || !(flags & 2)); + HP = _api.MemLib.ReadS8(curObj + 0x7B); + type = _api.MemLib.ReadU32(curObj + 0xC); + if ((type == 0xA1FE6) || (type == 0xA208E) // Chain link creatures such as vortex worm, magic arm, etc + || (type == 0xA2288) || (type == 0xA27A4) || (type == 0xA2BB0) || (type == 0xA2C50)) { - Xpos = _api.MemLib.ReadS16(Adelikat + 0x24); - Ypos = _api.MemLib.ReadS16(Adelikat + 0x28); + uint subObj = curObj; + while (subObj != 0) + { + Xpos = _api.MemLib.ReadS32(subObj + 0x24); + Ypos = _api.MemLib.ReadS32(subObj + 0x28); + Xvec = ((Xpos + _api.MemLib.ReadS32(subObj + 0x54)) >> 16) - _camX; + Yvec = ((Ypos + _api.MemLib.ReadS32(subObj + 0x58)) >> 16) - _camY; + Xpos >>= 16; Ypos >>= 16; + Xpos -= _camX; + Ypos -= _camY; + if (_api.MemLib.ReadS16(subObj + 0x44) == _api.MemLib.ReadS16(subObj + 0x48)) + { + DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); + DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x44), Color.Cyan, 0); + } + else + { + DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); + DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x44), Color.Lime, 0); + DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); + DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x48), Color.Blue, 0); + } + DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); + subObj = _api.MemLib.ReadU24(subObj + 5); + } + if (HP > 2) + { + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + PutText($"{HP - 1}", Xmid, Ymid, 1, 1, -1, -9, Color.Blue, Color.Red); + } + } + else if ((type == 0xB7486) || (type == 0xB864E) //Chain link creatures such as eels and worms + || (type == 0xB8A64) || (type == 0xB8C1A) + || (type == 0xB904A) || (type == 0xB9728) || (type == 0xB9B6A) || (type == 0xBA52E) + || (type == 0xBA66E) || (type == 0xE0988) || (type == 0xA18E2) || (type == 0xE069A)) + { + uint subObj = curObj; + while (subObj != 0) + { + Xpos = _api.MemLib.ReadS32(subObj + 0x24); + Ypos = _api.MemLib.ReadS32(subObj + 0x28); + Xvec = ((Xpos + _api.MemLib.ReadS32(subObj + 0x54)) >> 16) - _camX; + Yvec = ((Ypos + _api.MemLib.ReadS32(subObj + 0x58)) >> 16) - _camY; + Xpos >>= 16; Ypos >>= 16; + Xpos -= _camX; + Ypos -= _camY; + if (_api.MemLib.ReadS16(subObj + 0x44) == _api.MemLib.ReadS16(subObj + 0x48)) + { + DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); + DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x44), Color.White, 0); + } + else + { + DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); + DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x44), Color.Lime, 0); + DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x48), Color.FromArgb(255, 0, 127)); + DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x48), Color.Magenta, 0); + } + DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); + if (type == 0xBA66E) + { + DrawEccoOct(Xpos, Ypos, 32, Color.Blue, 16); + if (subObj == curObj) + { + var mode = _api.MemLib.ReadByte(subObj + 0x15); + TickerText($"{_api.MemLib.ReadByte(subObj + 0x14)}:{mode}:{_api.MemLib.ReadByte(subObj + 0x70)}", Color.Red); + TickerText($"{_api.MemLib.ReadS32(subObj + 0x54) / 65536.0:0.######}:{_api.MemLib.ReadS32(subObj + 0x58) / 65536.0:0.######}", Color.Red); + TickerText($"{_api.MemLib.ReadS32(subObj + 0x4C) / 65536.0:0.######}:{_api.MemLib.ReadS32(subObj + 0x50) / 65536.0:0.######}", Color.Red); + switch (mode) + { + case 0: + case 2: + case 4: + Xpos2 = _api.MemLib.ReadS32(0xFFAA22) - _api.MemLib.ReadS32(subObj + 0x24); + Ypos2 = _api.MemLib.ReadS32(0xFFAA26) - _api.MemLib.ReadS32(subObj + 0x28); + var dSml = Math.Abs(Xpos2); + var dBig = Math.Abs(Ypos2); + if (dBig < dSml) + { + dSml ^= dBig; + dBig ^= dSml; + dSml ^= dBig; + } + var rad = (dBig + (dSml >> 1) - (dSml >> 3)) / 65536.0; + Xpos2 = (int)(Xpos2 * (256.0 / (rad + 1))) >> 20; + Ypos2 = (int)(Ypos2 * (256.0 / (rad + 1))) >> 20; + _api.GUILib.DrawLine(Xpos, Ypos, Xpos + Xpos2, Ypos + Ypos2, Color.Red); + break; + default: + break; + + } + } + } + else if ((type == 0xBA52E) && (subObj == _api.MemLib.ReadU24(curObj + 0x1D))) + { + DrawEccoOct(Xpos, Ypos, 32, (_api.MemLib.ReadByte(subObj + 0x70) == 0) ? Color.Blue : Color.Gray, 16); + var mode = _api.MemLib.ReadByte(curObj + 0x15); + TickerText($"{_api.MemLib.ReadByte(curObj + 0x14)}:{mode}:{_api.MemLib.ReadS16(curObj + 0x6E)}:{_api.MemLib.ReadByte(subObj + 0x70)}", Color.Red); + TickerText($"{_api.MemLib.ReadS32(subObj + 0x54) / 65536.0:0.######}:{_api.MemLib.ReadS32(subObj + 0x58) / 65536.0:0.######}", Color.Red); + TickerText($"{_api.MemLib.ReadS32(curObj + 0x4C) / 65536.0:0.######}:{_api.MemLib.ReadS32(curObj + 0x50) / 65536.0:0.######}", Color.Red); + } + else if (type == 0xE0988) + { + DrawEccoOct(Xpos, Ypos, 48, Color.FromArgb(64, Color.Blue), 16); + } + if (HP > 2) + { + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + PutText($"{HP - 1}", Xmid, Ymid, 1, 1, -1, -9, Color.Blue, Color.Red); + } + subObj = _api.MemLib.ReadU24(subObj + 5); + } + } + else if (type == 0xB7DF4) + { + Xpos = _api.MemLib.ReadS32(curObj + 0x24); + Ypos = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xpos + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ypos + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos >>= 16; Ypos >>= 16; Xpos -= _camX; Ypos -= _camY; - DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(Adelikat + 0x44), Color.Lime); - Adelikat = _api.MemLib.ReadU32(Adelikat + 4); + DrawEccoOct(Xpos, Ypos, 26, Color.PowderBlue); + DrawEccoOct(Xpos, Ypos, 26, Color.White); + DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xpos, Ypos, Xvec, Yvec); } - Xpos = _api.MemLib.ReadS16(curObj + 0x24); - Ypos = _api.MemLib.ReadS16(curObj + 0x28); - Xpos -= _camX; - Ypos -= _camY; - } - else if (type == 0xE47EE) - { - uint Adelikat = curObj; - while (Adelikat != 0) + else if (type == 0xE47EE) { - Xpos = _api.MemLib.ReadS16(Adelikat + 0x1C); - Ypos = _api.MemLib.ReadS16(Adelikat + 0x20); + uint subObj = _api.MemLib.ReadU24(curObj + 5); + while (subObj != 0) + { + Xpos = _api.MemLib.ReadS32(subObj + 0x1C); + Ypos = _api.MemLib.ReadS32(subObj + 0x20); + Xvec = ((Xpos + _api.MemLib.ReadS32(subObj + 0x54)) >> 16) - _camX; + Yvec = ((Ypos + _api.MemLib.ReadS32(subObj + 0x58)) >> 16) - _camY; + Xpos >>= 16; Ypos >>= 16; + Xpos -= _camX; + Ypos -= _camY; + DrawEccoOct(Xpos, Ypos, ((_api.MemLib.ReadS16(subObj + 0x2C) & 0xFFFF) >> 1) + 16, Color.White); + DrawEccoOct(Xpos, Ypos, ((_api.MemLib.ReadS16(subObj + 0x2C) & 0xFFFF) >> 1) + 16, Color.Yellow, 0); + DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); + subObj = _api.MemLib.ReadU24(subObj + 5); + } + } + else if (type == 0xDBE64) // Medusa Boss + { + uint subObj = curObj; + uint next; + do + { + next = _api.MemLib.ReadU24(subObj + 5); + if (next != 0) subObj = next; + } while (next != 0); + Xpos = _api.MemLib.ReadS16(subObj + 0x2C); + Xpos2 = _api.MemLib.ReadS16(subObj + 0x34); + Ypos = _api.MemLib.ReadS16(subObj + 0x30); + Ypos2 = _api.MemLib.ReadS16(subObj + 0x38); + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + DrawEccoOct(Xpos, Ypos, 32, Color.Red); + DrawEccoOct(Xpos2, Ypos2, 32, Color.Red); + Xpos = _api.MemLib.ReadS32(curObj + 0x24); + Ypos = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xpos + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ypos + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos >>= 16; Ypos >>= 16; Xpos -= _camX; Ypos -= _camY; - DrawEccoOct(Xpos, Ypos, (_api.MemLib.ReadS16(Adelikat + 0x2C) >> 1) + 16, Color.Lime); - Adelikat = _api.MemLib.ReadU32(Adelikat + 4); + var octOff = (int)(Math.Sqrt(2) * 60) >> 1; + Point[] hemiOctPoints = + { + new Point(Xpos - 60, Ypos), + new Point(Xpos - octOff, Ypos - octOff), + new Point(Xpos, Ypos - 60), + new Point(Xpos + octOff, Ypos - octOff), + new Point(Xpos + 60, Ypos) + }; + _api.GUILib.DrawPolygon(hemiOctPoints, Color.Cyan, Color.FromArgb(0x3F, Color.Cyan)); + for (int l = 0; l < 4; l++) + { + _api.GUILib.DrawLine(hemiOctPoints[l].X, hemiOctPoints[l].Y, hemiOctPoints[l + 1].X, hemiOctPoints[l + 1].Y, Color.Cyan); + } + DrawBoxMWH(Xpos, Ypos + 12, 52, 12, Color.Cyan); + DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); } - Xpos = _api.MemLib.ReadS16(curObj + 0x24); - Ypos = _api.MemLib.ReadS16(curObj + 0x28); - Xpos -= _camX; - Ypos -= _camY; + else if (type == 0xDCEE0) // Globe Holder boss + { + uint subObj; + var mode = _api.MemLib.ReadByte(curObj + 0x15); + if (mode < 4) + { + subObj = _api.MemLib.ReadU24(curObj + 9); + while (subObj != 0) + { + Xmid = _api.MemLib.ReadS32(subObj + 0x24); + Ymid = _api.MemLib.ReadS32(subObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(subObj + 0x54) + _api.MemLib.ReadS32(subObj + 0x5C)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(subObj + 0x58) + _api.MemLib.ReadS32(subObj + 0x60)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + DrawEccoOct(Xmid, Ymid, 12, Color.Orange); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + var next = _api.MemLib.ReadU24(subObj + 9); + if ((next == 0) && ((mode & 1) != 0)) + { + DrawEccoOct(Xmid, Ymid, _api.MemLib.ReadS16(subObj + 0x3C), Color.Orange); + } + subObj = _api.MemLib.ReadU24(subObj + 9); + } + subObj = _api.MemLib.ReadU24(curObj + 5); + while (subObj != 0) + { + Xmid = _api.MemLib.ReadS32(subObj + 0x24); + Ymid = _api.MemLib.ReadS32(subObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(subObj + 0x54) + _api.MemLib.ReadS32(subObj + 0x5C)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(subObj + 0x58) + _api.MemLib.ReadS32(subObj + 0x60)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + DrawEccoOct(Xmid, Ymid, 12, Color.Orange); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + var next = _api.MemLib.ReadU24(subObj + 5); + if ((next == 0) && ((mode & 2) != 0)) + { + DrawEccoOct(Xmid, Ymid, _api.MemLib.ReadS16(subObj + 0x3C), Color.Orange); + } + subObj = _api.MemLib.ReadU24(subObj + 5); + } + } + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + int Xtmp = _api.MemLib.ReadS32(curObj + 0x2C); + int Ytmp = _api.MemLib.ReadS32(curObj + 0x30); + int Xtmp2 = _api.MemLib.ReadS32(curObj + 0x34); + int Ytmp2 = _api.MemLib.ReadS32(curObj + 0x38); + Xpos = (Xtmp >> 16) - _camX; Xpos2 = (Xtmp2 >> 16) - _camX; + Ypos = (Ytmp >> 16) - _camY; Ypos2 = (Ytmp2 >> 16) - _camY; + Xvec = ((_api.MemLib.ReadS32(curObj + 0x24) + _api.MemLib.ReadS32(curObj + 0x54) + _api.MemLib.ReadS32(curObj + 0x5C)) >> 16) - _camX; + Yvec = ((_api.MemLib.ReadS32(curObj + 0x28) + +_api.MemLib.ReadS32(curObj + 0x58) + _api.MemLib.ReadS32(curObj + 0x60)) >> 16) - _camY; + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + if (mode < 7) + { + double overlap = 0; + DrawEccoOct(Xmid, Ymid, 0x5C, _api.MemLib.ReadByte(curObj + 0x7C) == 0 ? Color.Blue : Color.Gray); + DrawEccoOct(Xmid, Ymid, 0x5C, Color.Cyan, 0); + Xvec = (_api.MemLib.ReadS32(curObj + 0x54) + _api.MemLib.ReadS32(curObj + 0x5C)); + Yvec = (_api.MemLib.ReadS32(curObj + 0x58) + _api.MemLib.ReadS32(curObj + 0x60)); + subObj = _api.MemLib.ReadU24(curObj + 0x69); + if (subObj != 0) + { + Xpos = _api.MemLib.ReadS32(subObj + 0x2C); + Ypos = _api.MemLib.ReadS32(subObj + 0x30); + Xpos2 = _api.MemLib.ReadS32(subObj + 0x34); + Ypos2 = _api.MemLib.ReadS32(subObj + 0x38); + while ((Xtmp > Xpos) && (Xtmp2 < Xpos2) && (Ytmp > Ypos) && (Ytmp2 < Ypos2) && ((Xvec != 0) || (Yvec != 0))) + { + Xtmp += Xvec; Xtmp2 += Xvec; + Ytmp += Yvec; Ytmp2 += Yvec; + } + overlap = Math.Max(Math.Max(Xpos - Xtmp, Xtmp2 - Xpos2), Math.Max(Ypos - Ytmp, Ytmp2 - Ypos2)) / 65536.0; + Xpos >>= 16; Xpos2 >>= 16; + Ypos >>= 16; Ypos2 >>= 16; + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, (overlap >= 6) ? Color.Orange : Color.White, 0); + } + Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; + Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, (overlap >= 6) ? Color.Orange : Color.White, (overlap >= 6) ? 63 : 0); + if (mode < 4) + { + Xmid = _api.MemLib.ReadS16(curObj + 0x4C) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x50) - _camY; + if ((mode & 1) == 0) DrawEccoOct(Xmid, Ymid - 0xAE, 32, Color.Orange); + if ((mode & 2) == 0) DrawEccoOct(Xmid, Ymid + 0xAE, 32, Color.Orange); + } + TickerText($"{mode}:{_api.MemLib.ReadByte(curObj + 0x7F)}:{_api.MemLib.ReadByte(curObj + 0x6D)}:{_api.MemLib.ReadByte(curObj + 0x7C)}", Color.Red); + } + else if (mode == 8) + { + DrawEccoOct(Xmid - 16, Ymid - 16, 12, Color.Red); + } + } + else if (type == 0xE1BA2) // Vortex Queen Boss + { + var vulnCount = _api.MemLib.ReadByte(curObj + 0x7F); + var state = _api.MemLib.ReadByte(curObj + 0x7C); + var stateCounter = _api.MemLib.ReadU16(curObj + 0x6E); + var mode = _api.MemLib.ReadU16(curObj + 0x64); + var modeCounter = _api.MemLib.ReadU16(curObj + 0x66); + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x40); + Xvec = Xmid + _api.MemLib.ReadS32(curObj + 0x54); + Yvec = Ymid + _api.MemLib.ReadS32(curObj + 0x58); + Xvec >>= 16; Yvec >>= 16; + Xmid >>= 16; Ymid >>= 16; + Xvec -= _camX; Yvec -= _camY; + Xmid -= _camX; Ymid -= _camY; + if (mode < 5) + { + var octOff = (int)(80 * Math.Sqrt(2)) >> 1; + Point hexOff = Intersection(new Point(-80, 0), new Point(-octOff, -octOff), new Point(-80, -32), new Point(-octOff, -32)).Value; + Point[] roundedRect = { + new Point(Xmid - 80, Ymid), + new Point(Xmid + hexOff.X, Ymid - 32), + new Point(Xmid - hexOff.X, Ymid - 32), + new Point(Xmid + 80, Ymid), + new Point(Xmid - hexOff.X, Ymid + 32), + new Point(Xmid + hexOff.X, Ymid + 32) + }; + _api.GUILib.DrawPolygon(roundedRect, Color.Orange, Color.FromArgb(63, Color.Orange)); + } + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + TickerText($"{state:X2}:{stateCounter}:{mode}:{modeCounter}:{_api.MemLib.ReadByte(curObj + 0x70) & 0xF}", Color.Red); + var subObj = _api.MemLib.ReadU24(curObj + 0x5); + var tongueMode = mode; + mode = _api.MemLib.ReadByte(subObj + 0x15); + modeCounter = _api.MemLib.ReadU16(subObj + 0x6E); + Xmid = _api.MemLib.ReadS32(subObj + 0x24); + Ymid = _api.MemLib.ReadS32(subObj + 0x40); + Xvec = (Xmid + _api.MemLib.ReadS32(subObj + 0x5C) >> 16) - _camX; + Yvec = (Ymid + _api.MemLib.ReadS32(subObj + 0x60) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + Ymid -= 32; Yvec -= 32; + var levelHeight = _api.MemLib.ReadS16(0xFFA7AC) - _camY; + switch (mode) + { + case 0: + DrawBox(Xmid - 32, Ymid - ((state == 5) ? 0x60 : 0x70), Xmid + 32, Ymid - 16, Color.Red); + break; + case 2: + Ypos = _api.MemLib.ReadS16(subObj + 0x50) - _camY; + _api.GUILib.DrawLine(Xmid - 48, Ypos, Xmid + 48, Ypos, Color.Orange); + DrawBoxMWH(Xmid, Ymid + 32, 1, 1, Color.Orange, 0); + break; + case 3: + modeCounter = _api.MemLib.ReadByte(subObj + 0x7C); + break; + case 5: + Point[] throatShape = + { + new Point(Xmid - 48, levelHeight), + new Point(Xmid - 48, Ymid + 60), + new Point(Xmid - 16, Ymid + 20), + new Point(Xmid + 16, Ymid + 20), + new Point(Xmid + 48, Ymid + 60), + new Point(Xmid + 48, levelHeight) + }; + _api.GUILib.DrawPolygon(throatShape, Color.Red, Color.FromArgb(63, Color.Red)); + DrawEccoOct(Xmid, Ymid, 24, Color.Red); + DrawEccoOct(Xmid, Ymid, 24, Color.White, 0); + break; + case 6: + if ((state != 7) && (vulnCount == 0) && (tongueMode != 7)) + { + DrawEccoOct(Xmid, Ymid + 16, 64, Color.Blue); + } + if (tongueMode == 7) + { + uint subObj2 = _api.MemLib.ReadU24(0xFFCFCD); + while (subObj2 != 0) + { + if (_api.MemLib.ReadU16(subObj2 + 0x10) == 0xFF) + { + Xpos = _api.MemLib.ReadS16(subObj2 + 0x24) - _camX; + Ypos = _api.MemLib.ReadS16(subObj2 + 0x28) - _camY; + Xpos2 = ((_api.MemLib.ReadS32(subObj2 + 0x24) + _api.MemLib.ReadS32(subObj2 + 0x54)) >> 16) - _camX; + Ypos2 = ((_api.MemLib.ReadS32(subObj2 + 0x28) + _api.MemLib.ReadS32(subObj2 + 0x58)) >> 16) - _camY; + DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Orange); + } + subObj2 = _api.MemLib.ReadU24(subObj2 + 1); + } + } + Ypos = _api.MemLib.ReadS16(subObj + 0x50) - _camY; + _api.GUILib.DrawLine(Xmid - 48, Ypos - 94, Xmid + 48, Ypos - 94, Color.Orange); + _api.GUILib.DrawLine(Xmid - 48, Ypos, Xmid + 48, Ypos, Color.Orange); + DrawBoxMWH(Xmid, Ymid + 32, 1, 1, Color.Orange, 0); + break; + default: + break; + } + if ((mode < 7) || ((mode == 7) && (_api.MemLib.ReadU24(0xFFCFC9) != 0))) + { + if (_api.MemLib.ReadByte(subObj + 0x70) == 0) + { + DrawEccoOct(Xmid, Ymid, 32, Color.Red); + DrawBox(Xmid - 48, Ymid + 32, Xmid + 48, levelHeight, Color.Red); + } + Ypos = _api.MemLib.ReadS16(subObj + 0x50) - _camY - 94; + _api.GUILib.DrawLine(Xmid - 48, Ypos, Xmid + 48, Ypos, Color.Orange); + DrawBoxMWH(Xmid, Ymid + 32, 1, 1, Color.Orange, 0); + } + if (_api.MemLib.ReadS32(subObj + 0xC) == 0xE17B4) + { + Point[] shapePoints = + { + new Point(Xmid - 48, levelHeight), + new Point(Xmid - 48, Ymid + 60), + new Point(Xmid - 16, Ymid + 20), + new Point(Xmid + 16, Ymid + 20), + new Point(Xmid + 48, Ymid + 60), + new Point(Xmid + 48, levelHeight) + }; + _api.GUILib.DrawPolygon(shapePoints, Color.Red, Color.FromArgb(63, Color.Red)); + DrawEccoOct(Xmid, Ymid, 24, Color.Red); + DrawEccoOct(Xmid, Ymid, 24, Color.White, 0); + } + Ypos = (_api.MemLib.ReadS16(subObj + 0x50) - _camY) - 264; + DrawBoxMWH(160 + _left, Ypos, 320, 12, (32 < stateCounter) && (stateCounter < 160) ? Color.Brown : Color.Gray); + if ((32 < stateCounter) && (stateCounter < 160)) + { + DrawBoxMWH(_left + 160, Ypos, 320, 12, Color.White, 0); + } + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + TickerText($"{mode:X2}:{modeCounter}:{HP}:{vulnCount}", Color.Red); + HP = 0; + } + else if (type == 0xA5BD2) // Telekinetic future dolphins + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red, 0); + DrawEccoOct(Xmid, Ymid, 4, Color.Red); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if ((type == 0x9F5B0) || (type == 0x9F4DC) || (type == 0x9F6A0)) // Falling rock, breaks barriers + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); + _api.GUILib.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); + _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + if (type == 0x9F6A0) + { + int width = _api.MemLib.ReadS16(curObj + 0x44) << 1; + DrawBox(Xpos - width, Ypos - (width << 2), Xpos2 + width, Ypos2, Color.Lime); + } + TickerText($"{_api.MemLib.ReadS32(curObj + 0x54) / 65536.0:0.######}:{_api.MemLib.ReadS32(curObj + 0x58) / 65536.0:0.######}", Color.Lime); + } + else if (type == 0xA3B18) + { + Xpos = _api.MemLib.ReadS32(curObj + 0x24); + Ypos = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xpos + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ypos + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos >>= 16; Ypos >>= 16; + Xpos -= _camX; + Ypos -= _camY; + DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(curObj + 0x44), Color.Yellow); + DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); + } + else if (type == 0xA4018) + { + Xpos = _api.MemLib.ReadS32(curObj + 0x24); + Ypos = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xpos + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ypos + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos >>= 16; Ypos >>= 16; + Xpos -= _camX; + Ypos -= _camY; + DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(curObj + 0x44), Color.Gray); + DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); + } + else if (type == 0xA091E) // Blue Whale + { + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + Xpos = Xmid; Ypos = Ymid; + Ymid -= 64; Yvec -= 64; + DrawEccoOct_scaled(Xmid, Ymid, 2, 0, 0x50, Color.Red, 31); + DrawEccoOct_scaled(Xmid, Ymid, 2, 0, 0x40, Color.Red, 31); + DrawEccoOct_scaled(Xmid, Ymid, 2, 0, 0x30, Color.Red, 31); + DrawEccoOct_scaled(Xmid, Ymid, 2, 0, 0x20, Color.Red, 31); + DrawEccoOct_scaled(Xmid, Ymid, 2, 0, 0x10, Color.Red, 31); + if (_api.MemLib.ReadByte(curObj + 0x7F) == 0) + { + Xpos += (_api.MemLib.ReadS16(curObj + 0x6E) == 0) ? -278 : 162; + Ypos += 44 - _api.MemLib.ReadS16(curObj + 0x48); + DrawEccoOct(Xpos, Ypos, 32, Color.Blue); + } + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + + } + else if (type == 0xE66D8) //Vortex Larva + { + uint subObj = _api.MemLib.ReadU24(curObj + 5); + while (subObj != 0) + { + Xpos = _api.MemLib.ReadS16(subObj + 0x1C); + Ypos = _api.MemLib.ReadS16(subObj + 0x20); + Xpos2 = _api.MemLib.ReadS16(subObj + 0x24); + Ypos2 = _api.MemLib.ReadS16(subObj + 0x28); + Xpos -= _camX; Ypos -= _camY; + Xpos2 -= _camX; Ypos2 -= _camY; + DrawEccoOct(Xpos, Ypos, 30, Color.White, 32); + DrawEccoOct(Xpos, Ypos, 30, Color.Yellow, 0); + DrawEccoOct(Xpos2, Ypos2, 30, Color.White, 32); + DrawEccoOct(Xpos2, Ypos2, 30, Color.Yellow, 0); + subObj = _api.MemLib.ReadU24(subObj + 5); + } + Xpos = _api.MemLib.ReadS32(curObj + 0x24); + Ypos = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xpos + _api.MemLib.ReadS32(curObj + 0x54) + _api.MemLib.ReadS32(curObj + 0x5C)) >> 16) - _camX; + Yvec = ((Ypos + _api.MemLib.ReadS32(curObj + 0x58) + _api.MemLib.ReadS32(curObj + 0x60)) >> 16) - _camY; + Xpos2 = _api.MemLib.ReadS16(curObj + 0x72) - _camX; + Ypos2 = _api.MemLib.ReadS16(curObj + 0x76) - _camY; + Xpos >>= 16; Ypos >>= 16; + Xpos -= _camX; Ypos -= _camY; + DrawEccoOct(Xpos, Ypos, 0xB0, Color.Yellow); + DrawEccoOct(Xpos, Ypos, 0xB0, Color.Red, 0); + DrawEccoOct(Xpos, Ypos, 0x70, Color.Red); + DrawEccoOct(Xpos, Ypos, 0x38, Color.White); + DrawEccoOct(Xpos, Ypos, 0x38, Color.Red, 0); + DrawEccoOct(Xpos, Ypos, 48, Color.Blue, ((_api.MemLib.ReadByte(curObj + 0x7B) > 2) && (_api.MemLib.ReadByte(curObj + 0x14) != 0)) ? 63 : 0); + DrawEccoOct(Xpos2, Ypos2, 32, Color.Orange); + DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); + _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Orange); + TickerText($"{_api.MemLib.ReadByte(curObj + 0x14):X2}:{_api.MemLib.ReadByte(curObj + 0x7B):X2}:{_api.MemLib.ReadS16(curObj + 0x6E):D2}", Color.Red); + TickerText($"{ _api.MemLib.ReadByte(curObj + 0x7C):X2}:{_api.MemLib.ReadS16(curObj + 0x18):D3}", Color.Red); + TickerText($"{(_api.MemLib.ReadS32(curObj + 0x54) + _api.MemLib.ReadS32(curObj + 0x5C))/65536.0:0.######}:{(_api.MemLib.ReadS32(curObj + 0x58) + _api.MemLib.ReadS32(curObj + 0x60)) / 65536.0:0.######}", Color.Red); + + } + else if (type == 0x9CE3A) //Remnant Stars + { + flags = _api.MemLib.ReadU16(curObj + 0x10); + uint subObj = _api.MemLib.ReadU24(curObj + 0x5); + uint anim = _api.MemLib.ReadU16(curObj + 0x6C); + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + if ((anim <= 7) && (subObj == 0xFFA9D4)) + { + DrawEccoRhomb(Xmid, Ymid, 96, Color.Red); + PutText($"{((7 - anim) * 4) - ((_api.MemLib.ReadByte(0xFFA7C9) & 3) - 4)}", Xmid, Ymid + 4, 1, 1, -1, -1, Color.Blue, Color.Red); + + } + } + else if (type == 0xA997C) // Vortex Soldier + { + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = (Xmid + _api.MemLib.ReadS32(curObj + 0x54) >> 16) - _camX; + Yvec = (Ymid + _api.MemLib.ReadS32(curObj + 0x58) >> 16) - _camY; + Xvec += _api.MemLib.ReadS16(curObj + 0x64); + Yvec += _api.MemLib.ReadS16(curObj + 0x66); + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + if (_api.MemLib.ReadByte(curObj + 0x7A) == 0) + { + DrawRectRhombusIntersection(new Point(Xmid, Ymid + 6), new Point(Xmid, Ymid), 50, 44, 64, Color.Red); + } + DrawRectRhombusIntersection(new Point(Xmid, Ymid - 25), new Point(Xmid, Ymid), 38, 47, 64, Color.Red); + DrawBoxMWH(Xmid, Ymid, _api.MemLib.ReadS16(curObj + 0x44), _api.MemLib.ReadS16(curObj + 0x48), Color.Blue, 16); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if ((type == 0xA6C4A) || (type == 0xC43D4)) // Barrier Glyphs + { + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + var subType = _api.MemLib.ReadByte(curObj + 0x13); + if ((_api.MemLib.ReadU8(curObj + 0x7A) == 0) && (_api.MemLib.ReadU8(0xFFA7B5) != 0) + && ((type != 0xA6C4A) || (subType == 0x14) || (subType == 0x97))) + { + DrawEccoOct(Xmid, Ymid, 70, Color.Red); + } + DrawBoxMWH(Xmid, Ymid, _api.MemLib.ReadS16(curObj + 0x44), _api.MemLib.ReadS16(curObj + 0x48), Color.Blue); + DrawBoxMWH(Xmid, Ymid, _api.MemLib.ReadS16(curObj + 0x44), _api.MemLib.ReadS16(curObj + 0x48), Color.PowderBlue, 0); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if ((type == 0xB4F46) || (type == 0xB4E1C) || (type == 0xB4C18) || (type == 0xB4ACC) || (type == 0xB4B72)) // Guiding Orca/Dolphin + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + int Xdst = _api.MemLib.ReadS16(curObj + 0x64); + Xdst <<= 7; + Xdst = Xdst + 0x40 - _camX; + int Ydst = _api.MemLib.ReadS16(curObj + 0x66); + Ydst <<= 7; + Ydst = Ydst + 0x40 - _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + _api.GUILib.DrawLine(Xmid, Ymid, Xdst, Ydst, Color.Orange); + DrawBoxMWH(Xdst, Ydst, 64, 64, Color.Orange); + TickerText($"{_api.MemLib.ReadS16(curObj + 0x24)}:{_api.MemLib.ReadS16(curObj + 0x28)}:{_api.MemLib.ReadByte(curObj + 0x7D)}:{_api.MemLib.ReadByte(curObj + 0x7A)}", Color.Lime); + TickerText($"{_api.MemLib.ReadS32(curObj + 0x54) / 65536.0:0.######}:{_api.MemLib.ReadS32(curObj + 0x58) / 65536.0:0.######}", Color.Lime); + TickerText($"{_api.MemLib.ReadS32(curObj + 0x72) / 65536.0:0.######}:{_api.MemLib.ReadS32(curObj + 0x76) / 65536.0:0.######}", Color.Lime); + } + else if (type == 0xB5938) // Lost Orca + { + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xpos = _api.MemLib.ReadS16(curObj + 0x1C) - _camX; + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + //DrawBoxMWH(Xmid, Ymid, 64, 32, Color.Lime); + if (_api.MemLib.ReadU16(curObj + 0x6E) == 0) + { + if (_api.MemLib.ReadByte(curObj + 0x7D) == 0) + { + DrawBox(Xmid + 8, Ymid - 32, Xmid + 64, Ymid + 32, Color.Red); + } + else + { + DrawBox(Xmid - 64, Ymid - 32, Xmid - 8, Ymid + 32, Color.Red); + } + } + _api.GUILib.DrawLine(Xpos - 80, Ymid, Xpos + 80, Ymid, Color.Green); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if ((type == 0xB552A) || (type == 0xB5C42) || (type == 0xB5AFE)) // Following Orca, Returning Orca, & Idling Orca + { + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if (type == 0xB624A) // Orca Mother + { + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + int height = _api.MemLib.ReadS16(curObj + 0x48) + 32; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + DrawBoxMWH(Xmid, Ymid, 80, 32, Color.Red, 31); + DrawBoxMWH(Xmid, Ymid, _api.MemLib.ReadS16(curObj + 0x44), _api.MemLib.ReadS16(curObj + 0x48), Color.Blue); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + if (_api.MemLib.ReadS32(0xFFAB7E) != 0) + { + DrawEccoOct(Xmid, Ymid, 0x50, Color.Red, 31); + } + } + else if (type == 0xC047E) + { + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + var width = 2; + var height = 2; + if (_api.MemLib.ReadByte(curObj + 0x15) == 0) + { + width = _api.MemLib.ReadS16(curObj + 0x44); + height = _api.MemLib.ReadS16(curObj + 0x48); + } + DrawBoxMWH(Xmid, Ymid, width, height, Color.Lime); + } + else if (type == 0xC056E) + { + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + var width = _api.MemLib.ReadS16(curObj + 0x44); + var height = _api.MemLib.ReadS16(curObj + 0x48); + DrawBoxMWH(Xmid, Ymid, width, height, Color.Lime); + } + else if (type == 0xC4208) // Broken Glyph Base + { + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + var width = _api.MemLib.ReadS16(curObj + 0x44); + var height = _api.MemLib.ReadS16(curObj + 0x48); + DrawBoxMWH(Xmid, Ymid, width, height, Color.PowderBlue); + if (_api.MemLib.ReadByte(curObj + 0x15) == 0) + { + DrawRectRhombusIntersection(new Point(Xmid, Ymid), new Point(Xmid, Ymid), 80, 80, 120, Color.Orange); + } + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if (type == 0xAC242) // Broken Glyph Top repairing + { + uint subObj = _api.MemLib.ReadU24(curObj + 0x5); + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + Xpos = _api.MemLib.ReadS16(subObj + 0x24) - _camX; + Ypos = _api.MemLib.ReadS16(subObj + 0x28) - _camY; + var width = _api.MemLib.ReadS16(curObj + 0x44); + var height = _api.MemLib.ReadS16(curObj + 0x48); + DrawBoxMWH(Xmid, Ymid, width, height, Color.Gray); + Point[] rhombPoints = + { + new Point(Xpos - 3, Ypos), + new Point(Xpos, Ypos - 3), + new Point(Xpos + 3, Ypos), + new Point(Xpos, Ypos + 3) + }; + _api.GUILib.DrawPolygon(rhombPoints, Color.Orange, Color.FromArgb(63, Color.Orange)); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xpos, Ypos, Color.Orange); + } + else if (type == 0xBE9C8) // Broken Glyph Top free + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; + Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime, 0); + _api.GUILib.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); + _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + TickerText($"{_api.MemLib.ReadS32(curObj + 0x54) / 65536.0:0.######}:{_api.MemLib.ReadS32(curObj + 0x58) / 65536.0:0.######}", Color.Lime); _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if ((type == 0xD9C0E) || (type == 0xDA9EA)) + { + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + DrawBoxMWH(Xmid, Ymid, 0xA0, 0x70, Color.Red); + } + else if ((type == 0xBF204) || (type == 0xDA2C0)) + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54) + _api.MemLib.ReadS32(curObj + 0x5C)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58) + _api.MemLib.ReadS32(curObj + 0x60)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if (type == 0xAF9CC) // Mirror Dolphin + { + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xpos = _api.MemLib.ReadS16(curObj + 0x1C) - _camX + (_api.MemLib.ReadByte(curObj + 0x15) == 0 ? 27 : -27); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54) + _api.MemLib.ReadS32(curObj + 0x5C)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58) + _api.MemLib.ReadS32(curObj + 0x60)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + var width = _api.MemLib.ReadS16(curObj + 0x44); + var height = _api.MemLib.ReadS16(curObj + 0x48); + DrawBoxMWH(Xmid, Ymid, width, height, Color.Blue, 31); + if (_api.MemLib.ReadByte(curObj + 0x13) != 0xAC) + { + DrawBoxMWH(Xmid, Ymid, 96, 96, Color.Orange); + } + _api.GUILib.DrawLine(Xpos, 0, Xpos, 448, Color.Red); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if (type == 0xAF43E) // Vortex Lightning Trap + { + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + if (_api.MemLib.ReadByte(curObj + 0x15) != 0) + { + if (_api.MemLib.ReadS16(0xFFAA12) != 0) + { + Ymid -= 8; + } + DrawBoxMWH(Xmid, Ymid, 92, 16, Color.Red); + PutText(_api.MemLib.ReadByte(curObj + 0x15).ToString(), Xmid, Ymid, 1, 1, -1, -1, Color.Blue, Color.Red); + } + else + { + DrawBoxMWH(Xmid, Ymid, 92, 16, Color.Gray); + PutText(_api.MemLib.ReadByte(curObj + 0x7F).ToString(), Xmid, Ymid, 1, 1, -1, -1, Color.Blue, Color.Red); + } + } + else if (type == 0xA6E24) // Barrier Glyph Forcefield + { + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = _api.MemLib.ReadS32(0xFFAA1A) - Xmid; + Yvec = _api.MemLib.ReadS32(0xFFAA1E) - Ymid; + var div = Math.Abs(Xvec) + Math.Abs(Yvec); + Xvec /= div; Yvec /= div; + Xvec += Xmid; Yvec += Ymid; + Xmid >>= 16; Ymid >>= 16; + Xvec >>= 16; Yvec >>= 16; + Xmid -= _camX; Ymid -= _camY; + Xvec -= _camX; Yvec -= _camY; + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if ((type == 0xC4A44) || (type == 0xAA32C)) // Pulsar power-up and Vortex bullet-spawner + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; + Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue, 16); + } + else if (type == 0xC2F00) // Sky bubbles + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + var mode = _api.MemLib.ReadByte(curObj + 0x15); + switch (mode) + { + case 0: + DrawRectRhombusIntersection(new Point(Xmid, Ymid), new Point(Xmid, Ymid), 70, 70, 105, Color.Gray); + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); + break; + case 1: + DrawRectRhombusIntersection(new Point(Xmid, Ymid), new Point(Xmid, Ymid), 70, 70, 105, Color.Red); + break; + case 2: + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red); + break; + default: + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Gray); + break; + } + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if (type == 0x9FA7E) //Air refiller/drainer + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Lime)); + } + else if (type == 0xBFC14) //Pushable fish + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; + Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime, 0); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + TickerText($"{_api.MemLib.ReadS32(curObj + 0x54) / 65536.0:0.######}:{_api.MemLib.ReadS32(curObj + 0x58) / 65536.0:0.######}", Color.Orange); + + } + else if ((type == 0xBE97C) //Slowing Kelp //Default Bounds nose-responsive + || (type == 0xACDAE)) //Metasphere + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if (type == 0xACB42) // Turtle + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; + Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + var mode = _api.MemLib.ReadByte(curObj + 0x15); + switch (mode) + { + case 0: + case 1: + case 2: + case 3: + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x4C)) >> 16) - _camX; + break; + case 4: + case 5: + case 6: + case 7: + Xvec = ((Xmid - _api.MemLib.ReadS32(curObj + 0x4C)) >> 16) - _camX; + break; + default: + Xvec = (Xmid >> 16) - _camX; + break; + } + Yvec = Ymid; + Xmid >>= 16; Xmid -= _camX; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); + _api.GUILib.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); + int width = _api.MemLib.ReadS16(curObj + 0x44) << 1; + DrawBox(Xpos - width, Ypos - (width << 2), Xpos2 + width, Ypos2, Color.Lime); + TickerText($"{_api.MemLib.ReadS32(curObj + 0x4C) / 65536.0:0.######}:{_api.MemLib.ReadS32(curObj + 0x50) / 65536.0:0.######}", Color.Lime); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if (type == 0xACA7E) // Retracting Turtle + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; + Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + (_api.MemLib.ReadS32(curObj + 0x4C) >> 1)) >> 16) - _camX; + Yvec = ((Ymid + (_api.MemLib.ReadS32(curObj + 0x50) >> 1)) >> 16) - _camY; + Xmid >>= 16; Xmid -= _camX; + Ymid >>= 16; Ymid -= _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); + _api.GUILib.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); + int width = _api.MemLib.ReadS16(curObj + 0x44) << 1; + DrawBox(Xpos - width, Ypos - (width << 2), Xpos2 + width, Ypos2, Color.Lime); + TickerText($"{(_api.MemLib.ReadS32(curObj + 0x4C) >> 1) / 65536.0:0.######}:{(_api.MemLib.ReadS32(curObj + 0x50) >> 1) / 65536.0:0.######}", Color.Lime); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if ((type == 0xB5134) || (type == 0xA7E0C) //Default Bounds sonar-responsive + || (type == 0xAF868) || (type == 0xAF960) || (type == 0xD8E5C) || (type == 0xAA5C6)) + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if ((type == 0xACCB4) || (type == 0xACD7E) //Default Baunds non-responsive + || (type == 0xD8D96) || (type == 0xA955E) || (type == 0xA92E4) || (type == 0xC05DC) + || (type == 0xC2684)) + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Gray); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if (type == 0x9DE86) // Star Wreath + { + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + Xpos = _api.MemLib.ReadS32(curObj + 0x1C); + Ypos = _api.MemLib.ReadS32(curObj + 0x20); + Xpos2 = ((Xpos + _api.MemLib.ReadS32(curObj + 0x5C)) >> 16) - _camX; + Ypos2 = ((Ypos + _api.MemLib.ReadS32(curObj + 0x60)) >> 16) - _camY; + Xpos >>= 16; Ypos >>= 16; + Xpos -= _camX; Ypos -= _camY; + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Orange, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + DrawBoxMWH(Xpos, Ypos, 1, 1, (_api.MemLib.ReadByte(curObj + 0x7F) == 0) ? Color.Blue : Color.Black, 0); + _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Orange); + if (_api.MemLib.ReadByte(curObj + 0x12) % 7 == 0) + { + TickerText($"{_api.MemLib.ReadS32(curObj + 0x5C) / 65536.0:0.######}:{_api.MemLib.ReadS32(curObj + 0x60) / 65536.0:0.######}:{_api.MemLib.ReadByte(curObj + 0x7F)}", Color.Lime); + } + } + else if ((type == 0x9D774) || (type == 0x9DA26)) // Fish + { + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + DrawBoxMWH(Xmid, Ymid, 0x14, 0x14, Color.Lime); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if (type == 0xAD87C) // Enemy dolphins in metamorph levels + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + DrawBoxMWH(_api.MemLib.ReadS16(curObj + 0x1C) - _camX, _api.MemLib.ReadS16(curObj + 0x20) - _camY, 1024, 1024, Color.Orange, 0); + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if (type == 0xC6128) // Drone attacking dolphin + { + Xmid = _api.MemLib.ReadS16(curObj + 0x4C) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x50) - _camY; + DrawEccoOct(Xmid, Ymid, 360, Color.Red, 0); + } + else if (type == 0xC605A) // Drone attacking dolphin sonar + { + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camY; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + DrawBox(Xmid, Ymid - 1, Xmid + 32, Ymid + 1, Color.Orange); + } + else if (type == 0xB1BE0) // Globe + { + int mode = _api.MemLib.ReadS8(curObj + 0x15); + if (mode == 1) + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; + Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime, 0); + _api.GUILib.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); + _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if (type == 0xB1A10) // Approaching globes + { + Xmid = _api.MemLib.ReadS16(0xFFAA1A) - _camX; + Ymid = _api.MemLib.ReadS16(0xFFAA1E) - _camY; + DrawEccoOct(Xmid - 56, Ymid, 8, Color.Orange); + DrawEccoOct(Xmid + 56, Ymid, 8, Color.Orange); + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xpos = _api.MemLib.ReadS32(curObj + 0x4C); + Ypos = _api.MemLib.ReadS32(curObj + 0x50); + Xvec = ((Xmid - _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid - _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos2 = ((Xpos + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Ypos2 = ((Ypos + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + Xpos >>= 16; Ypos >>= 16; + Xpos -= _camX; Ypos -= _camY; + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Orange); + } + else if (type == 0xB1920) // Orbiting globes + { + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xpos = _api.MemLib.ReadS16(curObj + 0x4C) - _camX; + Ypos = _api.MemLib.ReadS16(curObj + 0x50) - _camY; + Xvec = ((Xmid - _api.MemLib.ReadS32(curObj + 0x5C)) >> 16) - _camX; + Yvec = ((Ymid - _api.MemLib.ReadS32(curObj + 0x60)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); + } + else if (type == 0xC28A0) // Control point in Four Islands/Dolphin that gives Rock-breaking song + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, _api.MemLib.ReadByte(curObj + 0x15) == 0 ? Color.Orange : Color.Blue); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + // Crystal Springs merging glyphs + else if (type == 0xC651E) // Bound glyph + { + Xpos = _api.MemLib.ReadS16(curObj + 0x1C) - _camX; + Ypos = _api.MemLib.ReadS16(curObj + 0x20) - _camY; + DrawEccoRhomb(Xpos, Ypos, 4 << 4, Color.Orange); + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; + Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if (type == 0xC67E4) // Freed glyph + { + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; + Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue, 0); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if (type == 0xC6970) // Pulled glyph + { + uint subObj = _api.MemLib.ReadU24(curObj + 5); + Xvec = _api.MemLib.ReadS32(subObj + 0x54); + Yvec = _api.MemLib.ReadS32(subObj + 0x58); + for (i = 1; i < _api.MemLib.ReadByte(curObj + 0x7F); i++) + { + Xvec ^= Yvec; + Yvec ^= Xvec; + Xvec ^= Yvec; + Xvec = 0 - Xvec; + } + Xpos = (Xvec + _api.MemLib.ReadS32(subObj + 0x1C) >> 16) - _camX; + Ypos = (Yvec + _api.MemLib.ReadS32(subObj + 0x20) >> 16) - _camY; + DrawEccoRhomb(Xpos, Ypos, 3, Color.Orange); + Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; + Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue, 0); + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Orange, 0); + } + else if (type == 0xC6BA8) // Delivery Point + { + Xvec = _api.MemLib.ReadS32(curObj + 0x54); + Yvec = _api.MemLib.ReadS32(curObj + 0x58); + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + for (i = 0; i < 4; i++) + { + Xpos = (Xvec + _api.MemLib.ReadS32(curObj + 0x1C) >> 16) - _camX; + Ypos = (Yvec + _api.MemLib.ReadS32(curObj + 0x20) >> 16) - _camY; + _api.GUILib.DrawLine(Xmid, Ymid, Xpos, Ypos, Color.Orange); + Xvec ^= Yvec; + Yvec ^= Xvec; + Xvec ^= Yvec; + Xvec = 0 - Xvec; + } + } + else if (type == 0xC6A6C) // Delivered glyph + { + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid - _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid - _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if (type == 0xC6F82) // Full delivery point + { + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + DrawEccoOct(Xmid, Ymid, 3, Color.Orange); + } + else if (type == 0xC6A9E) // Merging glyph + { + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid - _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid - _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Orange, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if (type == 0xC7052) { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); + Xmid = _api.MemLib.ReadS16(curObj + 0x24); + Ymid = _api.MemLib.ReadS16(curObj + 0x28); + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + uint dropSpeed = _api.MemLib.ReadU8(curObj + 0x16); + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xmid, Ymid + (int)(dropSpeed), Color.Orange); + } + else if ((type == 0xD8B7C) || (type == 0xD89EA) || (type == 0x9E3AA) || (type == 0x9E5A8) // GFX particles don't need displayed. + || (type == 0x9B5D8) || (type == 0x9E2A6) || (type == 0xACD1E) || (type == 0xD9678) + || (type == 0xD9A3C) || (type == 0xD9240) || (type == 0x9E1DE) || (type == 0xDF86A) + || (type == 0xB159A) || (type == 0xDA898) || (type == 0xDA720) || (type == 0xD9FDC) + || (type == 0xC0D4E) || (type == 0xC0D38) || (type == 0xDCDAC) || (type == 0xC0B42) + || (type == 0xE3CD2) || (type == 0xE385E) || (type == 0xC20E8) || (type == 0xC22A6) + || (type == 0xC31B4) || (type == 0xA9EF0) || (type == 0xA9D90) || (type == 0xC6304) + || (type == 0xC26E4) || (type == 0xAEE68) || (type == 0xD9B2A) || (type == 0xD95AE) + || (type == 0)) + { + // This space intentionally left blank + } + else if ((type == 0xC152C) || (type == 0xA75E8) //Objects with default bounds confirmed + || (type == 0x9D076) || (type == 0xA7092) || (type == 0xC02EA) || (type == 0xA5378) + || (type == 0xACA7E) || (type == 0x9D28C) || (type == 0xA2D42) || (type == 0xA975E) + || (type == 0xBE9C8) || (type == 0xBFDA4) || (type == 0xAC736) || (type == 0xB716E) + || (type == 0xB1BE0) || (type == 0xB1A10) || (type == 0x9E546) || (type == 0xC2CB8) + || (type == 0xA0F04) || (type == 0xA6ACA) || (type == 0xA35A6) || (type == 0xAA12E) + || (type == 0xC651E) || (type == 0x9CC06) || (type == 0xA9202) || (type == 0xA6FDE) + || (type == 0xA6F62) || (type == 0xA745C) || (type == 0xC3EF0) || (type == 0xC3F90) + || (type == 0xC3FFC) || (type == 0xC3DB8) || (type == 0xAC766) || (type == 0xC5F66) + || (type == 0xA306E) || (type == 0xB0C7E) || (type == 0xB17F2) || (type == 0xB0CDC) + || (type == 0xC2106) || (type == 0xC208C) || (type == 0xC1EBA) || (type == 0xC251C) + || (type == 0xC32C8) || (type == 0xAB5E6) || (type == 0xAC796) || (type == 0xAC9F2) + || (type == 0xA538A)) + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(255, 0, 127)); + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue, 0); + if (type != 0xA975E) + { + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + if (HP > 2) + { + PutText($"{HP - 1}", Xmid, Ymid, 1, 1, -1, -9, Color.Blue, Color.Red); + } + } + else // Default bounds + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue, 0); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + PutText(type.ToString("X5"), Xmid, Ymid + 8, 1, 9, -1, -1, Color.Blue, Color.Red); + } + break; } - else if ((type == 0x9F5B0) || (type == 0xA3B18)) - { - Xpos = _api.MemLib.ReadS16(curObj + 0x24); - Ypos = _api.MemLib.ReadS16(curObj + 0x28); - Xpos -= _camX; - Ypos -= _camY; - DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(curObj + 0x44), Color.Lime); - } - else if (type == 0xDCEE0) - { - Xpos = _api.MemLib.ReadS16(curObj + 0x24); - Ypos = _api.MemLib.ReadS16(curObj + 0x28); - Xpos -= _camX; Ypos -= _camY; - DrawEccoOct(Xpos, Ypos, 0x5C, Color.Lime); - } - else - { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); - Xmid = _api.MemLib.ReadS16(curObj + 0x24); - Ymid = _api.MemLib.ReadS16(curObj + 0x28); - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - if ((type == 0xA6C4A) || (type == 0xC43D4)) DrawEccoOct(Xmid, Ymid, 70, Color.Lime); - _api.GUILib.DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); - } - break; - } case Modes.Ecco1: type = _api.MemLib.ReadU32(curObj + 0x6); Xpos = _api.MemLib.ReadS16(curObj + 0x17); @@ -544,26 +2442,51 @@ namespace BizHawk.Client.EmuHawk Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid -= _camX; Ymid -= _camY; - _api.GUILib.DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); - break; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); + PutText(type.ToString("X8"), Xmid, Ymid, 1, 1, -1, -1, Color.Blue, Color.Red); + break; } - Print_Text(type.ToString("X8"), 8, Math.Min(Math.Max(0, Xmid-16), 605), Math.Min(Math.Max(0, Ymid-5), 424), Color.Blue); - Print_Text(type.ToString("X8"), 8, Math.Min(Math.Max(2, Xmid-14), 607), Math.Min(Math.Max(2, Ymid-3), 426), Color.Blue); - Print_Text(type.ToString("X8"), 8, Math.Min(Math.Max(0, Xmid-16), 605), Math.Min(Math.Max(2, Ymid-3), 426), Color.Blue); - Print_Text(type.ToString("X8"), 8, Math.Min(Math.Max(2, Xmid-14), 607), Math.Min(Math.Max(0, Ymid-5), 424), Color.Blue); - Print_Text(type.ToString("X8"), 8, Math.Min(Math.Max(1, Xmid-15), 606), Math.Min(Math.Max(1, Ymid-4), 425), Color.Red); curObj = _api.MemLib.ReadU24(curObj+1); } //events curObj = _api.MemLib.ReadU24(0xFFCFB5); while (curObj != 0) { - uint type = _api.MemLib.ReadU32(curObj + 0xC); - if ((type == 0xA44EE) || (type == 0xD120C)) + type = _api.MemLib.ReadU32(curObj + 0xC); + if ((type == 0) // Null object + || (type == 0x9C1FA) || (type == 0x9C6D0) // Skytubes BG Image manager + || (type == 0x9ED72) || (type == 0xA57F2) // And Miscellaneous GFX particles + || (type == 0xC3A42) || (type == 0xB33D8) // And Cutscene controller + || (type == 0xB308A) || (type == 0xA1676) || (type == 0xB6822) || (type == 0xD12E2)) { } + else if ((type == 0xA44EE) || (type == 0xD120C)) { Xmid = _api.MemLib.ReadS16(curObj + 0x1C) - _camX; Ymid = _api.MemLib.ReadS16(curObj + 0x20) - _camY; - DrawEccoOct(Xmid, Ymid, 0x20, Color.Cyan); + DrawEccoOct(Xmid, Ymid, 0x20, Color.Red); + } + else if (type == 0x9F0D0) // Water Current + { + int Xvec = _api.MemLib.ReadS32(curObj + 0x54); + int Yvec = _api.MemLib.ReadS32(curObj + 0x58); + if ((Xvec != 0) || (Yvec != 0)) + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xvec += Xmid; Yvec += Ymid; + Xmid >>= 16; Ymid >>= 16; + Xvec >>= 16; Yvec >>= 16; + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + Xvec -= _camX; Yvec -= _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Red)); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } } else if (type == 0xDEF94) { @@ -571,9 +2494,179 @@ namespace BizHawk.Client.EmuHawk Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; DrawEccoOct(Xmid, Ymid, 0x18, Color.Cyan); } - else + else if (type == 0xA6584) // Eagle { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + DrawEccoOct(Xmid, Ymid, 0x10, Color.Red); + } + else if ((type == 0x9BA8A) // Autoscroller controller + || (type == 0xE27D4) || (type == 0xE270E) || (type == 0xE26C2)) + { + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + var Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + var Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Orange, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if (type == 0x9B948) // Autoscroller waypoint + { + Xmid = _api.MemLib.ReadS32(curObj + 0x24); + Ymid = _api.MemLib.ReadS32(curObj + 0x28); + var Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; + var Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; + DrawBoxMWH(Xmid, Ymid, 8, 8, Color.Orange); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + } + else if (type == 0xA5448) // Bomb spawner + { + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + PutText($"{_api.MemLib.ReadU16(curObj + 0x6E)}", Xmid, Ymid, 1, 1, -1, -1, Color.White, Color.Blue); + } + else if ((type == 0xA529C) || (type == 0xA5236) || (type == 0xA51E6)) // Explosion + { + uint subObj = _api.MemLib.ReadU24(curObj + 5); + if (subObj != 0) + { + Xpos = _api.MemLib.ReadS16(subObj + 0x1C) - _camX; + Ypos = _api.MemLib.ReadS16(subObj + 0x28) - _camY; + int Width = _api.MemLib.ReadS16(subObj + 0x24) - Xpos - _camX; + DrawBoxMWH(Xpos, Ypos, Width, 16, Color.Red); + } + subObj = _api.MemLib.ReadU24(curObj + 9); + if (subObj != 0) + { + Xpos = _api.MemLib.ReadS16(subObj + 0x1C) - _camX; + Ypos = _api.MemLib.ReadS16(subObj + 0x28) - _camY; + int Width = _api.MemLib.ReadS16(subObj + 0x24) - Xpos - _camX; + DrawBoxMWH(Xpos, Ypos, Width, 16, Color.Red); + } + } + else if (type == 0x9B5D8) + { + var subtype = _api.MemLib.ReadByte(curObj + 0x13); + int width = 0; + int height = 0; + switch (subtype) + { + case 48: + case 49: + case 126: + case 145: + case 146: + case 213: + PutText($"{type:X5}:{subtype}", Xmid, Ymid - 4, 1, 1, -1, -9, Color.White, Color.Blue); + PutText(curObj.ToString("X6"), Xmid, Ymid + 4, 1, 9, -1, -1, Color.White, Color.Blue); + break; + case 59: + case 87: + case 181: + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + width = _api.MemLib.ReadS16(curObj + 0x44); + height = _api.MemLib.ReadS16(curObj + 0x48); + DrawEccoOct(Xmid, Ymid, (width + height) >> 1, Color.Lime); + break; + case 71: + case 72: + case 158: + case 159: + case 165: + Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; + Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red); + break; + case 82: + case 83: + case 84: + case 85: + case 86: + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + width = _api.MemLib.ReadS16(curObj + 0x44); + height = _api.MemLib.ReadS16(curObj + 0x48); + DrawBoxMWH(Xmid, Ymid, width, height, Color.Red); + break; + case 210: + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + width = _api.MemLib.ReadS16(curObj + 0x44); + height = _api.MemLib.ReadS16(curObj + 0x48); + DrawBoxMWH(Xmid, Ymid, width, height, Color.Blue); + break; + case 107: + Xmid = (_api.MemLib.ReadS16(curObj + 0x18) << 7) - _camX + 0x40; + Ymid = (_api.MemLib.ReadS16(curObj + 0x1A) << 7) - _camY + 0x40; + Xpos = (_api.MemLib.ReadS16(curObj + 0x64) << 7) - _camX + 0x40; + Ypos = (_api.MemLib.ReadS16(curObj + 0x66) << 7) - _camY + 0x40; + DrawBoxMWH(Xmid, Ymid, 64, 64, Color.Orange, 0); + DrawBoxMWH(Xpos, Ypos, 64, 64, Color.Orange, 0); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xpos, Ypos, Color.Orange); + break; + case 110: //Gravity conrol points + case 179: + Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; + Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63,_api.MemLib.ReadByte(curObj + 0x15) == 0 ? Color.Gray : Color.Red)); + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red, 0); + int dir = _api.MemLib.ReadS8(curObj + 0x71) & 7; + int[] xtable = { 7, 4, -3, -10, -14, -11, -3, 4}; + int[] ytable = { 11, 4, 7, 4, -3, -11, -14, -11}; + Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; + Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawImage(".\\dll\\gravitometer_bg.png", Xmid - 15, Ymid - 15); + _api.GUILib.DrawImage(".\\dll\\gravitometer_fg.png", Xmid + xtable[dir], Ymid + ytable[dir]); + break; + case 176: + Xmid = (_api.MemLib.ReadS16(curObj + 0x18) << 7) - _camX + 0x40; + Ymid = (_api.MemLib.ReadS16(curObj + 0x1A) << 7) - _camY + 0x40; + Xpos = (_api.MemLib.ReadS16(curObj + 0x64) << 7) - _camX + 0x40; + Ypos = (_api.MemLib.ReadS16(curObj + 0x66) << 7) - _camY + 0x40; + DrawEccoOct(Xmid, Ymid, 32, Color.Orange, 0); + DrawEccoOct(Xpos, Ypos, 32, Color.Orange, 0); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xpos, Ypos, Color.Orange); + break; + case 194: // Kill plane + Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; + Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Black, 127); + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red, 0); + break; + default: + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); + Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); + Ypos = _api.MemLib.ReadS16(curObj + 0x30); + Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); + Xmid = _api.MemLib.ReadS16(curObj + 0x24); + Ymid = _api.MemLib.ReadS16(curObj + 0x28); + Xpos -= _camX; Xpos2 -= _camX; + Ypos -= _camY; Ypos2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Cyan); + PutText($"{type:X5}:{subtype}", Xmid, Ymid - 4, 1, 1, -1, -9, Color.White, Color.Blue); + PutText(curObj.ToString("X6"), Xmid, Ymid + 4, 1, 9, -1, -1, Color.White, Color.Blue); + break; + } + } + else + { + Xpos = _api.MemLib.ReadS16(curObj + 0x2C); Xpos2= _api.MemLib.ReadS16(curObj + 0x34); Ypos = _api.MemLib.ReadS16(curObj + 0x30); Ypos2= _api.MemLib.ReadS16(curObj + 0x38); @@ -582,93 +2675,117 @@ namespace BizHawk.Client.EmuHawk Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid -= _camX; Ymid -= _camY; - _api.GUILib.DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Cyan); - } - PutText(type.ToString("X8"), Xmid, Ymid, 1, 1, 0, 0, Color.White, Color.Blue); - PutText(curObj.ToString("X8"), Xmid, Ymid, 1, 9, 0, 0, Color.White, Color.Blue); - curObj = _api.MemLib.ReadU24(curObj+1); + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Cyan); + PutText($"{type:X5}:{_api.MemLib.ReadByte(curObj + 0x13)}", Xmid, Ymid - 4, 1, 1, -1, -9, Color.White, Color.Blue); + PutText(curObj.ToString("X6"), Xmid, Ymid + 4, 1, 9, -1, -1, Color.White, Color.Blue); + } + curObj = _api.MemLib.ReadU24(curObj+1); } - //Ecco body - Xpos = _api.MemLib.ReadS16(0xFFAA22); - Ypos = _api.MemLib.ReadS16(0xFFAA26); - Xpos2 = _api.MemLib.ReadS16(0xFFAA2A); - Ypos2 = _api.MemLib.ReadS16(0xFFAA2E); - Xmid = _api.MemLib.ReadS16(0xFFAA1A); - Ymid = _api.MemLib.ReadS16(0xFFAA1E); - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - X = Xpos; - X2 = Xpos2; - Y = Ypos; - Y2 = Ypos2; - int X3 = (Xmid + (ushort) Xpos) >> 1; - int X4 = (Xmid + (ushort) Xpos2) >> 1; - int Y3 = (Ymid + (ushort) Ypos) >> 1; - int Y4 = (Ymid + (ushort) Ypos2) >> 1; - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Magenta); - DrawBoxMWH(X, Y, 1, 1, Color.Magenta); - DrawBoxMWH(X2, Y2, 1, 1, Color.Magenta); - DrawBoxMWH(X3, Y3, 1, 1, Color.Magenta); - DrawBoxMWH(X4, Y4, 1, 1, Color.Magenta); - _api.GUILib.DrawPixel(Xmid, Ymid, Color.Blue); - _api.GUILib.DrawPixel(X, Y, Color.Blue); - _api.GUILib.DrawPixel(X2, Y2, Color.Blue); - _api.GUILib.DrawPixel(X3, Y3, Color.Blue); - _api.GUILib.DrawPixel(X4, Y4, Color.Blue); - _api.GUILib.DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); //Ecco head Xpos = _api.MemLib.ReadS16(0xFFA8F8); Xpos2 = _api.MemLib.ReadS16(0xFFA900); Ypos = _api.MemLib.ReadS16(0xFFA8FC); Ypos2 = _api.MemLib.ReadS16(0xFFA904); + Xmid = _api.MemLib.ReadS16(0xFFA8F0); + Ymid = _api.MemLib.ReadS16(0xFFA8F4); Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; - _api.GUILib.DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.White); + Xmid -= _camX; Ymid -= _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.PowderBlue, 0); //Ecco tail Xpos = _api.MemLib.ReadS16(0xFFA978); Xpos2 = _api.MemLib.ReadS16(0xFFA980); Ypos = _api.MemLib.ReadS16(0xFFA97C); Ypos2 = _api.MemLib.ReadS16(0xFFA984); + Xmid = _api.MemLib.ReadS16(0xFFA970); + Ymid = _api.MemLib.ReadS16(0xFFA974); Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; - _api.GUILib.DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.White); + Xmid -= _camX; Ymid -= _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.PowderBlue, 0); + //Ecco body + Xpos = _api.MemLib.ReadS32(0xFFAA22); + Ypos = _api.MemLib.ReadS32(0xFFAA26); + Xpos2 = _api.MemLib.ReadS32(0xFFAA2A); + Ypos2 = _api.MemLib.ReadS32(0xFFAA2E); + Xmid = _api.MemLib.ReadS16(0xFFAA1A); + Ymid = _api.MemLib.ReadS16(0xFFAA1E); + int Xvel = _api.MemLib.ReadS32(0xFFAA36); + if (_api.MemLib.ReadU32(0xFFA9D6) > 7) Xvel += _api.MemLib.ReadS32(0xFFA9D6); + if (_api.MemLib.ReadU32(0xFFAA3E) > 7) Xvel += _api.MemLib.ReadS32(0xFFAA3E); + int Yvel = _api.MemLib.ReadS32(0xFFAA3A); + if (_api.MemLib.ReadU32(0xFFA9DA) > 7) Yvel += _api.MemLib.ReadS32(0xFFA9DA); + if (_api.MemLib.ReadU32(0xFFAA42) > 7) Yvel += _api.MemLib.ReadS32(0xFFAA42); + int XV = ((Xpos + Xvel) >> 16) - _camX; + int YV = ((Ypos + Yvel) >> 16) - _camY; + int XV2 = ((Xpos2 + Xvel) >> 16) - _camX; + int YV2 = ((Ypos2 + Yvel) >> 16) - _camY; + X = Xpos >> 16; + X2 = Xpos2 >> 16; + Y = Ypos >> 16; + Y2 = Ypos2 >> 16; + X -= _camX; X2 -= _camX; + Y -= _camY; Y2 -= _camY; + Xmid -= _camX; Ymid -= _camY; + int X3 = (Xmid + X) >> 1; + int X4 = (Xmid + X2) >> 1; + int Y3 = (Ymid + Y) >> 1; + int Y4 = (Ymid + Y2) >> 1; + _api.GUILib.DrawLine(X, Y, Xmid, Ymid, Color.Green); + _api.GUILib.DrawLine(Xmid, Ymid, X2, Y2, Color.Green); + DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Red); + DrawBoxMWH(X, Y, 1, 1, Color.Lime); + DrawBoxMWH(X2, Y2, 1, 1, Color.Blue); + DrawBoxMWH(X3, Y3, 1, 1, Color.Yellow); + DrawBoxMWH(X4, Y4, 1, 1, Color.Yellow); + _api.GUILib.DrawLine(X, Y, XV, YV, Color.Orange); + _api.GUILib.DrawLine(X2, Y2, XV2, YV2, Color.Orange); // sonar if (_api.MemLib.ReadU8(0xFFAB77) != 0) { - Xmid = _api.MemLib.ReadS16(0xFFA9EC); + Xmid = _api.MemLib.ReadS32(0xFFA9EC); + Ymid = _api.MemLib.ReadS32(0xFFA9F0); + int Xvec = ((_api.MemLib.ReadS32(0xFFAA04) + Xmid) >> 16) - _camX; + int Yvec = ((_api.MemLib.ReadS32(0xFFAA08) + Ymid) >> 16) - _camY; + Xmid >>= 16; + Ymid >>= 16; + Xmid -= _camX; Ymid -= _camY; Width2 = _api.MemLib.ReadS16(0xFFA9FC); - Xmid -= _camX; - Ymid = _api.MemLib.ReadS16(0xFFA9F0); - Ymid -= _camY; Height2 = _api.MemLib.ReadS16(0xFFAA00); color = ((_api.MemLib.ReadU8(0xFFAA0C) != 0) ? Color.FromArgb(255, 0, 127) : Color.FromArgb(0, 0, 255)); DrawBoxMWH(Xmid, Ymid, Width2, Height2, color); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue); - _api.GUILib.DrawPixel(Xmid, Ymid, color); + DrawBoxMWH(Xmid, Ymid, 1, 1, color, 0); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } //Pulsar curObj = _api.MemLib.ReadU24(0xFFCFD1); - if (curObj != 0) + if ((curObj != 0) && ((_api.MemLib.ReadU32(curObj + 0xC) == 0xC9222) || (_api.MemLib.ReadU32(curObj + 0xC) == 0xC9456))) { - // sbyte Blah = _api.MemLib.ReadU8(CardBoard + 0x15); curObj += 0x26; - // if (!(Blah & 1)) - // CardBoard += 0x14; for (int l = 0; l < 4; l++) { if (_api.MemLib.ReadU16(curObj + 0x12) != 0) { - Xmid = _api.MemLib.ReadS16(curObj); - Ymid = _api.MemLib.ReadS16(curObj + 4); + Xmid = _api.MemLib.ReadS32(curObj); + Ymid = _api.MemLib.ReadS32(curObj + 4); + int Xvec = (Xmid + _api.MemLib.ReadS32(curObj + 8) >> 16) - _camX; + int Yvec = (Ymid + _api.MemLib.ReadS32(curObj + 0xC) >> 16) - _camY; + Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; DrawBoxMWH(Xmid, Ymid, 0x30, 0x30, Color.Red); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue); - _api.GUILib.DrawPixel(Xmid, Ymid, Color.Red); + _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } curObj += 0x14; } } + + //Water Level + int waterLevel = _api.MemLib.ReadS16(0xFFA7B2); + _api.GUILib.DrawLine(0, waterLevel - _camY, _left + 320 + _right, waterLevel - _camY, Color.Aqua); + } void EccoAutofire(bool on) @@ -678,27 +2795,28 @@ namespace BizHawk.Client.EmuHawk uint mode = _api.MemLib.ReadU8(0xFFA555); int frameCount = _api.EmuLib.FrameCount(); int lagCount = _api.EmuLib.LagCount(); + _api.JoypadLib.Set("Start", on, 1); switch (mode) { case 0x00: if (on) { if (_api.MemLib.ReadU16(0xFFF342) == 0xFFFD) - _api.JoypadLib.Set("C", false, 1); - else _api.JoypadLib.Set("C", true, 1); + else + _api.JoypadLib.Set("C", false, 1); } break; case 0xE6: if (_api.MemLib.ReadU16(0xFFD5E8) == 0x00000002) { Dictionary buttons = new Dictionary(); - buttons["B"] = !(buttons["C"] = false); + buttons["B"] = buttons["C"] = true; _api.JoypadLib.Set(buttons, 1); } else { Dictionary buttons = new Dictionary(); - buttons["B"] = !(buttons["C"] = true); + buttons["B"] = buttons["C"] = false; _api.JoypadLib.Set(buttons, 1); } break; @@ -706,28 +2824,25 @@ namespace BizHawk.Client.EmuHawk charge = _api.MemLib.ReadU8(0xFFB19B); if (on) { - if ((charge == 1) || (_prevCharge == 1) || !(_prevOn || (_api.MemLib.ReadU8(0xFFB19B) != 0))) + if ((charge <= 1) && ((_api.MemLib.ReadU8(0xFFB1A6) == 0) || (_api.MemLib.ReadU8(0xFFB1A9) != 0))) _api.JoypadLib.Set("B", true, 1); - else + else if (charge > 1) _api.JoypadLib.Set("B", false, 1); - if ((_api.MemLib.ReadU16(0xFFB168) == 0x3800) && ((_api.MemLib.ReadU16(0xFFA7C8) % 2) != 0)) - _api.EmuLib.SetIsLagged(true); - _api.JoypadLib.Set("C", (_api.MemLib.ReadU16(0xFFA7C8) % 2) != 0, 1); + _api.JoypadLib.Set("C", (_api.MemLib.ReadU16(0xFFA7C8) % 2) == 0, 1); } - _prevCharge = charge; break; case 0x20: case 0x28: case 0xAC: if (on) { - _api.JoypadLib.Set("C", (_api.MemLib.ReadS8(0xFFAA6E) >= 11), 1); + if ((_api.MemLib.ReadU8(0xFFAB72) & 3) == 0) + _api.JoypadLib.Set("C", (_api.MemLib.ReadS8(0xFFAA6E) < 11), 1); } break; default: break; } - _prevOn = on; } public override void Init(IPluginAPI api) { @@ -741,7 +2856,9 @@ namespace BizHawk.Client.EmuHawk _mode = Modes.Ecco2; _camXAddr = 0xFFAD9C; _camYAddr = 0xFFAD9E; - EmuHawkPluginLibrary.SetGameExtraPadding(160, 112, 160, 112); + _top = _bottom = 112; + _left = _right = 160; + EmuHawkPluginLibrary.SetGameExtraPadding(_left, _top, _right, _bottom); } else if ((gameName == "ECCO The Dolphin (J) [!]") || (gameName == "ECCO The Dolphin (UE) [!]")) @@ -750,7 +2867,9 @@ namespace BizHawk.Client.EmuHawk _mode = Modes.Ecco1; _camXAddr = 0xFFB836; _camYAddr = 0xFFB834; - EmuHawkPluginLibrary.SetGameExtraPadding(160,112,160,112); + _top = _bottom = 112; + _left = _right = 160; + EmuHawkPluginLibrary.SetGameExtraPadding(_left, _top, _right, _bottom); } else { @@ -758,41 +2877,564 @@ namespace BizHawk.Client.EmuHawk Running = false; } } + private Color BackdropColor() + { + uint color = _api.MemLib.ReadU16(0, "CRAM"); + int r = (int)(( color & 0x7) * 0x22); + int g = (int)(((color >> 3) & 0x7) * 0x22); + int b = (int)(((color >> 6) & 0x7) * 0x22); + return Color.FromArgb(r, g, b); + + } public override void PreFrameCallback() { + _api.GUILib.ClearText(); if (_mode != Modes.disabled) { - EccoAutofire(_api.JoypadLib.Get(1)["C"] != _api.JoypadLib.GetImmediate()["P1 C"]); + _camX = _api.MemLib.ReadS16(_camXAddr) - _left; + _camY = _api.MemLib.ReadS16(_camYAddr) - _top; + EccoAutofire(_api.JoypadLib.Get(1)["Start"]); + if (_dumpMap == 0) + { + Color bg = BackdropColor(); + _api.GUILib.DrawRectangle(0, 0, _left + 320 + _right, _top, bg, bg); + _api.GUILib.DrawRectangle(0, 0, _left, _top + 224 + _bottom, bg, bg); + _api.GUILib.DrawRectangle(_left + 320, 0, _left + 320 + _right, _top + 224 + _bottom, bg, bg); + _api.GUILib.DrawRectangle(0, _top + 224, _left + 320 + _right, _top + 224 + _bottom, bg, bg); + } + uint mode = _api.MemLib.ReadByte(0xFFA555); + switch (mode) + { + case 0x20: + case 0x28: + case 0xAC: + //EmuHawkPluginLibrary.SetGameExtraPadding(160, 112, 160, 112); + if (_dumpMap <= 1) EccoDrawBoxes(); + // Uncomment the following block to enable mapdumping + /*if ((_api.MemLib.ReadU16(0xFFA7C8) > 1) && (_api.MemLib.ReadU16(0xFFA7C8) < 4)) + { + _dumpMap = 1; + _rowStateGuid = string.Empty; + _top = _bottom = _left = _right = 0; + EmuHawkPluginLibrary.SetGameExtraPadding(0, 0, 0, 0); + }*/ + if (_dumpMap == 3) + { + var levelID = _api.MemLib.ReadS8(0xFFA7D0); + int[] nameGroupLengths = + { + 7,1,11,6, + 4,3,3,3, + 7,1,2,1, + 0,0,0,0 + }; + int[] nameStringPtrOffsets = + { + 0xECBD0, 0x106BC0, 0x10AF8C, 0x135A48, + 0x1558E8, 0x15F700, 0x16537C, 0x180B00, + 0x193920, 0x1B3ECC, 0x1D7A44, 0x1DBF70, + 0x2DF2, 0x2DF6, 0x2DFA, 0x2DFE + }; + int nameGroup = 0; + var i = levelID; + while ((i >= 0) && (nameGroup < nameGroupLengths.Length)) + { + i -= nameGroupLengths[nameGroup]; + if (i >= 0) nameGroup++; + } + string name = "map"; + if (i < 0) + { + i += nameGroupLengths[nameGroup]; + uint strOffset = _api.MemLib.ReadU32(nameStringPtrOffsets[nameGroup] + 0x2E); + Console.WriteLine($"{i}"); + strOffset = _api.MemLib.ReadU32(strOffset + ((i << 3) + (i << 5)) + 0x22); + strOffset += 0x20; + List strTmp = new List(); + byte c; + do + { + c = (byte)_api.MemLib.ReadByte(strOffset++); + if (c != 0) + strTmp.Add(c); + } while (c != 0); + name = System.Text.Encoding.ASCII.GetString(strTmp.ToArray()); + TextInfo textInfo = new CultureInfo("en-US", false).TextInfo; + name = textInfo.ToTitleCase(name).Replace(" ", string.Empty); + } + EmuHawkPluginLibrary.Screenshot($"c:\\Ecco2Maps\\{levelID}_{name}_top.png"); + _destX = _destY = 0; + EmuHawkPluginLibrary.SetGameExtraPadding(0, 0, 0, 0); + _dumpMap++; + } + if (_dumpMap == 6) + { + var levelID = _api.MemLib.ReadS8(0xFFA7D0); + int[] nameGroupLengths = + { + 7,1,11,6, + 4,3,3,3, + 7,1,2,1, + 0,0,0,0 + }; + int[] nameStringPtrOffsets = + { + 0xECBD0, 0x106BC0, 0x10AF8C, 0x135A48, + 0x1558E8, 0x15F700, 0x16537C, 0x180B00, + 0x193920, 0x1B3ECC, 0x1D7A44, 0x1DBF70, + 0x2DF2, 0x2DF6, 0x2DFA, 0x2DFE + }; + int nameGroup = 0; + var i = levelID; + while ((i >= 0) && (nameGroup < nameGroupLengths.Length)) + { + i -= nameGroupLengths[nameGroup]; + if (i >= 0) nameGroup++; + } + string name = "map"; + if (i < 0) + { + i += nameGroupLengths[nameGroup]; + uint strOffset = _api.MemLib.ReadU32(nameStringPtrOffsets[nameGroup] + 0x2E); + Console.WriteLine($"{i}"); + strOffset = _api.MemLib.ReadU32(strOffset + ((i << 3) + (i << 5)) + 0x22); + strOffset += 0x20; + List strTmp = new List(); + byte c; + do + { + c = (byte)_api.MemLib.ReadByte(strOffset++); + if (c != 0) + strTmp.Add(c); + } while (c != 0); + name = System.Text.Encoding.ASCII.GetString(strTmp.ToArray()); + TextInfo textInfo = new CultureInfo("en-US", false).TextInfo; + name = textInfo.ToTitleCase(name).Replace(" ", string.Empty); + } + EmuHawkPluginLibrary.Screenshot($"c:\\Ecco2Maps\\{levelID}_{name}_bottom.png"); + _destX = _destY = 0; + _left = _right = 160; + _top = _bottom = 112; + EmuHawkPluginLibrary.SetGameExtraPadding(_left, _top, _right, _bottom); + _dumpMap = 0; + } + break; + case 0xF6: + EccoDraw3D(); + break; + default: + break; + } + _prevF = _api.MemLib.ReadU32(0xFFA524); } } public override void PostFrameCallback() { uint frame = _api.MemLib.ReadU32(0xFFA524); + if ((frame <= _prevF) && !_api.EmuLib.IsLagged()) + { + _api.EmuLib.SetIsLagged(true); + _api.EmuLib.SetLagCount(_api.EmuLib.LagCount() + 1); + } uint mode = _api.MemLib.ReadByte(0xFFA555); - switch (mode) { + _tickerY = 81; + string valueTicker = $"{_api.MemLib.ReadU32(0xFFA520)}:{_api.MemLib.ReadU32(0xFFA524)}:{_api.MemLib.ReadU16(0xFFA7C8)}:{mode:X2}"; + TickerText(valueTicker); + switch (mode) + { case 0x20: case 0x28: case 0xAC: - EmuHawkPluginLibrary.SetGameExtraPadding(160, 112, 160, 112); - EccoDrawBoxes(); + valueTicker = $"{_api.MemLib.ReadS16(0xFFAD9C)}:{_api.MemLib.ReadS16(0xFFAD9E)}"; + TickerText(valueTicker); + valueTicker = $"{_api.MemLib.ReadS32(0xFFAA1A) / 65536.0:0.######}:{_api.MemLib.ReadS32(0xFFAA1E) / 65536.0:0.######}"; + TickerText(valueTicker); + valueTicker = $"{_api.MemLib.ReadS32(0xFFAA32) / 65536.0:0.######}:{_api.MemLib.ReadU8(0xFFAA6D)}:{_api.MemLib.ReadU8(0xFFAA6E)}"; + TickerText(valueTicker); + valueTicker = $"{_api.MemLib.ReadS32(0xFFAA36) / 65536.0:0.######}:{_api.MemLib.ReadS32(0xFFAA3A) / 65536.0:0.######}"; + TickerText(valueTicker); + valueTicker = $"{_api.MemLib.ReadS32(0xFFA9D6) / 65536.0:0.######}:{_api.MemLib.ReadS32(0xFFA9DA) / 65536.0:0.######}"; + TickerText(valueTicker); + valueTicker = $"{_api.MemLib.ReadS32(0xFFAA3E) / 65536.0:0.######}:{_api.MemLib.ReadS32(0xFFAA42) / 65536.0:0.######}"; + TickerText(valueTicker); + valueTicker = $"{(_api.MemLib.ReadS32(0xFFAA36) + _api.MemLib.ReadS32(0xFFA9D6) + _api.MemLib.ReadS32(0xFFAA3E)) / 65536.0:0.######}:" + + $"{(_api.MemLib.ReadS32(0xFFAA3A) + _api.MemLib.ReadS32(0xFFA9DA) + _api.MemLib.ReadS32(0xFFAA42)) / 65536.0:0.######}"; + TickerText(valueTicker); + valueTicker = $"{_api.MemLib.ReadU8(0xFFAB72)}:{_api.MemLib.ReadU8(0xFFAB70)}:{(short)_api.MemLib.ReadS16(0xFFAA52):X4}:{(short)_api.MemLib.ReadS16(0xFFAA5A):X4}"; + TickerText(valueTicker); + switch (_api.MemLib.ReadU8(0xFFA7D0)) + { + case 1: + case 2: + case 3: + case 30: + case 46: + var globeFlags = _api.MemLib.ReadU32(0xFFD434) >> 1; + var globeFlags2 = _api.MemLib.ReadU32(0xFFD438) >> 1; + int i, j = i = 0; + while (globeFlags > 0) + { + globeFlags >>= 1; + i++; + } + while (globeFlags2 > 0) + { + globeFlags2 >>= 1; + j++; + } + TickerText($"{i}:{j}", Color.Blue); + break; + default: + break; + } + if (_dumpMap != 0) + { + _api.MemLib.WriteS16(0xFFAA16, 7); + _api.MemLib.WriteS16(0xFFAA18, 56); + int PlayerX = _api.MemLib.ReadS16(0xFFAA1A) - _camX; + int PlayerY = _api.MemLib.ReadS16(0xFFAA1E) - _camY; + if ((PlayerX < -64) || (PlayerX > 384) || (PlayerY < -64) || (PlayerY > 288)) + { + _api.MemLib.WriteByte(0xFFAA70, 0xC); + _api.MemLib.WriteS16(0xFFA7CA, 1); + } + else + { + _api.MemLib.WriteByte(0xFFAA70, 0x0); + _api.MemLib.WriteS16(0xFFA7CA, 0); + } + } + if (_dumpMap == 1) + { + int levelWidth = _api.MemLib.ReadS16(0xFFA7A8); + int levelHeight = _api.MemLib.ReadS16(0xFFA7AC); + var levelID = _api.MemLib.ReadByte(0xFFA7D0); + var s = _api.EmuLib.GetSettings() as GPGX.GPGXSettings; + s.DrawBGA = false; + s.DrawBGB = false; + s.DrawBGW = false; + s.DrawObj = false; + s.Backdrop = true; + _api.EmuLib.PutSettings(s); + if ((_camX == _destX) && (_camY == _destY)) + { + if ((_prevX != _camX) || (_prevY != _camY)) + { + if (_destX == 0) + { + if (_rowStateGuid != string.Empty) + { + _api.MemStateLib.DeleteState(_rowStateGuid); + } + _rowStateGuid = _api.MemStateLib.SaveCoreStateToMemory(); + } + _snapPast = 1; + } + else + { + _snapPast--; + } + if (_snapPast == 0) + { + EmuHawkPluginLibrary.Screenshot($"c:\\Ecco2Maps\\{levelID}\\{_destY}_{_destX}_top.png"); + if (_destX >= levelWidth - 320) + { + if (_destY < levelHeight - 224) + { + if (_rowStateGuid != string.Empty) + { + _api.MemStateLib.LoadCoreStateFromMemory(_rowStateGuid); + } + _destX = 0; + _destY = Math.Min(_destY + 111, levelHeight - 224); + } + } + else + _destX = Math.Min(_destX + 159, levelWidth - 320); + if ((_prevX == _destX) && (_prevY == _destY)) + { + EmuHawkPluginLibrary.SetGameExtraPadding(levelWidth - 320, levelHeight - 224, 0, 0); + _dumpMap++; + } + } + } + _api.MemLib.WriteS16(0xFFAD8C, _destX); + _api.MemLib.WriteS16(0xFFAD90, _destY); + } + else if (_dumpMap == 2) + { + if (_rowStateGuid != String.Empty) + _api.MemStateLib.DeleteState(_rowStateGuid); + _rowStateGuid = String.Empty; + int levelWidth = _api.MemLib.ReadS16(0xFFA7A8); + int levelHeight = _api.MemLib.ReadS16(0xFFA7AC); + EmuHawkPluginLibrary.SetGameExtraPadding(levelWidth - 320, levelHeight - 224, 0, 0); + var levelID = _api.MemLib.ReadS8(0xFFA7D0); + var s = _api.EmuLib.GetSettings() as GPGX.GPGXSettings; + s.DrawBGA = false; + s.DrawBGB = false; + s.DrawBGW = false; + s.DrawObj = false; + s.Backdrop = true; + _api.EmuLib.PutSettings(s); + + var a = _api.GUILib.GetAttributes(); + a.SetColorKey(Color.FromArgb(0, 0x11, 0x22, 0x33), Color.FromArgb(0, 0x11, 0x22, 0x33)); + _api.GUILib.SetAttributes(a); + _api.GUILib.ToggleCompositingMode(); + + _api.GUILib.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{levelHeight - 224}_{levelWidth - 320}_top.png", 2, 2, 318, 222, (levelWidth - 318), (levelHeight - 222), 318, 222); + for (int x = ((levelWidth - 320) / 159) * 159; x >= 0; x -= 159) + { + var dx = (x == 0) ? 0 : 2; + _api.GUILib.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{levelHeight - 224}_{x}_top.png", dx, 2, 320 - dx, 222, x + dx, (levelHeight - 222), 320 - dx, 222); + } + for (int y = ((levelHeight - 224) / 111) * 111; y >= 0; y -= 111) + { + var dy = (y == 0) ? 0 : 2; + _api.GUILib.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{y}_{levelWidth - 320}_top.png", 2, dy, 318, 224 - 2, levelWidth - 318, y + dy, 318, 224 - dy); + for (int x = ((levelWidth - 320) / 159) * 159; x >= 0; x -= 159) + { + var dx = (x == 0) ? 0 : 2; + _api.GUILib.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{y}_{x}_top.png", dx, dy, 320 - dx, 224 - dy, x + dx, y + dy, 320 - dx, 224 - dy); + } + } + + _api.GUILib.ToggleCompositingMode(); + _api.GUILib.SetAttributes(new System.Drawing.Imaging.ImageAttributes()); + _api.GUILib.DrawFinish(); + _dumpMap++; + } + else if (_dumpMap == 4) + { + int levelWidth = _api.MemLib.ReadS16(0xFFA7A8); + int levelHeight = _api.MemLib.ReadS16(0xFFA7AC); + var levelID = _api.MemLib.ReadByte(0xFFA7D0); + var s = _api.EmuLib.GetSettings() as GPGX.GPGXSettings; + s.DrawBGA = (levelID != 29); + s.DrawBGB = (levelID == 7); + s.DrawBGW = true; + s.DrawObj = true; + s.Backdrop = false; + _api.EmuLib.PutSettings(s); + if ((_camX == _destX) && (_camY == _destY)) + { + if ((_prevX != _camX) || (_prevY != _camY)) + { + if (_destX == 0) + { + if (_rowStateGuid != string.Empty) + { + _api.MemStateLib.DeleteState(_rowStateGuid); + } + _rowStateGuid = _api.MemStateLib.SaveCoreStateToMemory(); + } + _snapPast = 1; + } + else + { + _snapPast--; + } + if (_snapPast == 0) + { + EmuHawkPluginLibrary.Screenshot($"c:\\Ecco2Maps\\{levelID}\\{_destY}_{_destX}_bottom.png"); + if (_destX >= levelWidth - 320) + { + if (_destY < levelHeight - 224) + { + if (_rowStateGuid != string.Empty) + { + _api.MemStateLib.LoadCoreStateFromMemory(_rowStateGuid); + } + _destX = 0; + _destY = Math.Min(_destY + 111, levelHeight - 224); + } + } + else + _destX = Math.Min(_destX + 159, levelWidth - 320); + if ((_prevX == _destX) && (_prevY == _destY)) + { + EmuHawkPluginLibrary.SetGameExtraPadding(levelWidth - 320, levelHeight - 224, 0, 0); + _dumpMap++; + } + } + } + _api.MemLib.WriteS16(0xFFAD8C, _destX); + _api.MemLib.WriteS16(0xFFAD90, _destY); + } + else if (_dumpMap == 5) + { + if (_rowStateGuid != String.Empty) + _api.MemStateLib.DeleteState(_rowStateGuid); + _rowStateGuid = String.Empty; + int levelWidth = _api.MemLib.ReadS16(0xFFA7A8); + int levelHeight = _api.MemLib.ReadS16(0xFFA7AC); + var levelID = _api.MemLib.ReadS8(0xFFA7D0); + var s = _api.EmuLib.GetSettings() as GPGX.GPGXSettings; + s.DrawBGA = (levelID != 29); + s.DrawBGB = (levelID == 7); + s.DrawBGW = true; + s.DrawObj = true; + s.Backdrop = false; + _api.EmuLib.PutSettings(s); + _api.GUILib.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{levelHeight - 224}_{levelWidth - 320}_bottom.png", 2, 2, 318, 222, (levelWidth - 318), (levelHeight - 222), 318, 222); + for (int x = ((levelWidth - 320) / 159) * 159; x >= 0; x -= 159) + { + var dx = (x == 0) ? 0 : 2; + _api.GUILib.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{levelHeight - 224}_{x}_bottom.png", dx, 2, 320 - dx, 222, x + dx, (levelHeight - 222), 320 - dx, 222); + } + for (int y = ((levelHeight - 224) / 111) * 111; y >= 0; y -= 111) + { + var dy = (y == 0) ? 0 : 2; + _api.GUILib.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{y}_{levelWidth - 320}_bottom.png", 2, dy, 318, 224 - 2, levelWidth - 318, y + dy, 318, 224 - dy); + for (int x = ((levelWidth - 320) / 159) * 159; x >= 0; x -= 159) + { + var dx = (x == 0) ? 0 : 2; + _api.GUILib.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{y}_{x}_bottom.png", dx, dy, 320 - dx, 224 - dy, x + dx, y + dy, 320 - dx, 224 - dy); + } + } + _api.GUILib.DrawFinish(); + _dumpMap++; + } + _prevX = _camX; + _prevY = _camY; break; case 0xF6: - EmuHawkPluginLibrary.SetGameExtraPadding(0, 0, 0, 0); - EccoDraw3D(); + valueTicker = $"{_api.MemLib.ReadS32(0xFFD5E0) / 4096.0:0.######}:{_api.MemLib.ReadS32(0xFFD5E8) / 4096.0:0.######}:{_api.MemLib.ReadS32(0xFFD5E4) / 2048.0:0.######}"; + TickerText(valueTicker); + valueTicker = $"{_api.MemLib.ReadS32(0xFFB13A) / 4096.0:0.######}:{_api.MemLib.ReadS32(0xFFB142) / 4096.0:0.######}:{_api.MemLib.ReadS32(0xFFB13E) / 2048.0:0.######}"; + TickerText(valueTicker); + valueTicker = $"{_api.MemLib.ReadS32(0xFFB162) / 4096.0:0.######}:{_api.MemLib.ReadS32(0xFFB16A) / 4096.0:0.######}:{_api.MemLib.ReadS32(0xFFB166) / 2048.0:0.######}"; + TickerText(valueTicker); + valueTicker = $"{_api.MemLib.ReadU8(0xFFB19B)}:{_api.MemLib.ReadU8(0xFFB1A6)}:{_api.MemLib.ReadU8(0xFFB1A9)}"; + TickerText(valueTicker); + int SpawnZ = _api.MemLib.ReadS32(0xFFD5F0) + 0x180000; + int nextRingZ = SpawnZ; + while (((nextRingZ >> 17) & 0xF) != 0) + { + nextRingZ += 0x20000; + } + valueTicker = $"{_api.MemLib.ReadS32(0xFFD856) / 4096.0:0.######}:{_api.MemLib.ReadS32(0xFFD85A) / 4096.0:0.######}:{(nextRingZ - 0x160000) / 2048.0:0.######}:{nextRingZ / 2048.0:0.######}"; + TickerText(valueTicker); + var levelId = -1 - _api.MemLib.ReadS16(0xFFA79E); + bool spawn = false; + bool firstRand = true; + int SpawnX, SpawnY, z; + int CamX = (_api.MemLib.ReadS32(0xFFD5E0) >> 0xC) - _left; + int CamY = (_api.MemLib.ReadS32(0xFFD5E8) >> 0xC) + _top; + int CamZ = (_api.MemLib.ReadS32(0xFFD5E4) >> 0xC) + _top; + while (!spawn) + { + var temp = (SpawnZ >> 17) & 0xFF; + var controlList = _api.MemLib.ReadS32(0x7B54 + (levelId << 2)); + temp = _api.MemLib.ReadS16(controlList + (temp << 1)); + var v = temp & 0xFF; + var num = (temp >> 8) + v; + temp = v; + spawn = (num > 2); + if (spawn) for (; temp < num; temp++) + { + switch (temp) + { + case 0: + case 1: + case 13: + // Nothing important spawns + break; + case 2: + // Jellyfish + SpawnX = _api.MemLib.ReadS32(0xFFB13A) + 0x40000 - (EccoRand(firstRand) << 3); + firstRand = false; + SpawnY = -0xC0000 + (EccoRand() << 3); + z = SpawnZ + 0x20000;// ? + valueTicker = $"{SpawnX / 4096.0:0.######}:{SpawnY / 4096.0:0.######}:{(z - 0x180000) / 2048.0:0.######}:{z / 2048.0:0.######}"; + TickerText(valueTicker); + SpawnX = 160 + ((SpawnX >> 0xC) - CamX); + SpawnY = 112 - ((SpawnY >> 0xC) - CamY); + z = _top + 112 - ((z >> 0xC) - CamZ); + DrawBoxMWH(SpawnX, SpawnY, 1, 1, Color.Gray); + DrawBoxMWH(SpawnX, z, 1, 1, Color.Gray); + break; + case 3: + // Eagle + SpawnX = _api.MemLib.ReadS32(0xFFB13A) + 0x40000 - (EccoRand(firstRand) << 3); + firstRand = false; + SpawnY = 0x50000; + z = SpawnZ - 0x40000 + 0x20000;// ? + valueTicker = $"{SpawnX / 4096.0:0.######}:{SpawnY / 4096.0:0.######}:{(z - 0x180000) / 2048.0:0.######}:{z / 2048.0:0.######}"; + TickerText(valueTicker); + SpawnX = 160 + ((SpawnX >> 0xC) - CamX); + SpawnY = 112 - ((SpawnY >> 0xC) - CamY); + z = _top + 112 - ((z >> 0xC) - CamZ); + DrawBoxMWH(SpawnX, SpawnY, 1, 1, Color.Gray); + DrawBoxMWH(SpawnX, z, 1, 1, Color.Gray); + break; + case 4: + // Shark + bool left = (EccoRand(firstRand) > 0x8000); + firstRand = false; + var xdiff = 0xC0000 + (EccoRand() << 3); + SpawnX = _api.MemLib.ReadS32(0xFFB13A) + (left ? -xdiff : xdiff); + SpawnY = Math.Min(_api.MemLib.ReadS32(0xFFB142), -0x10000) - (EccoRand() + 0x10000); + z = SpawnZ + 0x20000; + valueTicker = $"{SpawnX / 4096.0:0.######}:{SpawnY / 4096.0:0.######}:{(z - 0x180000) / 2048.0:0.######}:{z / 2048.0:0.######}"; + TickerText(valueTicker); + SpawnX = 160 + ((SpawnX >> 0xC) - CamX); + SpawnY = 112 - ((SpawnY >> 0xC) - CamY); + z = _top + 112 - ((z >> 0xC) - CamZ); + DrawBoxMWH(SpawnX, SpawnY, 1, 1, Color.Gray); + DrawBoxMWH(SpawnX, z, 1, 1, Color.Gray); + break; + case 5: + case 6: + case 7: + case 8: + // Vine + EccoRand(firstRand); + firstRand = false; + if ((temp & 1) == 1) EccoRand(); + EccoRand(); + break; + case 9: + case 10: + case 11: + case 12: + // Unknown, possibly just rand incrementation? + EccoRand(firstRand); + firstRand = false; + if ((temp & 1) == 1) EccoRand(); + break; + case 14: + // Shell + SpawnX = _api.MemLib.ReadS32(0xFFB13A) - 0x20000 + (EccoRand(firstRand) << 2); + firstRand = false; + SpawnY = -0x80000; + z = SpawnZ + 0x20000; + EccoRand(); + valueTicker = $"{SpawnX / 4096.0:0.######}:{SpawnY / 4096.0:0.######}:{(z - 0x180000) / 2048.0:0.######}:{(z - 0x80000) / 2048.0:0.######}"; + TickerText(valueTicker); + SpawnX = 160 + ((SpawnX >> 0xC) - CamX); + SpawnY = 112 - ((SpawnY >> 0xC) - CamY); + z = _top + 112 - ((z >> 0xC) - CamZ); + DrawBoxMWH(SpawnX, SpawnY, 1, 1, Color.Gray); + DrawBoxMWH(SpawnX, z, 1, 1, Color.Gray); + break; + } + } + SpawnZ += 0x20000; + } break; - default: - EmuHawkPluginLibrary.SetGameExtraPadding(0, 0, 0, 0); - break; } - _camX = _api.MemLib.ReadS16(_camXAddr)-160; - _camY = _api.MemLib.ReadS16(_camYAddr)-112; - if (frame <= _prevF) - _api.EmuLib.SetIsLagged(true); - _prevF = frame; + _api.JoypadLib.Set("C", null, 1); + _api.JoypadLib.Set("Start", null, 1); + var color = _turnSignalColors[_api.MemLib.ReadS8(0xFFA7C9) & 7]; + _api.GUILib.DrawRectangle(_left - 48, _top - 112, 15, 15, color, color); } public override void LoadStateCallback(string name) { - _prevF = _api.MemLib.ReadU32(0xFFA524); + _api.GUILib.DrawNew("emu"); + PreFrameCallback(); + _api.GUILib.DrawFinish(); } } } From 59f30b4a79a0bc904cea91d06d43696cf768df58 Mon Sep 17 00:00:00 2001 From: upthorn Date: Wed, 5 Dec 2018 12:07:10 -0800 Subject: [PATCH 008/301] Allow signed display of fixed point values. --- BizHawk.Client.Common/tools/Watch/DWordWatch.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BizHawk.Client.Common/tools/Watch/DWordWatch.cs b/BizHawk.Client.Common/tools/Watch/DWordWatch.cs index 1e8c41f055..79a9ef03aa 100644 --- a/BizHawk.Client.Common/tools/Watch/DWordWatch.cs +++ b/BizHawk.Client.Common/tools/Watch/DWordWatch.cs @@ -217,9 +217,9 @@ namespace BizHawk.Client.Common case DisplayType.Hex: return val.ToHexString(8); case DisplayType.FixedPoint_20_12: - return $"{val / 4096.0:0.######}"; + return $"{(int)val / 4096.0:0.######}"; case DisplayType.FixedPoint_16_16: - return $"{val / 65536.0:0.######}"; + return $"{(int)val / 65536.0:0.######}"; case DisplayType.Float: var bytes = BitConverter.GetBytes(val); var _float = BitConverter.ToSingle(bytes, 0); From c50267fe96c66358c55069f19648f45eaf4db8a8 Mon Sep 17 00:00:00 2001 From: upthorn Date: Wed, 5 Dec 2018 12:07:53 -0800 Subject: [PATCH 009/301] GPGX trace no longer crashes when executing from M68K RAM. --- BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs index b6f867ace4..dfddf14bc7 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs @@ -24,7 +24,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx var regs = DebuggableCore.GetCpuFlagsAndRegisters(); uint pc = (uint)regs["M68K PC"].Value; var length = 0; - var disasm = Disassembler.Disassemble(MemoryDomains.SystemBus, pc, out length); + var disasm = Disassembler.Disassemble(MemoryDomains.SystemBus, pc & 0xFFFFFF, out length); var traceInfo = new TraceInfo { From eee1cb481c2d409633e9a00852c0fbcfe27079e3 Mon Sep 17 00:00:00 2001 From: Asnivor Date: Sat, 8 Dec 2018 08:47:17 +0000 Subject: [PATCH 010/301] Fix Lua documentation - #1389 --- BizHawk.Client.Common/lua/EmuLuaLibrary.GameInfo.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BizHawk.Client.Common/lua/EmuLuaLibrary.GameInfo.cs b/BizHawk.Client.Common/lua/EmuLuaLibrary.GameInfo.cs index c098594f37..61d2d4afb0 100644 --- a/BizHawk.Client.Common/lua/EmuLuaLibrary.GameInfo.cs +++ b/BizHawk.Client.Common/lua/EmuLuaLibrary.GameInfo.cs @@ -19,7 +19,7 @@ namespace BizHawk.Client.Common public override string Name => "gameinfo"; [LuaMethodExample("local stgamget = gameinfo.getromname( );")] - [LuaMethod("getromname", "returns the path of the currently loaded rom, if a rom is loaded")] + [LuaMethod("getromname", "returns the name of the currently loaded rom, if a rom is loaded")] public string GetRomName() { if (Global.Game != null) From be218685c5f66b69a53ccc95b85d7e554f7fc815 Mon Sep 17 00:00:00 2001 From: feos Date: Sat, 8 Dec 2018 13:40:50 +0300 Subject: [PATCH 011/301] update gliden (partially fixes bomberman) --- libmupen64plus/GLideN64 | 2 +- output/dll/mupen64plus-video-GLideN64.dll | Bin 2115584 -> 2118656 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/libmupen64plus/GLideN64 b/libmupen64plus/GLideN64 index d6915e13c4..57ba873c5e 160000 --- a/libmupen64plus/GLideN64 +++ b/libmupen64plus/GLideN64 @@ -1 +1 @@ -Subproject commit d6915e13c4904e38d221bd49f5efe9b16845a367 +Subproject commit 57ba873c5e117a42f94299cb7ddaa1066249b416 diff --git a/output/dll/mupen64plus-video-GLideN64.dll b/output/dll/mupen64plus-video-GLideN64.dll index a2cb0a6269186b83ece1aefa5da8fe6a36117688..054dc854c15d8af961a0a25028e16d05531a1e4a 100644 GIT binary patch delta 611911 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�j~s=q{Sr1P9m!jpTV%Z&KjOj*pnArkSvNy}U> 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�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 delta 607538 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%0A+^j`)?uuhT;CwNEj2Lp9D? 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

  • m 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 Au>b%7 From afebde0d3e61d5e3e78baf459b9dfdf7392a67af Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Fri, 14 Dec 2018 18:23:24 -0600 Subject: [PATCH 012/301] A7800: change 'trigger' to 'button' --- BizHawk.Client.EmuHawk/tools/VirtualPads/schema/A78Schema.cs | 2 +- .../Consoles/Atari/A7800Hawk/A7800HawkControllers.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/A78Schema.cs b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/A78Schema.cs index 61de5d9c5c..eeaf72f352 100644 --- a/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/A78Schema.cs +++ b/BizHawk.Client.EmuHawk/tools/VirtualPads/schema/A78Schema.cs @@ -155,7 +155,7 @@ namespace BizHawk.Client.EmuHawk }, new PadSchema.ButtonSchema { - Name = "P" + controller + " Trigger", + Name = "P" + controller + " Button", DisplayName = "1", Location = new Point(120, 24), Type = PadSchema.PadInputType.Boolean diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800HawkControllers.cs b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800HawkControllers.cs index 3241e128ca..85f62dc6bc 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800HawkControllers.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800HawkControllers.cs @@ -158,7 +158,7 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk private static readonly string[] BaseDefinition = { - "Up", "Down", "Left", "Right", "Trigger" + "Up", "Down", "Left", "Right", "Button" }; private static byte[] HandControllerButtons = From 6fb626386b4e8e32258897b9bf293f7b698b29a6 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 15 Dec 2018 13:05:01 -0600 Subject: [PATCH 013/301] GBHawk: Pass sprite tests --- .../Consoles/Nintendo/GBHawk/GBC_PPU.cs | 27 ++++++++++++------- .../Consoles/Nintendo/GBHawk/GB_PPU.cs | 18 ++++++++----- 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs index e6de37117d..125bd266e5 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs @@ -661,6 +661,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk fetch_sprite = false; going_to_fetch = false; first_fetch = true; + consecutive_sprite = -render_offset + 8; no_sprites = false; evaled_sprites = 0; window_pre_render = false; @@ -1155,21 +1156,29 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk } } + // x scroll offsets the penalty table // there is no penalty if the next sprites to be fetched are within the currentfetch block (8 pixels) if (first_fetch || (last_eval >= consecutive_sprite)) { - if ((last_eval % 8) == 0) { sprite_fetch_counter += 5; } - else if ((last_eval % 8) == 1) { sprite_fetch_counter += 4; } - else if ((last_eval % 8) == 2) { sprite_fetch_counter += 3; } - else if ((last_eval % 8) == 3) { sprite_fetch_counter += 2; } - else if ((last_eval % 8) == 4) { sprite_fetch_counter += 1; } - else if ((last_eval % 8) == 5) { sprite_fetch_counter += 0; } - else if ((last_eval % 8) == 6) { sprite_fetch_counter += 0; } - else if ((last_eval % 8) == 7) { sprite_fetch_counter += 0; } + if (((last_eval + render_offset) % 8) == 0) { sprite_fetch_counter += 5; } + else if (((last_eval + render_offset) % 8) == 1) { sprite_fetch_counter += 4; } + else if (((last_eval + render_offset) % 8) == 2) { sprite_fetch_counter += 3; } + else if (((last_eval + render_offset) % 8) == 3) { sprite_fetch_counter += 2; } + else if (((last_eval + render_offset) % 8) == 4) { sprite_fetch_counter += 1; } + else if (((last_eval + render_offset) % 8) == 5) { sprite_fetch_counter += 0; } + else if (((last_eval + render_offset) % 8) == 6) { sprite_fetch_counter += 0; } + else if (((last_eval + render_offset) % 8) == 7) { sprite_fetch_counter += 0; } + + consecutive_sprite = (int)Math.Floor((double)(last_eval + render_offset) / 8) * 8 + 8 - render_offset; + + // special case exists here for sprites at zero with non-zero x-scroll. Not sure exactly the reason for it. + if (last_eval == 0 && render_offset != 0) + { + sprite_fetch_counter += render_offset; + } } total_counter += sprite_fetch_counter; - consecutive_sprite = last_eval + (8 - (last_eval % 8)); first_fetch = false; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GB_PPU.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GB_PPU.cs index 7b6a0ce9cc..d6cae63418 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GB_PPU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GB_PPU.cs @@ -75,13 +75,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk //if (!STAT.Bit(6)) { LYC_INT = false; } if (!STAT.Bit(4)) { VBL_INT = false; } - break; + break; case 0xFF42: // SCY scroll_y = value; - break; + break; case 0xFF43: // SCX scroll_x = value; - break; + break; case 0xFF44: // LY LY = 0; /*reset*/ break; @@ -455,6 +455,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk fetch_sprite = false; going_to_fetch = false; first_fetch = true; + consecutive_sprite = -render_offset + 8; no_sprites = false; evaled_sprites = 0; window_pre_render = false; @@ -852,8 +853,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk tile_data_latch[0] = tile_data[0]; tile_data_latch[1] = tile_data[1]; } - - if (consecutive_sprite > 0) { consecutive_sprite -= 1; } } // every in range sprite takes 6 cycles to process @@ -892,10 +891,17 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk else if (((last_eval + render_offset) % 8) == 5) { sprite_fetch_counter += 0; } else if (((last_eval + render_offset) % 8) == 6) { sprite_fetch_counter += 0; } else if (((last_eval + render_offset) % 8) == 7) { sprite_fetch_counter += 0; } + + consecutive_sprite = (int)Math.Floor((double)(last_eval + render_offset) / 8) * 8 + 8 - render_offset; + + // special case exists here for sprites at zero with non-zero x-scroll. Not sure exactly the reason for it. + if (last_eval == 0 && render_offset != 0) + { + sprite_fetch_counter += render_offset; + } } total_counter += sprite_fetch_counter; - consecutive_sprite = last_eval + (8 - (last_eval % 8)); first_fetch = false; } From f2bcabb10fd0dec69a5327c554b87bdeaa75cf23 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 16 Dec 2018 09:50:35 -0600 Subject: [PATCH 014/301] GBHawk:more ppu work --- .../Consoles/Nintendo/GBHawk/GBC_PPU.cs | 59 +++++++++---------- .../Consoles/Nintendo/GBHawk/GB_PPU.cs | 40 +++++-------- .../Consoles/Nintendo/GBHawk/PPU.cs | 7 --- 3 files changed, 44 insertions(+), 62 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs index 125bd266e5..8b50b3b177 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs @@ -1,5 +1,4 @@ using System; -using BizHawk.Emulation.Common; using BizHawk.Common.NumberExtensions; using BizHawk.Common; @@ -138,8 +137,16 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk LYC = value; if (LCDC.Bit(7)) { - if (LY != LYC) { STAT &= 0xFB; } - else { STAT |= 0x4; } + if (LY != LYC) { STAT &= 0xFB; LYC_INT = false; } + else { STAT |= 0x4; LYC_INT = true; } + + // special case: at cycle 454, some strange things are happening, and it appears as though LY becomes LY + 1 + // two cycles ahead of where it's supposed to. this is probably related to strange behaviour around cycle 452 + if ((LY_inc == 0) && cycle == 6) + { + //if (0 == LYC) { STAT |= 0x4; LYC_INT = true; } + //else { STAT &= 0xFB; LYC_INT = false; } + } } break; case 0xFF46: // DMA @@ -362,7 +369,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk LY_inc = 1; Core.in_vblank = false; - STAT &= 0xFC; + //STAT &= 0xFC; // special note here, the y coordiate of the window is kept if the window is deactivated // meaning it will pick up where it left off if re-enabled later @@ -396,14 +403,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk STAT &= 0xFC; // also the LCD doesn't turn on right away - // also, the LCD does not enter mode 2 on scanline 0 when first turned on no_scan = true; - cycle = 8; + cycle = 6; } // the VBL stat is continuously asserted - if ((LY >= 144)) + if (LY >= 144) { if (STAT.Bit(4)) { @@ -440,7 +446,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk if (STAT.Bit(5)) { VBL_INT = false; } } - if ((cycle == 6) && (LY == 153)) + if ((cycle == 8) && (LY == 153)) { LY = 0; LY_inc = 0; @@ -506,6 +512,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk if (LY != 0) { HBL_INT = false; + if (STAT.Bit(5)) { OAM_INT = true; } } } @@ -513,7 +520,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk { // apparently, writes can make it to OAM one cycle longer then reads OAM_access_write = false; - + // here mode 2 will be set to true and interrupts fired if enabled STAT &= 0xFC; STAT |= 0x2; @@ -539,6 +546,12 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk OAM_INT = false; OAM_access_write = false; VRAM_access_write = false; + + // x-scroll is expected to be latched one cycle later + // this is fine since nothing has started in the rendering until the second cycle + // calculate the column number of the tile to start with + x_tile = (int)Math.Floor((float)(scroll_x) / 8); + render_offset = scroll_x % 8; } // render the screen and handle hblank @@ -646,10 +659,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk // window X is latched for the scanline, mid-line changes have no effect window_x_latch = window_x; - // calculate the column number of the tile to start with - x_tile = (int)Math.Floor((float)(scroll_x) / 8); - render_offset = scroll_x % 8; - OAM_scan_index = 0; read_case = 0; internal_cycle = 0; @@ -683,7 +692,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk if (SL_sprites_index == 0) { no_sprites = true; } // it is much easier to process sprites if we order them according to the rules of sprite priority first if (!no_sprites) { reorder_and_assemble_sprites(); } - } // before anything else, we have to check if windowing is in effect @@ -847,7 +855,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk if (pixel_counter == 160) { read_case = 8; - hbl_countdown = 1; } } else if (pixel_counter < 0) @@ -1094,23 +1101,15 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk case 8: // done reading, we are now in phase 0 pre_render = true; - // the other interrupts appear to be delayed by 1 CPU cycle, so do the same here - if (hbl_countdown > 0) - { - hbl_countdown--; - STAT &= 0xFC; - STAT |= 0x00; + STAT &= 0xFC; + STAT |= 0x00; - if (hbl_countdown == 0) - { - if (STAT.Bit(3)) { HBL_INT = true; } + if (STAT.Bit(3)) { HBL_INT = true; } - OAM_access_read = true; - OAM_access_write = true; - VRAM_access_read = true; - VRAM_access_write = true; - } - } + OAM_access_read = true; + OAM_access_write = true; + VRAM_access_read = true; + VRAM_access_write = true; break; case 9: diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GB_PPU.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GB_PPU.cs index d6cae63418..a436d4045b 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GB_PPU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GB_PPU.cs @@ -1,7 +1,5 @@ using System; -using BizHawk.Emulation.Common; using BizHawk.Common.NumberExtensions; -using BizHawk.Common; namespace BizHawk.Emulation.Cores.Nintendo.GBHawk { @@ -197,7 +195,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk } // the VBL stat is continuously asserted - if ((LY >= 144)) + if (LY >= 144) { if (STAT.Bit(4)) { @@ -333,6 +331,12 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk OAM_INT = false; OAM_access_write = false; VRAM_access_write = false; + + // x-scroll is expected to be latched one cycle later + // this is fine since nothing has started in the rendering until the second cycle + // calculate the column number of the tile to start with + x_tile = (int)Math.Floor((float)(scroll_x) / 8); + render_offset = scroll_x % 8; } // render the screen and handle hblank @@ -422,7 +426,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk // might be needed, not sure yet public override void latch_delay() { - //BGP_l = BGP; + } public override void render(int render_cycle) @@ -440,10 +444,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk // window X is latched for the scanline, mid-line changes have no effect window_x_latch = window_x; - // calculate the column number of the tile to start with - x_tile = (int)Math.Floor((float)(scroll_x) / 8); - render_offset = scroll_x % 8; - OAM_scan_index = 0; read_case = 0; internal_cycle = 0; @@ -479,7 +479,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk if (SL_sprites_index == 0) { no_sprites = true; } // it is much easier to process sprites if we order them according to the rules of sprite priority first if (!no_sprites) { reorder_and_assemble_sprites(); } - } // before anything else, we have to check if windowing is in effect @@ -592,7 +591,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk if (pixel_counter == 160) { read_case = 8; - hbl_countdown = 1; } } else if (pixel_counter < 0) @@ -818,23 +816,15 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk case 8: // done reading, we are now in phase 0 pre_render = true; - // the other interrupts appear to be delayed by 1 CPU cycle, so do the same here - if (hbl_countdown > 0) - { - hbl_countdown--; - STAT &= 0xFC; - STAT |= 0x00; + STAT &= 0xFC; + STAT |= 0x00; - if (hbl_countdown == 0) - { - if (STAT.Bit(3)) { HBL_INT = true; } + if (STAT.Bit(3)) { HBL_INT = true; } - OAM_access_read = true; - OAM_access_write = true; - VRAM_access_read = true; - VRAM_access_write = true; - } - } + OAM_access_read = true; + OAM_access_write = true; + VRAM_access_read = true; + VRAM_access_write = true; break; case 9: diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/PPU.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/PPU.cs index 37ffb9078e..520db111e1 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/PPU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/PPU.cs @@ -1,6 +1,4 @@ using System; -using BizHawk.Emulation.Common; -using BizHawk.Common.NumberExtensions; using BizHawk.Common; namespace BizHawk.Emulation.Cores.Nintendo.GBHawk @@ -12,7 +10,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk public uint[] BG_palette = new uint[32]; public uint[] OBJ_palette = new uint[32]; - public bool HDMA_active; // register variables @@ -44,7 +41,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk public bool LCD_was_off; public bool stat_line; public bool stat_line_old; - public int hbl_countdown; // OAM scan public bool DMA_OAM_access; public bool OAM_access_read; @@ -151,7 +147,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk } - public virtual void Reset() { @@ -166,7 +161,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk public virtual void SyncState(Serializer ser) { - ser.Sync("BG_palette", ref BG_palette, false); ser.Sync("OBJ_palette", ref OBJ_palette, false); ser.Sync("HDMA_active", ref HDMA_active); @@ -197,7 +191,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk ser.Sync("OAM_INT", ref OAM_INT); ser.Sync("stat_line", ref stat_line); ser.Sync("stat_line_old", ref stat_line_old); - ser.Sync("hbl_countdown", ref hbl_countdown); ser.Sync("LCD_was_off", ref LCD_was_off); ser.Sync("OAM_scan_index", ref OAM_scan_index); ser.Sync("SL_sprites_index", ref SL_sprites_index); From 0fad2495d14460c238fe9dc0b72276f3117d2868 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 16 Dec 2018 13:02:14 -0600 Subject: [PATCH 015/301] GBHawk: GBC ppu work, change to halt timing --- .../CPUs/LR35902/LR35902.cs | 19 +++++++++++++++---- .../Consoles/Nintendo/GBHawk/GBC_PPU.cs | 2 +- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/BizHawk.Emulation.Cores/CPUs/LR35902/LR35902.cs b/BizHawk.Emulation.Cores/CPUs/LR35902/LR35902.cs index 12c13662aa..063b41ee5c 100644 --- a/BizHawk.Emulation.Cores/CPUs/LR35902/LR35902.cs +++ b/BizHawk.Emulation.Cores/CPUs/LR35902/LR35902.cs @@ -396,11 +396,22 @@ namespace BizHawk.Emulation.Common.Components.LR35902 } else { - cur_instr = new ushort[] - {HALT_CHK, - IDLE, - IDLE, + if (is_GBC) + { + cur_instr = new ushort[] + {IDLE, + IDLE, + HALT_CHK, HALT, 0 }; + } + else + { + cur_instr = new ushort[] + {HALT_CHK, + IDLE, + IDLE, + HALT, 0 }; + } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs index 8b50b3b177..7c679ab952 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs @@ -405,7 +405,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk // also the LCD doesn't turn on right away // also, the LCD does not enter mode 2 on scanline 0 when first turned on no_scan = true; - cycle = 6; + cycle = 8; } // the VBL stat is continuously asserted From 69fe1bdf97207250fdc36c01475dd3cef46dc9a0 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 16 Dec 2018 13:10:04 -0600 Subject: [PATCH 016/301] NESHawk: VRAM write timing glitch --- Assets/gamedb/gamedb_nes.txt | 1 + .../CPUs/MOS 6502X/Disassembler.cs | 2 + .../CPUs/MOS 6502X/Execute.cs | 3 +- .../Consoles/Nintendo/GBHawk/HW_Registers.cs | 8 +- .../Consoles/Nintendo/NES/PPU.cs | 15 +- .../Consoles/Nintendo/NES/PPU.regs.cs | 12 +- .../Consoles/Nintendo/NES/PPU.run.cs | 189 ++++++++++++------ 7 files changed, 150 insertions(+), 80 deletions(-) diff --git a/Assets/gamedb/gamedb_nes.txt b/Assets/gamedb/gamedb_nes.txt index 5ccc1128a5..b837ef1be5 100644 --- a/Assets/gamedb/gamedb_nes.txt +++ b/Assets/gamedb/gamedb_nes.txt @@ -346,6 +346,7 @@ sha1:D89EE629F8F60613999EAD84A3C7B2F6B38C399F fme7ramtest_128k NES board=MAPPE sha1:78C4441E42C8F423EBF6558AA00AB6D0DBCC2B4B 34_test_1 NES board=AVE-NINA-01;PRG=64;CHR=64;WRAM=8;VRAM=0;PAD_V=1;PAD_H=0 sha1:F2D5CB78D78831CB6A2A17CD418A753F3C99C7F4 34_test_2 NES board=NES-BNROM;PRG=256;CHR=0;WRAM=8;VRAM=8;PAD_V=1;PAD_H=0 sha1:77C5C2473AF13003B7BD8273A5E23BE4964107A3 M34_P128K_H NES board=AVE-NINA-07;PRG=128;CHR=0;WRAM=0;VRAM=8;PAD_V=1;PAD_H=0 +sha1:B6721E1C1EC2E2F215180ED7BB31EDA80BCDE869 2nd2006_next_level NES board=MAPPER000;PRG=16;CHR=8;PAD_V=1;PAD_H=0 ;other sha1:4180276C50DF9958DEDD6C6D19C9E7AEBB75A89F o Galaxian (Japan) NES board=NAMCOT-3301;PRG=16;CHR=8;WRAM=8;VRAM=0;PAD_V=1;PAD_H=0 diff --git a/BizHawk.Emulation.Cores/CPUs/MOS 6502X/Disassembler.cs b/BizHawk.Emulation.Cores/CPUs/MOS 6502X/Disassembler.cs index 25d28f85c3..c6eed76817 100644 --- a/BizHawk.Emulation.Cores/CPUs/MOS 6502X/Disassembler.cs +++ b/BizHawk.Emulation.Cores/CPUs/MOS 6502X/Disassembler.cs @@ -185,6 +185,7 @@ namespace BizHawk.Emulation.Cores.Components.M6502 case 0xAE: bytesToAdvance = 3; return string.Format("LDX ${0:X4}", peeker_word(++pc, peeker)); case 0xB0: bytesToAdvance = 2; return string.Format("BCS ${0:X4}", pc + 2 + (sbyte)peeker(++pc)); case 0xB1: bytesToAdvance = 2; return string.Format("LDA (${0:X2}),Y *", peeker(++pc)); + case 0xB3: bytesToAdvance = 2; return string.Format("LAX (${0:X2}),Y *", peeker(++pc)); case 0xB4: bytesToAdvance = 2; return string.Format("LDY ${0:X2},X", peeker(++pc)); case 0xB5: bytesToAdvance = 2; return string.Format("LDA ${0:X2},X", peeker(++pc)); case 0xB6: bytesToAdvance = 2; return string.Format("LDX ${0:X2},Y", peeker(++pc)); @@ -203,6 +204,7 @@ namespace BizHawk.Emulation.Cores.Components.M6502 case 0xC8: bytesToAdvance = 1; return "INY"; case 0xC9: bytesToAdvance = 2; return string.Format("CMP #${0:X2}", peeker(++pc)); case 0xCA: bytesToAdvance = 1; return "DEX"; + case 0xCB: bytesToAdvance = 2; return string.Format("AXS ${0:X2}", peeker(++pc)); case 0xCC: bytesToAdvance = 3; return string.Format("CPY ${0:X4}", peeker_word(++pc, peeker)); case 0xCD: bytesToAdvance = 3; return string.Format("CMP ${0:X4}", peeker_word(++pc, peeker)); case 0xCE: bytesToAdvance = 3; return string.Format("DEC ${0:X4}", peeker_word(++pc, peeker)); diff --git a/BizHawk.Emulation.Cores/CPUs/MOS 6502X/Execute.cs b/BizHawk.Emulation.Cores/CPUs/MOS 6502X/Execute.cs index 9724899735..5d9282cae4 100644 --- a/BizHawk.Emulation.Cores/CPUs/MOS 6502X/Execute.cs +++ b/BizHawk.Emulation.Cores/CPUs/MOS 6502X/Execute.cs @@ -600,6 +600,7 @@ namespace BizHawk.Emulation.Cores.Components.M6502 return; } } + Fetch1_Real(); } @@ -2971,8 +2972,6 @@ namespace BizHawk.Emulation.Cores.Components.M6502 TotalExecutedCycles++; if (!rdy_freeze) { - - interrupt_pending |= Interrupted; } rdy_freeze = false; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/HW_Registers.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/HW_Registers.cs index bbb583efda..249c8e3ddf 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/HW_Registers.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/HW_Registers.cs @@ -112,7 +112,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk break; case 0xFF4F: // VBK - if (is_GBC) + if (GBC_compat) { ret = VRAM_Bank; } @@ -137,7 +137,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk case 0xFF69: case 0xFF6A: case 0xFF6B: - if (is_GBC) + if (GBC_compat) { ret = ppu.ReadReg(addr); } @@ -331,7 +331,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk // VBK case 0xFF4F: - if (is_GBC && !ppu.HDMA_active) + if (GBC_compat && !ppu.HDMA_active) { VRAM_Bank = (byte)(value & 1); } @@ -356,7 +356,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk case 0xFF69: case 0xFF6A: case 0xFF6B: - if (is_GBC) + if (GBC_compat) { ppu.WriteReg(addr, value); } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs index 320113d52f..36df0ab4c3 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs @@ -1,5 +1,4 @@ using System; -using System.Runtime.CompilerServices; using BizHawk.Common; namespace BizHawk.Emulation.Cores.Nintendo.NES @@ -131,7 +130,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES return sum >= 2000; } - //when the ppu issues a write it goes through here and into the game board public void ppubus_write(int addr, byte value) { @@ -236,6 +234,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES ser.Sync("spriteHeight", ref spriteHeight); ser.Sync("install_2006", ref install_2006); ser.Sync("race_2006", ref race_2006); + ser.Sync("race_2006_2", ref race_2006_2); ser.Sync("install_2001", ref install_2001); ser.Sync("show_bg_new", ref show_bg_new); ser.Sync("show_obj_new", ref show_obj_new); @@ -270,6 +269,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES ser.Sync("do_pre_vbl", ref do_pre_vbl); ser.Sync("nmi_destiny", ref nmi_destiny); + ser.Sync("evenOddDestiny", ref evenOddDestiny); + ser.Sync("NMI_offset", ref NMI_offset); ser.Sync("yp_shift", ref yp_shift); ser.Sync("sprite_eval_cycle", ref sprite_eval_cycle); ser.Sync("xt", ref xt); @@ -278,7 +279,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES ser.Sync("rasterpos", ref rasterpos); ser.Sync("renderspritenow", ref renderspritenow); ser.Sync("renderbgnow", ref renderbgnow); - ser.Sync("hit_pending", ref hit_pending); ser.Sync("s", ref s); ser.Sync("ppu_aux_index", ref ppu_aux_index); ser.Sync("junksprite", ref junksprite); @@ -332,13 +332,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES { //run one ppu cycle at a time so we can interact with the ppu and clockPPU at high granularity - race_2006 = false; + if (install_2006>0) { install_2006--; if (install_2006==0) { - ppur.install_latches(); + if (!race_2006) { ppur.install_latches(); } + else { race_2006_2 = true; } //nes.LogLine("addr wrote vt = {0}, ht = {1}", ppur._vt, ppur._ht); //normally the address isnt observed by the board till it gets clocked by a read or write. @@ -347,11 +348,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES //ONLY if the ppu is not rendering if (ppur.status.sl >= 241 || !PPUON) nes.Board.AddressPPU(ppur.get_2007access()); - - race_2006 = true; } } + race_2006 = false; + if (install_2001 > 0) { install_2001--; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.regs.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.regs.cs index a0aed3f502..def4af686d 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.regs.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.regs.cs @@ -9,7 +9,6 @@ using System; using BizHawk.Common; - namespace BizHawk.Emulation.Cores.Nintendo.NES { sealed partial class PPU @@ -307,6 +306,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES public Reg_2000 reg_2000; public Reg_2001 reg_2001; byte reg_2003; + public byte reg_2006_2; void regs_reset() { @@ -450,12 +450,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES { OAM[reg_2003] = value; reg_2003++; - } - + } } + byte read_2004() { byte ret; + Console.WriteLine("read 2004"); // behaviour depends on whether things are being rendered or not if (PPUON) { @@ -526,6 +527,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES ppur._v = (value >> 3) & 1; ppur._fv = (value >> 4) & 3; //nes.LogLine("addr wrote fv = {0}", ppur._fv); + reg_2006_2 = value; } else { @@ -534,13 +536,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES ppur._ht = value & 31; // testing indicates that this operation is delayed by 3 pixels - // ppur.install_latches(); - + //ppur.install_latches(); install_2006 = 3; } vtoggle ^= true; - } byte read_2006() { return ppu_open_bus; } byte peek_2006() { return ppu_open_bus; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.run.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.run.cs index 63e65192ff..3b2199bf06 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.run.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.run.cs @@ -1,8 +1,8 @@ //TODO - correctly emulate PPU OFF state +using System; using BizHawk.Common; using BizHawk.Common.NumberExtensions; -using System; namespace BizHawk.Emulation.Cores.Nintendo.NES { @@ -40,7 +40,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES // installing vram address is delayed after second write to 2006, set this up here public int install_2006; - public bool race_2006; + public bool race_2006, race_2006_2; public int install_2001; public bool show_bg_new; //Show background public bool show_obj_new; //Show sprites @@ -62,20 +62,19 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES // attempt to emulate graphics pipeline behaviour // experimental int pixelcolor_latch_1; - int pixelcolor_latch_2; + void pipeline(int pixelcolor, int row_check) { - if (row_check > 1) + if (row_check > 0) { if (reg_2001.color_disable) - pixelcolor_latch_2 &= 0x30; + pixelcolor_latch_1 &= 0x30; //TODO - check flashing sirens in werewolf //tack on the deemph bits. THESE MAY BE ORDERED WRONG. PLEASE CHECK IN THE PALETTE CODE - xbuf[(target - 2)] = (short)(pixelcolor_latch_2 | reg_2001.intensity_lsl_6); + xbuf[(target - 1)] = (short)(pixelcolor_latch_1 | reg_2001.intensity_lsl_6); } - - pixelcolor_latch_2 = pixelcolor_latch_1; + pixelcolor_latch_1 = pixelcolor; } @@ -125,6 +124,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES public bool do_pre_vbl; bool nmi_destiny; + bool evenOddDestiny; + static int start_up_offset = 2; + int NMI_offset; int yp_shift; int sprite_eval_cycle; int xt; @@ -133,7 +135,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES int rasterpos; bool renderspritenow; bool renderbgnow; - bool hit_pending; int s; int ppu_aux_index; bool junksprite; @@ -148,24 +149,41 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES ppur.status.cycle = 0; // These things happen at the start of every frame - - Reg2002_vblank_active_pending = true; + //Reg2002_vblank_active = true; + //Reg2002_vblank_active_pending = true; ppuphase = PPUPHASE.VBL; bgdata = new BGDataRecord[34]; } public void TickPPU_VBL() { - if (ppur.status.cycle == 3 && ppur.status.sl == 241 + preNMIlines) + if (ppur.status.cycle == 0 && ppur.status.sl == 241 + preNMIlines) { nmi_destiny = reg_2000.vblank_nmi_gen && Reg2002_vblank_active; + if (cpu_stepcounter == 2) { NMI_offset = 1; } + else if (cpu_stepcounter == 1) { NMI_offset = 2; } + else { NMI_offset = 0; } } - else if (ppur.status.cycle == 6 && ppur.status.sl == 241 + preNMIlines) + else if (ppur.status.cycle <= 2 && nmi_destiny) + { + nmi_destiny &= reg_2000.vblank_nmi_gen && Reg2002_vblank_active; + } + else if (ppur.status.cycle == (3 + NMI_offset) && ppur.status.sl == 241 + preNMIlines) { if (nmi_destiny) { nes.cpu.NMI = true; } nes.Board.AtVsyncNMI(); } + if (ppur.status.cycle == 340) + { + if (ppur.status.sl == 241 + preNMIlines + postNMIlines - 1) + { + Reg2002_vblank_clear_pending = true; + idleSynch ^= true; + Reg2002_objhit = Reg2002_objoverflow = 0; + } + } + runppu(); // note cycle ticks inside runppu if (ppur.status.cycle == 341) @@ -174,10 +192,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES ppur.status.sl++; if (ppur.status.sl == 241 + preNMIlines + postNMIlines) { - Reg2002_objhit = Reg2002_objoverflow = 0; - Reg2002_vblank_clear_pending = true; - idleSynch ^= true; - do_vbl = false; ppur.status.sl = 0; } @@ -232,8 +246,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES //check all the conditions that can cause things to render in these 8px renderspritenow = show_obj_new && (xt > 0 || reg_2001.show_obj_leftmost); - hit_pending = false; - } if (ppur.status.cycle < 256) @@ -332,8 +344,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES { if (yp >= read_value && yp < read_value + spriteHeight && PPUON) { - hit_pending = true; - //Reg2002_objoverflow = true; + Reg2002_objoverflow = true; } if (yp >= read_value && yp < read_value + spriteHeight && spr_true_count == 0) @@ -379,30 +390,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES // due to the cpu not running while the sprite renders below if (PPUON) { Read_bgdata(xp, ref bgdata[xt + 2]); } - runppu(); - - if (PPUON && xp == 6) - { - ppu_was_on = true; - } - - if (PPUON && xp == 7) - { - if (!race_2006) - ppur.increment_hsc(); - - if (ppur.status.cycle == 256 && !race_2006) - ppur.increment_vs(); - - ppu_was_on = false; - } - - if (hit_pending) - { - hit_pending = false; - Reg2002_objoverflow = true; - } - renderbgnow = show_bg_new && (xt > 0 || reg_2001.show_bg_leftmost); //bg pos is different from raster pos due to its offsetability. //so adjust for that here @@ -467,14 +454,53 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES } } //oamcount loop + runppu(); + + if (PPUON && xp == 6) + { + ppu_was_on = true; + if (ppur.status.cycle == 255) { race_2006 = true; } + } + + if (PPUON && xp == 7) + { + ppur.increment_hsc(); + + if (ppur.status.cycle == 256) + { + ppur.increment_vs(); + } + + if (race_2006_2) + { + if (ppur.status.cycle == 256) + { + ppur.fv &= ppur._fv; + ppur.v &= ppur._v; + ppur.h &= ppur._h; + ppur.vt &= ppur._vt; + ppur.ht &= ppur._ht; + } + else + { + ppur.fv = ppur._fv; + ppur.v = ppur._v; + ppur.h &= ppur._h; + ppur.vt = ppur._vt; + ppur.ht &= ppur._ht; + } + } + + ppu_was_on = false; + } + + race_2006_2 = false; pipeline(pixelcolor, xt * 8 + xp); target++; // clear out previous sprites from scanline buffer - //sl_sprites[xt * 8 + xp] = 0; sl_sprites[256 + xt * 8 + xp] = 0; - //sl_sprites[512 + xt * 8 + xp] = 0; // end of visible part of the scanline sprite_eval_cycle++; @@ -494,9 +520,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES //check all the conditions that can cause things to render in these 8px renderspritenow = show_obj_new && (xt > 0 || reg_2001.show_obj_leftmost); - hit_pending = false; - - } + } } else { @@ -508,19 +532,44 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES if (PPUON && xp == 6) { ppu_was_on = true; + if (ppur.status.cycle == 255) { race_2006 = true; } + } if (PPUON && xp == 7) { - if (!race_2006) - ppur.increment_hsc(); + ppur.increment_hsc(); - if (ppur.status.cycle == 256 && !race_2006) + if (ppur.status.cycle == 256) + { ppur.increment_vs(); + } + + if(race_2006_2) + { + if (ppur.status.cycle == 256) + { + ppur.fv &= ppur._fv; + ppur.v &= ppur._v; + ppur.h &= ppur._h; + ppur.vt &= ppur._vt; + ppur.ht &= ppur._ht; + } + else + { + ppur.fv = ppur._fv; + ppur.v = ppur._v; + ppur.h &= ppur._h; + ppur.vt = ppur._vt; + ppur.ht &= ppur._ht; + } + } ppu_was_on = false; } + race_2006_2 = false; + xp++; if (xp == 8) @@ -625,35 +674,40 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES if (target <= 61441 && target > 0 && s == 0) { - pipeline(0, 256); + pipeline(0, 256); // last pipeline call option 1 of 2 target++; } //at 257: 3d world runner is ugly if we do this at 256 - if (PPUON) ppur.install_h_latches(); + if (PPUON/* && !race_2006_2*/) { ppur.install_h_latches(); } + race_2006_2 = false; read_value = t_oam[s].oam_ind; runppu(); + /* if (target <= 61441 && target > 0 && s == 0) { - pipeline(0, 257); // last pipeline call option 1 of 2 + //pipeline(0, 257); } + */ } else { if (target <= 61441 && target > 0 && s == 0) { - pipeline(0, 256); + pipeline(0, 256); // last pipeline call option 2 of 2 target++; } read_value = t_oam[s].oam_ind; runppu(); + /* if (target <= 61441 && target > 0 && s == 0) { - pipeline(0, 257); // last pipeline call option 2 of 2 + //pipeline(0, 257); } + */ } break; @@ -910,12 +964,15 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES } else if (ppur.status.cycle < 340) { + if (ppur.status.cycle == 339) + { + evenOddDestiny = PPUON; + } + runppu(); } else { - bool evenOddDestiny = PPUON; - // After memory access 170, the PPU simply rests for 4 cycles (or the // equivelant of half a memory access cycle) before repeating the whole // pixel/scanline rendering process. If the scanline being rendered is the very @@ -941,6 +998,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES public void TickPPU_preVBL() { + if (ppur.status.cycle == 340) + { + Reg2002_vblank_active_pending = true; + } + runppu(); if (ppur.status.cycle == 341) @@ -961,9 +1023,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES //to wait for vblank public void NewDeadPPU() { + if (ppur.status.cycle == 241 * 341 - start_up_offset - 1) + { + Reg2002_vblank_active_pending = true; + } + runppu(); - if (ppur.status.cycle == 241 * 341 - 3) + if (ppur.status.cycle == 241 * 341 - start_up_offset) { ppudead--; } From 4675d692ff25a19719a562975d9f74bf6fa632df Mon Sep 17 00:00:00 2001 From: feos Date: Mon, 17 Dec 2018 23:00:22 +0300 Subject: [PATCH 017/301] n64 plugins: add 4K --- BizHawk.Client.EmuHawk/config/N64/N64VideoPluginconfig.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/BizHawk.Client.EmuHawk/config/N64/N64VideoPluginconfig.cs b/BizHawk.Client.EmuHawk/config/N64/N64VideoPluginconfig.cs index ebb0d105d9..0bcbccdbfd 100644 --- a/BizHawk.Client.EmuHawk/config/N64/N64VideoPluginconfig.cs +++ b/BizHawk.Client.EmuHawk/config/N64/N64VideoPluginconfig.cs @@ -30,6 +30,7 @@ namespace BizHawk.Client.EmuHawk "1600 x 1200", "1920 x 1440", "2048 x 1536", + "2880 x 2160", "Custom" }; From b773ba5798215894d98860247faa5008ec3dd0eb Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Wed, 19 Dec 2018 19:39:01 -0600 Subject: [PATCH 018/301] NESHawk: Note on Mesen timings --- BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs index feb338ad42..5d5a01ed83 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs @@ -1,3 +1,5 @@ +// NOTE: to match Mesen timings, set idleSynch to true at power on, and set start_up_offset to -3 + using System; using System.Linq; From 6a60657199a3da9ed6df7b4e3b3949910e79fa30 Mon Sep 17 00:00:00 2001 From: Asnivor Date: Thu, 20 Dec 2018 10:40:54 +0000 Subject: [PATCH 019/301] Z80: optimization testing --- BizHawk.Emulation.Cores/CPUs/Z80A/Execute.cs | 2 +- .../CPUs/Z80A/Interrupts.cs | 8 +- .../CPUs/Z80A/Tables_Direct.cs | 84 +++++++++---------- .../CPUs/Z80A/Tables_Indirect.cs | 58 ++++++------- BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs | 16 ++-- 5 files changed, 84 insertions(+), 84 deletions(-) diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Execute.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Execute.cs index b8b65bdf39..17ff24af0d 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Execute.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Execute.cs @@ -27,7 +27,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A public ushort[] cur_instr; public ushort[] BUSRQ; public ushort[] MEMRQ; - public ushort[] IRQS; + public int IRQS; public byte opcode; public bool NO_prefix, CB_prefix, IX_prefix, EXTD_prefix, IY_prefix, IXCB_prefix, IYCB_prefix; public bool halted; diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Interrupts.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Interrupts.cs index 5eec6cf45f..08ed963128 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Interrupts.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Interrupts.cs @@ -51,7 +51,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, 0, 0, 0, 0, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } // Mode 0 interrupts only take effect if a CALL or RST is on the data bus @@ -72,7 +72,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, 0, 0, 0, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, 0, 0, PCh, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; } // Just jump to $0038 @@ -95,7 +95,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } // Interrupt mode 2 uses the I vector combined with a byte on the data bus @@ -124,7 +124,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0, W, 0, 0, W, 0 ,0 }; MEMRQ = new ushort[] { 0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0, W, 0, 0, W, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void ResetInterrupts() diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs index 6af37ce302..1b7fddac66 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs @@ -14,7 +14,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = new ushort[] { 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 1 }; } // NOTE: In a real Z80, this operation just flips a switch to choose between 2 registers @@ -26,7 +26,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = new ushort[] { 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 1 }; } private void EXX_() @@ -36,7 +36,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = new ushort[] { 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 1 }; } // this exchanges 2 16 bit registers @@ -47,7 +47,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = new ushort[] { 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 1 }; } private void INC_16(ushort src_l, ushort src_h) @@ -59,7 +59,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, I }; MEMRQ = new ushort[] { 0, 0, 0 }; - IRQS = new ushort[] { 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 1 }; } @@ -72,7 +72,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, I }; MEMRQ = new ushort[] { 0, 0, 0 }; - IRQS = new ushort[] { 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 1 }; } // this is done in two steps technically, but the flags don't work out using existing funcitons @@ -91,7 +91,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, I, I, I, I, I, I }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1}; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1}; } private void REG_OP(ushort operation, ushort dest, ushort src) @@ -101,7 +101,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = new ushort[] { 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 1 }; } // Operations using the I and R registers take one T-cycle longer @@ -113,7 +113,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I }; MEMRQ = new ushort[] { 0, 0 }; - IRQS = new ushort[] { 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 1 }; } // note: do not use DEC here since no flags are affected by this operation @@ -135,7 +135,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh }; MEMRQ = new ushort[] { 0, 0, PCh, 0, 0, 0, 0, 0, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } else { @@ -148,7 +148,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, PCh, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; } } @@ -159,7 +159,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = new ushort[] { 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 1 }; } private void JR_COND(bool cond) @@ -179,7 +179,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh }; MEMRQ = new ushort[] { 0, PCh, 0, 0, 0, 0, 0, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } else { @@ -191,7 +191,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; } } @@ -210,7 +210,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; } else { @@ -225,7 +225,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; } } @@ -242,7 +242,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; } private void RETI_() @@ -258,7 +258,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; } private void RETN_() @@ -274,7 +274,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; } @@ -294,7 +294,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } else { @@ -304,7 +304,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I }; MEMRQ = new ushort[] { 0, 0 }; - IRQS = new ushort[] { 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 1 }; } } @@ -330,7 +330,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, PCh, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } else { @@ -345,7 +345,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; } } @@ -356,7 +356,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = new ushort[] { 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 1 }; } private void BIT_OP(ushort operation, ushort bit, ushort src) @@ -366,7 +366,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = new ushort[] { 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 1 }; } private void PUSH_(ushort src_l, ushort src_h) @@ -383,7 +383,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } @@ -400,7 +400,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = new ushort[] {0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] {0, 0, 0, 0, 0, 0, 1 }; } private void RST_(ushort n) @@ -417,7 +417,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } private void PREFIX_(ushort src) @@ -432,7 +432,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0 }; // prefix does not get interrupted + IRQS = -1;// new ushort[] { 0, 0, 0, 0 }; // prefix does not get interrupted } private void PREFETCH_(ushort src) @@ -464,7 +464,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, PCh }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0 }; // prefetch does not get interrupted + IRQS = -1;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0 }; // prefetch does not get interrupted } private void DI_() @@ -474,7 +474,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = new ushort[] { 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 1 }; } private void EI_() @@ -484,7 +484,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = new ushort[] { 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 1 }; } private void JP_16(ushort src_l, ushort src_h) @@ -494,7 +494,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = new ushort[] { 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 1 }; } private void LD_SP_16(ushort src_l, ushort src_h) @@ -506,7 +506,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, I }; MEMRQ = new ushort[] { 0, 0, 0 }; - IRQS = new ushort[] { 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 1 }; } private void OUT_() @@ -523,7 +523,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1}; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1}; } private void OUT_REG_(ushort dest, ushort src) @@ -537,7 +537,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, BIO1, BIO2, BIO3, BIO4 }; MEMRQ = new ushort[] { 0, BIO1, BIO2, BIO3, BIO4 }; - IRQS = new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; } private void IN_() @@ -554,7 +554,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } private void IN_REG_(ushort dest, ushort src) @@ -568,7 +568,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, BIO1, BIO2, BIO3, BIO4 }; MEMRQ = new ushort[] { 0, BIO1, BIO2, BIO3, BIO4 }; - IRQS = new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; } private void REG_OP_16_(ushort op, ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) @@ -585,7 +585,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, I, I, I, I, I, I }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } private void INT_MODE_(ushort src) @@ -595,7 +595,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = new ushort[] { 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 1 }; } private void RRD_() @@ -615,7 +615,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, H, 0, 0, H, H, H, H, W, 0, 0 }; MEMRQ = new ushort[] { 0, H, 0, 0, 0, 0, 0, 0, W, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void RLD_() @@ -635,7 +635,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, H, 0, 0, H, H, H, H, W, 0, 0 }; MEMRQ = new ushort[] { 0, H, 0, 0, 0, 0, 0, 0, W, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } } } diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Indirect.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Indirect.cs index 65e0b607f5..c611444d99 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Indirect.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Indirect.cs @@ -16,7 +16,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0, 0, src_h, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } private void BIT_OP_IND(ushort operation, ushort bit, ushort src_l, ushort src_h) @@ -33,7 +33,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0, 0, src_h, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } // Note that this operation uses I_BIT, same as indexed BIT. @@ -51,7 +51,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h }; MEMRQ = new ushort[] { 0, src_h, 0, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; } private void REG_OP_IND_INC(ushort operation, ushort dest, ushort src_l, ushort src_h) @@ -64,7 +64,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 1}; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 1}; } private void REG_OP_IND(ushort operation, ushort dest, ushort src_l, ushort src_h) @@ -77,7 +77,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; } // different because HL doesn't effect WZ @@ -91,7 +91,7 @@ BUSRQ = new ushort[] { 0, H, 0, 0 }; MEMRQ = new ushort[] { 0, H, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; } private void LD_16_IND_nn(ushort src_l, ushort src_h) @@ -113,7 +113,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void LD_IND_16_nn(ushort dest_l, ushort dest_h) @@ -135,7 +135,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void LD_8_IND_nn(ushort src) @@ -154,7 +154,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void LD_IND_8_nn(ushort dest) @@ -173,7 +173,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void LD_8_IND(ushort dest_l, ushort dest_h, ushort src) @@ -186,7 +186,7 @@ BUSRQ = new ushort[] { 0, dest_h, 0, 0 }; MEMRQ = new ushort[] { 0, dest_h, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; } // seperate HL needed since it doesn't effect the WZ pair @@ -200,7 +200,7 @@ BUSRQ = new ushort[] { 0, H, 0, 0 }; MEMRQ = new ushort[] { 0, H, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; } private void LD_8_IND_IND(ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) @@ -216,7 +216,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, dest_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0, dest_h, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; } private void LD_IND_8_INC(ushort dest, ushort src_l, ushort src_h) @@ -229,7 +229,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; } private void LD_IND_16(ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) @@ -245,7 +245,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0, src_h, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; } private void INC_8_IND(ushort src_l, ushort src_h) @@ -262,7 +262,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0, 0, src_h, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } private void DEC_8_IND(ushort src_l, ushort src_h) @@ -279,7 +279,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0, 0, src_h, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } // NOTE: WZ implied for the wollowing 3 functions @@ -297,7 +297,7 @@ BUSRQ = new ushort[] { 0, W, 0, 0, W, W, 0, 0 }; MEMRQ = new ushort[] { 0, W, 0, 0, 0, W, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } private void I_BIT_OP(ushort operation, ushort bit, ushort dest) @@ -314,7 +314,7 @@ BUSRQ = new ushort[] { 0, W, 0, 0, W, W, 0, 0 }; MEMRQ = new ushort[] { 0, W, 0, 0, 0, W, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1}; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1}; } private void I_BIT_TE(ushort bit) @@ -328,7 +328,7 @@ BUSRQ = new ushort[] { 0, W, 0, 0, W }; MEMRQ = new ushort[] { 0, W, 0, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; } private void I_OP_n(ushort operation, ushort src_l, ushort src_h) @@ -353,7 +353,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh, W, 0, 0, W, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, 0, 0, 0, 0, 0, W, 0, 0, 0, W, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void I_OP_n_n(ushort src_l, ushort src_h) @@ -374,7 +374,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, PCh, PCh, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, 0, 0, W, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void I_REG_OP_IND_n(ushort operation, ushort dest, ushort src_l, ushort src_h) @@ -395,7 +395,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, 0, 0, 0, 0, 0, W, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void I_LD_8_IND_n(ushort dest_l, ushort dest_h, ushort src) @@ -416,7 +416,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh, Z, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, 0, 0, 0, 0, 0, Z, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void LD_OP_R(ushort operation, ushort repeat_instr) @@ -434,7 +434,7 @@ BUSRQ = new ushort[] { 0, H, 0, 0, D, 0, 0, D, D }; MEMRQ = new ushort[] { 0, H, 0, 0, D, 0, 0, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void CP_OP_R(ushort operation, ushort repeat_instr) @@ -452,7 +452,7 @@ BUSRQ = new ushort[] { 0, H, 0, 0, H, H, H, H, H }; MEMRQ = new ushort[] { 0, H, 0, 0, 0, 0, 0, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void IN_OP_R(ushort operation, ushort repeat_instr) @@ -470,7 +470,7 @@ BUSRQ = new ushort[] { 0, I, BIO1, BIO2, BIO3, BIO4, H, 0, 0}; MEMRQ = new ushort[] { 0, 0, BIO1, BIO2, BIO3, BIO4, H, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void OUT_OP_R(ushort operation, ushort repeat_instr) @@ -488,7 +488,7 @@ BUSRQ = new ushort[] { 0, I, H, 0, 0, BIO1, BIO2, BIO3, BIO4 }; MEMRQ = new ushort[] { 0, 0, H, 0, 0, BIO1, BIO2, BIO3, BIO4 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } // this is an indirect change of a a 16 bit register with memory @@ -514,7 +514,7 @@ BUSRQ = new ushort[] { 0, dest_h, 0, 0, dest_h, 0, 0, dest_h, dest_h, 0, 0, dest_h, 0, 0, dest_h, dest_h }; MEMRQ = new ushort[] { 0, dest_h, 0, 0, dest_h, 0, 0, 0, dest_h, 0, 0, dest_h, 0, 0, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } } } diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs index 6c7c9f3e50..9572660737 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs @@ -111,7 +111,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, 0, 0 }; MEMRQ = new ushort[] { 0, 0, 0 }; - IRQS = new ushort[] { 0, 0, 1 }; + IRQS = 3;// new ushort[] { 0, 0, 1 }; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; NO_prefix = true; } @@ -468,7 +468,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { D, D, D, D, D }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; I_skip = true; @@ -497,7 +497,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { H, H, H, H, H }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; I_skip = true; @@ -571,7 +571,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { H, H, H, H, H }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; I_skip = true; @@ -622,7 +622,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { B, B, B, B, B }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; I_skip = true; @@ -638,7 +638,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A { I_skip = false; } - else if (IRQS[irq_pntr++] == 1) + else if (++irq_pntr == IRQS) { if (EI_pending > 0) { @@ -715,7 +715,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { PCh, 0, 0, 0 }; MEMRQ = new ushort[] { PCh, 0, 0, 0 }; - IRQS = new ushort[] { 0, 0, 0, 1 }; + IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; } @@ -802,7 +802,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A ser.Sync("irq_pntr", ref irq_pntr); ser.Sync("cur_instr", ref cur_instr, false); ser.Sync("BUSRQ", ref BUSRQ, false); - ser.Sync("IRQS", ref IRQS, false); + ser.Sync("IRQS", ref IRQS); ser.Sync("MEMRQ", ref MEMRQ, false); ser.Sync("opcode", ref opcode); ser.Sync("FlagI", ref FlagI); From 812f3d5cfa7867d6f1c2c83d20093f45db02bfd7 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Thu, 20 Dec 2018 18:39:02 -0600 Subject: [PATCH 020/301] Update PPU.regs.cs comment out debug line --- BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.regs.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.regs.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.regs.cs index def4af686d..0fa0bc98cd 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.regs.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.regs.cs @@ -456,7 +456,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES byte read_2004() { byte ret; - Console.WriteLine("read 2004"); + // Console.WriteLine("read 2004"); // behaviour depends on whether things are being rendered or not if (PPUON) { @@ -835,4 +835,4 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES //Palette Gaps and Mirrors // 3F04h,3F08h,3F0Ch - Three general purpose 6bit data registers. // 3F10h,3F14h,3F18h,3F1Ch - Mirrors of 3F00h,3F04h,3F08h,3F0Ch. -// 3F20h-3FFFh - Mirrors of 3F00h-3F1Fh. \ No newline at end of file +// 3F20h-3FFFh - Mirrors of 3F00h-3F1Fh. From b343a19acc2e8d7a60388b26bf1d089f9a9e9abb Mon Sep 17 00:00:00 2001 From: upthorn Date: Thu, 20 Dec 2018 17:32:49 -0800 Subject: [PATCH 021/301] Commented out extraneous member. --- BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.cs b/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.cs index 258cd128e3..132ba4a2df 100644 --- a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.cs +++ b/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.cs @@ -55,8 +55,8 @@ namespace BizHawk.Client.EmuHawk } // private FormsPluginLibrary FormsLibrary => (FormsLuaLibrary)Libraries[typeof(FormsLuaLibrary)]; - private EmulatorPluginLibrary EmulatorLuaLibrary => (EmulatorPluginLibrary)Libraries[typeof(EmulatorPluginLibrary)]; - public GUIPluginLibrary GuiLibrary => (GUIPluginLibrary)Libraries[typeof(GUIPluginLibrary)]; +// private EmulatorPluginLibrary EmuPluginLibrary => (EmulatorPluginLibrary)Libraries[typeof(EmulatorPluginLibrary)]; + private GUIPluginLibrary GuiLibrary => (GUIPluginLibrary)Libraries[typeof(GUIPluginLibrary)]; public void Restart(IEmulatorServiceProvider newServiceProvider) { From b4219b8242828ae5371b309b8e17c853bcab3cd5 Mon Sep 17 00:00:00 2001 From: Asnivor Date: Fri, 21 Dec 2018 09:57:49 +0000 Subject: [PATCH 022/301] Z80: convert .Length lookups to integer --- .../CPUs/Z80A/Interrupts.cs | 8 +- .../CPUs/Z80A/Tables_Direct.cs | 78 +++++++++---------- .../CPUs/Z80A/Tables_Indirect.cs | 58 +++++++------- BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs | 10 +-- 4 files changed, 77 insertions(+), 77 deletions(-) diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Interrupts.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Interrupts.cs index 08ed963128..1645c8c659 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Interrupts.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Interrupts.cs @@ -51,7 +51,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, 0, 0, 0, 0, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 11;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } // Mode 0 interrupts only take effect if a CALL or RST is on the data bus @@ -72,7 +72,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, 0, 0, 0, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, 0, 0, PCh, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; } // Just jump to $0038 @@ -95,7 +95,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 13;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } // Interrupt mode 2 uses the I vector combined with a byte on the data bus @@ -124,7 +124,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0, W, 0, 0, W, 0 ,0 }; MEMRQ = new ushort[] { 0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0, W, 0, 0, W, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 19;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void ResetInterrupts() diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs index 1b7fddac66..b24b68c67f 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs @@ -14,7 +14,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; } // NOTE: In a real Z80, this operation just flips a switch to choose between 2 registers @@ -26,7 +26,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; } private void EXX_() @@ -36,7 +36,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; } // this exchanges 2 16 bit registers @@ -47,7 +47,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; } private void INC_16(ushort src_l, ushort src_h) @@ -59,7 +59,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, I }; MEMRQ = new ushort[] { 0, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 1 }; + IRQS = 3;// BUSRQ.Length;// new ushort[] { 0, 0, 1 }; } @@ -91,7 +91,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, I, I, I, I, I, I }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1}; + IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1}; } private void REG_OP(ushort operation, ushort dest, ushort src) @@ -101,7 +101,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; } // Operations using the I and R registers take one T-cycle longer @@ -113,7 +113,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I }; MEMRQ = new ushort[] { 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 1 }; + IRQS = 2;// BUSRQ.Length;// new ushort[] { 0, 1 }; } // note: do not use DEC here since no flags are affected by this operation @@ -135,7 +135,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh }; MEMRQ = new ushort[] { 0, 0, PCh, 0, 0, 0, 0, 0, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 10;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } else { @@ -148,7 +148,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, PCh, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = 5;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; } } @@ -159,7 +159,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; } private void JR_COND(bool cond) @@ -179,7 +179,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh }; MEMRQ = new ushort[] { 0, PCh, 0, 0, 0, 0, 0, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 9;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } else { @@ -191,7 +191,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; + IRQS = 4;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; } } @@ -210,7 +210,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; } else { @@ -225,7 +225,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; } } @@ -242,7 +242,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; } private void RETI_() @@ -258,7 +258,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; } private void RETN_() @@ -274,7 +274,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; } @@ -294,7 +294,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } else { @@ -304,7 +304,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I }; MEMRQ = new ushort[] { 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 1 }; + IRQS = 2;// BUSRQ.Length;// new ushort[] { 0, 1 }; } } @@ -330,7 +330,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, PCh, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 14;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } else { @@ -345,7 +345,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; } } @@ -356,7 +356,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; } private void BIT_OP(ushort operation, ushort bit, ushort src) @@ -366,7 +366,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; } private void PUSH_(ushort src_l, ushort src_h) @@ -383,7 +383,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } @@ -400,7 +400,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] {0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7;// BUSRQ.Length;// new ushort[] {0, 0, 0, 0, 0, 0, 1 }; } private void RST_(ushort n) @@ -417,7 +417,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } private void PREFIX_(ushort src) @@ -474,7 +474,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; } private void EI_() @@ -484,7 +484,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; } private void JP_16(ushort src_l, ushort src_h) @@ -494,7 +494,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; } private void LD_SP_16(ushort src_l, ushort src_h) @@ -506,7 +506,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, I }; MEMRQ = new ushort[] { 0, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 1 }; + IRQS = 3;// BUSRQ.Length;// new ushort[] { 0, 0, 1 }; } private void OUT_() @@ -523,7 +523,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1}; + IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1}; } private void OUT_REG_(ushort dest, ushort src) @@ -537,7 +537,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, BIO1, BIO2, BIO3, BIO4 }; MEMRQ = new ushort[] { 0, BIO1, BIO2, BIO3, BIO4 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = 5;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; } private void IN_() @@ -554,7 +554,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } private void IN_REG_(ushort dest, ushort src) @@ -568,7 +568,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, BIO1, BIO2, BIO3, BIO4 }; MEMRQ = new ushort[] { 0, BIO1, BIO2, BIO3, BIO4 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = 5;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; } private void REG_OP_16_(ushort op, ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) @@ -585,7 +585,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, I, I, I, I, I, I }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } private void INT_MODE_(ushort src) @@ -595,7 +595,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; } private void RRD_() @@ -615,7 +615,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, H, 0, 0, H, H, H, H, W, 0, 0 }; MEMRQ = new ushort[] { 0, H, 0, 0, 0, 0, 0, 0, W, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 11;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void RLD_() @@ -635,7 +635,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, H, 0, 0, H, H, H, H, W, 0, 0 }; MEMRQ = new ushort[] { 0, H, 0, 0, 0, 0, 0, 0, W, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 11;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } } } diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Indirect.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Indirect.cs index c611444d99..ddd6f0372a 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Indirect.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Indirect.cs @@ -16,7 +16,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0, 0, src_h, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } private void BIT_OP_IND(ushort operation, ushort bit, ushort src_l, ushort src_h) @@ -33,7 +33,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0, 0, src_h, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } // Note that this operation uses I_BIT, same as indexed BIT. @@ -51,7 +51,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h }; MEMRQ = new ushort[] { 0, src_h, 0, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = 5;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; } private void REG_OP_IND_INC(ushort operation, ushort dest, ushort src_l, ushort src_h) @@ -64,7 +64,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 1}; + IRQS = 4;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 1}; } private void REG_OP_IND(ushort operation, ushort dest, ushort src_l, ushort src_h) @@ -77,7 +77,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; + IRQS = 4;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; } // different because HL doesn't effect WZ @@ -91,7 +91,7 @@ BUSRQ = new ushort[] { 0, H, 0, 0 }; MEMRQ = new ushort[] { 0, H, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; + IRQS = 4;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; } private void LD_16_IND_nn(ushort src_l, ushort src_h) @@ -113,7 +113,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 13;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void LD_IND_16_nn(ushort dest_l, ushort dest_h) @@ -135,7 +135,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 13;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void LD_8_IND_nn(ushort src) @@ -154,7 +154,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 10;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void LD_IND_8_nn(ushort dest) @@ -173,7 +173,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 10;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void LD_8_IND(ushort dest_l, ushort dest_h, ushort src) @@ -186,7 +186,7 @@ BUSRQ = new ushort[] { 0, dest_h, 0, 0 }; MEMRQ = new ushort[] { 0, dest_h, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; + IRQS = 4;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; } // seperate HL needed since it doesn't effect the WZ pair @@ -200,7 +200,7 @@ BUSRQ = new ushort[] { 0, H, 0, 0 }; MEMRQ = new ushort[] { 0, H, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; + IRQS = 4;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; } private void LD_8_IND_IND(ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) @@ -216,7 +216,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, dest_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0, dest_h, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; } private void LD_IND_8_INC(ushort dest, ushort src_l, ushort src_h) @@ -229,7 +229,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; + IRQS = 4;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; } private void LD_IND_16(ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) @@ -245,7 +245,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0, src_h, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; } private void INC_8_IND(ushort src_l, ushort src_h) @@ -262,7 +262,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0, 0, src_h, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } private void DEC_8_IND(ushort src_l, ushort src_h) @@ -279,7 +279,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0, 0, src_h, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } // NOTE: WZ implied for the wollowing 3 functions @@ -297,7 +297,7 @@ BUSRQ = new ushort[] { 0, W, 0, 0, W, W, 0, 0 }; MEMRQ = new ushort[] { 0, W, 0, 0, 0, W, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; } private void I_BIT_OP(ushort operation, ushort bit, ushort dest) @@ -314,7 +314,7 @@ BUSRQ = new ushort[] { 0, W, 0, 0, W, W, 0, 0 }; MEMRQ = new ushort[] { 0, W, 0, 0, 0, W, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1}; + IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1}; } private void I_BIT_TE(ushort bit) @@ -328,7 +328,7 @@ BUSRQ = new ushort[] { 0, W, 0, 0, W }; MEMRQ = new ushort[] { 0, W, 0, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = 5;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; } private void I_OP_n(ushort operation, ushort src_l, ushort src_h) @@ -353,7 +353,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh, W, 0, 0, W, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, 0, 0, 0, 0, 0, W, 0, 0, 0, W, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 16;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void I_OP_n_n(ushort src_l, ushort src_h) @@ -374,7 +374,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, PCh, PCh, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, 0, 0, W, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 12;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void I_REG_OP_IND_n(ushort operation, ushort dest, ushort src_l, ushort src_h) @@ -395,7 +395,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, 0, 0, 0, 0, 0, W, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 12;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void I_LD_8_IND_n(ushort dest_l, ushort dest_h, ushort src) @@ -416,7 +416,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh, Z, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, 0, 0, 0, 0, 0, Z, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 12;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void LD_OP_R(ushort operation, ushort repeat_instr) @@ -434,7 +434,7 @@ BUSRQ = new ushort[] { 0, H, 0, 0, D, 0, 0, D, D }; MEMRQ = new ushort[] { 0, H, 0, 0, D, 0, 0, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 9;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void CP_OP_R(ushort operation, ushort repeat_instr) @@ -452,7 +452,7 @@ BUSRQ = new ushort[] { 0, H, 0, 0, H, H, H, H, H }; MEMRQ = new ushort[] { 0, H, 0, 0, 0, 0, 0, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 9;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void IN_OP_R(ushort operation, ushort repeat_instr) @@ -470,7 +470,7 @@ BUSRQ = new ushort[] { 0, I, BIO1, BIO2, BIO3, BIO4, H, 0, 0}; MEMRQ = new ushort[] { 0, 0, BIO1, BIO2, BIO3, BIO4, H, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 9;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } private void OUT_OP_R(ushort operation, ushort repeat_instr) @@ -488,7 +488,7 @@ BUSRQ = new ushort[] { 0, I, H, 0, 0, BIO1, BIO2, BIO3, BIO4 }; MEMRQ = new ushort[] { 0, 0, H, 0, 0, BIO1, BIO2, BIO3, BIO4 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 9;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } // this is an indirect change of a a 16 bit register with memory @@ -514,7 +514,7 @@ BUSRQ = new ushort[] { 0, dest_h, 0, 0, dest_h, 0, 0, dest_h, dest_h, 0, 0, dest_h, 0, 0, dest_h, dest_h }; MEMRQ = new ushort[] { 0, dest_h, 0, 0, dest_h, 0, 0, 0, dest_h, 0, 0, dest_h, 0, 0, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 16;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; } } } diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs index 9572660737..25129c1b99 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs @@ -468,7 +468,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { D, D, D, D, D }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = 5;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; I_skip = true; @@ -497,7 +497,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { H, H, H, H, H }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = 5;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; I_skip = true; @@ -571,7 +571,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { H, H, H, H, H }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = 5;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; I_skip = true; @@ -622,7 +622,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { B, B, B, B, B }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = 5;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; I_skip = true; @@ -715,7 +715,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { PCh, 0, 0, 0 }; MEMRQ = new ushort[] { PCh, 0, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; + IRQS = 4;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; } From 50045f3b4be029245101b3aedb51ce916de985d9 Mon Sep 17 00:00:00 2001 From: Asnivor Date: Fri, 21 Dec 2018 10:29:10 +0000 Subject: [PATCH 023/301] Z80: tidy up old commented code --- .../CPUs/Z80A/Interrupts.cs | 8 +- .../CPUs/Z80A/Tables_Direct.cs | 84 +++++++++---------- .../CPUs/Z80A/Tables_Indirect.cs | 58 ++++++------- BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs | 10 +-- 4 files changed, 80 insertions(+), 80 deletions(-) diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Interrupts.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Interrupts.cs index 1645c8c659..11cfeffb60 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Interrupts.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Interrupts.cs @@ -51,7 +51,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, 0, 0, 0, 0, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = 11;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 11; } // Mode 0 interrupts only take effect if a CALL or RST is on the data bus @@ -72,7 +72,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, 0, 0, 0, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, 0, 0, PCh, 0, 0 }; - IRQS = 7;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7; } // Just jump to $0038 @@ -95,7 +95,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = 13;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 13; } // Interrupt mode 2 uses the I vector combined with a byte on the data bus @@ -124,7 +124,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0, W, 0, 0, W, 0 ,0 }; MEMRQ = new ushort[] { 0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0, W, 0, 0, W, 0, 0 }; - IRQS = 19;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 19; } private void ResetInterrupts() diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs index b24b68c67f..ba5923bfa2 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs @@ -14,7 +14,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1; } // NOTE: In a real Z80, this operation just flips a switch to choose between 2 registers @@ -26,7 +26,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1; } private void EXX_() @@ -36,7 +36,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1; } // this exchanges 2 16 bit registers @@ -47,7 +47,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1; } private void INC_16(ushort src_l, ushort src_h) @@ -59,7 +59,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, I }; MEMRQ = new ushort[] { 0, 0, 0 }; - IRQS = 3;// BUSRQ.Length;// new ushort[] { 0, 0, 1 }; + IRQS = 3; } @@ -72,7 +72,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, I }; MEMRQ = new ushort[] { 0, 0, 0 }; - IRQS = BUSRQ.Length;// new ushort[] { 0, 0, 1 }; + IRQS = 3; } // this is done in two steps technically, but the flags don't work out using existing funcitons @@ -91,7 +91,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, I, I, I, I, I, I }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0 }; - IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1}; + IRQS = 8; } private void REG_OP(ushort operation, ushort dest, ushort src) @@ -101,7 +101,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1; } // Operations using the I and R registers take one T-cycle longer @@ -113,7 +113,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I }; MEMRQ = new ushort[] { 0, 0 }; - IRQS = 2;// BUSRQ.Length;// new ushort[] { 0, 1 }; + IRQS = 2; } // note: do not use DEC here since no flags are affected by this operation @@ -135,7 +135,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh }; MEMRQ = new ushort[] { 0, 0, PCh, 0, 0, 0, 0, 0, 0, 0 }; - IRQS = 10;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 10; } else { @@ -148,7 +148,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, PCh, 0, 0 }; - IRQS = 5;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = 5; } } @@ -159,7 +159,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1; } private void JR_COND(bool cond) @@ -179,7 +179,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh }; MEMRQ = new ushort[] { 0, PCh, 0, 0, 0, 0, 0, 0, 0 }; - IRQS = 9;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 9; } else { @@ -191,7 +191,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0 }; - IRQS = 4;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; + IRQS = 4; } } @@ -210,7 +210,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; - IRQS = 7;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7; } else { @@ -225,7 +225,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; - IRQS = 7;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7; } } @@ -242,7 +242,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = 7;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7; } private void RETI_() @@ -258,7 +258,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = 7;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7; } private void RETN_() @@ -274,7 +274,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = 7;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7; } @@ -294,7 +294,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8; } else { @@ -304,7 +304,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I }; MEMRQ = new ushort[] { 0, 0 }; - IRQS = 2;// BUSRQ.Length;// new ushort[] { 0, 1 }; + IRQS = 2; } } @@ -330,7 +330,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, PCh, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = 14;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 14; } else { @@ -345,7 +345,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; - IRQS = 7;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7; } } @@ -356,7 +356,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1; } private void BIT_OP(ushort operation, ushort bit, ushort src) @@ -366,7 +366,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1; } private void PUSH_(ushort src_l, ushort src_h) @@ -383,7 +383,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8; } @@ -400,7 +400,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = 7;// BUSRQ.Length;// new ushort[] {0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7; } private void RST_(ushort n) @@ -417,7 +417,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, SPh, 0, 0, SPh, 0, 0 }; MEMRQ = new ushort[] { 0, 0, SPh, 0, 0, SPh, 0, 0 }; - IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8; } private void PREFIX_(ushort src) @@ -432,7 +432,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0 }; - IRQS = -1;// new ushort[] { 0, 0, 0, 0 }; // prefix does not get interrupted + IRQS = -1; // prefix does not get interrupted } private void PREFETCH_(ushort src) @@ -464,7 +464,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, PCh }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, 0 }; - IRQS = -1;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0 }; // prefetch does not get interrupted + IRQS = -1; // prefetch does not get interrupted } private void DI_() @@ -474,7 +474,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1; } private void EI_() @@ -484,7 +484,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1; } private void JP_16(ushort src_l, ushort src_h) @@ -494,7 +494,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1; } private void LD_SP_16(ushort src_l, ushort src_h) @@ -506,7 +506,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, I }; MEMRQ = new ushort[] { 0, 0, 0 }; - IRQS = 3;// BUSRQ.Length;// new ushort[] { 0, 0, 1 }; + IRQS = 3; } private void OUT_() @@ -523,7 +523,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4 }; - IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1}; + IRQS = 8; } private void OUT_REG_(ushort dest, ushort src) @@ -537,7 +537,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, BIO1, BIO2, BIO3, BIO4 }; MEMRQ = new ushort[] { 0, BIO1, BIO2, BIO3, BIO4 }; - IRQS = 5;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = 5; } private void IN_() @@ -554,7 +554,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4 }; - IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8; } private void IN_REG_(ushort dest, ushort src) @@ -568,7 +568,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, BIO1, BIO2, BIO3, BIO4 }; MEMRQ = new ushort[] { 0, BIO1, BIO2, BIO3, BIO4 }; - IRQS = 5;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = 5; } private void REG_OP_16_(ushort op, ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) @@ -585,7 +585,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, I, I, I, I, I, I, I }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0 }; - IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8; } private void INT_MODE_(ushort src) @@ -595,7 +595,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0 }; MEMRQ = new ushort[] { 0 }; - IRQS = 1;// BUSRQ.Length;// new ushort[] { 1 }; + IRQS = 1; } private void RRD_() @@ -615,7 +615,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, H, 0, 0, H, H, H, H, W, 0, 0 }; MEMRQ = new ushort[] { 0, H, 0, 0, 0, 0, 0, 0, W, 0, 0 }; - IRQS = 11;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 11; } private void RLD_() @@ -635,7 +635,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { 0, H, 0, 0, H, H, H, H, W, 0, 0 }; MEMRQ = new ushort[] { 0, H, 0, 0, 0, 0, 0, 0, W, 0, 0 }; - IRQS = 11;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 11; } } } diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Indirect.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Indirect.cs index ddd6f0372a..445131e8c2 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Indirect.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Indirect.cs @@ -16,7 +16,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0, 0, src_h, 0, 0 }; - IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8; } private void BIT_OP_IND(ushort operation, ushort bit, ushort src_l, ushort src_h) @@ -33,7 +33,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0, 0, src_h, 0, 0 }; - IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8; } // Note that this operation uses I_BIT, same as indexed BIT. @@ -51,7 +51,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h }; MEMRQ = new ushort[] { 0, src_h, 0, 0, 0 }; - IRQS = 5;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = 5; } private void REG_OP_IND_INC(ushort operation, ushort dest, ushort src_l, ushort src_h) @@ -64,7 +64,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0 }; - IRQS = 4;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 1}; + IRQS = 4; } private void REG_OP_IND(ushort operation, ushort dest, ushort src_l, ushort src_h) @@ -77,7 +77,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0 }; - IRQS = 4;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; + IRQS = 4; } // different because HL doesn't effect WZ @@ -91,7 +91,7 @@ BUSRQ = new ushort[] { 0, H, 0, 0 }; MEMRQ = new ushort[] { 0, H, 0, 0 }; - IRQS = 4;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; + IRQS = 4; } private void LD_16_IND_nn(ushort src_l, ushort src_h) @@ -113,7 +113,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0 }; - IRQS = 13;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 13; } private void LD_IND_16_nn(ushort dest_l, ushort dest_h) @@ -135,7 +135,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0 }; - IRQS = 13;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 13; } private void LD_8_IND_nn(ushort src) @@ -154,7 +154,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0 }; - IRQS = 10;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 10; } private void LD_IND_8_nn(ushort dest) @@ -173,7 +173,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0 }; - IRQS = 10;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 10; } private void LD_8_IND(ushort dest_l, ushort dest_h, ushort src) @@ -186,7 +186,7 @@ BUSRQ = new ushort[] { 0, dest_h, 0, 0 }; MEMRQ = new ushort[] { 0, dest_h, 0, 0 }; - IRQS = 4;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; + IRQS = 4; } // seperate HL needed since it doesn't effect the WZ pair @@ -200,7 +200,7 @@ BUSRQ = new ushort[] { 0, H, 0, 0 }; MEMRQ = new ushort[] { 0, H, 0, 0 }; - IRQS = 4;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; + IRQS = 4; } private void LD_8_IND_IND(ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) @@ -216,7 +216,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, dest_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0, dest_h, 0, 0 }; - IRQS = 7;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7; } private void LD_IND_8_INC(ushort dest, ushort src_l, ushort src_h) @@ -229,7 +229,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0 }; - IRQS = 4;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; + IRQS = 4; } private void LD_IND_16(ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) @@ -245,7 +245,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0, src_h, 0, 0 }; - IRQS = 7;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 7; } private void INC_8_IND(ushort src_l, ushort src_h) @@ -262,7 +262,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0, 0, src_h, 0, 0 }; - IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8; } private void DEC_8_IND(ushort src_l, ushort src_h) @@ -279,7 +279,7 @@ BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, src_h, 0, 0 }; MEMRQ = new ushort[] { 0, src_h, 0, 0, 0, src_h, 0, 0 }; - IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8; } // NOTE: WZ implied for the wollowing 3 functions @@ -297,7 +297,7 @@ BUSRQ = new ushort[] { 0, W, 0, 0, W, W, 0, 0 }; MEMRQ = new ushort[] { 0, W, 0, 0, 0, W, 0, 0 }; - IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 8; } private void I_BIT_OP(ushort operation, ushort bit, ushort dest) @@ -314,7 +314,7 @@ BUSRQ = new ushort[] { 0, W, 0, 0, W, W, 0, 0 }; MEMRQ = new ushort[] { 0, W, 0, 0, 0, W, 0, 0 }; - IRQS = 8;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 1}; + IRQS = 8; } private void I_BIT_TE(ushort bit) @@ -328,7 +328,7 @@ BUSRQ = new ushort[] { 0, W, 0, 0, W }; MEMRQ = new ushort[] { 0, W, 0, 0, 0 }; - IRQS = 5;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = 5; } private void I_OP_n(ushort operation, ushort src_l, ushort src_h) @@ -353,7 +353,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh, W, 0, 0, W, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, 0, 0, 0, 0, 0, W, 0, 0, 0, W, 0, 0 }; - IRQS = 16;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 16; } private void I_OP_n_n(ushort src_l, ushort src_h) @@ -374,7 +374,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, PCh, PCh, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, 0, 0, W, 0, 0 }; - IRQS = 12;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 12; } private void I_REG_OP_IND_n(ushort operation, ushort dest, ushort src_l, ushort src_h) @@ -395,7 +395,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh, W, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, 0, 0, 0, 0, 0, W, 0, 0 }; - IRQS = 12;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 12; } private void I_LD_8_IND_n(ushort dest_l, ushort dest_h, ushort src) @@ -416,7 +416,7 @@ BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh, Z, 0, 0 }; MEMRQ = new ushort[] { 0, PCh, 0, 0, 0, 0, 0, 0, 0, Z, 0, 0 }; - IRQS = 12;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 12; } private void LD_OP_R(ushort operation, ushort repeat_instr) @@ -434,7 +434,7 @@ BUSRQ = new ushort[] { 0, H, 0, 0, D, 0, 0, D, D }; MEMRQ = new ushort[] { 0, H, 0, 0, D, 0, 0, 0, 0 }; - IRQS = 9;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 9; } private void CP_OP_R(ushort operation, ushort repeat_instr) @@ -452,7 +452,7 @@ BUSRQ = new ushort[] { 0, H, 0, 0, H, H, H, H, H }; MEMRQ = new ushort[] { 0, H, 0, 0, 0, 0, 0, 0, 0 }; - IRQS = 9;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 9; } private void IN_OP_R(ushort operation, ushort repeat_instr) @@ -470,7 +470,7 @@ BUSRQ = new ushort[] { 0, I, BIO1, BIO2, BIO3, BIO4, H, 0, 0}; MEMRQ = new ushort[] { 0, 0, BIO1, BIO2, BIO3, BIO4, H, 0, 0 }; - IRQS = 9;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 9; } private void OUT_OP_R(ushort operation, ushort repeat_instr) @@ -488,7 +488,7 @@ BUSRQ = new ushort[] { 0, I, H, 0, 0, BIO1, BIO2, BIO3, BIO4 }; MEMRQ = new ushort[] { 0, 0, H, 0, 0, BIO1, BIO2, BIO3, BIO4 }; - IRQS = 9;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 9; } // this is an indirect change of a a 16 bit register with memory @@ -514,7 +514,7 @@ BUSRQ = new ushort[] { 0, dest_h, 0, 0, dest_h, 0, 0, dest_h, dest_h, 0, 0, dest_h, 0, 0, dest_h, dest_h }; MEMRQ = new ushort[] { 0, dest_h, 0, 0, dest_h, 0, 0, 0, dest_h, 0, 0, dest_h, 0, 0, 0, 0 }; - IRQS = 16;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; + IRQS = 16; } } } diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs index 25129c1b99..f58dd41bdb 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs @@ -468,7 +468,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { D, D, D, D, D }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0 }; - IRQS = 5;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = 5; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; I_skip = true; @@ -497,7 +497,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { H, H, H, H, H }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0 }; - IRQS = 5;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = 5; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; I_skip = true; @@ -571,7 +571,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { H, H, H, H, H }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0 }; - IRQS = 5;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = 5; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; I_skip = true; @@ -622,7 +622,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { B, B, B, B, B }; MEMRQ = new ushort[] { 0, 0, 0, 0, 0 }; - IRQS = 5;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 0, 1 }; + IRQS = 5; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; I_skip = true; @@ -715,7 +715,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A BUSRQ = new ushort[] { PCh, 0, 0, 0 }; MEMRQ = new ushort[] { PCh, 0, 0, 0 }; - IRQS = 4;// BUSRQ.Length;// new ushort[] { 0, 0, 0, 1 }; + IRQS = 4; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; } From 32cce86f51b6361b26a9559ffa81c38df1359ff7 Mon Sep 17 00:00:00 2001 From: Asnivor Date: Fri, 21 Dec 2018 13:46:47 +0000 Subject: [PATCH 024/301] z80: optimization using fixed-size arrays --- BizHawk.Emulation.Cores/CPUs/Z80A/Execute.cs | 6 +- .../CPUs/Z80A/Interrupts.cs | 42 +- .../CPUs/Z80A/Tables_Direct.cs | 408 +++++++++--------- .../CPUs/Z80A/Tables_Indirect.cs | 310 ++++++------- BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs | 121 ++++-- 5 files changed, 471 insertions(+), 416 deletions(-) diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Execute.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Execute.cs index 17ff24af0d..d9a9c4336c 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Execute.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Execute.cs @@ -24,9 +24,9 @@ namespace BizHawk.Emulation.Cores.Components.Z80A public int bus_pntr = 0; public int mem_pntr = 0; public int irq_pntr = 0; - public ushort[] cur_instr; - public ushort[] BUSRQ; - public ushort[] MEMRQ; + public ushort[] cur_instr = new ushort[38]; // fixed size - do not change at runtime + public ushort[] BUSRQ = new ushort[19]; // fixed size - do not change at runtime + public ushort[] MEMRQ = new ushort[19]; // fixed size - do not change at runtime public int IRQS; public byte opcode; public bool NO_prefix, CB_prefix, IX_prefix, EXTD_prefix, IY_prefix, IXCB_prefix, IYCB_prefix; diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Interrupts.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Interrupts.cs index 11cfeffb60..869dcdac8a 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Interrupts.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Interrupts.cs @@ -36,8 +36,8 @@ namespace BizHawk.Emulation.Cores.Components.Z80A private void NMI_() { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, IDLE, IDLE, @@ -47,10 +47,10 @@ namespace BizHawk.Emulation.Cores.Components.Z80A WR_DEC, SPl, SPh, PCh, TR16, PCl, PCh, NMI_V, ZERO, WAIT, - WR, SPl, SPh, ALU }; + WR, SPl, SPh, ALU); - BUSRQ = new ushort[] { 0, 0, 0, 0, 0, SPh, 0, 0, SPh, 0, 0 }; - MEMRQ = new ushort[] { 0, 0, 0, 0, 0, SPh, 0, 0, SPh, 0, 0 }; + PopulateBUSRQ(0, 0, 0, 0, 0, SPh, 0, 0, SPh, 0, 0); + PopulateMEMRQ(0, 0, 0, 0, 0, SPh, 0, 0, SPh, 0, 0); IRQS = 11; } @@ -61,25 +61,25 @@ namespace BizHawk.Emulation.Cores.Components.Z80A //NOTE: TODO: When a CALL is present on the data bus, adjust WZ accordingly private void INTERRUPT_0(ushort src) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, IORQ, WAIT, IDLE, WAIT, - RD_INC, ALU, PCl, PCh }; + RD_INC, ALU, PCl, PCh); - BUSRQ = new ushort[] { 0, 0, 0, 0, PCh, 0, 0 }; - MEMRQ = new ushort[] { 0, 0, 0, 0, PCh, 0, 0 }; + PopulateBUSRQ(0, 0, 0, 0, PCh, 0, 0); + PopulateMEMRQ(0, 0, 0, 0, PCh, 0, 0); IRQS = 7; } // Just jump to $0038 private void INTERRUPT_1() { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, IORQ, WAIT, @@ -91,25 +91,25 @@ namespace BizHawk.Emulation.Cores.Components.Z80A WR_DEC, SPl, SPh, PCh, TR16, PCl, PCh, IRQ_V, ZERO, WAIT, - WR, SPl, SPh, ALU }; + WR, SPl, SPh, ALU); - BUSRQ = new ushort[] { 0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0 }; - MEMRQ = new ushort[] { 0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0 }; + PopulateBUSRQ(0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0); + PopulateMEMRQ(0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0); IRQS = 13; } // Interrupt mode 2 uses the I vector combined with a byte on the data bus private void INTERRUPT_2() { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, IORQ, WAIT, FTCH_DB, IDLE, DEC16, SPl, SPh, - TR16, Z, W, DB, I, + TR16, Z, W, DB, I, WAIT, WR_DEC, SPl, SPh, PCh, IDLE, @@ -120,10 +120,10 @@ namespace BizHawk.Emulation.Cores.Components.Z80A RD_INC, PCl, Z, W, IDLE, WAIT, - RD, PCh, Z, W }; + RD, PCh, Z, W); - BUSRQ = new ushort[] { 0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0, W, 0, 0, W, 0 ,0 }; - MEMRQ = new ushort[] { 0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0, W, 0, 0, W, 0, 0 }; + PopulateBUSRQ(0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0, W, 0, 0, W, 0, 0); + PopulateMEMRQ(0, 0, 0, 0, I, 0, 0, SPh, 0, 0, SPh, 0, 0, W, 0, 0, W, 0, 0); IRQS = 19; } diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs index ba5923bfa2..d8ea27b445 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Direct.cs @@ -9,11 +9,11 @@ namespace BizHawk.Emulation.Cores.Components.Z80A private void NOP_() { - cur_instr = new ushort[] - {IDLE }; + PopulateCURINSTR + (IDLE); - BUSRQ = new ushort[] { 0 }; - MEMRQ = new ushort[] { 0 }; + PopulateBUSRQ(0); + PopulateMEMRQ(0); IRQS = 1; } @@ -21,57 +21,57 @@ namespace BizHawk.Emulation.Cores.Components.Z80A // but it's simpler to emulate just by exchanging the register with it's shadow private void EXCH_() { - cur_instr = new ushort[] - {EXCH }; + PopulateCURINSTR + (EXCH); - BUSRQ = new ushort[] { 0 }; - MEMRQ = new ushort[] { 0 }; + PopulateBUSRQ(0); + PopulateMEMRQ(0); IRQS = 1; } private void EXX_() { - cur_instr = new ushort[] - {EXX }; + PopulateCURINSTR + (EXX); - BUSRQ = new ushort[] { 0 }; - MEMRQ = new ushort[] { 0 }; + PopulateBUSRQ(0); + PopulateMEMRQ(0); IRQS = 1; } // this exchanges 2 16 bit registers private void EXCH_16_(ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {EXCH_16, dest_l, dest_h, src_l, src_h }; + PopulateCURINSTR + (EXCH_16, dest_l, dest_h, src_l, src_h); - BUSRQ = new ushort[] { 0 }; - MEMRQ = new ushort[] { 0 }; + PopulateBUSRQ(0); + PopulateMEMRQ(0); IRQS = 1; } private void INC_16(ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {INC16, src_l, src_h, + PopulateCURINSTR + (INC16, src_l, src_h, IDLE, - IDLE }; + IDLE); - BUSRQ = new ushort[] { 0, I, I }; - MEMRQ = new ushort[] { 0, 0, 0 }; + PopulateBUSRQ(0, I, I); + PopulateMEMRQ(0, 0, 0); IRQS = 3; } private void DEC_16(ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {DEC16, src_l, src_h, + PopulateCURINSTR + (DEC16, src_l, src_h, IDLE, - IDLE }; + IDLE); - BUSRQ = new ushort[] { 0, I, I }; - MEMRQ = new ushort[] { 0, 0, 0 }; + PopulateBUSRQ(0, I, I); + PopulateMEMRQ(0, 0, 0); IRQS = 3; } @@ -79,40 +79,40 @@ namespace BizHawk.Emulation.Cores.Components.Z80A // so let's use a different function since it's an internal operation anyway private void ADD_16(ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, TR16, Z, W, dest_l, dest_h, IDLE, INC16, Z, W, IDLE, ADD16, dest_l, dest_h, src_l, src_h, IDLE, - IDLE}; + IDLE); - BUSRQ = new ushort[] { 0, I, I, I, I, I, I, I }; - MEMRQ = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0 }; + PopulateBUSRQ(0, I, I, I, I, I, I, I); + PopulateMEMRQ(0, 0, 0, 0, 0, 0, 0, 0); IRQS = 8; } private void REG_OP(ushort operation, ushort dest, ushort src) { - cur_instr = new ushort[] - {operation, dest, src }; + PopulateCURINSTR + (operation, dest, src); - BUSRQ = new ushort[] { 0 }; - MEMRQ = new ushort[] { 0 }; + PopulateBUSRQ(0); + PopulateMEMRQ(0); IRQS = 1; } // Operations using the I and R registers take one T-cycle longer private void REG_OP_IR(ushort operation, ushort dest, ushort src) { - cur_instr = new ushort[] - {IDLE, - SET_FL_IR, dest, src }; + PopulateCURINSTR + (IDLE, + SET_FL_IR, dest, src); - BUSRQ = new ushort[] { 0, I }; - MEMRQ = new ushort[] { 0, 0 }; + PopulateBUSRQ(0, I); + PopulateMEMRQ(0, 0); IRQS = 2; } @@ -121,8 +121,8 @@ namespace BizHawk.Emulation.Cores.Components.Z80A { if ((Regs[B] - 1) != 0) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, ASGN, B, (ushort)((Regs[B] - 1) & 0xFF), WAIT, @@ -131,34 +131,34 @@ namespace BizHawk.Emulation.Cores.Components.Z80A IDLE, ASGN, W, 0, ADDS, PCl, PCh, Z, W, - TR16, Z, W, PCl, PCh }; + TR16, Z, W, PCl, PCh); - BUSRQ = new ushort[] { 0, I, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh }; - MEMRQ = new ushort[] { 0, 0, PCh, 0, 0, 0, 0, 0, 0, 0 }; + PopulateBUSRQ(0, I, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh); + PopulateMEMRQ(0, 0, PCh, 0, 0, 0, 0, 0, 0, 0); IRQS = 10; } else { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, ASGN, B, (ushort)((Regs[B] - 1) & 0xFF), WAIT, - RD_INC, ALU, PCl, PCh }; + RD_INC, ALU, PCl, PCh); - BUSRQ = new ushort[] { 0, I, PCh, 0, 0 }; - MEMRQ = new ushort[] { 0, 0, PCh, 0, 0 }; + PopulateBUSRQ(0, I, PCh, 0, 0); + PopulateMEMRQ(0, 0, PCh, 0, 0); IRQS = 5; } } private void HALT_() { - cur_instr = new ushort[] - { HALT }; + PopulateCURINSTR + (HALT); - BUSRQ = new ushort[] { 0 }; - MEMRQ = new ushort[] { 0 }; + PopulateBUSRQ(0); + PopulateMEMRQ(0); IRQS = 1; } @@ -166,8 +166,8 @@ namespace BizHawk.Emulation.Cores.Components.Z80A { if (cond) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD_INC, Z, PCl, PCh, @@ -175,22 +175,22 @@ namespace BizHawk.Emulation.Cores.Components.Z80A ASGN, W, 0, IDLE, ADDS, PCl, PCh, Z, W, - TR16, Z, W, PCl, PCh }; + TR16, Z, W, PCl, PCh); - BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh }; - MEMRQ = new ushort[] { 0, PCh, 0, 0, 0, 0, 0, 0, 0 }; + PopulateBUSRQ(0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh); + PopulateMEMRQ(0, PCh, 0, 0, 0, 0, 0, 0, 0); IRQS = 9; } else { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, - RD_INC, ALU, PCl, PCh }; + RD_INC, ALU, PCl, PCh); - BUSRQ = new ushort[] { 0, PCh, 0, 0 }; - MEMRQ = new ushort[] { 0, PCh, 0, 0 }; + PopulateBUSRQ(0, PCh, 0, 0); + PopulateMEMRQ(0, PCh, 0, 0); IRQS = 4; } } @@ -199,81 +199,81 @@ namespace BizHawk.Emulation.Cores.Components.Z80A { if (cond) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD_INC, Z, PCl, PCh, IDLE, WAIT, - RD_INC_TR_PC, Z, W, PCl, PCh}; + RD_INC_TR_PC, Z, W, PCl, PCh); - BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; - MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; + PopulateBUSRQ(0, PCh, 0, 0, PCh, 0, 0); + PopulateMEMRQ(0, PCh, 0, 0, PCh, 0, 0); IRQS = 7; } else { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD_INC, Z, PCl, PCh, IDLE, WAIT, - RD_INC, W, PCl, PCh }; + RD_INC, W, PCl, PCh); - BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; - MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; + PopulateBUSRQ(0, PCh, 0, 0, PCh, 0, 0); + PopulateMEMRQ(0, PCh, 0, 0, PCh, 0, 0); IRQS = 7; } } private void RET_() { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD_INC, Z, SPl, SPh, IDLE, WAIT, - RD_INC_TR_PC, Z, W, SPl, SPh }; + RD_INC_TR_PC, Z, W, SPl, SPh); - BUSRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; - MEMRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; + PopulateBUSRQ(0, SPh, 0, 0, SPh, 0, 0); + PopulateMEMRQ(0, SPh, 0, 0, SPh, 0, 0); IRQS = 7; } private void RETI_() { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD_INC, Z, SPl, SPh, IDLE, WAIT, - RD_INC_TR_PC, Z, W, SPl, SPh }; + RD_INC_TR_PC, Z, W, SPl, SPh); - BUSRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; - MEMRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; + PopulateBUSRQ(0, SPh, 0, 0, SPh, 0, 0); + PopulateMEMRQ(0, SPh, 0, 0, SPh, 0, 0); IRQS = 7; } private void RETN_() { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD_INC, Z, SPl, SPh, EI_RETN, WAIT, - RD_INC_TR_PC, Z, W, SPl, SPh }; + RD_INC_TR_PC, Z, W, SPl, SPh); - BUSRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; - MEMRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; + PopulateBUSRQ(0, SPh, 0, 0, SPh, 0, 0); + PopulateMEMRQ(0, SPh, 0, 0, SPh, 0, 0); IRQS = 7; } @@ -282,28 +282,28 @@ namespace BizHawk.Emulation.Cores.Components.Z80A { if (cond) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, IDLE, WAIT, - RD_INC, Z, SPl, SPh, - IDLE, + RD_INC, Z, SPl, SPh, + IDLE, WAIT, - RD_INC_TR_PC, Z, W, SPl, SPh}; + RD_INC_TR_PC, Z, W, SPl, SPh); - BUSRQ = new ushort[] { 0, I, SPh, 0, 0, SPh, 0, 0 }; - MEMRQ = new ushort[] { 0, 0, SPh, 0, 0, SPh, 0, 0 }; + PopulateBUSRQ(0, I, SPh, 0, 0, SPh, 0, 0); + PopulateMEMRQ(0, 0, SPh, 0, 0, SPh, 0, 0); IRQS = 8; } else { - cur_instr = new ushort[] - {IDLE, - IDLE }; + PopulateCURINSTR + (IDLE, + IDLE); - BUSRQ = new ushort[] { 0, I }; - MEMRQ = new ushort[] { 0, 0 }; + PopulateBUSRQ(0, I); + PopulateMEMRQ(0, 0); IRQS = 2; } } @@ -312,8 +312,8 @@ namespace BizHawk.Emulation.Cores.Components.Z80A { if (cond) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD_INC, Z, PCl, PCh, @@ -326,112 +326,112 @@ namespace BizHawk.Emulation.Cores.Components.Z80A WR_DEC, SPl, SPh, PCh, IDLE, WAIT, - WR_TR_PC, SPl, SPh, PCl }; + WR_TR_PC, SPl, SPh, PCl); - BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, PCh, SPh, 0, 0, SPh, 0, 0 }; - MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, 0, SPh, 0, 0, SPh, 0, 0 }; + PopulateBUSRQ(0, PCh, 0, 0, PCh, 0, 0, PCh, SPh, 0, 0, SPh, 0, 0); + PopulateMEMRQ(0, PCh, 0, 0, PCh, 0, 0, 0, SPh, 0, 0, SPh, 0, 0); IRQS = 14; } else { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD_INC, Z, PCl, PCh, IDLE, WAIT, - RD_INC, W, PCl, PCh}; + RD_INC, W, PCl, PCh); - BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; - MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0 }; + PopulateBUSRQ(0, PCh, 0, 0, PCh, 0, 0); + PopulateMEMRQ(0, PCh, 0, 0, PCh, 0, 0); IRQS = 7; } } private void INT_OP(ushort operation, ushort src) { - cur_instr = new ushort[] - {operation, src }; + PopulateCURINSTR + (operation, src); - BUSRQ = new ushort[] { 0 }; - MEMRQ = new ushort[] { 0 }; + PopulateBUSRQ(0); + PopulateMEMRQ(0); IRQS = 1; } private void BIT_OP(ushort operation, ushort bit, ushort src) { - cur_instr = new ushort[] - {operation, bit, src }; + PopulateCURINSTR + (operation, bit, src); - BUSRQ = new ushort[] { 0 }; - MEMRQ = new ushort[] { 0 }; + PopulateBUSRQ(0); + PopulateMEMRQ(0); IRQS = 1; } private void PUSH_(ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, DEC16, SPl, SPh, IDLE, WAIT, WR_DEC, SPl, SPh, src_h, IDLE, WAIT, - WR, SPl, SPh, src_l }; + WR, SPl, SPh, src_l); - BUSRQ = new ushort[] { 0, I, SPh, 0, 0, SPh, 0, 0 }; - MEMRQ = new ushort[] { 0, 0, SPh, 0, 0, SPh, 0, 0 }; + PopulateBUSRQ(0, I, SPh, 0, 0, SPh, 0, 0); + PopulateMEMRQ(0, 0, SPh, 0, 0, SPh, 0, 0); IRQS = 8; } private void POP_(ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD_INC, src_l, SPl, SPh, IDLE, WAIT, - RD_INC, src_h, SPl, SPh }; + RD_INC, src_h, SPl, SPh); - BUSRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; - MEMRQ = new ushort[] { 0, SPh, 0, 0, SPh, 0, 0 }; + PopulateBUSRQ(0, SPh, 0, 0, SPh, 0, 0); + PopulateMEMRQ(0, SPh, 0, 0, SPh, 0, 0); IRQS = 7; } private void RST_(ushort n) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, DEC16, SPl, SPh, IDLE, WAIT, WR_DEC, SPl, SPh, PCh, RST, n, WAIT, - WR_TR_PC, SPl, SPh, PCl }; + WR_TR_PC, SPl, SPh, PCl); - BUSRQ = new ushort[] { 0, I, SPh, 0, 0, SPh, 0, 0 }; - MEMRQ = new ushort[] { 0, 0, SPh, 0, 0, SPh, 0, 0 }; + PopulateBUSRQ(0, I, SPh, 0, 0, SPh, 0, 0); + PopulateMEMRQ(0, 0, SPh, 0, 0, SPh, 0, 0); IRQS = 8; } private void PREFIX_(ushort src) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, - PREFIX }; + PREFIX); PRE_SRC = src; - BUSRQ = new ushort[] { 0, PCh, 0, 0 }; - MEMRQ = new ushort[] { 0, PCh, 0, 0 }; + PopulateBUSRQ(0, PCh, 0, 0); + PopulateMEMRQ(0, PCh, 0, 0); IRQS = -1; // prefix does not get interrupted } @@ -448,160 +448,160 @@ namespace BizHawk.Emulation.Cores.Components.Z80A Regs[Z] = Regs[Iyl]; } - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD_INC, ALU, PCl, PCh, ADDS, Z, W, ALU, ZERO, WAIT, IDLE, - PREFIX}; + PREFIX); PRE_SRC = src; //Console.WriteLine(TotalExecutedCycles); - BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, PCh }; - MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, 0 }; + PopulateBUSRQ(0, PCh, 0, 0, PCh, 0, 0, PCh); + PopulateMEMRQ(0, PCh, 0, 0, PCh, 0, 0, 0); IRQS = -1; // prefetch does not get interrupted } private void DI_() { - cur_instr = new ushort[] - {DI }; + PopulateCURINSTR + (DI); - BUSRQ = new ushort[] { 0 }; - MEMRQ = new ushort[] { 0 }; + PopulateBUSRQ(0); + PopulateMEMRQ(0); IRQS = 1; } private void EI_() { - cur_instr = new ushort[] - {EI }; + PopulateCURINSTR + (EI); - BUSRQ = new ushort[] { 0 }; - MEMRQ = new ushort[] { 0 }; + PopulateBUSRQ(0); + PopulateMEMRQ(0); IRQS = 1; } private void JP_16(ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {TR16, PCl, PCh, src_l, src_h }; + PopulateCURINSTR + (TR16, PCl, PCh, src_l, src_h); - BUSRQ = new ushort[] { 0 }; - MEMRQ = new ushort[] { 0 }; + PopulateBUSRQ(0); + PopulateMEMRQ(0); IRQS = 1; } private void LD_SP_16(ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, - TR16, SPl, SPh, src_l, src_h }; + TR16, SPl, SPh, src_l, src_h); - BUSRQ = new ushort[] { 0, I, I }; - MEMRQ = new ushort[] { 0, 0, 0 }; + PopulateBUSRQ(0, I, I); + PopulateMEMRQ(0, 0, 0); IRQS = 3; } private void OUT_() { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, TR, W, A, WAIT, RD_INC, Z, PCl, PCh, - TR, ALU, A, - WAIT, + TR, ALU, A, WAIT, - OUT_INC, Z, ALU, A }; + WAIT, + OUT_INC, Z, ALU, A); - BUSRQ = new ushort[] { 0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4 }; - MEMRQ = new ushort[] { 0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4 }; + PopulateBUSRQ(0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4); + PopulateMEMRQ(0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4); IRQS = 8; } private void OUT_REG_(ushort dest, ushort src) { - cur_instr = new ushort[] - {IDLE, - TR16, Z, W, C, B, - IDLE, + PopulateCURINSTR + (IDLE, + TR16, Z, W, C, B, IDLE, - OUT_INC, Z, W, src }; + IDLE, + OUT_INC, Z, W, src); - BUSRQ = new ushort[] { 0, BIO1, BIO2, BIO3, BIO4 }; - MEMRQ = new ushort[] { 0, BIO1, BIO2, BIO3, BIO4 }; + PopulateBUSRQ(0, BIO1, BIO2, BIO3, BIO4); + PopulateMEMRQ(0, BIO1, BIO2, BIO3, BIO4); IRQS = 5; } private void IN_() { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, TR, W, A, WAIT, RD_INC, Z, PCl, PCh, IDLE, WAIT, WAIT, - IN_A_N_INC, A, Z, W }; + IN_A_N_INC, A, Z, W); - BUSRQ = new ushort[] { 0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4 }; - MEMRQ = new ushort[] { 0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4 }; + PopulateBUSRQ(0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4); + PopulateMEMRQ(0, PCh, 0, 0, WIO1, WIO2, WIO3, WIO4); IRQS = 8; } private void IN_REG_(ushort dest, ushort src) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, TR16, Z, W, C, B, WAIT, WAIT, - IN_INC, dest, Z, W }; + IN_INC, dest, Z, W); - BUSRQ = new ushort[] { 0, BIO1, BIO2, BIO3, BIO4 }; - MEMRQ = new ushort[] { 0, BIO1, BIO2, BIO3, BIO4 }; + PopulateBUSRQ(0, BIO1, BIO2, BIO3, BIO4); + PopulateMEMRQ(0, BIO1, BIO2, BIO3, BIO4); IRQS = 5; } private void REG_OP_16_(ushort op, ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, IDLE, TR16, Z, W, dest_l, dest_h, INC16, Z, W, IDLE, IDLE, - op, dest_l, dest_h, src_l, src_h }; + op, dest_l, dest_h, src_l, src_h); - BUSRQ = new ushort[] { 0, I, I, I, I, I, I, I }; - MEMRQ = new ushort[] { 0, 0, 0, 0, 0, 0, 0, 0 }; + PopulateBUSRQ(0, I, I, I, I, I, I, I); + PopulateMEMRQ(0, 0, 0, 0, 0, 0, 0, 0); IRQS = 8; } private void INT_MODE_(ushort src) { - cur_instr = new ushort[] - {INT_MODE, src }; + PopulateCURINSTR + (INT_MODE, src); - BUSRQ = new ushort[] { 0 }; - MEMRQ = new ushort[] { 0 }; + PopulateBUSRQ(0); + PopulateMEMRQ(0); IRQS = 1; } private void RRD_() { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, TR16, Z, W, L, H, WAIT, RD, ALU, Z, W, @@ -611,17 +611,17 @@ namespace BizHawk.Emulation.Cores.Components.Z80A IDLE, IDLE, WAIT, - WR_INC, Z, W, ALU }; + WR_INC, Z, W, ALU); - BUSRQ = new ushort[] { 0, H, 0, 0, H, H, H, H, W, 0, 0 }; - MEMRQ = new ushort[] { 0, H, 0, 0, 0, 0, 0, 0, W, 0, 0 }; + PopulateBUSRQ(0, H, 0, 0, H, H, H, H, W, 0, 0); + PopulateMEMRQ(0, H, 0, 0, 0, 0, 0, 0, W, 0, 0); IRQS = 11; } private void RLD_() { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, TR16, Z, W, L, H, WAIT, RD, ALU, Z, W, @@ -631,10 +631,10 @@ namespace BizHawk.Emulation.Cores.Components.Z80A IDLE, IDLE, WAIT, - WR_INC, Z, W, ALU }; + WR_INC, Z, W, ALU); - BUSRQ = new ushort[] { 0, H, 0, 0, H, H, H, H, W, 0, 0 }; - MEMRQ = new ushort[] { 0, H, 0, 0, 0, 0, 0, 0, W, 0, 0 }; + PopulateBUSRQ(0, H, 0, 0, H, H, H, H, W, 0, 0); + PopulateMEMRQ(0, H, 0, 0, 0, 0, 0, 0, W, 0, 0); IRQS = 11; } } diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Indirect.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Indirect.cs index 445131e8c2..4549fa54d1 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Indirect.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Tables_Indirect.cs @@ -4,35 +4,35 @@ { private void INT_OP_IND(ushort operation, ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD, ALU, src_l, src_h, IDLE, operation, ALU, WAIT, - WR, src_l, src_h, ALU }; + WR, src_l, src_h, ALU); - BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, src_h, 0, 0 }; - MEMRQ = new ushort[] { 0, src_h, 0, 0, 0, src_h, 0, 0 }; + PopulateBUSRQ(0, src_h, 0, 0, src_h, src_h, 0, 0); + PopulateMEMRQ(0, src_h, 0, 0, 0, src_h, 0, 0); IRQS = 8; } private void BIT_OP_IND(ushort operation, ushort bit, ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, - WAIT, + WAIT, RD, ALU, src_l, src_h, operation, bit, ALU, IDLE, WAIT, - WR, src_l, src_h, ALU }; + WR, src_l, src_h, ALU); - BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, src_h, 0, 0 }; - MEMRQ = new ushort[] { 0, src_h, 0, 0, 0, src_h, 0, 0 }; + PopulateBUSRQ(0, src_h, 0, 0, src_h, src_h, 0, 0); + PopulateMEMRQ(0, src_h, 0, 0, 0, src_h, 0, 0); IRQS = 8; } @@ -42,62 +42,62 @@ // even though WZ is not assigned to, letting it's value from other operations show through private void BIT_TE_IND(ushort operation, ushort bit, ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD, ALU, src_l, src_h, - I_BIT, bit, ALU }; + I_BIT, bit, ALU); - BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h }; - MEMRQ = new ushort[] { 0, src_h, 0, 0, 0 }; + PopulateBUSRQ(0, src_h, 0, 0, src_h); + PopulateMEMRQ(0, src_h, 0, 0, 0); IRQS = 5; } private void REG_OP_IND_INC(ushort operation, ushort dest, ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, - IDLE, - WAIT, - RD_OP, 1, ALU, src_l, src_h, operation, dest, ALU }; + PopulateCURINSTR + (IDLE, + IDLE, + WAIT, + RD_OP, 1, ALU, src_l, src_h, operation, dest, ALU); - BUSRQ = new ushort[] { 0, src_h, 0, 0 }; - MEMRQ = new ushort[] { 0, src_h, 0, 0 }; + PopulateBUSRQ(0, src_h, 0, 0); + PopulateMEMRQ(0, src_h, 0, 0); IRQS = 4; } private void REG_OP_IND(ushort operation, ushort dest, ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, TR16, Z, W, src_l, src_h, WAIT, - RD_OP, 1, ALU, Z, W, operation, dest, ALU }; + RD_OP, 1, ALU, Z, W, operation, dest, ALU); - BUSRQ = new ushort[] { 0, src_h, 0, 0 }; - MEMRQ = new ushort[] { 0, src_h, 0, 0 }; + PopulateBUSRQ(0, src_h, 0, 0); + PopulateMEMRQ(0, src_h, 0, 0); IRQS = 4; } // different because HL doesn't effect WZ private void REG_OP_IND_HL(ushort operation, ushort dest) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, - RD_OP, 0, ALU, L, H, operation, dest, ALU }; + RD_OP, 0, ALU, L, H, operation, dest, ALU); - BUSRQ = new ushort[] { 0, H, 0, 0 }; - MEMRQ = new ushort[] { 0, H, 0, 0 }; + PopulateBUSRQ(0, H, 0, 0); + PopulateMEMRQ(0, H, 0, 0); IRQS = 4; } private void LD_16_IND_nn(ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD_INC, Z, PCl, PCh, @@ -109,17 +109,17 @@ WR_INC, Z, W, src_l, IDLE, WAIT, - WR, Z, W, src_h }; + WR, Z, W, src_h); - BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0 }; - MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0 }; + PopulateBUSRQ(0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0); + PopulateMEMRQ(0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0); IRQS = 13; } private void LD_IND_16_nn(ushort dest_l, ushort dest_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD_INC, Z, PCl, PCh, @@ -131,17 +131,17 @@ RD_INC, dest_l, Z, W, IDLE, WAIT, - RD, dest_h, Z, W }; + RD, dest_h, Z, W); - BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0 }; - MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0 }; + PopulateBUSRQ(0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0); + PopulateMEMRQ(0, PCh, 0, 0, PCh, 0, 0, W, 0, 0, W, 0, 0); IRQS = 13; } private void LD_8_IND_nn(ushort src) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD_INC, Z, PCl, PCh, @@ -150,17 +150,17 @@ RD_INC, W, PCl, PCh, IDLE, WAIT, - WR_INC_WA, Z, W, src }; + WR_INC_WA, Z, W, src); - BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0 }; - MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0 }; + PopulateBUSRQ(0, PCh, 0, 0, PCh, 0, 0, W, 0, 0); + PopulateMEMRQ(0, PCh, 0, 0, PCh, 0, 0, W, 0, 0); IRQS = 10; } private void LD_IND_8_nn(ushort dest) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD_INC, Z, PCl, PCh, @@ -169,172 +169,172 @@ RD_INC, W, PCl, PCh, IDLE, WAIT, - RD_INC, dest, Z, W }; + RD_INC, dest, Z, W); - BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0 }; - MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, W, 0, 0 }; + PopulateBUSRQ(0, PCh, 0, 0, PCh, 0, 0, W, 0, 0); + PopulateMEMRQ(0, PCh, 0, 0, PCh, 0, 0, W, 0, 0); IRQS = 10; } private void LD_8_IND(ushort dest_l, ushort dest_h, ushort src) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, TR16, Z, W, dest_l, dest_h, WAIT, - WR_INC_WA, Z, W, src }; + WR_INC_WA, Z, W, src); - BUSRQ = new ushort[] { 0, dest_h, 0, 0 }; - MEMRQ = new ushort[] { 0, dest_h, 0, 0 }; + PopulateBUSRQ(0, dest_h, 0, 0); + PopulateMEMRQ(0, dest_h, 0, 0); IRQS = 4; } // seperate HL needed since it doesn't effect the WZ pair private void LD_8_IND_HL(ushort src) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, - WR, L, H, src }; + WR, L, H, src); - BUSRQ = new ushort[] { 0, H, 0, 0 }; - MEMRQ = new ushort[] { 0, H, 0, 0 }; + PopulateBUSRQ(0, H, 0, 0); + PopulateMEMRQ(0, H, 0, 0); IRQS = 4; } private void LD_8_IND_IND(ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD_INC, ALU, src_l, src_h, IDLE, WAIT, - WR, dest_l, dest_h, ALU }; + WR, dest_l, dest_h, ALU); - BUSRQ = new ushort[] { 0, src_h, 0, 0, dest_h, 0, 0 }; - MEMRQ = new ushort[] { 0, src_h, 0, 0, dest_h, 0, 0 }; + PopulateBUSRQ(0, src_h, 0, 0, dest_h, 0, 0); + PopulateMEMRQ(0, src_h, 0, 0, dest_h, 0, 0); IRQS = 7; } private void LD_IND_8_INC(ushort dest, ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, - RD_INC, dest, src_l, src_h }; + RD_INC, dest, src_l, src_h); - BUSRQ = new ushort[] { 0, src_h, 0, 0 }; - MEMRQ = new ushort[] { 0, src_h, 0, 0 }; + PopulateBUSRQ(0, src_h, 0, 0); + PopulateMEMRQ(0, src_h, 0, 0); IRQS = 4; } private void LD_IND_16(ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD_INC, dest_l, src_l, src_h, IDLE, WAIT, - RD_INC, dest_h, src_l, src_h }; + RD_INC, dest_h, src_l, src_h); - BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, 0, 0 }; - MEMRQ = new ushort[] { 0, src_h, 0, 0, src_h, 0, 0 }; + PopulateBUSRQ(0, src_h, 0, 0, src_h, 0, 0); + PopulateMEMRQ(0, src_h, 0, 0, src_h, 0, 0); IRQS = 7; } private void INC_8_IND(ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, - WAIT, + WAIT, RD, ALU, src_l, src_h, INC8, ALU, IDLE, WAIT, - WR, src_l, src_h, ALU }; + WR, src_l, src_h, ALU); - BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, src_h, 0, 0 }; - MEMRQ = new ushort[] { 0, src_h, 0, 0, 0, src_h, 0, 0 }; + PopulateBUSRQ(0, src_h, 0, 0, src_h, src_h, 0, 0); + PopulateMEMRQ(0, src_h, 0, 0, 0, src_h, 0, 0); IRQS = 8; } private void DEC_8_IND(ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, - WAIT, + WAIT, RD, ALU, src_l, src_h, DEC8, ALU, IDLE, WAIT, - WR, src_l, src_h, ALU }; + WR, src_l, src_h, ALU); - BUSRQ = new ushort[] { 0, src_h, 0, 0, src_h, src_h, 0, 0 }; - MEMRQ = new ushort[] { 0, src_h, 0, 0, 0, src_h, 0, 0 }; + PopulateBUSRQ(0, src_h, 0, 0, src_h, src_h, 0, 0); + PopulateMEMRQ(0, src_h, 0, 0, 0, src_h, 0, 0); IRQS = 8; } // NOTE: WZ implied for the wollowing 3 functions private void I_INT_OP(ushort operation, ushort dest) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD, ALU, Z, W, operation, ALU, TR, dest, ALU, WAIT, - WR, Z, W, ALU }; + WR, Z, W, ALU); - BUSRQ = new ushort[] { 0, W, 0, 0, W, W, 0, 0 }; - MEMRQ = new ushort[] { 0, W, 0, 0, 0, W, 0, 0 }; + PopulateBUSRQ(0, W, 0, 0, W, W, 0, 0); + PopulateMEMRQ(0, W, 0, 0, 0, W, 0, 0); IRQS = 8; } private void I_BIT_OP(ushort operation, ushort bit, ushort dest) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD, ALU, Z, W, operation, bit, ALU, TR, dest, ALU, WAIT, - WR, Z, W, ALU }; + WR, Z, W, ALU); - BUSRQ = new ushort[] { 0, W, 0, 0, W, W, 0, 0 }; - MEMRQ = new ushort[] { 0, W, 0, 0, 0, W, 0, 0 }; + PopulateBUSRQ(0, W, 0, 0, W, W, 0, 0); + PopulateMEMRQ(0, W, 0, 0, 0, W, 0, 0); IRQS = 8; } private void I_BIT_TE(ushort bit) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD, ALU, Z, W, - I_BIT, bit, ALU }; + I_BIT, bit, ALU); - BUSRQ = new ushort[] { 0, W, 0, 0, W }; - MEMRQ = new ushort[] { 0, W, 0, 0, 0 }; + PopulateBUSRQ(0, W, 0, 0, W); + PopulateMEMRQ(0, W, 0, 0, 0); IRQS = 5; } private void I_OP_n(ushort operation, ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD, ALU, PCl, PCh, @@ -349,17 +349,17 @@ operation, ALU, IDLE, WAIT, - WR, Z, W, ALU }; + WR, Z, W, ALU); - BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh, W, 0, 0, W, W, 0, 0 }; - MEMRQ = new ushort[] { 0, PCh, 0, 0, 0, 0, 0, 0, 0, W, 0, 0, 0, W, 0, 0 }; + PopulateBUSRQ(0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh, W, 0, 0, W, W, 0, 0); + PopulateMEMRQ(0, PCh, 0, 0, 0, 0, 0, 0, 0, W, 0, 0, 0, W, 0, 0); IRQS = 16; } private void I_OP_n_n(ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, TR16, Z, W, src_l, src_h, WAIT, RD_INC, ALU, PCl, PCh, @@ -370,17 +370,17 @@ IDLE, INC16, PCl, PCh, WAIT, - WR, Z, W, ALU }; + WR, Z, W, ALU); - BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, PCh, PCh, W, 0, 0 }; - MEMRQ = new ushort[] { 0, PCh, 0, 0, PCh, 0, 0, 0, 0, W, 0, 0 }; + PopulateBUSRQ(0, PCh, 0, 0, PCh, 0, 0, PCh, PCh, W, 0, 0); + PopulateMEMRQ(0, PCh, 0, 0, PCh, 0, 0, 0, 0, W, 0, 0); IRQS = 12; } private void I_REG_OP_IND_n(ushort operation, ushort dest, ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD, ALU, PCl, PCh, @@ -391,38 +391,38 @@ IDLE, INC16, PCl, PCh, WAIT, - RD_OP, 0, ALU, Z, W, operation, dest, ALU }; + RD_OP, 0, ALU, Z, W, operation, dest, ALU); - BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh, W, 0, 0 }; - MEMRQ = new ushort[] { 0, PCh, 0, 0, 0, 0, 0, 0, 0, W, 0, 0 }; + PopulateBUSRQ(0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh, W, 0, 0); + PopulateMEMRQ(0, PCh, 0, 0, 0, 0, 0, 0, 0, W, 0, 0); IRQS = 12; } private void I_LD_8_IND_n(ushort dest_l, ushort dest_h, ushort src) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD, ALU, PCl, PCh, IDLE, - IDLE, + IDLE, TR16, Z, W, dest_l, dest_h, ADDS, Z, W, ALU, ZERO, IDLE, INC16, PCl, PCh, WAIT, - WR, Z, W, src }; + WR, Z, W, src); - BUSRQ = new ushort[] { 0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh, Z, 0, 0 }; - MEMRQ = new ushort[] { 0, PCh, 0, 0, 0, 0, 0, 0, 0, Z, 0, 0 }; + PopulateBUSRQ(0, PCh, 0, 0, PCh, PCh, PCh, PCh, PCh, Z, 0, 0); + PopulateMEMRQ(0, PCh, 0, 0, 0, 0, 0, 0, 0, Z, 0, 0); IRQS = 12; } private void LD_OP_R(ushort operation, ushort repeat_instr) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD, ALU, L, H, @@ -430,17 +430,17 @@ WAIT, WR, E, D, ALU, IDLE, - SET_FL_LD_R, 0, operation, repeat_instr}; + SET_FL_LD_R, 0, operation, repeat_instr); - BUSRQ = new ushort[] { 0, H, 0, 0, D, 0, 0, D, D }; - MEMRQ = new ushort[] { 0, H, 0, 0, D, 0, 0, 0, 0 }; + PopulateBUSRQ(0, H, 0, 0, D, 0, 0, D, D); + PopulateMEMRQ(0, H, 0, 0, D, 0, 0, 0, 0); IRQS = 9; } private void CP_OP_R(ushort operation, ushort repeat_instr) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD, ALU, L, H, @@ -448,17 +448,17 @@ DEC16, C, B, operation, Z, W, IDLE, - SET_FL_CP_R, 1, operation, repeat_instr}; + SET_FL_CP_R, 1, operation, repeat_instr); - BUSRQ = new ushort[] { 0, H, 0, 0, H, H, H, H, H }; - MEMRQ = new ushort[] { 0, H, 0, 0, 0, 0, 0, 0, 0 }; + PopulateBUSRQ(0, H, 0, 0, H, H, H, H, H); + PopulateMEMRQ(0, H, 0, 0, 0, 0, 0, 0, 0); IRQS = 9; } private void IN_OP_R(ushort operation, ushort repeat_instr) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, IDLE, WAIT, @@ -466,54 +466,54 @@ IN, ALU, C, B, IDLE, WAIT, - REP_OP_I, L, H, ALU, operation, 2, operation, repeat_instr }; + REP_OP_I, L, H, ALU, operation, 2, operation, repeat_instr); - BUSRQ = new ushort[] { 0, I, BIO1, BIO2, BIO3, BIO4, H, 0, 0}; - MEMRQ = new ushort[] { 0, 0, BIO1, BIO2, BIO3, BIO4, H, 0, 0 }; + PopulateBUSRQ(0, I, BIO1, BIO2, BIO3, BIO4, H, 0, 0); + PopulateMEMRQ(0, 0, BIO1, BIO2, BIO3, BIO4, H, 0, 0); IRQS = 9; } private void OUT_OP_R(ushort operation, ushort repeat_instr) { - cur_instr = new ushort[] - {IDLE, - IDLE, + PopulateCURINSTR + (IDLE, + IDLE, IDLE, WAIT, RD, ALU, L, H, IDLE, WAIT, - WAIT, - REP_OP_O, C, B, ALU, operation, 3, operation, repeat_instr }; + WAIT, + REP_OP_O, C, B, ALU, operation, 3, operation, repeat_instr); - BUSRQ = new ushort[] { 0, I, H, 0, 0, BIO1, BIO2, BIO3, BIO4 }; - MEMRQ = new ushort[] { 0, 0, H, 0, 0, BIO1, BIO2, BIO3, BIO4 }; + PopulateBUSRQ(0, I, H, 0, 0, BIO1, BIO2, BIO3, BIO4); + PopulateMEMRQ(0, 0, H, 0, 0, BIO1, BIO2, BIO3, BIO4); IRQS = 9; } // this is an indirect change of a a 16 bit register with memory private void EXCH_16_IND_(ushort dest_l, ushort dest_h, ushort src_l, ushort src_h) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, WAIT, RD_INC, Z, dest_l, dest_h, - IDLE, + IDLE, WAIT, RD, W, dest_l, dest_h, IDLE, IDLE, WAIT, WR_DEC, dest_l, dest_h, src_h, - IDLE, + IDLE, WAIT, WR, dest_l, dest_h, src_l, IDLE, - TR16, src_l, src_h, Z, W }; + TR16, src_l, src_h, Z, W); - BUSRQ = new ushort[] { 0, dest_h, 0, 0, dest_h, 0, 0, dest_h, dest_h, 0, 0, dest_h, 0, 0, dest_h, dest_h }; - MEMRQ = new ushort[] { 0, dest_h, 0, 0, dest_h, 0, 0, 0, dest_h, 0, 0, dest_h, 0, 0, 0, 0 }; + PopulateBUSRQ(0, dest_h, 0, 0, dest_h, 0, 0, dest_h, dest_h, 0, 0, dest_h, 0, 0, dest_h, dest_h); + PopulateMEMRQ(0, dest_h, 0, 0, dest_h, 0, 0, 0, dest_h, 0, 0, dest_h, 0, 0, 0, 0); IRQS = 16; } } diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs index f58dd41bdb..6de41ae296 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Z80A.cs @@ -104,14 +104,15 @@ namespace BizHawk.Emulation.Cores.Components.Z80A ResetRegisters(); ResetInterrupts(); TotalExecutedCycles = 0; - cur_instr = new ushort[] - {IDLE, - DEC16, F, A, - DEC16, SPl, SPh }; - BUSRQ = new ushort[] { 0, 0, 0 }; - MEMRQ = new ushort[] { 0, 0, 0 }; - IRQS = 3;// new ushort[] { 0, 0, 1 }; + PopulateCURINSTR + (IDLE, + DEC16, F, A, + DEC16, SPl, SPh); + + PopulateBUSRQ(0, 0, 0); + PopulateMEMRQ(0, 0, 0); + IRQS = 3; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; NO_prefix = true; } @@ -459,15 +460,15 @@ namespace BizHawk.Emulation.Cores.Components.Z80A if (((Regs[C] | (Regs[B] << 8)) != 0) && (Ztemp3 > 0)) { - cur_instr = new ushort[] - {DEC16, PCl, PCh, + PopulateCURINSTR + (DEC16, PCl, PCh, DEC16, PCl, PCh, TR16, Z, W, PCl, PCh, INC16, Z, W, - Ztemp2, E, D }; + Ztemp2, E, D); - BUSRQ = new ushort[] { D, D, D, D, D }; - MEMRQ = new ushort[] { 0, 0, 0, 0, 0 }; + PopulateBUSRQ(D, D, D, D, D); + PopulateMEMRQ(0, 0, 0, 0, 0); IRQS = 5; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; @@ -488,15 +489,16 @@ namespace BizHawk.Emulation.Cores.Components.Z80A if (((Regs[C] | (Regs[B] << 8)) != 0) && (Ztemp3 > 0) && !FlagZ) { - cur_instr = new ushort[] - {DEC16, PCl, PCh, + + PopulateCURINSTR + (DEC16, PCl, PCh, DEC16, PCl, PCh, TR16, Z, W, PCl, PCh, - INC16, Z, W, - Ztemp2, L, H }; + INC16, Z, W, + Ztemp2, L, H); - BUSRQ = new ushort[] { H, H, H, H, H }; - MEMRQ = new ushort[] { 0, 0, 0, 0, 0 }; + PopulateBUSRQ(H, H, H, H, H); + PopulateMEMRQ(0, 0, 0, 0, 0); IRQS = 5; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; @@ -562,15 +564,15 @@ namespace BizHawk.Emulation.Cores.Components.Z80A if ((Regs[B] != 0) && (Ztemp3 > 0)) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, DEC16, PCl, PCh, DEC16, PCl, PCh, - Ztemp2, L, H }; + Ztemp2, L, H); - BUSRQ = new ushort[] { H, H, H, H, H }; - MEMRQ = new ushort[] { 0, 0, 0, 0, 0 }; + PopulateBUSRQ(H, H, H, H, H); + PopulateMEMRQ(0, 0, 0, 0, 0); IRQS = 5; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; @@ -613,15 +615,15 @@ namespace BizHawk.Emulation.Cores.Components.Z80A if ((Regs[B] != 0) && (Ztemp3 > 0)) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, IDLE, DEC16, PCl, PCh, DEC16, PCl, PCh, - IDLE }; + IDLE); - BUSRQ = new ushort[] { B, B, B, B, B }; - MEMRQ = new ushort[] { 0, 0, 0, 0, 0 }; + PopulateBUSRQ(B, B, B, B, B); + PopulateMEMRQ(0, 0, 0, 0, 0); IRQS = 5; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; @@ -707,14 +709,14 @@ namespace BizHawk.Emulation.Cores.Components.Z80A // otherwise start a new normal access else if (!halted) { - cur_instr = new ushort[] - {IDLE, + PopulateCURINSTR + (IDLE, WAIT, OP_F, - OP}; + OP); - BUSRQ = new ushort[] { PCh, 0, 0, 0 }; - MEMRQ = new ushort[] { PCh, 0, 0, 0 }; + PopulateBUSRQ(PCh, 0, 0, 0); + PopulateMEMRQ(PCh, 0, 0, 0); IRQS = 4; instr_pntr = mem_pntr = bus_pntr = irq_pntr = 0; @@ -781,6 +783,59 @@ namespace BizHawk.Emulation.Cores.Components.Z80A }; } + /// + /// Optimization method to set BUSRQ + /// + private void PopulateBUSRQ(ushort d0 = 0, ushort d1 = 0, ushort d2 = 0, ushort d3 = 0, ushort d4 = 0, ushort d5 = 0, ushort d6 = 0, ushort d7 = 0, ushort d8 = 0, + ushort d9 = 0, ushort d10 = 0, ushort d11 = 0, ushort d12 = 0, ushort d13 = 0, ushort d14 = 0, ushort d15 = 0, ushort d16 = 0, ushort d17 = 0, ushort d18 = 0) + { + BUSRQ[0] = d0; BUSRQ[1] = d1; BUSRQ[2] = d2; + BUSRQ[3] = d3; BUSRQ[4] = d4; BUSRQ[5] = d5; + BUSRQ[6] = d6; BUSRQ[7] = d7; BUSRQ[8] = d8; + BUSRQ[9] = d9; BUSRQ[10] = d10; BUSRQ[11] = d11; + BUSRQ[12] = d12; BUSRQ[13] = d13; BUSRQ[14] = d14; + BUSRQ[15] = d15; BUSRQ[16] = d16; BUSRQ[17] = d17; + BUSRQ[18] = d18; + } + + /// + /// Optimization method to set MEMRQ + /// + private void PopulateMEMRQ(ushort d0 = 0, ushort d1 = 0, ushort d2 = 0, ushort d3 = 0, ushort d4 = 0, ushort d5 = 0, ushort d6 = 0, ushort d7 = 0, ushort d8 = 0, + ushort d9 = 0, ushort d10 = 0, ushort d11 = 0, ushort d12 = 0, ushort d13 = 0, ushort d14 = 0, ushort d15 = 0, ushort d16 = 0, ushort d17 = 0, ushort d18 = 0) + { + MEMRQ[0] = d0; MEMRQ[1] = d1; MEMRQ[2] = d2; + MEMRQ[3] = d3; MEMRQ[4] = d4; MEMRQ[5] = d5; + MEMRQ[6] = d6; MEMRQ[7] = d7; MEMRQ[8] = d8; + MEMRQ[9] = d9; MEMRQ[10] = d10; MEMRQ[11] = d11; + MEMRQ[12] = d12; MEMRQ[13] = d13; MEMRQ[14] = d14; + MEMRQ[15] = d15; MEMRQ[16] = d16; MEMRQ[17] = d17; + MEMRQ[18] = d18; + } + + /// + /// Optimization method to set cur_instr + /// + private void PopulateCURINSTR(ushort d0 = 0, ushort d1 = 0, ushort d2 = 0, ushort d3 = 0, ushort d4 = 0, ushort d5 = 0, ushort d6 = 0, ushort d7 = 0, ushort d8 = 0, + ushort d9 = 0, ushort d10 = 0, ushort d11 = 0, ushort d12 = 0, ushort d13 = 0, ushort d14 = 0, ushort d15 = 0, ushort d16 = 0, ushort d17 = 0, ushort d18 = 0, + ushort d19 = 0, ushort d20 = 0, ushort d21 = 0, ushort d22 = 0, ushort d23 = 0, ushort d24 = 0, ushort d25 = 0, ushort d26 = 0, ushort d27 = 0, ushort d28 = 0, + ushort d29 = 0, ushort d30 = 0, ushort d31 = 0, ushort d32 = 0, ushort d33 = 0, ushort d34 = 0, ushort d35 = 0, ushort d36 = 0, ushort d37 = 0) + { + cur_instr[0] = d0; cur_instr[1] = d1; cur_instr[2] = d2; + cur_instr[3] = d3; cur_instr[4] = d4; cur_instr[5] = d5; + cur_instr[6] = d6; cur_instr[7] = d7; cur_instr[8] = d8; + cur_instr[9] = d9; cur_instr[10] = d10; cur_instr[11] = d11; + cur_instr[12] = d12; cur_instr[13] = d13; cur_instr[14] = d14; + cur_instr[15] = d15; cur_instr[16] = d16; cur_instr[17] = d17; + cur_instr[18] = d18; cur_instr[19] = d19; cur_instr[20] = d20; + cur_instr[21] = d21; cur_instr[22] = d22; cur_instr[23] = d23; + cur_instr[24] = d24; cur_instr[25] = d25; cur_instr[26] = d26; + cur_instr[27] = d27; cur_instr[28] = d28; cur_instr[29] = d29; + cur_instr[30] = d30; cur_instr[31] = d31; cur_instr[32] = d32; + cur_instr[33] = d33; cur_instr[34] = d34; cur_instr[35] = d35; + cur_instr[36] = d36; cur_instr[37] = d37; + } + // State Save/Load public void SyncState(Serializer ser) { From d3cb19e56b6ea4234da0c411e68934bf5e5ba82e Mon Sep 17 00:00:00 2001 From: upthorn Date: Fri, 21 Dec 2018 22:35:38 -0800 Subject: [PATCH 025/301] Uncomment mapdumping code. --- .../Plugins/Example/Ecco2AssistantPlugin.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BizHawk.Client.EmuHawk/Plugins/Example/Ecco2AssistantPlugin.cs b/BizHawk.Client.EmuHawk/Plugins/Example/Ecco2AssistantPlugin.cs index 75a58dcd79..e7ed248bfb 100644 --- a/BizHawk.Client.EmuHawk/Plugins/Example/Ecco2AssistantPlugin.cs +++ b/BizHawk.Client.EmuHawk/Plugins/Example/Ecco2AssistantPlugin.cs @@ -2911,13 +2911,13 @@ namespace BizHawk.Client.EmuHawk //EmuHawkPluginLibrary.SetGameExtraPadding(160, 112, 160, 112); if (_dumpMap <= 1) EccoDrawBoxes(); // Uncomment the following block to enable mapdumping - /*if ((_api.MemLib.ReadU16(0xFFA7C8) > 1) && (_api.MemLib.ReadU16(0xFFA7C8) < 4)) + if ((_api.MemLib.ReadU16(0xFFA7C8) > 1) && (_api.MemLib.ReadU16(0xFFA7C8) < 4)) { _dumpMap = 1; _rowStateGuid = string.Empty; _top = _bottom = _left = _right = 0; EmuHawkPluginLibrary.SetGameExtraPadding(0, 0, 0, 0); - }*/ + } if (_dumpMap == 3) { var levelID = _api.MemLib.ReadS8(0xFFA7D0); From 8395193aee982cf968654ce4b4f0b81d04b09110 Mon Sep 17 00:00:00 2001 From: upthorn Date: Fri, 21 Dec 2018 22:38:03 -0800 Subject: [PATCH 026/301] Allow alpha to matter in screenshots. --- Bizware/BizHawk.Bizware.BizwareGL.OpenTK/IGL_TK.cs | 2 +- Bizware/BizHawk.Bizware.BizwareGL.SlimDX/IGL_SlimDX9.cs | 2 +- Bizware/BizHawk.Bizware.BizwareGL/BitmapBuffer.cs | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Bizware/BizHawk.Bizware.BizwareGL.OpenTK/IGL_TK.cs b/Bizware/BizHawk.Bizware.BizwareGL.OpenTK/IGL_TK.cs index 349bc67819..7a8f02bc9d 100644 --- a/Bizware/BizHawk.Bizware.BizwareGL.OpenTK/IGL_TK.cs +++ b/Bizware/BizHawk.Bizware.BizwareGL.OpenTK/IGL_TK.cs @@ -860,7 +860,7 @@ namespace BizHawk.Bizware.BizwareGL.Drivers.OpenTK _rsBlendNormal = new CacheBlendState( true, BlendingFactorSrc.SrcAlpha, BlendEquationMode.FuncAdd, BlendingFactorDest.OneMinusSrcAlpha, - BlendingFactorSrc.One, BlendEquationMode.FuncAdd, BlendingFactorDest.Zero); + BlendingFactorSrc.One, BlendEquationMode.Max, BlendingFactorDest.One); } CacheBlendState _rsBlendNoneVerbatim, _rsBlendNoneOpaque, _rsBlendNormal; diff --git a/Bizware/BizHawk.Bizware.BizwareGL.SlimDX/IGL_SlimDX9.cs b/Bizware/BizHawk.Bizware.BizwareGL.SlimDX/IGL_SlimDX9.cs index e437875303..5d97323759 100644 --- a/Bizware/BizHawk.Bizware.BizwareGL.SlimDX/IGL_SlimDX9.cs +++ b/Bizware/BizHawk.Bizware.BizwareGL.SlimDX/IGL_SlimDX9.cs @@ -368,7 +368,7 @@ namespace BizHawk.Bizware.BizwareGL.Drivers.SlimDX _rsBlendNormal = new CacheBlendState( true, gl.BlendingFactorSrc.SrcAlpha, gl.BlendEquationMode.FuncAdd, gl.BlendingFactorDest.OneMinusSrcAlpha, - gl.BlendingFactorSrc.One, gl.BlendEquationMode.FuncAdd, gl.BlendingFactorDest.Zero); + gl.BlendingFactorSrc.One, gl.BlendEquationMode.Max, gl.BlendingFactorDest.One); } CacheBlendState _rsBlendNoneVerbatim, _rsBlendNoneOpaque, _rsBlendNormal; diff --git a/Bizware/BizHawk.Bizware.BizwareGL/BitmapBuffer.cs b/Bizware/BizHawk.Bizware.BizwareGL/BitmapBuffer.cs index df5fc3591a..6bfb577f7b 100644 --- a/Bizware/BizHawk.Bizware.BizwareGL/BitmapBuffer.cs +++ b/Bizware/BizHawk.Bizware.BizwareGL/BitmapBuffer.cs @@ -287,7 +287,7 @@ namespace BizHawk.Bizware.BizwareGL ///
  • _UPR-<*M<4}B!)(LT}ZBngu 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

    public void DiscardAlpha() { - HasAlpha = false; + //HasAlpha = false; } void LoadInternal(Stream stream, sd.Bitmap bitmap, BitmapLoadOptions options) From ce81b67b8c2c3bed5812735e453e8970ffc3fe29 Mon Sep 17 00:00:00 2001 From: upthorn Date: Fri, 21 Dec 2018 22:39:19 -0800 Subject: [PATCH 027/301] Allow clientapi to modify GameExtraPadding, not just ClientExtraPadding --- BizHawk.Client.ApiHawk/Classes/ClientApi.cs | 61 ++++++++++++++++++--- 1 file changed, 54 insertions(+), 7 deletions(-) diff --git a/BizHawk.Client.ApiHawk/Classes/ClientApi.cs b/BizHawk.Client.ApiHawk/Classes/ClientApi.cs index 767d755105..631ef23062 100644 --- a/BizHawk.Client.ApiHawk/Classes/ClientApi.cs +++ b/BizHawk.Client.ApiHawk/Classes/ClientApi.cs @@ -219,6 +219,53 @@ namespace BizHawk.Client.ApiHawk method.Invoke(clientMainFormInstance, new object[] { Path.Combine(PathManager.GetSaveStatePath(Global.Game), string.Format("{0}.{1}", name, "State")), name, false }); } + /// + /// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements + /// + /// Left padding + /// Top padding + /// Right padding + /// Bottom padding + public static void SetGameExtraPadding(int left, int top, int right, int bottom) + { + FieldInfo f = clientAssembly.GetType("BizHawk.Game.EmuHawk.GlobalWin").GetField("DisplayManager"); + object displayManager = f.GetValue(null); + f = f.FieldType.GetField("GameExtraPadding"); + f.SetValue(displayManager, new Padding(left, top, right, bottom)); + + MethodInfo resize = mainFormClass.GetMethod("FrameBufferResized"); + resize.Invoke(clientMainFormInstance, null); + } + + /// + /// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements + /// + /// Left padding + public static void SetGameExtraPadding(int left) + { + SetGameExtraPadding(left, 0, 0, 0); + } + + /// + /// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements + /// + /// Left padding + /// Top padding + public static void SetGameExtraPadding(int left, int top) + { + SetGameExtraPadding(left, top, 0, 0); + } + + /// + /// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements + /// + /// Left padding + /// Top padding + /// Right padding + public static void SetGameExtraPadding(int left, int top, int right) + { + SetGameExtraPadding(left, top, right, 0); + } /// /// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements @@ -227,7 +274,7 @@ namespace BizHawk.Client.ApiHawk /// Top padding /// Right padding /// Bottom padding - public static void SetExtraPadding(int left, int top, int right, int bottom) + public static void SetClientExtraPadding(int left, int top, int right, int bottom) { FieldInfo f = clientAssembly.GetType("BizHawk.Client.EmuHawk.GlobalWin").GetField("DisplayManager"); object displayManager = f.GetValue(null); @@ -242,9 +289,9 @@ namespace BizHawk.Client.ApiHawk /// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements /// /// Left padding - public static void SetExtraPadding(int left) + public static void SetClientExtraPadding(int left) { - SetExtraPadding(left, 0, 0, 0); + SetClientExtraPadding(left, 0, 0, 0); } /// @@ -252,9 +299,9 @@ namespace BizHawk.Client.ApiHawk /// /// Left padding /// Top padding - public static void SetExtraPadding(int left, int top) + public static void SetClientExtraPadding(int left, int top) { - SetExtraPadding(left, top, 0, 0); + SetClientExtraPadding(left, top, 0, 0); } /// @@ -263,9 +310,9 @@ namespace BizHawk.Client.ApiHawk /// Left padding /// Top padding /// Right padding - public static void SetExtraPadding(int left, int top, int right) + public static void SetClientExtraPadding(int left, int top, int right) { - SetExtraPadding(left, top, right, 0); + SetClientExtraPadding(left, top, right, 0); } From adf4dd6150dbc8205c0b317bfe7360d9e84a4eca Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 22 Dec 2018 09:10:27 -0600 Subject: [PATCH 028/301] GBHawk: HuC3: Initial Capability --- .../Consoles/Nintendo/GBHawk/GBHawk.cs | 25 ++ .../Nintendo/GBHawk/Mappers/Mapper_HuC3.cs | 261 ++++++++++++++++-- 2 files changed, 267 insertions(+), 19 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs index 2532554bc7..a809042862 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs @@ -480,6 +480,31 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk mapper.RTC_Get((byte)(remaining & 0xFF), 0); } + + if (mppr == "HuC3") + { + Use_MT = true; + + int years = (int)Math.Floor(_syncSettings.RTCInitialTime / 31536000.0); + + mapper.RTC_Get((byte)years, 24); + + int remaining = _syncSettings.RTCInitialTime - (years * 31536000); + + int days = (int)Math.Floor(remaining / 86400.0); + int days_upper = (days >> 8) & 0xF; + + mapper.RTC_Get((byte)days_upper, 20); + mapper.RTC_Get((byte)(days & 0xFF), 12); + + remaining = remaining - (days * 86400); + + int minutes = (int)Math.Floor(remaining / 60.0); + int minutes_upper = (minutes >> 8) & 0xF; + + mapper.RTC_Get((byte)(minutes_upper), 8); + mapper.RTC_Get((byte)(remaining & 0xFF), 0); + } } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_HuC3.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_HuC3.cs index dab71a0b4b..88029763c2 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_HuC3.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_HuC3.cs @@ -1,55 +1,140 @@ -using BizHawk.Common; -using BizHawk.Common.NumberExtensions; -using System; +using System; +using BizHawk.Common; using BizHawk.Emulation.Common.Components.LR35902; namespace BizHawk.Emulation.Cores.Nintendo.GBHawk { - // Default mapper with no bank switching + // Hudson HuC3 used with Robopon and others public class MapperHuC3 : MapperBase { + public int ROM_bank; + public int RAM_bank; + public bool RAM_enable; + public int ROM_mask; + public int RAM_mask; + public bool IR_signal; + public byte control; + public byte chip_read; + public bool timer_read; + public int time_val_shift; + public uint time; + public int RTC_timer; + public int RTC_low_clock; + public int RTC_seconds; + public override void Initialize() { - // nothing to initialize + ROM_bank = 0; + RAM_bank = 0; + RAM_enable = false; + ROM_mask = Core._rom.Length / 0x4000 - 1; + control = 0; + chip_read = 1; + timer_read = false; + time_val_shift = 0; + + // some games have sizes that result in a degenerate ROM, account for it here + if (ROM_mask > 4) { ROM_mask |= 3; } + + RAM_mask = 0; + if (Core.cart_RAM != null) + { + RAM_mask = Core.cart_RAM.Length / 0x2000 - 1; + if (Core.cart_RAM.Length == 0x800) { RAM_mask = 0; } + } } public override byte ReadMemory(ushort addr) { - if (addr < 0x8000) + if (addr < 0x4000) { return Core._rom[addr]; } - else + else if (addr < 0x8000) { - if (Core.cart_RAM != null) + return Core._rom[(addr - 0x4000) + ROM_bank * 0x4000]; + } + else if ((addr >= 0xA000) && (addr < 0xC000)) + { + if ((control >= 0xB) && (control < 0xE)) { - return Core.cart_RAM[addr - 0xA000]; + if (control == 0xD) + { + return 1; + } + return chip_read; + } + + if (RAM_enable) + { + if (Core.cart_RAM != null) + { + if (((addr - 0xA000) + RAM_bank * 0x2000) < Core.cart_RAM.Length) + { + return Core.cart_RAM[(addr - 0xA000) + RAM_bank * 0x2000]; + } + else + { + return 0xFF; + } + } + else + { + return 0xFF; + } } else { - return 0; + // what to return if RAM not enabled and controller not selected? + return 0xFF; } } + else + { + return 0xFF; + } } public override void MapCDL(ushort addr, LR35902.eCDLogMemFlags flags) { - if (addr < 0x8000) + if (addr < 0x4000) { SetCDLROM(flags, addr); } - else + else if (addr < 0x8000) { - if (Core.cart_RAM != null) + SetCDLROM(flags, (addr - 0x4000) + ROM_bank * 0x4000); + } + else if ((addr >= 0xA000) && (addr < 0xC000)) + { + if (RAM_enable) { - SetCDLRAM(flags, addr - 0xA000); + if (Core.cart_RAM != null) + { + if (((addr - 0xA000) + RAM_bank * 0x2000) < Core.cart_RAM.Length) + { + SetCDLRAM(flags, (addr - 0xA000) + RAM_bank * 0x2000); + } + else + { + return; + } + } + else + { + return; + } } else { return; } } + else + { + return; + } } public override byte PeekMemory(ushort addr) @@ -61,20 +146,158 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk { if (addr < 0x8000) { - // no mapping hardware available + if (addr < 0x2000) + { + RAM_enable = (value & 0xA) == 0xA; + control = value; + } + else if (addr < 0x4000) + { + if (value == 0) { value = 1; } + + ROM_bank = value; + ROM_bank &= ROM_mask; + } + else if (addr < 0x6000) + { + RAM_bank = value; + RAM_bank &= 0xF; + RAM_bank &= RAM_mask; + } } else { - if (Core.cart_RAM != null) + if (RAM_enable && ((control < 0xB) || (control > 0xE))) { - Core.cart_RAM[addr - 0xA000] = value; + if (Core.cart_RAM != null) + { + if (((addr - 0xA000) + RAM_bank * 0x2000) < Core.cart_RAM.Length) + { + Core.cart_RAM[(addr - 0xA000) + RAM_bank * 0x2000] = value; + } + } + } + + if (control == 0xB) + { + switch (value & 0xF0) + { + case 0x10: + if (timer_read) + { + // return timer value + chip_read = (byte)((time >> time_val_shift) & 0xF); + time_val_shift += 4; + if (time_val_shift == 28) { time_val_shift = 0; } + } + break; + case 0x20: + break; + case 0x30: + if (!timer_read) + { + // write to timer + if (time_val_shift == 0) { time = 0; } + if (time_val_shift < 28) + { + time |= (uint)((value & 0x0F) << time_val_shift); + time_val_shift += 4; + if (time_val_shift == 28) { timer_read = true; } + } + } + break; + case 0x40: + // other commands + switch (value & 0xF) + { + case 0x0: + time_val_shift = 0; + break; + case 0x3: + timer_read = false; + time_val_shift = 0; + break; + case 0x7: + timer_read = true; + time_val_shift = 0; + break; + case 0xF: + break; + } + break; + case 0x50: + break; + case 0x60: + timer_read = true; + break; + } + } + else if (control == 0xC) + { + // maybe IR + } + else if (control == 0xD) + { + // maybe IR } } } - public override void PokeMemory(ushort addr, byte value) + public override void RTC_Get(byte value, int index) { - WriteMemory(addr, value); + time |= (uint)((value & 0xFF) << index); + } + + public override void Mapper_Tick() + { + RTC_timer++; + + if (RTC_timer == 128) + { + RTC_timer = 0; + + RTC_low_clock++; + + if (RTC_low_clock == 32768) + { + RTC_low_clock = 0; + + RTC_seconds++; + if (RTC_seconds > 59) + { + RTC_seconds = 0; + time++; + if ((time & 0xFFF) > 1439) + { + time -= 1440; + time += (1 << 12); + if ((time >> 12) > 365) + { + time -= (365 << 12); + time += (1 << 24); + } + } + } + } + } + } + + public override void SyncState(Serializer ser) + { + ser.Sync("ROM_Bank", ref ROM_bank); + ser.Sync("ROM_Mask", ref ROM_mask); + ser.Sync("RAM_Bank", ref RAM_bank); + ser.Sync("RAM_Mask", ref RAM_mask); + ser.Sync("RAM_enable", ref RAM_enable); + ser.Sync("IR_signal", ref IR_signal); + ser.Sync("control", ref control); + ser.Sync("chip_read", ref chip_read); + ser.Sync("timer_read", ref timer_read); + ser.Sync("time_val_shift", ref time_val_shift); + ser.Sync("time", ref time); + ser.Sync("RTC_timer", ref RTC_timer); + ser.Sync("RTC_low_clock", ref RTC_low_clock); + ser.Sync("RTC_seconds", ref RTC_seconds); } } } From aba1da071d220ab448e7556e3cf339d7c6c8b9f7 Mon Sep 17 00:00:00 2001 From: upthorn Date: Sat, 22 Dec 2018 10:40:30 -0800 Subject: [PATCH 029/301] Completely refactored PluginAPI to extend ApiHawk. Ecco2AssistantPlugin is now an external tool. --- .gitignore | 1 + .../BizHawk.Client.ApiHawk.csproj | 37 +- .../Classes/Api/EmuApi.cs | 94 +- .../Classes/Api/GameInfoApi.cs | 10 +- .../Classes/Api/JoypadApi.cs | 8 +- .../Classes/Api/MemApi.cs | 25 +- .../Classes/Api/MemApiBase.cs | 6 +- .../Classes/Api/MemEventsApi.cs | 6 +- .../Classes/Api/MemorySaveStateApi.cs | 6 +- .../Classes/Api/MovieApi.cs | 288 +++ .../Classes/Api}/PluginBase.cs | 6 +- .../Classes/Api/SqlApi.cs | 7 +- .../Classes/Api/UserDataApi.cs | 6 +- BizHawk.Client.ApiHawk/Classes/ApiInjector.cs | 79 + .../Classes/BasicApiProvider.cs | 83 + BizHawk.Client.ApiHawk/Classes/ClientApi.cs | 407 +++- .../Interfaces/Api/IApiContainer.cs | 10 + .../Interfaces/Api/IComm.cs | 35 + BizHawk.Client.ApiHawk/Interfaces/Api/IEmu.cs | 32 + .../Interfaces/Api/IExternalApi.cs | 10 + .../Interfaces/Api/IGameInfo.cs | 15 + BizHawk.Client.ApiHawk/Interfaces/Api/IGui.cs | 51 + .../Interfaces/Api/IInput.cs | 10 + .../Interfaces/Api/IJoypad.cs | 18 + BizHawk.Client.ApiHawk/Interfaces/Api/IMem.cs | 56 + .../Interfaces/Api/IMemEvents.cs | 12 + .../Interfaces/Api/IMemorySavestate.cs | 10 + .../Interfaces/Api/IMovie.cs | 27 + .../Interfaces/Api/ISaveState.cs | 10 + BizHawk.Client.ApiHawk/Interfaces/Api/ISql.cs | 10 + .../Interfaces/Api/ITool.cs | 16 + .../Interfaces/Api/IUserData.cs | 11 + .../Interfaces/IExternalApiProvider.cs | 46 + .../Interfaces}/IPlugin.cs | 4 +- .../BizHawk.Client.Common.csproj | 1 + .../OpenAdvanced.cs | 8 +- BizHawk.Client.Common/plugins/IPluginAPI.cs | 20 - .../plugins/PluginLibrary.Movie.cs | 263 --- .../plugins/PluginLibraryBase.cs | 29 - BizHawk.Client.EmuHawk/Api/ApiContainer.cs | 32 + .../Example/Ecco2AssistantPlugin.cs | 2104 +++++++++-------- .../Libraries/CommApi.cs} | 6 +- .../Api/Libraries/GUIApi.cs | 207 +- .../Libraries/InputApi.cs} | 5 +- .../Api/Libraries/PluginLibrary.cs | 52 + .../Libraries/SaveStateAPI.cs} | 6 +- .../Api/Libraries/ToolApi.cs | 162 ++ .../BizHawk.Client.EmuHawk.csproj | 17 +- BizHawk.Client.EmuHawk/GlobalWin.cs | 3 +- BizHawk.Client.EmuHawk/MainForm.cs | 16 +- .../Plugins/Libraries/PluginLibrary.Client.cs | 351 --- .../Plugins/Libraries/PluginLibrary.GUI.cs | 162 -- .../Plugins/Libraries/PluginLibrary.cs | 125 - BizHawk.Client.EmuHawk/Plugins/PluginAPI.cs | 28 - BizHawk.Client.EmuHawk/tools/ToolBox.cs | 4 +- BizHawk.Client.EmuHawk/tools/ToolManager.cs | 8 + BizHawk.Common/BizHawk.Common.csproj | 2 +- 57 files changed, 2859 insertions(+), 2204 deletions(-) rename BizHawk.Client.Common/plugins/PluginLibrary.Emu.cs => BizHawk.Client.ApiHawk/Classes/Api/EmuApi.cs (91%) rename BizHawk.Client.Common/plugins/PluginLibrary.Gameinfo.cs => BizHawk.Client.ApiHawk/Classes/Api/GameInfoApi.cs (85%) rename BizHawk.Client.Common/plugins/PluginLibrary.Joypad.cs => BizHawk.Client.ApiHawk/Classes/Api/JoypadApi.cs (97%) rename BizHawk.Client.Common/plugins/PluginLibrary.Memory.cs => BizHawk.Client.ApiHawk/Classes/Api/MemApi.cs (95%) rename BizHawk.Client.Common/plugins/PluginMemoryBase.cs => BizHawk.Client.ApiHawk/Classes/Api/MemApiBase.cs (97%) rename BizHawk.Client.Common/plugins/PluginLibrary.MemoryEvents.cs => BizHawk.Client.ApiHawk/Classes/Api/MemEventsApi.cs (89%) rename BizHawk.Client.Common/plugins/PluginLibrary.MemorySavestate.cs => BizHawk.Client.ApiHawk/Classes/Api/MemorySaveStateApi.cs (87%) create mode 100644 BizHawk.Client.ApiHawk/Classes/Api/MovieApi.cs rename {BizHawk.Client.Common/plugins => BizHawk.Client.ApiHawk/Classes/Api}/PluginBase.cs (89%) rename BizHawk.Client.Common/plugins/PluginLibrary.SQL.cs => BizHawk.Client.ApiHawk/Classes/Api/SqlApi.cs (95%) rename BizHawk.Client.Common/plugins/PluginLibrary.UserData.cs => BizHawk.Client.ApiHawk/Classes/Api/UserDataApi.cs (84%) create mode 100644 BizHawk.Client.ApiHawk/Classes/ApiInjector.cs create mode 100644 BizHawk.Client.ApiHawk/Classes/BasicApiProvider.cs create mode 100644 BizHawk.Client.ApiHawk/Interfaces/Api/IApiContainer.cs create mode 100644 BizHawk.Client.ApiHawk/Interfaces/Api/IComm.cs create mode 100644 BizHawk.Client.ApiHawk/Interfaces/Api/IEmu.cs create mode 100644 BizHawk.Client.ApiHawk/Interfaces/Api/IExternalApi.cs create mode 100644 BizHawk.Client.ApiHawk/Interfaces/Api/IGameInfo.cs create mode 100644 BizHawk.Client.ApiHawk/Interfaces/Api/IGui.cs create mode 100644 BizHawk.Client.ApiHawk/Interfaces/Api/IInput.cs create mode 100644 BizHawk.Client.ApiHawk/Interfaces/Api/IJoypad.cs create mode 100644 BizHawk.Client.ApiHawk/Interfaces/Api/IMem.cs create mode 100644 BizHawk.Client.ApiHawk/Interfaces/Api/IMemEvents.cs create mode 100644 BizHawk.Client.ApiHawk/Interfaces/Api/IMemorySavestate.cs create mode 100644 BizHawk.Client.ApiHawk/Interfaces/Api/IMovie.cs create mode 100644 BizHawk.Client.ApiHawk/Interfaces/Api/ISaveState.cs create mode 100644 BizHawk.Client.ApiHawk/Interfaces/Api/ISql.cs create mode 100644 BizHawk.Client.ApiHawk/Interfaces/Api/ITool.cs create mode 100644 BizHawk.Client.ApiHawk/Interfaces/Api/IUserData.cs create mode 100644 BizHawk.Client.ApiHawk/Interfaces/IExternalApiProvider.cs rename {BizHawk.Client.Common/plugins => BizHawk.Client.ApiHawk/Interfaces}/IPlugin.cs (73%) rename {BizHawk.Client.EmuHawk => BizHawk.Client.Common}/OpenAdvanced.cs (94%) delete mode 100644 BizHawk.Client.Common/plugins/IPluginAPI.cs delete mode 100644 BizHawk.Client.Common/plugins/PluginLibrary.Movie.cs delete mode 100644 BizHawk.Client.Common/plugins/PluginLibraryBase.cs create mode 100644 BizHawk.Client.EmuHawk/Api/ApiContainer.cs rename BizHawk.Client.EmuHawk/{Plugins => Api}/Example/Ecco2AssistantPlugin.cs (51%) rename BizHawk.Client.EmuHawk/{Plugins/Libraries/PluginLibrary.Communications.cs => Api/Libraries/CommApi.cs} (95%) rename BizHawk.Client.Common/plugins/PluginLibrary.GUIDraw.cs => BizHawk.Client.EmuHawk/Api/Libraries/GUIApi.cs (65%) rename BizHawk.Client.EmuHawk/{Plugins/Libraries/PluginLibrary.Input.cs => Api/Libraries/InputApi.cs} (92%) create mode 100644 BizHawk.Client.EmuHawk/Api/Libraries/PluginLibrary.cs rename BizHawk.Client.EmuHawk/{Plugins/Libraries/PluginLibrary.Savestate.cs => Api/Libraries/SaveStateAPI.cs} (84%) create mode 100644 BizHawk.Client.EmuHawk/Api/Libraries/ToolApi.cs delete mode 100644 BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Client.cs delete mode 100644 BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.GUI.cs delete mode 100644 BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.cs delete mode 100644 BizHawk.Client.EmuHawk/Plugins/PluginAPI.cs diff --git a/.gitignore b/.gitignore index 2b540361b5..20ffa86c34 100644 --- a/.gitignore +++ b/.gitignore @@ -73,3 +73,4 @@ ExternalCoreProjects/Virtu/bin/*.* libsnes/vs2015/libsnes.VC.db waterbox/**/*.wbx waterbox/**/*.wbx.in +/BizHawkTool_template.zip diff --git a/BizHawk.Client.ApiHawk/BizHawk.Client.ApiHawk.csproj b/BizHawk.Client.ApiHawk/BizHawk.Client.ApiHawk.csproj index 9205707a7e..c99d27ef6f 100644 --- a/BizHawk.Client.ApiHawk/BizHawk.Client.ApiHawk.csproj +++ b/BizHawk.Client.ApiHawk/BizHawk.Client.ApiHawk.csproj @@ -37,6 +37,10 @@ + + False + ..\..\Users\uptho\Documents\BizHawk-2.3\dll\System.Data.SQLite.dll + @@ -48,6 +52,19 @@ + + + + + + + + + + + + + @@ -62,7 +79,25 @@ + + + + + + + + + + + + + + + + + + @@ -95,4 +130,4 @@ --> - + \ No newline at end of file diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.Emu.cs b/BizHawk.Client.ApiHawk/Classes/Api/EmuApi.cs similarity index 91% rename from BizHawk.Client.Common/plugins/PluginLibrary.Emu.cs rename to BizHawk.Client.ApiHawk/Classes/Api/EmuApi.cs index b0ccf94061..3677007d2b 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.Emu.cs +++ b/BizHawk.Client.ApiHawk/Classes/Api/EmuApi.cs @@ -2,6 +2,7 @@ using System.ComponentModel; using System.Collections.Generic; +using BizHawk.Client.Common; using BizHawk.Emulation.Common; using BizHawk.Emulation.Common.IEmulatorExtensions; using BizHawk.Emulation.Cores.Nintendo.NES; @@ -12,11 +13,32 @@ using BizHawk.Emulation.Cores.Sega.MasterSystem; using BizHawk.Emulation.Cores.WonderSwan; using BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES; -namespace BizHawk.Client.Common +namespace BizHawk.Client.ApiHawk { [Description("A library for interacting with the currently loaded emulator core")] - public sealed class EmulatorPluginLibrary : PluginLibraryBase + public sealed class EmuApi : IEmu { + private static class EmuStatic + { + public static void DisplayVsync(bool enabled) + { + Global.Config.VSync = enabled; + } + public static string GetSystemId() + { + return Global.Game.System; + } + public static void LimitFramerate(bool enabled) + { + Global.Config.ClockThrottle = enabled; + } + + public static void MinimizeFrameskip(bool enabled) + { + Global.Config.AutoMinimizeSkipping = enabled; + } + + } [RequiredService] private IEmulator Emulator { get; set; } @@ -41,12 +63,12 @@ namespace BizHawk.Client.Common public Action FrameAdvanceCallback { get; set; } public Action YieldCallback { get; set; } - public EmulatorPluginLibrary() : base() + public EmuApi() { } - public static void DisplayVsync(bool enabled) + public void DisplayVsync(bool enabled) { - Global.Config.VSync = enabled; + EmuStatic.DisplayVsync(enabled); } public void FrameAdvance() @@ -166,9 +188,9 @@ namespace BizHawk.Client.Common } } - public static string GetSystemId() + public string GetSystemId() { - return Global.Game.System; + return EmuStatic.GetSystemId(); } public bool IsLagged() @@ -217,14 +239,39 @@ namespace BizHawk.Client.Common } } - public static void LimitFramerate(bool enabled) + public void LimitFramerate(bool enabled) { - Global.Config.ClockThrottle = enabled; + EmuStatic.LimitFramerate(enabled); } - public static void MinimizeFrameskip(bool enabled) + public void MinimizeFrameskip(bool enabled) { - Global.Config.AutoMinimizeSkipping = enabled; + EmuStatic.MinimizeFrameskip(enabled); + } + + public void Yield() + { + YieldCallback(); + } + + public string GetDisplayType() + { + if (RegionableCore != null) + { + return RegionableCore.Region.ToString(); + } + + return ""; + } + + public string GetBoardName() + { + if (BoardInfo != null) + { + return BoardInfo.BoardName; + } + + return ""; } public object GetSettings() { @@ -407,30 +454,5 @@ namespace BizHawk.Client.Common return true; } - - public void Yield() - { - YieldCallback(); - } - - public string GetDisplayType() - { - if (RegionableCore != null) - { - return RegionableCore.Region.ToString(); - } - - return ""; - } - - public string GetBoardName() - { - if (BoardInfo != null) - { - return BoardInfo.BoardName; - } - - return ""; - } } } diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.Gameinfo.cs b/BizHawk.Client.ApiHawk/Classes/Api/GameInfoApi.cs similarity index 85% rename from BizHawk.Client.Common/plugins/PluginLibrary.Gameinfo.cs rename to BizHawk.Client.ApiHawk/Classes/Api/GameInfoApi.cs index e74ea5f21b..ca74d09da6 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.Gameinfo.cs +++ b/BizHawk.Client.ApiHawk/Classes/Api/GameInfoApi.cs @@ -1,16 +1,16 @@ -using System; -using System.Collections.Generic; +using System.Collections.Generic; +using BizHawk.Client.Common; using BizHawk.Emulation.Common; -namespace BizHawk.Client.Common +namespace BizHawk.Client.ApiHawk { - public sealed class GameInfoPluginLibrary : PluginLibraryBase + public sealed class GameInfoApi : IGameInfo { [OptionalService] private IBoardInfo BoardInfo { get; set; } - public GameInfoPluginLibrary() : base() + public GameInfoApi() { } public string GetRomName() diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.Joypad.cs b/BizHawk.Client.ApiHawk/Classes/Api/JoypadApi.cs similarity index 97% rename from BizHawk.Client.Common/plugins/PluginLibrary.Joypad.cs rename to BizHawk.Client.ApiHawk/Classes/Api/JoypadApi.cs index 5eeb3ff1e6..0c049ed97c 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.Joypad.cs +++ b/BizHawk.Client.ApiHawk/Classes/Api/JoypadApi.cs @@ -1,11 +1,13 @@ using System; using System.Collections.Generic; -namespace BizHawk.Client.Common +using BizHawk.Client.Common; + +namespace BizHawk.Client.ApiHawk { - public sealed class JoypadPluginLibrary : PluginLibraryBase + public sealed class JoypadApi : IJoypad { - public JoypadPluginLibrary() : base() + public JoypadApi() { } public Dictionary Get(int? controller = null) diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.Memory.cs b/BizHawk.Client.ApiHawk/Classes/Api/MemApi.cs similarity index 95% rename from BizHawk.Client.Common/plugins/PluginLibrary.Memory.cs rename to BizHawk.Client.ApiHawk/Classes/Api/MemApi.cs index 543ea1780b..f54b282550 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.Memory.cs +++ b/BizHawk.Client.ApiHawk/Classes/Api/MemApi.cs @@ -5,20 +5,16 @@ using BizHawk.Emulation.Common; using BizHawk.Emulation.Common.IEmulatorExtensions; using BizHawk.Common.BufferExtensions; -namespace BizHawk.Client.Common +namespace BizHawk.Client.ApiHawk { - public sealed class MemoryPluginLibrary : PluginMemoryBase + public sealed class MemApi : MemApiBase, IMem { private MemoryDomain _currentMemoryDomain; private bool _isBigEndian = false; - public MemoryPluginLibrary() + public MemApi() : base() { } - public void SetBigEndian() - { - _isBigEndian = true; - } protected override MemoryDomain Domain { @@ -44,6 +40,11 @@ namespace BizHawk.Client.Common #region Unique Library Methods + public void SetBigEndian(bool enabled = true) + { + _isBigEndian = enabled; + } + public List GetMemoryDomainList() { var list = new List(); @@ -198,16 +199,16 @@ namespace BizHawk.Client.Common return (sbyte)ReadUnsignedByte(addr, domain); } - public void WriteS8(long addr, uint value, string domain = null) - { - WriteUnsignedByte(addr, value, domain); - } - public uint ReadU8(long addr, string domain = null) { return (byte)ReadUnsignedByte(addr, domain); } + public void WriteS8(long addr, int value, string domain = null) + { + WriteSigned(addr, value, 1, domain); + } + public void WriteU8(long addr, uint value, string domain = null) { WriteUnsignedByte(addr, value, domain); diff --git a/BizHawk.Client.Common/plugins/PluginMemoryBase.cs b/BizHawk.Client.ApiHawk/Classes/Api/MemApiBase.cs similarity index 97% rename from BizHawk.Client.Common/plugins/PluginMemoryBase.cs rename to BizHawk.Client.ApiHawk/Classes/Api/MemApiBase.cs index 21bf8b89e0..bc5c328d66 100644 --- a/BizHawk.Client.Common/plugins/PluginMemoryBase.cs +++ b/BizHawk.Client.ApiHawk/Classes/Api/MemApiBase.cs @@ -3,12 +3,12 @@ using System.Collections.Generic; using BizHawk.Emulation.Common; using BizHawk.Emulation.Common.IEmulatorExtensions; -namespace BizHawk.Client.Common +namespace BizHawk.Client.ApiHawk { /// /// Base class for the Memory and MainMemory plugin libraries /// - public abstract class PluginMemoryBase : PluginLibraryBase + public abstract class MemApiBase : IExternalApi { [RequiredService] protected IEmulator Emulator { get; set; } @@ -18,7 +18,7 @@ namespace BizHawk.Client.Common protected abstract MemoryDomain Domain { get; } - protected PluginMemoryBase() : base() + protected MemApiBase() { } protected IMemoryDomains DomainList diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.MemoryEvents.cs b/BizHawk.Client.ApiHawk/Classes/Api/MemEventsApi.cs similarity index 89% rename from BizHawk.Client.Common/plugins/PluginLibrary.MemoryEvents.cs rename to BizHawk.Client.ApiHawk/Classes/Api/MemEventsApi.cs index 9816e9344d..5848df5fc3 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.MemoryEvents.cs +++ b/BizHawk.Client.ApiHawk/Classes/Api/MemEventsApi.cs @@ -3,14 +3,14 @@ using BizHawk.Emulation.Common; using BizHawk.Emulation.Common.IEmulatorExtensions; -namespace BizHawk.Client.Common +namespace BizHawk.Client.ApiHawk { - public sealed class MemoryEventsPluginLibrary : PluginLibraryBase + public sealed class MemEventsApi : IMemEvents { [RequiredService] private IDebuggable DebuggableCore { get; set; } - public MemoryEventsPluginLibrary () : base() + public MemEventsApi () : base() { } public void AddReadCallback(Action cb, uint address, string domain) diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.MemorySavestate.cs b/BizHawk.Client.ApiHawk/Classes/Api/MemorySaveStateApi.cs similarity index 87% rename from BizHawk.Client.Common/plugins/PluginLibrary.MemorySavestate.cs rename to BizHawk.Client.ApiHawk/Classes/Api/MemorySaveStateApi.cs index 90950d6f73..b22eaa7540 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.MemorySavestate.cs +++ b/BizHawk.Client.ApiHawk/Classes/Api/MemorySaveStateApi.cs @@ -4,11 +4,11 @@ using System.IO; using BizHawk.Emulation.Common; -namespace BizHawk.Client.Common +namespace BizHawk.Client.ApiHawk { - public sealed class MemorySavestatePluginLibrary : PluginLibraryBase + public sealed class MemorySaveStateApi : IMemorySaveState { - public MemorySavestatePluginLibrary() : base() + public MemorySaveStateApi() { } [RequiredService] diff --git a/BizHawk.Client.ApiHawk/Classes/Api/MovieApi.cs b/BizHawk.Client.ApiHawk/Classes/Api/MovieApi.cs new file mode 100644 index 0000000000..0b74cfd5cc --- /dev/null +++ b/BizHawk.Client.ApiHawk/Classes/Api/MovieApi.cs @@ -0,0 +1,288 @@ +using System; +using System.Collections.Generic; +using System.IO; + +using BizHawk.Client.Common; + +namespace BizHawk.Client.ApiHawk +{ + public sealed class MovieApi : IMovie + { + private static class MoviePluginStatic + { + public static string Filename() + { + return Global.MovieSession.Movie.Filename; + } + + public static bool GetReadOnly() + { + return Global.MovieSession.ReadOnly; + } + + public static ulong GetRerecordCount() + { + return Global.MovieSession.Movie.Rerecords; + } + + public static bool GetRerecordCounting() + { + return Global.MovieSession.Movie.IsCountingRerecords; + } + + public static bool IsLoaded() + { + return Global.MovieSession.Movie.IsActive; + } + + public static double Length() + { + return Global.MovieSession.Movie.FrameCount; + } + + public static string Mode() + { + if (Global.MovieSession.Movie.IsFinished) + { + return "FINISHED"; + } + + if (Global.MovieSession.Movie.IsPlaying) + { + return "PLAY"; + } + + if (Global.MovieSession.Movie.IsRecording) + { + return "RECORD"; + } + + return "INACTIVE"; + } + + public static void SetReadOnly(bool readOnly) + { + Global.MovieSession.ReadOnly = readOnly; + } + + public static void SetRerecordCount(double count) + { + // Lua numbers are always double, integer precision holds up + // to 53 bits, so throw an error if it's bigger than that. + const double PrecisionLimit = 9007199254740992d; + + if (count > PrecisionLimit) + { + throw new Exception("Rerecord count exceeds Lua integer precision."); + } + + Global.MovieSession.Movie.Rerecords = (ulong)count; + } + + public static void SetRerecordCounting(bool counting) + { + Global.MovieSession.Movie.IsCountingRerecords = counting; + } + + public static void Stop() + { + Global.MovieSession.Movie.Stop(); + } + + public static double GetFps() + { + if (Global.MovieSession.Movie.IsActive) + { + var movie = Global.MovieSession.Movie; + var system = movie.HeaderEntries[HeaderKeys.PLATFORM]; + var pal = movie.HeaderEntries.ContainsKey(HeaderKeys.PAL) && + movie.HeaderEntries[HeaderKeys.PAL] == "1"; + + return new PlatformFrameRates()[system, pal]; + } + + return 0.0; + } + + } + public MovieApi() + { } + + public bool StartsFromSavestate() + { + return Global.MovieSession.Movie.IsActive && Global.MovieSession.Movie.StartsFromSavestate; + } + + public bool StartsFromSaveram() + { + return Global.MovieSession.Movie.IsActive && Global.MovieSession.Movie.StartsFromSaveRam; + } + + public Dictionary GetInput(int frame) + { + if (!Global.MovieSession.Movie.IsActive) + { + Console.WriteLine("No movie loaded"); + return null; + } + + var input = new Dictionary(); + var adapter = Global.MovieSession.Movie.GetInputState(frame); + + if (adapter == null) + { + Console.WriteLine("Can't get input of the last frame of the movie. Use the previous frame"); + return null; + } + + foreach (var button in adapter.Definition.BoolButtons) + { + input[button] = adapter.IsPressed(button); + } + + foreach (var button in adapter.Definition.FloatControls) + { + input[button] = adapter.GetFloat(button); + } + + return input; + } + + public string GetInputAsMnemonic(int frame) + { + if (Global.MovieSession.Movie.IsActive && frame < Global.MovieSession.Movie.InputLogLength) + { + var lg = Global.MovieSession.LogGeneratorInstance(); + lg.SetSource(Global.MovieSession.Movie.GetInputState(frame)); + return lg.GenerateLogEntry(); + } + + return ""; + } + + public void Save(string filename = "") + { + if (!Global.MovieSession.Movie.IsActive) + { + return; + } + + if (!string.IsNullOrEmpty(filename)) + { + filename += "." + Global.MovieSession.Movie.PreferredExtension; + var test = new FileInfo(filename); + if (test.Exists) + { + Console.WriteLine($"File {filename} already exists, will not overwrite"); + return; + } + + Global.MovieSession.Movie.Filename = filename; + } + + Global.MovieSession.Movie.Save(); + } + + public Dictionary GetHeader() + { + var table = new Dictionary(); + if (Global.MovieSession.Movie.IsActive) + { + foreach (var kvp in Global.MovieSession.Movie.HeaderEntries) + { + table[kvp.Key] = kvp.Value; + } + } + + return table; + } + + public List GetComments() + { + var list = new List(Global.MovieSession.Movie.Comments.Count); + if (Global.MovieSession.Movie.IsActive) + { + for (int i = 0; i < Global.MovieSession.Movie.Comments.Count; i++) + { + list[i] = Global.MovieSession.Movie.Comments[i]; + } + } + + return list; + } + + public List GetSubtitles() + { + var list = new List(Global.MovieSession.Movie.Subtitles.Count); + if (Global.MovieSession.Movie.IsActive) + { + for (int i = 0; i < Global.MovieSession.Movie.Subtitles.Count; i++) + { + list[i] = Global.MovieSession.Movie.Subtitles[i].ToString(); + } + } + + return list; + } + + public string Filename() + { + return MoviePluginStatic.Filename(); + } + + public bool GetReadOnly() + { + return MoviePluginStatic.GetReadOnly(); + } + + public ulong GetRerecordCount() + { + return MoviePluginStatic.GetRerecordCount(); + } + + public bool GetRerecordCounting() + { + return MoviePluginStatic.GetRerecordCounting(); + } + + public bool IsLoaded() + { + return MoviePluginStatic.IsLoaded(); + } + + public double Length() + { + return MoviePluginStatic.Length(); + } + + public string Mode() + { + return MoviePluginStatic.Mode(); + } + + public void SetReadOnly(bool readOnly) + { + MoviePluginStatic.SetReadOnly(readOnly); + } + + public void SetRerecordCount(double count) + { + MoviePluginStatic.SetRerecordCount(count); + } + + public void SetRerecordCounting(bool counting) + { + MoviePluginStatic.SetRerecordCounting(counting); + } + + public void Stop() + { + MoviePluginStatic.Stop(); + } + + public double GetFps() + { + return MoviePluginStatic.GetFps(); + } + } +} diff --git a/BizHawk.Client.Common/plugins/PluginBase.cs b/BizHawk.Client.ApiHawk/Classes/Api/PluginBase.cs similarity index 89% rename from BizHawk.Client.Common/plugins/PluginBase.cs rename to BizHawk.Client.ApiHawk/Classes/Api/PluginBase.cs index 7ef2f4453d..24bf62c727 100644 --- a/BizHawk.Client.Common/plugins/PluginBase.cs +++ b/BizHawk.Client.ApiHawk/Classes/Api/PluginBase.cs @@ -1,6 +1,6 @@ using BizHawk.Emulation.Common; -namespace BizHawk.Client.Common +namespace BizHawk.Client.ApiHawk { public abstract class PluginBase : IPlugin { @@ -13,7 +13,7 @@ namespace BizHawk.Client.Common /// or register memory callbacks in /// their Init function. /// - protected IPluginAPI _api; + protected IApiContainer _api; public PluginBase() { } @@ -41,7 +41,7 @@ namespace BizHawk.Client.Common public virtual void LoadStateCallback(string name) { } public virtual void InputPollCallback() { } public virtual void ExitCallback() { } - public virtual void Init (IPluginAPI api) + public virtual void Init (IApiContainer api) { _api = api; Running = true; diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.SQL.cs b/BizHawk.Client.ApiHawk/Classes/Api/SqlApi.cs similarity index 95% rename from BizHawk.Client.Common/plugins/PluginLibrary.SQL.cs rename to BizHawk.Client.ApiHawk/Classes/Api/SqlApi.cs index dae76333af..6a18d507af 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.SQL.cs +++ b/BizHawk.Client.ApiHawk/Classes/Api/SqlApi.cs @@ -3,11 +3,11 @@ using System.Collections.Generic; using System.ComponentModel; using System.Data.SQLite; -namespace BizHawk.Client.Common +namespace BizHawk.Client.ApiHawk { - public sealed class SQLPluginLibrary : PluginLibraryBase + public sealed class SqlApi : ISql { - public SQLPluginLibrary() : base() + public SqlApi() : base() { } SQLiteConnection m_dbConnection; @@ -125,6 +125,5 @@ namespace BizHawk.Client.Common return sqlEX.Message; } } - } } diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.UserData.cs b/BizHawk.Client.ApiHawk/Classes/Api/UserDataApi.cs similarity index 84% rename from BizHawk.Client.Common/plugins/PluginLibrary.UserData.cs rename to BizHawk.Client.ApiHawk/Classes/Api/UserDataApi.cs index 27d2dc5af4..735fe397b9 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.UserData.cs +++ b/BizHawk.Client.ApiHawk/Classes/Api/UserDataApi.cs @@ -3,11 +3,11 @@ using System.ComponentModel; using BizHawk.Client.Common; -namespace BizHawk.Client.Common +namespace BizHawk.Client.ApiHawk { - public sealed class UserDataPluginLibrary : PluginLibraryBase + public sealed class UserDataApi : IUserData { - public UserDataPluginLibrary() : base() + public UserDataApi() : base() { } public void Set(string name, object value) diff --git a/BizHawk.Client.ApiHawk/Classes/ApiInjector.cs b/BizHawk.Client.ApiHawk/Classes/ApiInjector.cs new file mode 100644 index 0000000000..811807659f --- /dev/null +++ b/BizHawk.Client.ApiHawk/Classes/ApiInjector.cs @@ -0,0 +1,79 @@ +using System; +using System.Linq; + +using BizHawk.Common.ReflectionExtensions; + +namespace BizHawk.Client.ApiHawk +{ + /// + /// injects Apis into other classes + /// + public static class ApiInjector + { + /// + /// clears all Apis from a target + /// + public static void ClearApis(object target) + { + Type targetType = target.GetType(); + object[] tmp = new object[1]; + + foreach (var propinfo in + targetType.GetPropertiesWithAttrib(typeof(RequiredApiAttribute)) + .Concat(targetType.GetPropertiesWithAttrib(typeof(OptionalApiAttribute)))) + { + propinfo.GetSetMethod(true).Invoke(target, tmp); + } + } + + /// + /// Feeds the target its required Apis. + /// + /// false if update failed + public static bool UpdateApis(IExternalApiProvider source, object target) + { + Type targetType = target.GetType(); + object[] tmp = new object[1]; + + foreach (var propinfo in targetType.GetPropertiesWithAttrib(typeof(RequiredApiAttribute))) + { + tmp[0] = source.GetApi(propinfo.PropertyType); + if (tmp[0] == null) + { + return false; + } + + propinfo.GetSetMethod(true).Invoke(target, tmp); + } + + foreach (var propinfo in targetType.GetPropertiesWithAttrib(typeof(OptionalApiAttribute))) + { + tmp[0] = source.GetApi(propinfo.PropertyType); + propinfo.GetSetMethod(true).Invoke(target, tmp); + } + + return true; + } + + /// + /// Determines whether a target is available, considering its dependencies + /// and the Apis provided by the emulator core. + /// + public static bool IsAvailable(IExternalApiProvider source, Type targetType) + { + return targetType.GetPropertiesWithAttrib(typeof(RequiredApiAttribute)) + .Select(pi => pi.PropertyType) + .All(source.HasApi); + } + } + + [AttributeUsage(AttributeTargets.Property)] + public class RequiredApiAttribute : Attribute + { + } + + [AttributeUsage(AttributeTargets.Property)] + public class OptionalApiAttribute : Attribute + { + } +} diff --git a/BizHawk.Client.ApiHawk/Classes/BasicApiProvider.cs b/BizHawk.Client.ApiHawk/Classes/BasicApiProvider.cs new file mode 100644 index 0000000000..75da59a6d4 --- /dev/null +++ b/BizHawk.Client.ApiHawk/Classes/BasicApiProvider.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +namespace BizHawk.Client.ApiHawk +{ + /// + /// A generic implementation of IExternalApi provider that provides + /// this functionality to any core. + /// The provider will scan an IExternal and register all IExternalApis + /// that the core object itself implements. In addition it provides + /// a Register() method to allow the core to pass in any additional Apis + /// + /// + public class BasicApiProvider : IExternalApiProvider + { + private readonly Dictionary _Apis = new Dictionary(); + + public BasicApiProvider(IApiContainer container) + { + // simplified logic here doesn't scan for possible Apis; just adds what it knows is implemented by the PluginApi + // this removes the possibility of automagically picking up a Api in a nested class, (find the type, then + // find the field), but we're going to keep such logic out of the basic provider. Anything the passed + // container doesn't implement directly needs to be added with Register() + // this also fully allows apis that are not IExternalApi + var libs = container.Libraries; + + _Apis = libs; + } + + /// + /// the client can call this to register an additional Api + /// + /// The to register + public void Register(T api) + where T : IExternalApi + { + if (api == null) + { + throw new ArgumentNullException(nameof(api)); + } + + _Apis[typeof(T)] = api; + } + + public T GetApi() + where T : IExternalApi + { + return (T)GetApi(typeof(T)); + } + + public object GetApi(Type t) + { + IExternalApi Api; + KeyValuePair[] k = _Apis.Where(kvp => t.IsAssignableFrom(kvp.Key)).ToArray(); + if (k.Length > 0) + { + return k[0].Value; + } + + return null; + } + + public bool HasApi() + where T : IExternalApi + { + return HasApi(typeof(T)); + } + + public bool HasApi(Type t) + { + return _Apis.ContainsKey(t); + } + + public IEnumerable AvailableApis + { + get + { + return _Apis.Select(d => d.Key); + } + } + } +} diff --git a/BizHawk.Client.ApiHawk/Classes/ClientApi.cs b/BizHawk.Client.ApiHawk/Classes/ClientApi.cs index 767d755105..8756885f54 100644 --- a/BizHawk.Client.ApiHawk/Classes/ClientApi.cs +++ b/BizHawk.Client.ApiHawk/Classes/ClientApi.cs @@ -5,6 +5,7 @@ using System.Reflection; using System.Threading.Tasks; using System.Windows.Forms; using BizHawk.Client.Common; +using BizHawk.Emulation.Common; using BizHawk.Emulation.Cores.Nintendo.Gameboy; using BizHawk.Emulation.Cores.PCEngine; using BizHawk.Emulation.Cores.Sega.MasterSystem; @@ -21,6 +22,9 @@ namespace BizHawk.Client.ApiHawk { #region Fields + private static IEmulator Emulator; + private static IVideoProvider VideoProvider; + private static readonly Assembly clientAssembly; private static readonly object clientMainFormInstance; private static readonly Type mainFormClass; @@ -68,24 +72,57 @@ namespace BizHawk.Client.ApiHawk mainFormClass = clientAssembly.GetType("BizHawk.Client.EmuHawk.MainForm"); } + public static void UpdateEmulatorAndVP(IEmulator emu = null) + { + Emulator = emu; + VideoProvider = Emulation.Common.IEmulatorExtensions.Extensions.AsVideoProviderOrDefault(emu); + } + #endregion #region Methods + #region Helpers + + private static void InvokeMainFormMethod(string name, dynamic[] paramList = null) + { + List typeList = new List(); + MethodInfo method; + if (paramList != null) + { + foreach (var obj in paramList) + { + typeList.Add(obj.GetType()); + } + method = mainFormClass.GetMethod(name, typeList.ToArray()); + } + else method = mainFormClass.GetMethod(name); + method.Invoke(clientMainFormInstance, paramList); + } + + private static object GetMainFormField(string name) + { + return mainFormClass.GetField(name); + } + + private static void SetMainFormField(string name, object value) + { + mainFormClass.GetField(name).SetValue(clientMainFormInstance, value); + } + + #endregion + #region Public /// /// THE FrameAdvance stuff /// public static void DoFrameAdvance() { - MethodInfo method = mainFormClass.GetMethod("FrameAdvance"); - method.Invoke(clientMainFormInstance, null); + InvokeMainFormMethod("FrameAdvance", null); - method = mainFormClass.GetMethod("StepRunLoop_Throttle", BindingFlags.NonPublic | BindingFlags.Instance); - method.Invoke(clientMainFormInstance, null); + InvokeMainFormMethod("StepRunLoop_Throttle", null); - method = mainFormClass.GetMethod("Render", BindingFlags.NonPublic | BindingFlags.Instance); - method.Invoke(clientMainFormInstance, null); + InvokeMainFormMethod("Render", null); } /// @@ -124,8 +161,7 @@ namespace BizHawk.Client.ApiHawk /// Savetate friendly name public static void LoadState(string name) { - MethodInfo method = mainFormClass.GetMethod("LoadState"); - method.Invoke(clientMainFormInstance, new object[] { Path.Combine(PathManager.GetSaveStatePath(Global.Game), string.Format("{0}.{1}", name, "State")), name, false, false }); + InvokeMainFormMethod("LoadState", new object[] { Path.Combine(PathManager.GetSaveStatePath(Global.Game), string.Format("{0}.{1}", name, "State")), name, false, false }); } @@ -194,12 +230,11 @@ namespace BizHawk.Client.ApiHawk /// /// Raise when a rom is successfully Loaded /// - public static void OnRomLoaded() + public static void OnRomLoaded(IEmulator emu) { - if (RomLoaded != null) - { - RomLoaded(null, EventArgs.Empty); - } + Emulator = emu; + VideoProvider = Emulation.Common.IEmulatorExtensions.Extensions.AsVideoProviderOrDefault(emu); + RomLoaded?.Invoke(null, EventArgs.Empty); allJoypads = new List(RunningSystem.MaxControllers); for (int i = 1; i <= RunningSystem.MaxControllers; i++) @@ -215,11 +250,9 @@ namespace BizHawk.Client.ApiHawk /// Savetate friendly name public static void SaveState(string name) { - MethodInfo method = mainFormClass.GetMethod("SaveState"); - method.Invoke(clientMainFormInstance, new object[] { Path.Combine(PathManager.GetSaveStatePath(Global.Game), string.Format("{0}.{1}", name, "State")), name, false }); + InvokeMainFormMethod("SaveState", new object[] { Path.Combine(PathManager.GetSaveStatePath(Global.Game), string.Format("{0}.{1}", name, "State")), name, false }); } - /// /// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements /// @@ -227,24 +260,23 @@ namespace BizHawk.Client.ApiHawk /// Top padding /// Right padding /// Bottom padding - public static void SetExtraPadding(int left, int top, int right, int bottom) + public static void SetGameExtraPadding(int left, int top, int right, int bottom) { FieldInfo f = clientAssembly.GetType("BizHawk.Client.EmuHawk.GlobalWin").GetField("DisplayManager"); object displayManager = f.GetValue(null); - f = f.FieldType.GetField("ClientExtraPadding"); + f = f.FieldType.GetField("GameExtraPadding"); f.SetValue(displayManager, new Padding(left, top, right, bottom)); - MethodInfo resize = mainFormClass.GetMethod("FrameBufferResized"); - resize.Invoke(clientMainFormInstance, null); + InvokeMainFormMethod("FrameBufferResized"); } /// /// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements /// /// Left padding - public static void SetExtraPadding(int left) + public static void SetGameExtraPadding(int left) { - SetExtraPadding(left, 0, 0, 0); + SetGameExtraPadding(left, 0, 0, 0); } /// @@ -252,9 +284,9 @@ namespace BizHawk.Client.ApiHawk /// /// Left padding /// Top padding - public static void SetExtraPadding(int left, int top) + public static void SetGameExtraPadding(int left, int top) { - SetExtraPadding(left, top, 0, 0); + SetGameExtraPadding(left, top, 0, 0); } /// @@ -263,9 +295,56 @@ namespace BizHawk.Client.ApiHawk /// Left padding /// Top padding /// Right padding - public static void SetExtraPadding(int left, int top, int right) + public static void SetGameExtraPadding(int left, int top, int right) { - SetExtraPadding(left, top, right, 0); + SetGameExtraPadding(left, top, right, 0); + } + + /// + /// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements + /// + /// Left padding + /// Top padding + /// Right padding + /// Bottom padding + public static void SetClientExtraPadding(int left, int top, int right, int bottom) + { + FieldInfo f = clientAssembly.GetType("BizHawk.Client.EmuHawk.GlobalWin").GetField("DisplayManager"); + object displayManager = f.GetValue(null); + f = f.FieldType.GetField("ClientExtraPadding"); + f.SetValue(displayManager, new Padding(left, top, right, bottom)); + + InvokeMainFormMethod("FrameBufferResized"); + } + + /// + /// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements + /// + /// Left padding + public static void SetClientExtraPadding(int left) + { + SetClientExtraPadding(left, 0, 0, 0); + } + + /// + /// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements + /// + /// Left padding + /// Top padding + public static void SetClientExtraPadding(int left, int top) + { + SetClientExtraPadding(left, top, 0, 0); + } + + /// + /// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements + /// + /// Left padding + /// Top padding + /// Right padding + public static void SetClientExtraPadding(int left, int top, int right) + { + SetClientExtraPadding(left, top, right, 0); } @@ -327,8 +406,7 @@ namespace BizHawk.Client.ApiHawk /// public static void UnpauseEmulation() { - MethodInfo method = mainFormClass.GetMethod("UnpauseEmulator"); - method.Invoke(clientMainFormInstance, null); + InvokeMainFormMethod("UnpauseEmulator", null); } #endregion Public @@ -375,6 +453,275 @@ namespace BizHawk.Client.ApiHawk } } + public static void CloseEmulator() + { + InvokeMainFormMethod("CloseEmulator"); + } + + public static void CloseEmulatorWithCode(int exitCode) + { + InvokeMainFormMethod("CloseEmulator", new object[] {exitCode}); + } + + public static int BorderHeight() + { + var point = new System.Drawing.Point(0, 0); + Type t = clientAssembly.GetType("BizHawk.Client.EmuHawk.GlobalWin"); + FieldInfo f = t.GetField("DisplayManager"); + object displayManager = f.GetValue(null); + MethodInfo m = t.GetMethod("TransFormPoint"); + point = (System.Drawing.Point) m.Invoke(displayManager, new object[] { point }); + return point.Y; + } + + public static int BorderWidth() + { + var point = new System.Drawing.Point(0, 0); + Type t = clientAssembly.GetType("BizHawk.Client.EmuHawk.GlobalWin"); + FieldInfo f = t.GetField("DisplayManager"); + object displayManager = f.GetValue(null); + MethodInfo m = t.GetMethod("TransFormPoint"); + point = (System.Drawing.Point)m.Invoke(displayManager, new object[] { point }); + return point.X; + } + + public static int BufferHeight() + { + return VideoProvider.BufferHeight; + } + + public static int BufferWidth() + { + return VideoProvider.BufferWidth; + } + + public static void ClearAutohold() + { + InvokeMainFormMethod("ClearHolds"); + } + + public static void CloseRom() + { + InvokeMainFormMethod("CloseRom"); + } + + public static void DisplayMessages(bool value) + { + Global.Config.DisplayMessages = value; + } + + public static void EnableRewind(bool enabled) + { + InvokeMainFormMethod("EnableRewind", new object[] {enabled}); + } + + public static void FrameSkip(int numFrames) + { + if (numFrames > 0) + { + Global.Config.FrameSkip = numFrames; + InvokeMainFormMethod("FrameSkipMessage"); + } + else + { + Console.WriteLine("Invalid frame skip value"); + } + } + + public static int GetTargetScanlineIntensity() + { + return Global.Config.TargetScanlineFilterIntensity; + } + + public static int GetWindowSize() + { + return Global.Config.TargetZoomFactors[Emulator.SystemId]; + } + + public static void SetSoundOn(bool enable) + { + Global.Config.SoundEnabled = enable; + } + + public static bool GetSoundOn() + { + return Global.Config.SoundEnabled; + } + + public static bool IsPaused() + { + return (bool) GetMainFormField("EmulatorPaused"); + } + + public static bool IsTurbo() + { + return (bool)GetMainFormField("IsTurboing"); + } + + public static bool IsSeeking() + { + return (bool)GetMainFormField("IsSeeking"); + } + + public static void OpenRom(string path) + { + var ioa = OpenAdvancedSerializer.ParseWithLegacy(path); + Type t = clientAssembly.GetType("BizHawk.Client.EmuHawk.GlobalWin.MainForm.LoadRomArgs"); + object o = Activator.CreateInstance(t); + t.GetField("OpenAdvanced").SetValue(o, ioa); + + InvokeMainFormMethod("LoadRom", new object[] {path, o}); + } + + public static void Pause() + { + InvokeMainFormMethod("PauseEmulator"); + } + + public static void PauseAv() + { + SetMainFormField("PauseAvi", true); + } + + public static void RebootCore() + { + InvokeMainFormMethod("RebootCore"); + } + + public static void SaveRam() + { + InvokeMainFormMethod("FlushSaveRAM"); + } + + public static int ScreenHeight() + { + Type t = GetMainFormField("PresentationPanel").GetType(); + object o = GetMainFormField("PresentationPanel"); + o = t.GetField("NativeSize").GetValue(o); + t = t.GetField("NativeSize").GetType(); + + return (int) t.GetField("Height").GetValue(o); + } + + public static void Screenshot(string path = null) + { + if (path == null) + { + InvokeMainFormMethod("TakeScreenshot"); + } + else + { + InvokeMainFormMethod("TakeScreenshot", new object[] {path}); + } + } + + public static void ScreenshotToClipboard() + { + InvokeMainFormMethod("TakeScreenshotToClipboard"); + } + + public static void SetTargetScanlineIntensity(int val) + { + Global.Config.TargetScanlineFilterIntensity = val; + } + + public static void SetScreenshotOSD(bool value) + { + Global.Config.Screenshot_CaptureOSD = value; + } + + public static int ScreenWidth() + { + Type t = GetMainFormField("PresentationPanel").GetType(); + object o = GetMainFormField("PresentationPanel"); + o = t.GetField("NativeSize").GetValue(o); + t = t.GetField("NativeSize").GetType(); + + return (int) t.GetField("Width").GetValue(o); + } + + public static void SetWindowSize(int size) + { + if (size == 1 || size == 2 || size == 3 || size == 4 || size == 5 || size == 10) + { + Global.Config.TargetZoomFactors[Emulator.SystemId] = size; + InvokeMainFormMethod("FrameBufferResized"); + Type t = clientAssembly.GetType("BizHawk.Client.EmuHawk.GlobalWin"); + FieldInfo f = t.GetField("OSD"); + object osd = f.GetValue(null); + t = f.GetType(); + MethodInfo m = t.GetMethod("AddMessage"); + m.Invoke(osd, new Object[] { "Window size set to " + size + "x" }); + } + else + { + Console.WriteLine("Invalid window size"); + } + } + + public static void SpeedMode(int percent) + { + if (percent > 0 && percent < 6400) + { + InvokeMainFormMethod("ClickSpeedItem", new object[] {percent}); + } + else + { + Console.WriteLine("Invalid speed value"); + } + } + + public static void TogglePause() + { + InvokeMainFormMethod("TogglePause"); + } + + public static int TransformPointX(int x) + { + var point = new System.Drawing.Point(x, 0); + Type t = clientAssembly.GetType("BizHawk.Client.EmuHawk.GlobalWin"); + FieldInfo f = t.GetField("DisplayManager"); + object displayManager = f.GetValue(null); + MethodInfo m = t.GetMethod("TransFormPoint"); + point = (System.Drawing.Point)m.Invoke(displayManager, new object[] { point }); + return point.X; + } + + public static int TransformPointY(int y) + { + var point = new System.Drawing.Point(0, y); + Type t = clientAssembly.GetType("BizHawk.Client.EmuHawk.GlobalWin"); + FieldInfo f = t.GetField("DisplayManager"); + object displayManager = f.GetValue(null); + MethodInfo m = t.GetMethod("TransFormPoint"); + point = (System.Drawing.Point)m.Invoke(displayManager, new object[] { point }); + return point.Y; + } + + public static void Unpause() + { + InvokeMainFormMethod("UnpauseEmulator"); + } + + public static void UnpauseAv() + { + SetMainFormField("PauseAvi", false); + } + + public static int Xpos() + { + object o = GetMainFormField("DesktopLocation"); + Type t = mainFormClass.GetField("DesktopLocation").GetType(); + return (int)t.GetField("X").GetValue(o); + } + + public static int Ypos() + { + object o = GetMainFormField("DesktopLocation"); + Type t = mainFormClass.GetField("DesktopLocation").GetType(); + return (int)t.GetField("Y").GetValue(o); + } + #endregion #region Properties @@ -427,11 +774,11 @@ namespace BizHawk.Client.ApiHawk } else { - return SystemInfo.DualGB; + return SystemInfo.DualGB; } default: - return SystemInfo.FindByCoreSystem(SystemIdConverter.Convert(Global.Emulator.SystemId)); + return SystemInfo.FindByCoreSystem(SystemIdConverter.Convert(Global.Emulator.SystemId)); } } } diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/IApiContainer.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/IApiContainer.cs new file mode 100644 index 0000000000..ec169fee9d --- /dev/null +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/IApiContainer.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; + +namespace BizHawk.Client.ApiHawk +{ + public interface IApiContainer + { + Dictionary Libraries { get; set; } + } +} diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/IComm.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/IComm.cs new file mode 100644 index 0000000000..9ef8a5e0c0 --- /dev/null +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/IComm.cs @@ -0,0 +1,35 @@ +namespace BizHawk.Client.ApiHawk +{ + public interface IComm : IExternalApi + { + #region Sockets + string SocketServerScreenShot(); + string SocketServerScreenShotResponse(); + string SocketServerSend(string SendString); + string SocketServerResponse(); + bool SocketServerSuccessful(); + void SocketServerSetTimeout(int timeout); + #endregion + + #region MemoryMappedFiles + void MmfSetFilename(string filename); + string MmfSetFilename(); + int MmfScreenshot(); + int MmfWrite(string mmf_filename, string outputString); + string MmfRead(string mmf_filename, int expectedSize); + #endregion + + #region HTTP + string HttpTest(); + string HttpTestGet(); + string HttpGet(string url); + string HttpPost(string url, string payload); + string HttpPostScreenshot(); + void HttpSetTimeout(int timeout); + void HttpSetPostUrl(string url); + void HttpSetGetUrl(string url); + string HttpGetPostUrl(); + string HttpGetGetUrl(); + #endregion + } +} diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/IEmu.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/IEmu.cs new file mode 100644 index 0000000000..51136126ac --- /dev/null +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/IEmu.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace BizHawk.Client.ApiHawk +{ + public interface IEmu : IExternalApi + { + Action FrameAdvanceCallback { get; set; } + Action YieldCallback { get; set; } + void DisplayVsync(bool enabled); + void FrameAdvance(); + int FrameCount(); + object Disassemble(uint pc, string name = ""); + ulong? GetRegister(string name); + Dictionary GetRegisters(); + void SetRegister(string register, int value); + long TotalExecutedycles(); + string GetSystemId(); + bool IsLagged(); + void SetIsLagged(bool value = true); + int LagCount(); + void SetLagCount(int count); + void LimitFramerate(bool enabled); + void MinimizeFrameskip(bool enabled); + void Yield(); + string GetDisplayType(); + string GetBoardName(); + object GetSettings(); + bool PutSettings(object settings); + void SetRenderPlanes(params bool[] param); + } +} diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/IExternalApi.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/IExternalApi.cs new file mode 100644 index 0000000000..8dc7c9da03 --- /dev/null +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/IExternalApi.cs @@ -0,0 +1,10 @@ +namespace BizHawk.Client.ApiHawk +{ + /// + /// This interface specifies that a client exposes a given interface, such as , + /// for use by external tools. + /// + public interface IExternalApi + { + } +} diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/IGameInfo.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/IGameInfo.cs new file mode 100644 index 0000000000..814a6d268c --- /dev/null +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/IGameInfo.cs @@ -0,0 +1,15 @@ +using System.Collections.Generic; + +namespace BizHawk.Client.ApiHawk +{ + public interface IGameInfo : IExternalApi + { + string GetRomName(); + string GetRomHash(); + bool InDatabase(); + string GetStatus(); + bool IsStatusBad(); + string GetBoardType(); + Dictionary GetOptions(); + } +} diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/IGui.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/IGui.cs new file mode 100644 index 0000000000..03e3247e51 --- /dev/null +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/IGui.cs @@ -0,0 +1,51 @@ +using System.Drawing; +using System.Drawing.Imaging; +using System.Windows.Forms; + +namespace BizHawk.Client.ApiHawk +{ + public interface IGui : IExternalApi + { + #region Gui API + void ToggleCompositingMode(); + ImageAttributes GetAttributes(); + void SetAttributes(ImageAttributes a); + void DrawNew(string name, bool? clear = true); + void DrawFinish(); + bool HasGUISurface { get; } + #endregion + + #region Helpers + void SetPadding(int all); + void SetPadding(int x, int y); + void SetPadding(int l, int t, int r, int b); + Padding GetPadding(); + #endregion + + void AddMessage(string message); + void ClearGraphics(); + void ClearText(); + void SetDefaultForegroundColor(Color color); + void SetDefaultBackgroundColor(Color color); + void SetDefaultTextBackground(Color color); + void SetDefaultPixelFont(string fontfamily); + void DrawBezier(Point p1, Point p2, Point p3, Point p4, Color? color = null); + void DrawBeziers(Point[] points, Color? color = null); + void DrawBox(int x, int y, int x2, int y2, Color? line = null, Color? background = null); + void DrawEllipse(int x, int y, int width, int height, Color? line = null, Color? background = null); + void DrawIcon(string path, int x, int y, int? width = null, int? height = null); + void DrawImage(string path, int x, int y, int? width = null, int? height = null, bool cache = true); + void ClearImageCache(); + void DrawImageRegion(string path, int source_x, int source_y, int source_width, int source_height, int dest_x, int dest_y, int? dest_width = null, int? dest_height = null); + void DrawLine(int x1, int y1, int x2, int y2, Color? color = null); + void DrawAxis(int x, int y, int size, Color? color = null); + void DrawPie(int x, int y, int width, int height, int startangle, int sweepangle, Color? line = null, Color? background = null); + void DrawPixel(int x, int y, Color? color = null); + void DrawPolygon(Point[] points, Color? line = null, Color? background = null); + void DrawRectangle(int x, int y, int width, int height, Color? line = null, Color? background = null); + void DrawString(int x, int y, string message, Color? forecolor = null, Color? backcolor = null, int? fontsize = null, + string fontfamily = null, string fontstyle = null, string horizalign = null, string vertalign = null); + void DrawText(int x, int y, string message, Color? forecolor = null, Color? backcolor = null, string fontfamily = null); + void Text(int x, int y, string message, Color? forecolor = null, string anchor = null); + } +} \ No newline at end of file diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/IInput.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/IInput.cs new file mode 100644 index 0000000000..507bb024bf --- /dev/null +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/IInput.cs @@ -0,0 +1,10 @@ +using System.Collections.Generic; + +namespace BizHawk.Client.ApiHawk +{ + public interface IInput : IExternalApi + { + Dictionary Get(); + Dictionary GetMouse(); + } +} diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/IJoypad.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/IJoypad.cs new file mode 100644 index 0000000000..1a8ce3340a --- /dev/null +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/IJoypad.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; + +namespace BizHawk.Client.ApiHawk +{ + public interface IJoypad : IExternalApi + { + Dictionary Get(int? controller = null); + + // TODO: what about float controls? + Dictionary GetImmediate(); + void SetFromMnemonicStr(string inputLogEntry); + void Set(Dictionary buttons, int? controller = null); + void Set(string button, bool? state = null, int? controller = null); + void SetAnalog(Dictionary controls, object controller = null); + void SetAnalog(string control, float? value = null, object controller = null); + + } +} diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/IMem.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/IMem.cs new file mode 100644 index 0000000000..7c8961ac5f --- /dev/null +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/IMem.cs @@ -0,0 +1,56 @@ +using System.Collections.Generic; + +namespace BizHawk.Client.ApiHawk +{ + public interface IMem : IExternalApi + { + void SetBigEndian(bool enabled = true); + + #region Domains + List GetMemoryDomainList(); + uint GetMemoryDomainSize(string name = ""); + string GetCurrentMemoryDomain(); + uint GetCurrentMemoryDomainSize(); + bool UseMemoryDomain(string domain); + string HashRegion(long addr, int count, string domain = null); + #endregion + #region Read + #region Special and Legacy Methods + uint ReadByte(long addr, string domain = null); + List ReadByteRange(long addr, int length, string domain = null); + float ReadFloat(long addr, string domain = null); + #endregion + #region Signed + int ReadS8(long addr, string domain = null); + int ReadS16(long addr, string domain = null); + int ReadS24(long addr, string domain = null); + int ReadS32(long addr, string domain = null); + #endregion + #region Unsigned + uint ReadU8(long addr, string domain = null); + uint ReadU16(long addr, string domain = null); + uint ReadU24(long addr, string domain = null); + uint ReadU32(long addr, string domain = null); + #endregion + #endregion + #region Write + #region Special and Legacy Methods + void WriteByte(long addr, uint value, string domain = null); + void WriteByteRange(long addr, List memoryblock, string domain = null); + void WriteFloat(long addr, double value, string domain = null); + #endregion + #region Signed + void WriteS8(long addr, int value, string domain = null); + void WriteS16(long addr, int value, string domain = null); + void WriteS24(long addr, int value, string domain = null); + void WriteS32(long addr, int value, string domain = null); + #endregion + #region Unigned + void WriteU8(long addr, uint value, string domain = null); + void WriteU16(long addr, uint value, string domain = null); + void WriteU24(long addr, uint value, string domain = null); + void WriteU32(long addr, uint value, string domain = null); + #endregion + #endregion + } +} diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/IMemEvents.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/IMemEvents.cs new file mode 100644 index 0000000000..b8650a9139 --- /dev/null +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/IMemEvents.cs @@ -0,0 +1,12 @@ +using System; + +namespace BizHawk.Client.ApiHawk +{ + public interface IMemEvents : IExternalApi + { + void AddReadCallback(Action cb, uint address, string domain); + void AddWriteCallback(Action cb, uint address, string domain); + void AddExecCallback(Action cb, uint address, string domain); + void RemoveMemoryCallback(Action cb); + } +} diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/IMemorySavestate.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/IMemorySavestate.cs new file mode 100644 index 0000000000..e3444c7bb5 --- /dev/null +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/IMemorySavestate.cs @@ -0,0 +1,10 @@ +namespace BizHawk.Client.ApiHawk +{ + public interface IMemorySaveState : IExternalApi + { + string SaveCoreStateToMemory(); + void LoadCoreStateFromMemory(string identifier); + void DeleteState(string identifier); + void ClearInMemoryStates(); + } +} diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/IMovie.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/IMovie.cs new file mode 100644 index 0000000000..c983ec1df1 --- /dev/null +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/IMovie.cs @@ -0,0 +1,27 @@ +using System.Collections.Generic; +namespace BizHawk.Client.ApiHawk +{ + public interface IMovie : IExternalApi + { + bool StartsFromSavestate(); + bool StartsFromSaveram(); + string Filename(); + Dictionary GetInput(int frame); + string GetInputAsMnemonic(int frame); + bool GetReadOnly(); + ulong GetRerecordCount(); + bool GetRerecordCounting(); + bool IsLoaded(); + double Length(); + string Mode(); + void Save(string filename = ""); + void SetReadOnly(bool readOnly); + void SetRerecordCount(double count); + void SetRerecordCounting(bool counting); + void Stop(); + double GetFps(); + Dictionary GetHeader(); + List GetComments(); + List GetSubtitles(); + } +} diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/ISaveState.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/ISaveState.cs new file mode 100644 index 0000000000..8f595610fe --- /dev/null +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/ISaveState.cs @@ -0,0 +1,10 @@ +namespace BizHawk.Client.ApiHawk +{ + public interface ISaveState : IExternalApi + { + void Load(string path); + void LoadSlot(int slotNum); + void Save(string path); + void SaveSlot(int slotNum); + } +} diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/ISql.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/ISql.cs new file mode 100644 index 0000000000..99407ac1c2 --- /dev/null +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/ISql.cs @@ -0,0 +1,10 @@ +namespace BizHawk.Client.ApiHawk +{ + public interface ISql : IExternalApi + { + string CreateDatabase(string name); + string OpenDatabase(string name); + string WriteCommand(string query = ""); + dynamic ReadCommand(string query = ""); + } +} diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/ITool.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/ITool.cs new file mode 100644 index 0000000000..ce4cdce516 --- /dev/null +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/ITool.cs @@ -0,0 +1,16 @@ +using System; +namespace BizHawk.Client.ApiHawk +{ + public interface ITool : IExternalApi + { + Type GetTool(string name); + object CreateInstance(string name); + void OpenCheats(); + void OpenHexEditor(); + void OpenRamWatch(); + void OpenRamSearch(); + void OpenTasStudio(); + void OpenToolBox(); + void OpenTraceLogger(); + } +} diff --git a/BizHawk.Client.ApiHawk/Interfaces/Api/IUserData.cs b/BizHawk.Client.ApiHawk/Interfaces/Api/IUserData.cs new file mode 100644 index 0000000000..234a7d4695 --- /dev/null +++ b/BizHawk.Client.ApiHawk/Interfaces/Api/IUserData.cs @@ -0,0 +1,11 @@ +namespace BizHawk.Client.ApiHawk +{ + public interface IUserData : IExternalApi + { + void Set(string name, object value); + object Get(string key); + void Clear(); + bool Remove(string key); + bool ContainsKey(string key); + } +} diff --git a/BizHawk.Client.ApiHawk/Interfaces/IExternalApiProvider.cs b/BizHawk.Client.ApiHawk/Interfaces/IExternalApiProvider.cs new file mode 100644 index 0000000000..d44299f7b1 --- /dev/null +++ b/BizHawk.Client.ApiHawk/Interfaces/IExternalApiProvider.cs @@ -0,0 +1,46 @@ +using System; +using System.Collections.Generic; + +namespace BizHawk.Client.ApiHawk +{ + /// + /// This interface defines the mechanism by which External tools can retrieve + /// from a client implementation + /// An implementation should collect all available IExternalApi instances. + /// This interface defines only the external interaction. This interface does not specify the means + /// by which a api provider will be populated with available apis. However, an implementation + /// by design must provide this mechanism + /// + /// + public interface IExternalApiProvider + { + /// e + /// Returns whether or not T is available + /// + /// The to check + bool HasApi() where T : IExternalApi; + + /// + /// Returns whether or not t is available + /// + bool HasApi(Type t); + + /// + /// Returns an instance of T if T is available + /// Else returns null + /// + /// The requested + T GetApi() where T : IExternalApi; + + /// + /// Returns an instance of t if t is available + /// Else returns null + /// + object GetApi(Type t); + + /// + /// Gets a list of all currently registered Apis available to be retrieved + /// + IEnumerable AvailableApis { get; } + } +} diff --git a/BizHawk.Client.Common/plugins/IPlugin.cs b/BizHawk.Client.ApiHawk/Interfaces/IPlugin.cs similarity index 73% rename from BizHawk.Client.Common/plugins/IPlugin.cs rename to BizHawk.Client.ApiHawk/Interfaces/IPlugin.cs index 9220e90dbd..444ecec8b2 100644 --- a/BizHawk.Client.Common/plugins/IPlugin.cs +++ b/BizHawk.Client.ApiHawk/Interfaces/IPlugin.cs @@ -1,4 +1,4 @@ -namespace BizHawk.Client.Common +namespace BizHawk.Client.ApiHawk { interface IPlugin { @@ -7,6 +7,6 @@ void SaveStateCallback(string name); void LoadStateCallback(string name); void InputPollCallback(); - void Init(IPluginAPI api); + void Init(IApiContainer api); } } diff --git a/BizHawk.Client.Common/BizHawk.Client.Common.csproj b/BizHawk.Client.Common/BizHawk.Client.Common.csproj index f3bcc12f20..84c1eed24d 100644 --- a/BizHawk.Client.Common/BizHawk.Client.Common.csproj +++ b/BizHawk.Client.Common/BizHawk.Client.Common.csproj @@ -260,6 +260,7 @@ + diff --git a/BizHawk.Client.EmuHawk/OpenAdvanced.cs b/BizHawk.Client.Common/OpenAdvanced.cs similarity index 94% rename from BizHawk.Client.EmuHawk/OpenAdvanced.cs rename to BizHawk.Client.Common/OpenAdvanced.cs index 9a9cfc1c91..b26bff967e 100644 --- a/BizHawk.Client.EmuHawk/OpenAdvanced.cs +++ b/BizHawk.Client.Common/OpenAdvanced.cs @@ -10,7 +10,7 @@ using Newtonsoft.Json; //this file contains some cumbersome self-"serialization" in order to gain a modicum of control over what the serialized output looks like //I don't want them to look like crufty json -namespace BizHawk.Client.EmuHawk +namespace BizHawk.Client.Common { public interface IOpenAdvanced { @@ -74,7 +74,7 @@ namespace BizHawk.Client.EmuHawk } } - class OpenAdvanced_Libretro : IOpenAdvanced, IOpenAdvancedLibretro + public class OpenAdvanced_Libretro : IOpenAdvanced, IOpenAdvancedLibretro { public OpenAdvanced_Libretro() { @@ -103,7 +103,7 @@ namespace BizHawk.Client.EmuHawk public string CorePath { get { return token.CorePath; } set { token.CorePath = value; } } } - class OpenAdvanced_LibretroNoGame : IOpenAdvanced, IOpenAdvancedLibretro + public class OpenAdvanced_LibretroNoGame : IOpenAdvanced, IOpenAdvancedLibretro { //you might think ideally we'd fetch the libretro core name from the core info inside it //but that would involve spinning up excess libretro core instances, which probably isnt good for stability, no matter how much we wish otherwise, not to mention slow. @@ -140,7 +140,7 @@ namespace BizHawk.Client.EmuHawk public string CorePath { get { return _corePath; } set { _corePath = value; } } } - class OpenAdvanced_OpenRom : IOpenAdvanced + public class OpenAdvanced_OpenRom : IOpenAdvanced { public OpenAdvanced_OpenRom() {} diff --git a/BizHawk.Client.Common/plugins/IPluginAPI.cs b/BizHawk.Client.Common/plugins/IPluginAPI.cs deleted file mode 100644 index 175df3af92..0000000000 --- a/BizHawk.Client.Common/plugins/IPluginAPI.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace BizHawk.Client.Common -{ - public interface IPluginAPI - { - EmulatorPluginLibrary EmuLib { get; } - GameInfoPluginLibrary GameInfoLib { get; } - GUIDrawPluginBase GUILib { get; } - JoypadPluginLibrary JoypadLib { get; } - MemoryPluginLibrary MemLib { get; } - MemoryEventsPluginLibrary MemEventsLib { get; } - MemorySavestatePluginLibrary MemStateLib { get; } - MoviePluginLibrary MovieLib { get; } - SQLPluginLibrary SQLLib { get; } - UserDataPluginLibrary UserDataLib { get; } - Dictionary Libraries { get; } - } -} diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.Movie.cs b/BizHawk.Client.Common/plugins/PluginLibrary.Movie.cs deleted file mode 100644 index ac9552d9cd..0000000000 --- a/BizHawk.Client.Common/plugins/PluginLibrary.Movie.cs +++ /dev/null @@ -1,263 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; - -namespace BizHawk.Client.Common -{ - public sealed class MoviePluginLibrary : PluginLibraryBase - { - public MoviePluginLibrary() : base() - { } - - [LuaMethodExample("if ( movie.startsfromsavestate( ) ) then\r\n\tconsole.log( \"Returns whether or not the movie is a savestate-anchored movie\" );\r\nend;")] - [LuaMethod("startsfromsavestate", "Returns whether or not the movie is a savestate-anchored movie")] - public bool StartsFromSavestate() - { - return Global.MovieSession.Movie.IsActive && Global.MovieSession.Movie.StartsFromSavestate; - } - - [LuaMethodExample("if ( movie.startsfromsaveram( ) ) then\r\n\tconsole.log( \"Returns whether or not the movie is a saveram-anchored movie\" );\r\nend;")] - [LuaMethod("startsfromsaveram", "Returns whether or not the movie is a saveram-anchored movie")] - public bool StartsFromSaveram() - { - return Global.MovieSession.Movie.IsActive && Global.MovieSession.Movie.StartsFromSaveRam; - } - - [LuaMethodExample("local stmovfil = movie.filename( );")] - [LuaMethod("filename", "Returns the file name including path of the currently loaded movie")] - public static string Filename() - { - return Global.MovieSession.Movie.Filename; - } - - [LuaMethodExample("local nlmovget = movie.getinput( 500 );")] - [LuaMethod("getinput", "Returns a table of buttons pressed on a given frame of the loaded movie")] - public Dictionary GetInput(int frame) - { - if (!Global.MovieSession.Movie.IsActive) - { - Console.WriteLine("No movie loaded"); - return null; - } - - var input = new Dictionary(); - var adapter = Global.MovieSession.Movie.GetInputState(frame); - - if (adapter == null) - { - Console.WriteLine("Can't get input of the last frame of the movie. Use the previous frame"); - return null; - } - - foreach (var button in adapter.Definition.BoolButtons) - { - input[button] = adapter.IsPressed(button); - } - - foreach (var button in adapter.Definition.FloatControls) - { - input[button] = adapter.GetFloat(button); - } - - return input; - } - - [LuaMethodExample("local stmovget = movie.getinputasmnemonic( 500 );")] - [LuaMethod("getinputasmnemonic", "Returns the input of a given frame of the loaded movie in a raw inputlog string")] - public string GetInputAsMnemonic(int frame) - { - if (Global.MovieSession.Movie.IsActive && frame < Global.MovieSession.Movie.InputLogLength) - { - var lg = Global.MovieSession.LogGeneratorInstance(); - lg.SetSource(Global.MovieSession.Movie.GetInputState(frame)); - return lg.GenerateLogEntry(); - } - - return ""; - } - - [LuaMethodExample("if ( movie.getreadonly( ) ) then\r\n\tconsole.log( \"Returns true if the movie is in read-only mode, false if in read+write\" );\r\nend;")] - [LuaMethod("getreadonly", "Returns true if the movie is in read-only mode, false if in read+write")] - public static bool GetReadOnly() - { - return Global.MovieSession.ReadOnly; - } - - [LuaMethodExample("local ulmovget = movie.getrerecordcount();")] - [LuaMethod("getrerecordcount", "Gets the rerecord count of the current movie.")] - public static ulong GetRerecordCount() - { - return Global.MovieSession.Movie.Rerecords; - } - - [LuaMethodExample("if ( movie.getrerecordcounting( ) ) then\r\n\tconsole.log( \"Returns whether or not the current movie is incrementing rerecords on loadstate\" );\r\nend;")] - [LuaMethod("getrerecordcounting", "Returns whether or not the current movie is incrementing rerecords on loadstate")] - public static bool GetRerecordCounting() - { - return Global.MovieSession.Movie.IsCountingRerecords; - } - - [LuaMethodExample("if ( movie.isloaded( ) ) then\r\n\tconsole.log( \"Returns true if a movie is loaded in memory ( play, record, or finished modes ), false if not ( inactive mode )\" );\r\nend;")] - [LuaMethod("isloaded", "Returns true if a movie is loaded in memory (play, record, or finished modes), false if not (inactive mode)")] - public static bool IsLoaded() - { - return Global.MovieSession.Movie.IsActive; - } - - [LuaMethodExample("local domovlen = movie.length( );")] - [LuaMethod("length", "Returns the total number of frames of the loaded movie")] - public static double Length() - { - return Global.MovieSession.Movie.FrameCount; - } - - [LuaMethodExample("local stmovmod = movie.mode( );")] - [LuaMethod("mode", "Returns the mode of the current movie. Possible modes: \"PLAY\", \"RECORD\", \"FINISHED\", \"INACTIVE\"")] - public static string Mode() - { - if (Global.MovieSession.Movie.IsFinished) - { - return "FINISHED"; - } - - if (Global.MovieSession.Movie.IsPlaying) - { - return "PLAY"; - } - - if (Global.MovieSession.Movie.IsRecording) - { - return "RECORD"; - } - - return "INACTIVE"; - } - - [LuaMethodExample("movie.save( \"C:\\moviename.ext\" );")] - [LuaMethod("save", "Saves the current movie to the disc. If the filename is provided (no extension or path needed), the movie is saved under the specified name to the current movie directory. The filename may contain a subdirectory, it will be created if it doesn't exist. Existing files won't get overwritten.")] - public void Save(string filename = "") - { - if (!Global.MovieSession.Movie.IsActive) - { - return; - } - - if (!string.IsNullOrEmpty(filename)) - { - filename += "." + Global.MovieSession.Movie.PreferredExtension; - var test = new FileInfo(filename); - if (test.Exists) - { - Console.WriteLine($"File {filename} already exists, will not overwrite"); - return; - } - - Global.MovieSession.Movie.Filename = filename; - } - - Global.MovieSession.Movie.Save(); - } - - [LuaMethodExample("movie.setreadonly( false );")] - [LuaMethod("setreadonly", "Sets the read-only state to the given value. true for read only, false for read+write")] - public static void SetReadOnly(bool readOnly) - { - Global.MovieSession.ReadOnly = readOnly; - } - - [LuaMethodExample("movie.setrerecordcount( 20.0 );")] - [LuaMethod("setrerecordcount", "Sets the rerecord count of the current movie.")] - public static void SetRerecordCount(double count) - { - // Lua numbers are always double, integer precision holds up - // to 53 bits, so throw an error if it's bigger than that. - const double PrecisionLimit = 9007199254740992d; - - if (count > PrecisionLimit) - { - throw new Exception("Rerecord count exceeds Lua integer precision."); - } - - Global.MovieSession.Movie.Rerecords = (ulong)count; - } - - [LuaMethodExample("movie.setrerecordcounting( true );")] - [LuaMethod("setrerecordcounting", "Sets whether or not the current movie will increment the rerecord counter on loadstate")] - public static void SetRerecordCounting(bool counting) - { - Global.MovieSession.Movie.IsCountingRerecords = counting; - } - - [LuaMethodExample("movie.stop( );")] - [LuaMethod("stop", "Stops the current movie")] - public static void Stop() - { - Global.MovieSession.Movie.Stop(); - } - - [LuaMethodExample("local domovget = movie.getfps( );")] - [LuaMethod("getfps", "If a movie is loaded, gets the frames per second used by the movie to determine the movie length time")] - public static double GetFps() - { - if (Global.MovieSession.Movie.IsActive) - { - var movie = Global.MovieSession.Movie; - var system = movie.HeaderEntries[HeaderKeys.PLATFORM]; - var pal = movie.HeaderEntries.ContainsKey(HeaderKeys.PAL) && - movie.HeaderEntries[HeaderKeys.PAL] == "1"; - - return new PlatformFrameRates()[system, pal]; - } - - return 0.0; - } - - [LuaMethodExample("local nlmovget = movie.getheader( );")] - [LuaMethod("getheader", "If a movie is active, will return the movie header as a lua table")] - public Dictionary GetHeader() - { - var table = new Dictionary(); - if (Global.MovieSession.Movie.IsActive) - { - foreach (var kvp in Global.MovieSession.Movie.HeaderEntries) - { - table[kvp.Key] = kvp.Value; - } - } - - return table; - } - - [LuaMethodExample("local nlmovget = movie.getcomments( );")] - [LuaMethod("getcomments", "If a movie is active, will return the movie comments as a lua table")] - public List GetComments() - { - var list = new List(Global.MovieSession.Movie.Comments.Count); - if (Global.MovieSession.Movie.IsActive) - { - for (int i = 0; i < Global.MovieSession.Movie.Comments.Count; i++) - { - list[i] = Global.MovieSession.Movie.Comments[i]; - } - } - - return list; - } - - [LuaMethodExample("local nlmovget = movie.getsubtitles( );")] - [LuaMethod("getsubtitles", "If a movie is active, will return the movie subtitles as a lua table")] - public List GetSubtitles() - { - var list = new List(Global.MovieSession.Movie.Subtitles.Count); - if (Global.MovieSession.Movie.IsActive) - { - for (int i = 0; i < Global.MovieSession.Movie.Subtitles.Count; i++) - { - list[i] = Global.MovieSession.Movie.Subtitles[i].ToString(); - } - } - - return list; - } - } -} diff --git a/BizHawk.Client.Common/plugins/PluginLibraryBase.cs b/BizHawk.Client.Common/plugins/PluginLibraryBase.cs deleted file mode 100644 index 17485c7103..0000000000 --- a/BizHawk.Client.Common/plugins/PluginLibraryBase.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Drawing; - -namespace BizHawk.Client.Common -{ - public abstract class PluginLibraryBase - { - protected PluginLibraryBase() { } - - protected static Color? ToColor(object o) - { - if (o == null) - { - return null; - } - - if (o.GetType() == typeof(double)) - { - return Color.FromArgb((int)(long)(double)o); - } - - if (o.GetType() == typeof(string)) - { - return Color.FromName(o.ToString()); - } - - return null; - } - } -} diff --git a/BizHawk.Client.EmuHawk/Api/ApiContainer.cs b/BizHawk.Client.EmuHawk/Api/ApiContainer.cs new file mode 100644 index 0000000000..6a7b7102a3 --- /dev/null +++ b/BizHawk.Client.EmuHawk/Api/ApiContainer.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; +using System.Reflection; +using System.Linq; + +using BizHawk.Client.ApiHawk; + +namespace BizHawk.Client.EmuHawk +{ + public sealed class ApiContainer : IApiContainer + { + public IComm Comm => (IComm)Libraries[typeof(CommApi)]; + public IEmu Emu => (IEmu)Libraries[typeof(EmuApi)]; + public IGameInfo GameInfo => (IGameInfo)Libraries[typeof(GameInfoApi)]; + public IGui Gui => (IGui)Libraries[typeof(GuiApi)]; + public IInput Input => (IInput)Libraries[typeof(InputApi)]; + public IJoypad Joypad => (IJoypad)Libraries[typeof(JoypadApi)]; + public IMem Mem => (IMem)Libraries[typeof(MemApi)]; + public IMemEvents MemEvents => (IMemEvents)Libraries[typeof(MemEventsApi)]; + public IMemorySaveState MemorySaveState => (IMemorySaveState)Libraries[typeof(MemorySaveStateApi)]; + public IMovie Movie => (IMovie)Libraries[typeof(MovieApi)]; + public ISaveState SaveState => (ISaveState)Libraries[typeof(SaveStateApi)]; + public ISql Sql => (ISql)Libraries[typeof(SqlApi)]; + public ITool Tool => (ITool)Libraries[typeof(ToolApi)]; + public IUserData UserData => (IUserData)Libraries[typeof(UserDataApi)]; + public Dictionary Libraries { get; set; } + public ApiContainer(Dictionary libs) + { + Libraries = libs; + } + } +} diff --git a/BizHawk.Client.EmuHawk/Plugins/Example/Ecco2AssistantPlugin.cs b/BizHawk.Client.EmuHawk/Api/Example/Ecco2AssistantPlugin.cs similarity index 51% rename from BizHawk.Client.EmuHawk/Plugins/Example/Ecco2AssistantPlugin.cs rename to BizHawk.Client.EmuHawk/Api/Example/Ecco2AssistantPlugin.cs index e7ed248bfb..8764258e3d 100644 --- a/BizHawk.Client.EmuHawk/Plugins/Example/Ecco2AssistantPlugin.cs +++ b/BizHawk.Client.EmuHawk/Api/Example/Ecco2AssistantPlugin.cs @@ -4,13 +4,31 @@ using System.Globalization; using System.Drawing; using System.Linq; -using BizHawk.Client.Common; +using BizHawk.Client.ApiHawk; using BizHawk.Emulation.Cores.Consoles.Sega.gpgx; namespace BizHawk.Client.EmuHawk { public sealed class Ecco2AssistantPlugin : PluginBase { + [RequiredApi] + private IMem Mem {get; set;} + + [RequiredApi] + private IGui Gui { get; set; } + + [RequiredApi] + private IJoypad Joy { get; set; } + + [RequiredApi] + private IEmu Emu { get; set; } + + [RequiredApi] + private IGameInfo GI { get; set; } + + [RequiredApi] + private IMemorySaveState MemSS { get; set; } + public override string Name => "Ecco 2 Assistant"; public override string Description => "Displays a hud with hitboxes, etc. Assists with maintaining maximum speed."; @@ -36,7 +54,6 @@ namespace BizHawk.Client.EmuHawk private int _destY = 0; private int _snapPast = 0; private string _rowStateGuid = string.Empty; - private EmuHawkPluginLibrary _clientLib; private Color[] _turnSignalColors = { Color.FromArgb(_signalAlpha, 127, 127, 0), @@ -53,7 +70,7 @@ namespace BizHawk.Client.EmuHawk { if (refresh) { - _rseed = (int)(_api.MemLib.ReadU16(0xFFE2F8)); + _rseed = (int)(Mem.ReadU16(0xFFE2F8)); } bool odd = (_rseed & 1) != 0; _rseed >>= 1; @@ -73,7 +90,7 @@ namespace BizHawk.Client.EmuHawk }; Color? fillColor = null; if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); - _api.GUILib.DrawPolygon(rhombus, color, fillColor); + Gui.DrawPolygon(rhombus, color, fillColor); } private void DrawEccoRhomb_scaled(int x, int y, int width, int height, int rscale, int bscale, int lscale, int tscale, Color color, int fillAlpha = 63) { @@ -85,7 +102,7 @@ namespace BizHawk.Client.EmuHawk }; Color? fillColor = null; if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); - _api.GUILib.DrawPolygon(rhombus, color, fillColor); + Gui.DrawPolygon(rhombus, color, fillColor); } private void DrawEccoOct(int x, int y, int r, Color color, int fillAlpha = 63) { @@ -102,7 +119,7 @@ namespace BizHawk.Client.EmuHawk }; Color? fillColor = null; if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); - _api.GUILib.DrawPolygon(octagon, color, fillColor); + Gui.DrawPolygon(octagon, color, fillColor); } private void DrawEccoOct_scaled(int x, int y, int xscale, int yscale, int r, Color color, int fillAlpha = 63) { @@ -123,7 +140,7 @@ namespace BizHawk.Client.EmuHawk }; Color? fillColor = null; if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); - _api.GUILib.DrawPolygon(octagon, color, fillColor); + Gui.DrawPolygon(octagon, color, fillColor); } private Point? Intersection(Point start1, Point end1, Point start2, Point end2) { @@ -203,7 +220,7 @@ namespace BizHawk.Client.EmuHawk my /= finalShape.ToArray().Length; Color? fillColor = null; if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); - _api.GUILib.DrawPolygon(finalShape.OrderBy(p => Math.Atan2(p.Y - my, p.X - mX)).ToArray(), color, fillColor); + Gui.DrawPolygon(finalShape.OrderBy(p => Math.Atan2(p.Y - my, p.X - mX)).ToArray(), color, fillColor); } private void DrawEccoTriangle(int x1, int y1, int x2, int y2, int x3, int y3, Color color, int fillAlpha = 63) { @@ -215,23 +232,23 @@ namespace BizHawk.Client.EmuHawk new Point(x3, y3) }; if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); - _api.GUILib.DrawPolygon(triPoints, color, fillColor); + Gui.DrawPolygon(triPoints, color, fillColor); } private void DrawBoxMWH(int x, int y, int w, int h, Color color, int fillAlpha = 63) { Color? fillColor = null; if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); - _api.GUILib.DrawRectangle(x - w, y - h, w << 1, h << 1, color, fillColor); + Gui.DrawRectangle(x - w, y - h, w << 1, h << 1, color, fillColor); } private void DrawBox(int x, int y, int x2, int y2, Color color, int fillAlpha = 63) { Color? fillColor = null; if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); - _api.GUILib.DrawBox(x, y, x2, y2, color, fillColor); + Gui.DrawBox(x, y, x2, y2, color, fillColor); } private void Print_Text(string message, int x, int y, Color color) { - _api.GUILib.DrawText(x, y, message, color, null); + Gui.DrawText(x, y, message, color, null); } private void PutText(string message, int x, int y, int xl, int yl, int xh, int yh, Color bg, Color fg) { @@ -253,24 +270,24 @@ namespace BizHawk.Client.EmuHawk private void TickerText(string message, Color? fg = null) { if (_dumpMap == 0) - _api.GUILib.Text(1, _tickerY, message, fg); + Gui.Text(1, _tickerY, message, fg); _tickerY += 16; } private void EccoDraw3D() { - int CamX = (_api.MemLib.ReadS32(0xFFD5E0) >> 0xC) - _left; - int CamY = (_api.MemLib.ReadS32(0xFFD5E8) >> 0xC) + _top; - int CamZ = (_api.MemLib.ReadS32(0xFFD5E4) >> 0xC) + _top; - uint curObj = _api.MemLib.ReadU24(0xFFD4C1); + int CamX = (Mem.ReadS32(0xFFD5E0) >> 0xC) - _left; + int CamY = (Mem.ReadS32(0xFFD5E8) >> 0xC) + _top; + int CamZ = (Mem.ReadS32(0xFFD5E4) >> 0xC) + _top; + uint curObj = Mem.ReadU24(0xFFD4C1); while (curObj != 0) { - int Xpos = (_api.MemLib.ReadS32(curObj + 0x6) >> 0xC); - int Ypos = (_api.MemLib.ReadS32(curObj + 0xE) >> 0xC); - int Zpos = (_api.MemLib.ReadS32(curObj + 0xA) >> 0xC); + int Xpos = (Mem.ReadS32(curObj + 0x6) >> 0xC); + int Ypos = (Mem.ReadS32(curObj + 0xE) >> 0xC); + int Zpos = (Mem.ReadS32(curObj + 0xA) >> 0xC); int Xmid = 160 + (Xpos - CamX); int Ymid = 112 - (Ypos - CamY); int Zmid = _top + 112 - (Zpos - CamZ); - uint type = _api.MemLib.ReadU32(curObj + 0x5A); + uint type = Mem.ReadU32(curObj + 0x5A); int width, height, depth = height = width = 0; if (type == 0xD4AB8) // 3D poison Bubble { @@ -285,23 +302,23 @@ namespace BizHawk.Client.EmuHawk else if (type == 0xD817E)// 3D Ring { depth = 8; - if (_api.MemLib.ReadU32(0xFFB166) < 0x1800) depth = 4; + if (Mem.ReadU32(0xFFB166) < 0x1800) depth = 4; int radius = 32; width = radius; - DrawEccoOct(Xmid, Ymid, radius, (_api.MemLib.ReadS16(curObj + 0x62) == 0) ? Color.Orange : Color.Gray); + DrawEccoOct(Xmid, Ymid, radius, (Mem.ReadS16(curObj + 0x62) == 0) ? Color.Orange : Color.Gray); DrawBoxMWH(Xmid, Zmid, width, depth, Color.Red); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Orange, 0); DrawBoxMWH(Xmid, Zmid, 1, 1, Color.Red, 0); - TickerText($"{_api.MemLib.ReadS32(curObj + 0x6) / 4096.0:0.######}:{_api.MemLib.ReadS32(curObj + 0xE) / 4096.0:0.######}:{_api.MemLib.ReadS32(curObj + 0xA) / 2048.0:0.######}:{_api.MemLib.ReadByte(curObj + 0x72)}",Color.Lime); + TickerText($"{Mem.ReadS32(curObj + 0x6) / 4096.0:0.######}:{Mem.ReadS32(curObj + 0xE) / 4096.0:0.######}:{Mem.ReadS32(curObj + 0xA) / 2048.0:0.######}:{Mem.ReadByte(curObj + 0x72)}",Color.Lime); } else if (type == 0xD49CC) // Vines collisions are based on draw position, which is a fucking pain in the ass to calculate { - int Xvel = (_api.MemLib.ReadS32(curObj + 0x3A) - _api.MemLib.ReadS32(curObj + 0x6)); - int Zvel = (_api.MemLib.ReadS32(curObj + 0x3E) - _api.MemLib.ReadS32(curObj + 0xA)); - int dx = _api.MemLib.ReadS32(0xFFD5E0) - _api.MemLib.ReadS32(0xFFD5C8) >> 3; - int dy = _api.MemLib.ReadS32(0xFFD5E8) - _api.MemLib.ReadS32(0xFFD600) >> 3; - int dz = _api.MemLib.ReadS32(0xFFD5E4) - _api.MemLib.ReadS32(0xFFD5CC); - var chargeCount = _api.MemLib.ReadByte(0xFFB19B); + int Xvel = (Mem.ReadS32(curObj + 0x3A) - Mem.ReadS32(curObj + 0x6)); + int Zvel = (Mem.ReadS32(curObj + 0x3E) - Mem.ReadS32(curObj + 0xA)); + int dx = Mem.ReadS32(0xFFD5E0) - Mem.ReadS32(0xFFD5C8) >> 3; + int dy = Mem.ReadS32(0xFFD5E8) - Mem.ReadS32(0xFFD600) >> 3; + int dz = Mem.ReadS32(0xFFD5E4) - Mem.ReadS32(0xFFD5CC); + var chargeCount = Mem.ReadByte(0xFFB19B); if (chargeCount == 0) { dz >>= 2; @@ -314,7 +331,7 @@ namespace BizHawk.Client.EmuHawk { dz >>= 4; } - if (_api.MemLib.ReadByte(curObj + 0x64) == 0) + if (Mem.ReadByte(curObj + 0x64) == 0) { Xvel >>= 0xA; Zvel >>= 9; @@ -324,21 +341,21 @@ namespace BizHawk.Client.EmuHawk Xvel >>= 9; Zvel >>= 0xA; } - Xvel += _api.MemLib.ReadS32(curObj + 0x2E); - Zvel += _api.MemLib.ReadS32(curObj + 0x32); - Zpos = (_api.MemLib.ReadS32(curObj + 0x26) + dz - _api.MemLib.ReadS32(0xFFD5E4)) >> 0xB; + Xvel += Mem.ReadS32(curObj + 0x2E); + Zvel += Mem.ReadS32(curObj + 0x32); + Zpos = (Mem.ReadS32(curObj + 0x26) + dz - Mem.ReadS32(0xFFD5E4)) >> 0xB; if ((Zpos < 0x600) && (Zpos > 0)) { Zpos += 0x20; int Xcur, Xmax, Ycur, Ymax; - int Zpos2 = (_api.MemLib.ReadS32(curObj + 0xA) + Zvel + dz - _api.MemLib.ReadS32(0xFFD5E4)) >> 0xB; + int Zpos2 = (Mem.ReadS32(curObj + 0xA) + Zvel + dz - Mem.ReadS32(0xFFD5E4)) >> 0xB; Zpos2 = Math.Max(Zpos2 + 0x20, 1); - if (_api.MemLib.ReadS16(curObj + 0x62) != 0) + if (Mem.ReadS16(curObj + 0x62) != 0) { - Xmid = _api.MemLib.ReadS32(curObj + 0x6) + dx + Xvel - _api.MemLib.ReadS32(0xFFD5E0); + Xmid = Mem.ReadS32(curObj + 0x6) + dx + Xvel - Mem.ReadS32(0xFFD5E0); if (Math.Abs(Xmid) > 0x400000) continue; - Xpos = _api.MemLib.ReadS32(curObj + 0x22) + dx - _api.MemLib.ReadS32(0xFFD5E0); + Xpos = Mem.ReadS32(curObj + 0x22) + dx - Mem.ReadS32(0xFFD5E0); if (Math.Abs(Xpos) > 0x400000) continue; Xcur = (Xmid << 2) / Zpos2 + (Xmid >> 5) + 0xA000 + (Xmid >> 5); @@ -349,9 +366,9 @@ namespace BizHawk.Client.EmuHawk Xcur = 0; Xmax = 256; } - Ymid = _api.MemLib.ReadS32(0xFFD5E8) + dy - _api.MemLib.ReadS32(curObj + 0xE); + Ymid = Mem.ReadS32(0xFFD5E8) + dy - Mem.ReadS32(curObj + 0xE); Ycur = ((Ymid << 3) / Zpos2) + 0x6000; - Ypos = _api.MemLib.ReadS32(0xFFD5E8) + dy - _api.MemLib.ReadS32(curObj + 0x2A); + Ypos = Mem.ReadS32(0xFFD5E8) + dy - Mem.ReadS32(curObj + 0x2A); Ymax = ((Ypos << 3) / Zpos) + 0x6000; dx = Xmax - Xcur; dy = Ymax - Ycur; @@ -423,8 +440,8 @@ namespace BizHawk.Client.EmuHawk } } } - Xcur += _api.MemLib.ReadS8(0x2CC8 + ang) << 6; - Ycur += _api.MemLib.ReadS8(0x2BC8 + ang) << 6; + Xcur += Mem.ReadS8(0x2CC8 + ang) << 6; + Ycur += Mem.ReadS8(0x2BC8 + ang) << 6; var dSml = Math.Abs(dx); var dBig = Math.Abs(dy); if (dBig < dSml) @@ -438,7 +455,7 @@ namespace BizHawk.Client.EmuHawk dx /= i; dy /= i; - Zmid = (_api.MemLib.ReadS32(curObj + 0xA) + _api.MemLib.ReadS32(curObj + 0x26)) >> 1; + Zmid = (Mem.ReadS32(curObj + 0xA) + Mem.ReadS32(curObj + 0x26)) >> 1; Zmid >>= 0xC; Zmid = 112 + _top - (Zmid - CamZ); do @@ -449,14 +466,14 @@ namespace BizHawk.Client.EmuHawk Xcur += dx; Ycur += dy; } while (i >= 0); - DrawBoxMWH((_api.MemLib.ReadS32(0xFFB1AA) >> 8) + _left, (_api.MemLib.ReadS32(0xFFB1AE) >> 8) + _top, 1, 1, Color.Lime, 0); + DrawBoxMWH((Mem.ReadS32(0xFFB1AA) >> 8) + _left, (Mem.ReadS32(0xFFB1AE) >> 8) + _top, 1, 1, Color.Lime, 0); } } else if ((type == 0xD3B40) || (type == 0xD3DB2)) // 3D Shark and Jellyfish { - width = (_api.MemLib.ReadS32(curObj + 0x12) >> 0xC); - height = (_api.MemLib.ReadS32(curObj + 0x1A) >> 0xC); - depth = (_api.MemLib.ReadS32(curObj + 0x16) >> 0xC); + width = (Mem.ReadS32(curObj + 0x12) >> 0xC); + height = (Mem.ReadS32(curObj + 0x1A) >> 0xC); + depth = (Mem.ReadS32(curObj + 0x16) >> 0xC); DrawBoxMWH(Xmid, Ymid, width, height, Color.Lime); DrawBoxMWH(Xmid, Zmid, width, depth, Color.Blue); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Lime, 0); @@ -502,7 +519,7 @@ namespace BizHawk.Client.EmuHawk DrawBoxMWH(Xmid, Zmid, 1, 1, Color.Red); } } - curObj = _api.MemLib.ReadU24(curObj+1); + curObj = Mem.ReadU24(curObj+1); } } private void EccoDrawBoxes() @@ -511,8 +528,8 @@ namespace BizHawk.Client.EmuHawk int Width2, Height2; //Ecco HP and Air int i = 0; - int HP = _api.MemLib.ReadS16(0xFFAA16) << 3; - int air = _api.MemLib.ReadS16(0xFFAA18); + int HP = Mem.ReadS16(0xFFAA16) << 3; + int air = Mem.ReadS16(0xFFAA18); Color color; int off = 0; for (int j = 0; j < air; j++) @@ -522,66 +539,66 @@ namespace BizHawk.Client.EmuHawk i++; off += 448; } color = Color.FromArgb(j >> 2, j >> 2, j >> 2); - _api.GUILib.DrawLine(_left - 32, j - off, _left - 17, j - off, color); + Gui.DrawLine(_left - 32, j - off, _left - 17, j - off, color); } for (int j = 0; j < HP; j += 8) { color = Color.FromArgb(Math.Max(0x38 - (j >> 3),0), 0, Math.Min(j >> 1,255)); - _api.GUILib.DrawRectangle(_left - 16, j, 15, 7, color, color); + Gui.DrawRectangle(_left - 16, j, 15, 7, color, color); } //Asterite - uint type = _api.MemLib.ReadU32(0xFFD440); + uint type = Mem.ReadU32(0xFFD440); uint curObj = 0; int Xpos, Xpos2, Ypos, Ypos2, Xmid, Ymid, X, X2, Y, Y2; Xpos = Ypos = Xpos2 = Ypos2 = Xmid = Ymid = X = X2 = Y = Y2 = 0; if (type == 0xB119A) { - curObj = _api.MemLib.ReadU24(_api.MemLib.ReadU24(0xFFD429)+5); + curObj = Mem.ReadU24(Mem.ReadU24(0xFFD429)+5); while (curObj != 0) { - Xpos = _api.MemLib.ReadS16(curObj + 0x3C); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x24); - Ypos = _api.MemLib.ReadS16(curObj + 0x40); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x28); + Xpos = Mem.ReadS16(curObj + 0x3C); + Xpos2 = Mem.ReadS16(curObj + 0x24); + Ypos = Mem.ReadS16(curObj + 0x40); + Ypos2 = Mem.ReadS16(curObj + 0x28); Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid = (Xpos + Xpos2) >> 1; Ymid = (Ypos + Ypos2) >> 1; - if (_api.MemLib.ReadU8(curObj + 0x71) != 0) + if (Mem.ReadU8(curObj + 0x71) != 0) { DrawEccoOct(Xpos, Ypos, 48, Color.Blue, 16); DrawEccoOct(Xpos2, Ypos2, 48, Color.Blue, 16); } - curObj = _api.MemLib.ReadU24(curObj + 5); + curObj = Mem.ReadU24(curObj + 5); } - if ((_api.MemLib.ReadU8(0xFFA7D0) == 30)) + if ((Mem.ReadU8(0xFFA7D0) == 30)) { - curObj = _api.MemLib.ReadU24(0xFFD425); - if ((curObj != 0) && (_api.MemLib.ReadU32(curObj + 8) != 0)) + curObj = Mem.ReadU24(0xFFD425); + if ((curObj != 0) && (Mem.ReadU32(curObj + 8) != 0)) { - Xpos = _api.MemLib.ReadS16(curObj + 0x1C) - _camX; - Ypos = _api.MemLib.ReadS16(curObj + 0x20) - _camY; + Xpos = Mem.ReadS16(curObj + 0x1C) - _camX; + Ypos = Mem.ReadS16(curObj + 0x20) - _camY; DrawEccoOct(Xpos, Ypos, 20, Color.Orange); } } } else if (type == 0xB2CB8) { - curObj = _api.MemLib.ReadU24(_api.MemLib.ReadU24(0xFFD429) + 5); + curObj = Mem.ReadU24(Mem.ReadU24(0xFFD429) + 5); while (curObj != 0) { - Xpos = _api.MemLib.ReadS16(curObj + 0x3C); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x24); - Ypos = _api.MemLib.ReadS16(curObj + 0x40); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x28); + Xpos = Mem.ReadS16(curObj + 0x3C); + Xpos2 = Mem.ReadS16(curObj + 0x24); + Ypos = Mem.ReadS16(curObj + 0x40); + Ypos2 = Mem.ReadS16(curObj + 0x28); Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid = (Xpos + Xpos2) >> 1; Ymid = (Ypos + Ypos2) >> 1; - if (_api.MemLib.ReadU8(curObj + 0x71) != 0) + if (Mem.ReadU8(curObj + 0x71) != 0) { - if (_api.MemLib.ReadByte(0xFFA7D0) != 0x1F) + if (Mem.ReadByte(0xFFA7D0) != 0x1F) { DrawEccoOct(Xpos, Ypos, 40, Color.Lime); DrawEccoOct(Xpos2, Ypos2, 40, Color.Lime); @@ -589,23 +606,23 @@ namespace BizHawk.Client.EmuHawk DrawEccoOct(Xpos, Ypos, 48, Color.Blue, 16); DrawEccoOct(Xpos2, Ypos2, 48, Color.Blue, 16); } - curObj = _api.MemLib.ReadU24(curObj + 5); + curObj = Mem.ReadU24(curObj + 5); } } //aqua tubes - curObj = _api.MemLib.ReadU24(0xFFCFC5); + curObj = Mem.ReadU24(0xFFCFC5); while (curObj != 0) { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2= _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2= _api.MemLib.ReadS16(curObj + 0x38); + Xpos = Mem.ReadS16(curObj + 0x2C); + Xpos2= Mem.ReadS16(curObj + 0x34); + Ypos = Mem.ReadS16(curObj + 0x30); + Ypos2= Mem.ReadS16(curObj + 0x38); Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid = (Xpos + Xpos2) >> 1; Ymid = (Ypos + Ypos2) >> 1; // displayed = false; - type = _api.MemLib.ReadU8(curObj + 0x7E); + type = Mem.ReadU8(curObj + 0x7E); switch (type) { case 0x15: @@ -639,7 +656,7 @@ namespace BizHawk.Client.EmuHawk new Point(Xpos2 - (Ymid - Ypos >> 1), Ypos), new Point(Xpos2, Ymid) }; - _api.GUILib.DrawPolygon(trapPoints, Color.Purple, Color.FromArgb(63, Color.Purple)); + Gui.DrawPolygon(trapPoints, Color.Purple, Color.FromArgb(63, Color.Purple)); break; default: DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Purple); @@ -647,22 +664,22 @@ namespace BizHawk.Client.EmuHawk PutText(type.ToString("X2"), Xmid, Ymid, 1, 1, -1, -1, Color.Red, Color.Blue); break; } - curObj = _api.MemLib.ReadU24(curObj+1); + curObj = Mem.ReadU24(curObj+1); } //walls - curObj = _api.MemLib.ReadU24(0xFFCFC1); + curObj = Mem.ReadU24(0xFFCFC1); while (curObj != 0) { - Xmid = _api.MemLib.ReadS16(curObj + 0x24); - Xmid = _api.MemLib.ReadS16(curObj + 0x28); - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2= _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2= _api.MemLib.ReadS16(curObj + 0x38); + Xmid = Mem.ReadS16(curObj + 0x24); + Xmid = Mem.ReadS16(curObj + 0x28); + Xpos = Mem.ReadS16(curObj + 0x2C); + Xpos2= Mem.ReadS16(curObj + 0x34); + Ypos = Mem.ReadS16(curObj + 0x30); + Ypos2= Mem.ReadS16(curObj + 0x38); Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid -= _camX; Ymid -= _camY; - int colltype = _api.MemLib.ReadS8(curObj + 0x7E); + int colltype = Mem.ReadS8(curObj + 0x7E); switch (colltype) { case 0x10: @@ -674,25 +691,25 @@ namespace BizHawk.Client.EmuHawk Xmid = (Xpos + Xpos2) >> 1; Xpos2 = Xmid; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Yellow)); - _api.GUILib.DrawLine(Xpos2, Ypos, Xpos2, Ypos2, Color.PowderBlue); + Gui.DrawLine(Xpos2, Ypos, Xpos2, Ypos2, Color.PowderBlue); break; case 0x12: Xmid = (Xpos + Xpos2) >> 1; Xpos = Xmid; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Yellow)); - _api.GUILib.DrawLine(Xpos, Ypos, Xpos, Ypos2, Color.PowderBlue); + Gui.DrawLine(Xpos, Ypos, Xpos, Ypos2, Color.PowderBlue); break; case 0x13: Ymid = (Ypos + Ypos2) >> 1; Ypos = Ymid; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Yellow)); - _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos, Color.PowderBlue); + Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos, Color.PowderBlue); break; case 0x14: Ymid = (Ypos + Ypos2) >> 1; Ypos2 = Ymid; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Yellow)); - _api.GUILib.DrawLine(Xpos, Ypos2, Xpos2, Ypos2, Color.PowderBlue); + Gui.DrawLine(Xpos, Ypos2, Xpos2, Ypos2, Color.PowderBlue); break; case 0x15: case 0x16: @@ -702,7 +719,7 @@ namespace BizHawk.Client.EmuHawk Xmid = (Xpos + Xpos2) >> 1; Ymid = (Ypos + Ypos2) >> 1; DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos2, Xpos2, Ymid, Color.FromArgb(63, Color.Yellow)); - _api.GUILib.DrawLine(Xmid, Ypos2, Xpos2, Ymid, Color.PowderBlue); + Gui.DrawLine(Xmid, Ypos2, Xpos2, Ymid, Color.PowderBlue); break; case 0x1A: case 0x1B: @@ -712,7 +729,7 @@ namespace BizHawk.Client.EmuHawk Xmid = (Xpos + Xpos2) >> 1; Ymid = (Ypos + Ypos2) >> 1; DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos2, Xpos, Ymid, Color.FromArgb(63, Color.Yellow)); - _api.GUILib.DrawLine(Xpos, Ymid, Xmid, Ypos2, Color.PowderBlue); + Gui.DrawLine(Xpos, Ymid, Xmid, Ypos2, Color.PowderBlue); break; case 0x1F: case 0x20: @@ -722,7 +739,7 @@ namespace BizHawk.Client.EmuHawk Xmid = (Xpos + Xpos2) >> 1; Ymid = (Ypos + Ypos2) >> 1; DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos, Xpos, Ymid, Color.FromArgb(63,Color.Yellow)); - _api.GUILib.DrawLine(Xpos, Ymid, Xmid, Ypos, Color.PowderBlue); + Gui.DrawLine(Xpos, Ymid, Xmid, Ypos, Color.PowderBlue); break; case 0x24: case 0x25: @@ -732,17 +749,17 @@ namespace BizHawk.Client.EmuHawk Xmid = (Xpos + Xpos2) >> 1; Ymid = (Ypos + Ypos2) >> 1; DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos, Xpos2, Ymid, Color.FromArgb(63,Color.Yellow)); - _api.GUILib.DrawLine(Xmid, Ypos, Xpos2, Ymid, Color.PowderBlue); + Gui.DrawLine(Xmid, Ypos, Xpos2, Ymid, Color.PowderBlue); break; case 0x29: DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Black)); - _api.GUILib.DrawLine(Xpos , Ypos, Xpos , Ypos2, Color.Black); - _api.GUILib.DrawLine(Xpos2, Ypos, Xpos2, Ypos2, Color.Black); + Gui.DrawLine(Xpos , Ypos, Xpos , Ypos2, Color.Black); + Gui.DrawLine(Xpos2, Ypos, Xpos2, Ypos2, Color.Black); break; case 0x2A: DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Black)); - _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos, Color.Black); - _api.GUILib.DrawLine(Xpos, Ypos2, Xpos2, Ypos2, Color.Black); + Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos, Color.Black); + Gui.DrawLine(Xpos, Ypos2, Xpos2, Ypos2, Color.Black); break; case 0x2B: Xmid = (Xpos + Xpos2) >> 1; @@ -754,45 +771,45 @@ namespace BizHawk.Client.EmuHawk new Point(Xpos2 - (Ymid - Ypos >> 1), Ypos), new Point(Xpos2, Ymid) }; - _api.GUILib.DrawPolygon(trapPoints, Color.PowderBlue, Color.FromArgb(63, Color.PowderBlue)); - //_api.GUILib.DrawLine(Xpos, Ymid, Xpos2, Ymid, Color.Yellow); + Gui.DrawPolygon(trapPoints, Color.PowderBlue, Color.FromArgb(63, Color.PowderBlue)); + //Gui.DrawLine(Xpos, Ymid, Xpos2, Ymid, Color.Yellow); break; default: - DrawEccoRhomb_scaled(Xmid, Ymid, _api.MemLib.ReadS16(curObj + 0x44), _api.MemLib.ReadS16(curObj + 0x44), (colltype & 1), (colltype & 2) >> 1, (colltype & 4) >> 2, (colltype & 8) >> 3, Color.PowderBlue); + DrawEccoRhomb_scaled(Xmid, Ymid, Mem.ReadS16(curObj + 0x44), Mem.ReadS16(curObj + 0x44), (colltype & 1), (colltype & 2) >> 1, (colltype & 4) >> 2, (colltype & 8) >> 3, Color.PowderBlue); break; } - curObj = _api.MemLib.ReadU24(curObj+1); + curObj = Mem.ReadU24(curObj+1); } //inanimate objects - curObj = _api.MemLib.ReadU24(0xFFCFBD); + curObj = Mem.ReadU24(0xFFCFBD); while (curObj != 0) { - type = _api.MemLib.ReadU32(curObj + 0xC); - int colltype = _api.MemLib.ReadS8(curObj + 0x7E); - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - int Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54) + _api.MemLib.ReadS32(curObj + 0x5C)) >> 16) - _camX; - int Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58) + _api.MemLib.ReadS32(curObj + 0x60)) >> 16) - _camY; - Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; - Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + type = Mem.ReadU32(curObj + 0xC); + int colltype = Mem.ReadS8(curObj + 0x7E); + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + int Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54) + Mem.ReadS32(curObj + 0x5C)) >> 16) - _camX; + int Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58) + Mem.ReadS32(curObj + 0x60)) >> 16) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; + Ypos = Mem.ReadS16(curObj + 0x30) - _camY; + Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; if (type == 0x9CE3A) //Remnant Stars { - uint subObj = _api.MemLib.ReadU24(curObj + 0x5); - uint anim = _api.MemLib.ReadU16(curObj + 0x6C); + uint subObj = Mem.ReadU24(curObj + 0x5); + uint anim = Mem.ReadU16(curObj + 0x6C); if ((anim <= 7) && (subObj == 0xFFA9D4)) { DrawEccoRhomb(Xmid, Ymid, 96, Color.Red); - PutText($"{((7 - anim) * 4) - ((_api.MemLib.ReadByte(0xFFA7C9) & 3) - 4)}", Xmid, Ymid + 4, 1, 1, -1, -1, Color.Lime, Color.Blue); + PutText($"{((7 - anim) * 4) - ((Mem.ReadByte(0xFFA7C9) & 3) - 4)}", Xmid, Ymid + 4, 1, 1, -1, -1, Color.Lime, Color.Blue); } } else if ((type == 0x9CC06) || (type == 0x9CA10)) { - Xvec = ((_api.MemLib.ReadS32(curObj + 0x24) + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((_api.MemLib.ReadS32(curObj + 0x28) + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xvec = ((Mem.ReadS32(curObj + 0x24) + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Mem.ReadS32(curObj + 0x28) + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; } else if (type == 0x9B5D8) { @@ -801,27 +818,27 @@ namespace BizHawk.Client.EmuHawk } else if (type == 0xC0152) // Vortex Future Vertical Gate { - Xvec = _api.MemLib.ReadS16(curObj + 0x1C) - _camX; - Yvec = (_api.MemLib.ReadS32(curObj + 0x20) + _api.MemLib.ReadS32(curObj + 0x60) >> 16) - _camY; - _api.GUILib.DrawLine(Xmid, 0, Xmid, 448, Color.PowderBlue); + Xvec = Mem.ReadS16(curObj + 0x1C) - _camX; + Yvec = (Mem.ReadS32(curObj + 0x20) + Mem.ReadS32(curObj + 0x60) >> 16) - _camY; + Gui.DrawLine(Xmid, 0, Xmid, 448, Color.PowderBlue); DrawBoxMWH(Xvec, Yvec, 1, 1, Color.Blue, 0); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); } else if (type == 0xC3330) // City Of Forever Horizontal Gate Slave { - Xvec = (_api.MemLib.ReadS32(curObj + 0x1C) + _api.MemLib.ReadS32(curObj + 0x5C) >> 16) - _camX; - Yvec = _api.MemLib.ReadS16(curObj + 0x20) - _camY; + Xvec = (Mem.ReadS32(curObj + 0x1C) + Mem.ReadS32(curObj + 0x5C) >> 16) - _camX; + Yvec = Mem.ReadS16(curObj + 0x20) - _camY; DrawBoxMWH(Xvec, Yvec, 1, 1, Color.Blue, 0); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); } else if (type == 0xC35B0) // City Of Forever Horizontal Gate Master { - var mode = _api.MemLib.ReadByte(curObj + 0x15); + var mode = Mem.ReadByte(curObj + 0x15); var tmpx = Xpos; - Xpos = _api.MemLib.ReadS32(curObj + 0x1C); - Xvec = (Xpos + _api.MemLib.ReadS32(curObj + 0x5C) >> 16) - _camX; + Xpos = Mem.ReadS32(curObj + 0x1C); + Xvec = (Xpos + Mem.ReadS32(curObj + 0x5C) >> 16) - _camX; Xpos >>= 16; Xpos -= _camX; - Yvec = _api.MemLib.ReadS16(curObj + 0x20) - _camY; + Yvec = Mem.ReadS16(curObj + 0x20) - _camY; if ((mode == 1) || (mode == 3)) { DrawEccoOct(Xpos, Yvec, 128, Color.Orange); @@ -832,35 +849,35 @@ namespace BizHawk.Client.EmuHawk } else if (type == 0xC343A) // City Of Forever Vertical Gate { - var mode = _api.MemLib.ReadByte(curObj + 0x15); + var mode = Mem.ReadByte(curObj + 0x15); if ((mode == 1) || (mode == 3)) { DrawEccoOct(Xmid, Ymid, 128, Color.Orange); } - Xvec = _api.MemLib.ReadS16(curObj + 0x1C) - _camX; - Yvec = (_api.MemLib.ReadS32(curObj + 0x20) + _api.MemLib.ReadS32(curObj + 0x60) >> 16) - _camY; + Xvec = Mem.ReadS16(curObj + 0x1C) - _camX; + Yvec = (Mem.ReadS32(curObj + 0x20) + Mem.ReadS32(curObj + 0x60) >> 16) - _camY; DrawBoxMWH(Xvec, Yvec, 1, 1, Color.Blue, 0); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); } else if (type == 0xA579A) // Antigrav Ball { - DrawEccoOct(Xmid, Ymid, _api.MemLib.ReadS16(curObj + 0x4C), (_api.MemLib.ReadU16(0xFFA7C8) & 7) == 7 ? Color.Blue : Color.Gray); + DrawEccoOct(Xmid, Ymid, Mem.ReadS16(curObj + 0x4C), (Mem.ReadU16(0xFFA7C8) & 7) == 7 ? Color.Blue : Color.Gray); DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue, 0); Xpos = Ypos = Xpos2 = Ypos2 = _camX - 128; } else if (type == 0xDF4E2) // Moray Abyss Conch Shell { - Xpos = _api.MemLib.ReadS16(curObj + 0x1C) - _camX; - Ypos = _api.MemLib.ReadS16(curObj + 0x20) - _camY; - DrawBox(Xpos - 96, 0 - _camY, Xpos + 96, _api.MemLib.ReadS16(0xFFA7AC) - _camY - 64, Color.Orange, 0); - var mode = _api.MemLib.ReadByte(curObj + 0x15); - var modeTimer = _api.MemLib.ReadS16(curObj + 0x6E); - var Xvel1 = _api.MemLib.ReadS32(curObj + 0x54) / 65536.0; - var Yvel1 = _api.MemLib.ReadS32(curObj + 0x58) / 65536.0; - var Xvel2 = _api.MemLib.ReadS32(curObj + 0x5C) / 65536.0; - var Yvel2 = _api.MemLib.ReadS32(curObj + 0x60) / 65536.0; - TickerText($"{mode}:{modeTimer}:{_api.MemLib.ReadS16(0xFFA7AC) - 64 - Ymid - _camY}", Color.Red); + Xpos = Mem.ReadS16(curObj + 0x1C) - _camX; + Ypos = Mem.ReadS16(curObj + 0x20) - _camY; + DrawBox(Xpos - 96, 0 - _camY, Xpos + 96, Mem.ReadS16(0xFFA7AC) - _camY - 64, Color.Orange, 0); + var mode = Mem.ReadByte(curObj + 0x15); + var modeTimer = Mem.ReadS16(curObj + 0x6E); + var Xvel1 = Mem.ReadS32(curObj + 0x54) / 65536.0; + var Yvel1 = Mem.ReadS32(curObj + 0x58) / 65536.0; + var Xvel2 = Mem.ReadS32(curObj + 0x5C) / 65536.0; + var Yvel2 = Mem.ReadS32(curObj + 0x60) / 65536.0; + TickerText($"{mode}:{modeTimer}:{Mem.ReadS16(0xFFA7AC) - 64 - Ymid - _camY}", Color.Red); TickerText($"{Xvel1:0.######}:{Yvel1:0.######}", Color.Red); TickerText($"{Xvel2:0.######}:{Yvel2:0.######}", Color.Red); TickerText($"{Xvel1 + Xvel2:0.######}:{Yvel1 + Yvel2:0.######}", Color.Red); @@ -882,8 +899,8 @@ namespace BizHawk.Client.EmuHawk break; case 1: DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Orange, 0); - Xpos2 = _api.MemLib.ReadS32(0xFFAA1A) - _api.MemLib.ReadS32(curObj + 0x24); - Ypos2 = _api.MemLib.ReadS32(0xFFAA1E) - _api.MemLib.ReadS32(curObj + 0x28); + Xpos2 = Mem.ReadS32(0xFFAA1A) - Mem.ReadS32(curObj + 0x24); + Ypos2 = Mem.ReadS32(0xFFAA1E) - Mem.ReadS32(curObj + 0x28); var dSml = Math.Abs(Xpos2); var dBig = Math.Abs(Ypos2); if (dBig < dSml) @@ -895,11 +912,11 @@ namespace BizHawk.Client.EmuHawk var rad = (dBig + (dSml >> 1) - (dSml >> 3)) / 65536.0; Xpos2 = (int)(Xpos2 * (256.0 / (rad+1))) >> 20; Ypos2 = (int)(Ypos2 * (256.0 / (rad+1))) >> 20; - _api.GUILib.DrawLine(Xmid, Ymid, Xmid + Xpos2, Ymid + Ypos2, Color.Gray); + Gui.DrawLine(Xmid, Ymid, Xmid + Xpos2, Ymid + Ypos2, Color.Gray); TickerText($"{Xpos2 / 512.0:0.######}:{Ypos2 / 512.0:0.######}", Color.Red); break; case 2: - TickerText($"{_api.MemLib.ReadS32(curObj + 0x4C) / 65536.0:0.######}:{_api.MemLib.ReadS32(curObj + 0x50) / 65536.0:0.######}", Color.Red); + TickerText($"{Mem.ReadS32(curObj + 0x4C) / 65536.0:0.######}:{Mem.ReadS32(curObj + 0x50) / 65536.0:0.######}", Color.Red); break; } } @@ -908,10 +925,10 @@ namespace BizHawk.Client.EmuHawk || (type == 0xA6C4A) || (type == 0xAB65A) || (type == 0x9F2EC)) { } else { - PutText($"{type:X5}:{_api.MemLib.ReadByte(curObj + 0x13)}", Xmid, Ymid - 4, 1, 1, -1, -9, Color.Lime, Color.Blue); + PutText($"{type:X5}:{Mem.ReadByte(curObj + 0x13)}", Xmid, Ymid - 4, 1, 1, -1, -9, Color.Lime, Color.Blue); PutText(curObj.ToString("X6"), Xmid, Ymid + 4, 1, 9, -1, -1, Color.Lime, Color.Blue); } - colltype = _api.MemLib.ReadS8(curObj + 0x7E); + colltype = Mem.ReadS8(curObj + 0x7E); switch (colltype) { case 0x10: @@ -947,7 +964,7 @@ namespace BizHawk.Client.EmuHawk Xmid = (Xpos + Xpos2) >> 1; Ymid = (Ypos + Ypos2) >> 1; DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos2, Xpos2, Ymid, Color.FromArgb(63, Color.Yellow)); - _api.GUILib.DrawLine(Xmid, Ypos2, Xpos2, Ymid, Color.PowderBlue); + Gui.DrawLine(Xmid, Ypos2, Xpos2, Ymid, Color.PowderBlue); break; case 0x1A: case 0x1B: @@ -957,7 +974,7 @@ namespace BizHawk.Client.EmuHawk Xmid = (Xpos + Xpos2) >> 1; Ymid = (Ypos + Ypos2) >> 1; DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos2, Xpos, Ymid, Color.FromArgb(63, Color.Yellow)); - _api.GUILib.DrawLine(Xpos, Ymid, Xmid, Ypos2, Color.PowderBlue); + Gui.DrawLine(Xpos, Ymid, Xmid, Ypos2, Color.PowderBlue); break; case 0x1F: case 0x20: @@ -967,7 +984,7 @@ namespace BizHawk.Client.EmuHawk Xmid = (Xpos + Xpos2) >> 1; Ymid = (Ypos + Ypos2) >> 1; DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos, Xpos, Ymid, Color.FromArgb(63, Color.Yellow)); - _api.GUILib.DrawLine(Xpos, Ymid, Xmid, Ypos, Color.PowderBlue); + Gui.DrawLine(Xpos, Ymid, Xmid, Ypos, Color.PowderBlue); break; case 0x24: case 0x25: @@ -977,12 +994,12 @@ namespace BizHawk.Client.EmuHawk Xmid = (Xpos + Xpos2) >> 1; Ymid = (Ypos + Ypos2) >> 1; DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos, Xpos2, Ymid, Color.FromArgb(63, Color.Yellow)); - _api.GUILib.DrawLine(Xmid, Ypos, Xpos2, Ymid, Color.PowderBlue); + Gui.DrawLine(Xmid, Ypos, Xpos2, Ymid, Color.PowderBlue); break; case 0x2A: DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Black)); - _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos, Color.Black); - _api.GUILib.DrawLine(Xpos, Ypos2, Xpos2, Ypos2, Color.Black); + Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos, Color.Black); + Gui.DrawLine(Xpos, Ypos2, Xpos2, Ypos2, Color.Black); break; case 0x2B: Xmid = (Xpos + Xpos2) >> 1; @@ -994,70 +1011,70 @@ namespace BizHawk.Client.EmuHawk new Point(Xpos2 - (Ymid - Ypos >> 1), Ypos), new Point(Xpos2, Ymid) }; - _api.GUILib.DrawPolygon(trapPoints, Color.PowderBlue, Color.FromArgb(63, Color.PowderBlue)); + Gui.DrawPolygon(trapPoints, Color.PowderBlue, Color.FromArgb(63, Color.PowderBlue)); break; case 0x2C: break; default: - DrawEccoRhomb_scaled(Xmid, Ymid, _api.MemLib.ReadS16(curObj + 0x44), _api.MemLib.ReadS16(curObj + 0x44), (colltype & 1), (colltype & 2) >> 1, (colltype & 4) >> 2, (colltype & 8) >> 3, Color.PowderBlue); + DrawEccoRhomb_scaled(Xmid, Ymid, Mem.ReadS16(curObj + 0x44), Mem.ReadS16(curObj + 0x44), (colltype & 1), (colltype & 2) >> 1, (colltype & 4) >> 2, (colltype & 8) >> 3, Color.PowderBlue); break; } - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + Xmid = Mem.ReadS16(curObj + 0x24) - _camX; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - curObj = _api.MemLib.ReadU24(curObj+1); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + curObj = Mem.ReadU24(curObj+1); } //animate objects if (_mode == Modes.Ecco2) - curObj = _api.MemLib.ReadU24(0xFFCFB9); + curObj = Mem.ReadU24(0xFFCFB9); else - curObj = _api.MemLib.ReadU24(0xFFD829); + curObj = Mem.ReadU24(0xFFD829); while (curObj != 0) { type = 0; switch (_mode) { case Modes.Ecco2: { - uint flags = _api.MemLib.ReadU16(curObj + 0x10); + uint flags = Mem.ReadU16(curObj + 0x10); int Xvec = 0; int Yvec = 0; //if ((flags & 0x2000) || !(flags & 2)); - HP = _api.MemLib.ReadS8(curObj + 0x7B); - type = _api.MemLib.ReadU32(curObj + 0xC); + HP = Mem.ReadS8(curObj + 0x7B); + type = Mem.ReadU32(curObj + 0xC); if ((type == 0xA1FE6) || (type == 0xA208E) // Chain link creatures such as vortex worm, magic arm, etc || (type == 0xA2288) || (type == 0xA27A4) || (type == 0xA2BB0) || (type == 0xA2C50)) { uint subObj = curObj; while (subObj != 0) { - Xpos = _api.MemLib.ReadS32(subObj + 0x24); - Ypos = _api.MemLib.ReadS32(subObj + 0x28); - Xvec = ((Xpos + _api.MemLib.ReadS32(subObj + 0x54)) >> 16) - _camX; - Yvec = ((Ypos + _api.MemLib.ReadS32(subObj + 0x58)) >> 16) - _camY; + Xpos = Mem.ReadS32(subObj + 0x24); + Ypos = Mem.ReadS32(subObj + 0x28); + Xvec = ((Xpos + Mem.ReadS32(subObj + 0x54)) >> 16) - _camX; + Yvec = ((Ypos + Mem.ReadS32(subObj + 0x58)) >> 16) - _camY; Xpos >>= 16; Ypos >>= 16; Xpos -= _camX; Ypos -= _camY; - if (_api.MemLib.ReadS16(subObj + 0x44) == _api.MemLib.ReadS16(subObj + 0x48)) + if (Mem.ReadS16(subObj + 0x44) == Mem.ReadS16(subObj + 0x48)) { - DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); - DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x44), Color.Cyan, 0); + DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); + DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x44), Color.Cyan, 0); } else { - DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); - DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x44), Color.Lime, 0); - DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); - DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x48), Color.Blue, 0); + DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); + DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x44), Color.Lime, 0); + DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); + DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x48), Color.Blue, 0); } DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); - subObj = _api.MemLib.ReadU24(subObj + 5); + Gui.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); + subObj = Mem.ReadU24(subObj + 5); } if (HP > 2) { - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + Xmid = Mem.ReadS16(curObj + 0x24) - _camX; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; PutText($"{HP - 1}", Xmid, Ymid, 1, 1, -1, -9, Color.Blue, Color.Red); } } @@ -1069,43 +1086,43 @@ namespace BizHawk.Client.EmuHawk uint subObj = curObj; while (subObj != 0) { - Xpos = _api.MemLib.ReadS32(subObj + 0x24); - Ypos = _api.MemLib.ReadS32(subObj + 0x28); - Xvec = ((Xpos + _api.MemLib.ReadS32(subObj + 0x54)) >> 16) - _camX; - Yvec = ((Ypos + _api.MemLib.ReadS32(subObj + 0x58)) >> 16) - _camY; + Xpos = Mem.ReadS32(subObj + 0x24); + Ypos = Mem.ReadS32(subObj + 0x28); + Xvec = ((Xpos + Mem.ReadS32(subObj + 0x54)) >> 16) - _camX; + Yvec = ((Ypos + Mem.ReadS32(subObj + 0x58)) >> 16) - _camY; Xpos >>= 16; Ypos >>= 16; Xpos -= _camX; Ypos -= _camY; - if (_api.MemLib.ReadS16(subObj + 0x44) == _api.MemLib.ReadS16(subObj + 0x48)) + if (Mem.ReadS16(subObj + 0x44) == Mem.ReadS16(subObj + 0x48)) { - DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); - DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x44), Color.White, 0); + DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); + DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x44), Color.White, 0); } else { - DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); - DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x44), Color.Lime, 0); - DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x48), Color.FromArgb(255, 0, 127)); - DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(subObj + 0x48), Color.Magenta, 0); + DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); + DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x44), Color.Lime, 0); + DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x48), Color.FromArgb(255, 0, 127)); + DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x48), Color.Magenta, 0); } DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); if (type == 0xBA66E) { DrawEccoOct(Xpos, Ypos, 32, Color.Blue, 16); if (subObj == curObj) { - var mode = _api.MemLib.ReadByte(subObj + 0x15); - TickerText($"{_api.MemLib.ReadByte(subObj + 0x14)}:{mode}:{_api.MemLib.ReadByte(subObj + 0x70)}", Color.Red); - TickerText($"{_api.MemLib.ReadS32(subObj + 0x54) / 65536.0:0.######}:{_api.MemLib.ReadS32(subObj + 0x58) / 65536.0:0.######}", Color.Red); - TickerText($"{_api.MemLib.ReadS32(subObj + 0x4C) / 65536.0:0.######}:{_api.MemLib.ReadS32(subObj + 0x50) / 65536.0:0.######}", Color.Red); + var mode = Mem.ReadByte(subObj + 0x15); + TickerText($"{Mem.ReadByte(subObj + 0x14)}:{mode}:{Mem.ReadByte(subObj + 0x70)}", Color.Red); + TickerText($"{Mem.ReadS32(subObj + 0x54) / 65536.0:0.######}:{Mem.ReadS32(subObj + 0x58) / 65536.0:0.######}", Color.Red); + TickerText($"{Mem.ReadS32(subObj + 0x4C) / 65536.0:0.######}:{Mem.ReadS32(subObj + 0x50) / 65536.0:0.######}", Color.Red); switch (mode) { case 0: case 2: case 4: - Xpos2 = _api.MemLib.ReadS32(0xFFAA22) - _api.MemLib.ReadS32(subObj + 0x24); - Ypos2 = _api.MemLib.ReadS32(0xFFAA26) - _api.MemLib.ReadS32(subObj + 0x28); + Xpos2 = Mem.ReadS32(0xFFAA22) - Mem.ReadS32(subObj + 0x24); + Ypos2 = Mem.ReadS32(0xFFAA26) - Mem.ReadS32(subObj + 0x28); var dSml = Math.Abs(Xpos2); var dBig = Math.Abs(Ypos2); if (dBig < dSml) @@ -1117,7 +1134,7 @@ namespace BizHawk.Client.EmuHawk var rad = (dBig + (dSml >> 1) - (dSml >> 3)) / 65536.0; Xpos2 = (int)(Xpos2 * (256.0 / (rad + 1))) >> 20; Ypos2 = (int)(Ypos2 * (256.0 / (rad + 1))) >> 20; - _api.GUILib.DrawLine(Xpos, Ypos, Xpos + Xpos2, Ypos + Ypos2, Color.Red); + Gui.DrawLine(Xpos, Ypos, Xpos + Xpos2, Ypos + Ypos2, Color.Red); break; default: break; @@ -1125,13 +1142,13 @@ namespace BizHawk.Client.EmuHawk } } } - else if ((type == 0xBA52E) && (subObj == _api.MemLib.ReadU24(curObj + 0x1D))) + else if ((type == 0xBA52E) && (subObj == Mem.ReadU24(curObj + 0x1D))) { - DrawEccoOct(Xpos, Ypos, 32, (_api.MemLib.ReadByte(subObj + 0x70) == 0) ? Color.Blue : Color.Gray, 16); - var mode = _api.MemLib.ReadByte(curObj + 0x15); - TickerText($"{_api.MemLib.ReadByte(curObj + 0x14)}:{mode}:{_api.MemLib.ReadS16(curObj + 0x6E)}:{_api.MemLib.ReadByte(subObj + 0x70)}", Color.Red); - TickerText($"{_api.MemLib.ReadS32(subObj + 0x54) / 65536.0:0.######}:{_api.MemLib.ReadS32(subObj + 0x58) / 65536.0:0.######}", Color.Red); - TickerText($"{_api.MemLib.ReadS32(curObj + 0x4C) / 65536.0:0.######}:{_api.MemLib.ReadS32(curObj + 0x50) / 65536.0:0.######}", Color.Red); + DrawEccoOct(Xpos, Ypos, 32, (Mem.ReadByte(subObj + 0x70) == 0) ? Color.Blue : Color.Gray, 16); + var mode = Mem.ReadByte(curObj + 0x15); + TickerText($"{Mem.ReadByte(curObj + 0x14)}:{mode}:{Mem.ReadS16(curObj + 0x6E)}:{Mem.ReadByte(subObj + 0x70)}", Color.Red); + TickerText($"{Mem.ReadS32(subObj + 0x54) / 65536.0:0.######}:{Mem.ReadS32(subObj + 0x58) / 65536.0:0.######}", Color.Red); + TickerText($"{Mem.ReadS32(curObj + 0x4C) / 65536.0:0.######}:{Mem.ReadS32(curObj + 0x50) / 65536.0:0.######}", Color.Red); } else if (type == 0xE0988) { @@ -1139,44 +1156,44 @@ namespace BizHawk.Client.EmuHawk } if (HP > 2) { - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + Xmid = Mem.ReadS16(curObj + 0x24) - _camX; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; PutText($"{HP - 1}", Xmid, Ymid, 1, 1, -1, -9, Color.Blue, Color.Red); } - subObj = _api.MemLib.ReadU24(subObj + 5); + subObj = Mem.ReadU24(subObj + 5); } } else if (type == 0xB7DF4) { - Xpos = _api.MemLib.ReadS32(curObj + 0x24); - Ypos = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xpos + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ypos + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos = Mem.ReadS32(curObj + 0x24); + Ypos = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xpos + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ypos + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xpos >>= 16; Ypos >>= 16; Xpos -= _camX; Ypos -= _camY; DrawEccoOct(Xpos, Ypos, 26, Color.PowderBlue); DrawEccoOct(Xpos, Ypos, 26, Color.White); DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xpos, Ypos, Xvec, Yvec); + Gui.DrawLine(Xpos, Ypos, Xvec, Yvec); } else if (type == 0xE47EE) { - uint subObj = _api.MemLib.ReadU24(curObj + 5); + uint subObj = Mem.ReadU24(curObj + 5); while (subObj != 0) { - Xpos = _api.MemLib.ReadS32(subObj + 0x1C); - Ypos = _api.MemLib.ReadS32(subObj + 0x20); - Xvec = ((Xpos + _api.MemLib.ReadS32(subObj + 0x54)) >> 16) - _camX; - Yvec = ((Ypos + _api.MemLib.ReadS32(subObj + 0x58)) >> 16) - _camY; + Xpos = Mem.ReadS32(subObj + 0x1C); + Ypos = Mem.ReadS32(subObj + 0x20); + Xvec = ((Xpos + Mem.ReadS32(subObj + 0x54)) >> 16) - _camX; + Yvec = ((Ypos + Mem.ReadS32(subObj + 0x58)) >> 16) - _camY; Xpos >>= 16; Ypos >>= 16; Xpos -= _camX; Ypos -= _camY; - DrawEccoOct(Xpos, Ypos, ((_api.MemLib.ReadS16(subObj + 0x2C) & 0xFFFF) >> 1) + 16, Color.White); - DrawEccoOct(Xpos, Ypos, ((_api.MemLib.ReadS16(subObj + 0x2C) & 0xFFFF) >> 1) + 16, Color.Yellow, 0); + DrawEccoOct(Xpos, Ypos, ((Mem.ReadS16(subObj + 0x2C) & 0xFFFF) >> 1) + 16, Color.White); + DrawEccoOct(Xpos, Ypos, ((Mem.ReadS16(subObj + 0x2C) & 0xFFFF) >> 1) + 16, Color.Yellow, 0); DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); - subObj = _api.MemLib.ReadU24(subObj + 5); + Gui.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); + subObj = Mem.ReadU24(subObj + 5); } } else if (type == 0xDBE64) // Medusa Boss @@ -1185,21 +1202,21 @@ namespace BizHawk.Client.EmuHawk uint next; do { - next = _api.MemLib.ReadU24(subObj + 5); + next = Mem.ReadU24(subObj + 5); if (next != 0) subObj = next; } while (next != 0); - Xpos = _api.MemLib.ReadS16(subObj + 0x2C); - Xpos2 = _api.MemLib.ReadS16(subObj + 0x34); - Ypos = _api.MemLib.ReadS16(subObj + 0x30); - Ypos2 = _api.MemLib.ReadS16(subObj + 0x38); + Xpos = Mem.ReadS16(subObj + 0x2C); + Xpos2 = Mem.ReadS16(subObj + 0x34); + Ypos = Mem.ReadS16(subObj + 0x30); + Ypos2 = Mem.ReadS16(subObj + 0x38); Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; DrawEccoOct(Xpos, Ypos, 32, Color.Red); DrawEccoOct(Xpos2, Ypos2, 32, Color.Red); - Xpos = _api.MemLib.ReadS32(curObj + 0x24); - Ypos = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xpos + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ypos + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos = Mem.ReadS32(curObj + 0x24); + Ypos = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xpos + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ypos + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xpos >>= 16; Ypos >>= 16; Xpos -= _camX; Ypos -= _camY; @@ -1212,86 +1229,86 @@ namespace BizHawk.Client.EmuHawk new Point(Xpos + octOff, Ypos - octOff), new Point(Xpos + 60, Ypos) }; - _api.GUILib.DrawPolygon(hemiOctPoints, Color.Cyan, Color.FromArgb(0x3F, Color.Cyan)); + Gui.DrawPolygon(hemiOctPoints, Color.Cyan, Color.FromArgb(0x3F, Color.Cyan)); for (int l = 0; l < 4; l++) { - _api.GUILib.DrawLine(hemiOctPoints[l].X, hemiOctPoints[l].Y, hemiOctPoints[l + 1].X, hemiOctPoints[l + 1].Y, Color.Cyan); + Gui.DrawLine(hemiOctPoints[l].X, hemiOctPoints[l].Y, hemiOctPoints[l + 1].X, hemiOctPoints[l + 1].Y, Color.Cyan); } DrawBoxMWH(Xpos, Ypos + 12, 52, 12, Color.Cyan); DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); } else if (type == 0xDCEE0) // Globe Holder boss { uint subObj; - var mode = _api.MemLib.ReadByte(curObj + 0x15); + var mode = Mem.ReadByte(curObj + 0x15); if (mode < 4) { - subObj = _api.MemLib.ReadU24(curObj + 9); + subObj = Mem.ReadU24(curObj + 9); while (subObj != 0) { - Xmid = _api.MemLib.ReadS32(subObj + 0x24); - Ymid = _api.MemLib.ReadS32(subObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(subObj + 0x54) + _api.MemLib.ReadS32(subObj + 0x5C)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(subObj + 0x58) + _api.MemLib.ReadS32(subObj + 0x60)) >> 16) - _camY; + Xmid = Mem.ReadS32(subObj + 0x24); + Ymid = Mem.ReadS32(subObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(subObj + 0x54) + Mem.ReadS32(subObj + 0x5C)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(subObj + 0x58) + Mem.ReadS32(subObj + 0x60)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; DrawEccoOct(Xmid, Ymid, 12, Color.Orange); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - var next = _api.MemLib.ReadU24(subObj + 9); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + var next = Mem.ReadU24(subObj + 9); if ((next == 0) && ((mode & 1) != 0)) { - DrawEccoOct(Xmid, Ymid, _api.MemLib.ReadS16(subObj + 0x3C), Color.Orange); + DrawEccoOct(Xmid, Ymid, Mem.ReadS16(subObj + 0x3C), Color.Orange); } - subObj = _api.MemLib.ReadU24(subObj + 9); + subObj = Mem.ReadU24(subObj + 9); } - subObj = _api.MemLib.ReadU24(curObj + 5); + subObj = Mem.ReadU24(curObj + 5); while (subObj != 0) { - Xmid = _api.MemLib.ReadS32(subObj + 0x24); - Ymid = _api.MemLib.ReadS32(subObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(subObj + 0x54) + _api.MemLib.ReadS32(subObj + 0x5C)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(subObj + 0x58) + _api.MemLib.ReadS32(subObj + 0x60)) >> 16) - _camY; + Xmid = Mem.ReadS32(subObj + 0x24); + Ymid = Mem.ReadS32(subObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(subObj + 0x54) + Mem.ReadS32(subObj + 0x5C)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(subObj + 0x58) + Mem.ReadS32(subObj + 0x60)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; DrawEccoOct(Xmid, Ymid, 12, Color.Orange); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - var next = _api.MemLib.ReadU24(subObj + 5); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + var next = Mem.ReadU24(subObj + 5); if ((next == 0) && ((mode & 2) != 0)) { - DrawEccoOct(Xmid, Ymid, _api.MemLib.ReadS16(subObj + 0x3C), Color.Orange); + DrawEccoOct(Xmid, Ymid, Mem.ReadS16(subObj + 0x3C), Color.Orange); } - subObj = _api.MemLib.ReadU24(subObj + 5); + subObj = Mem.ReadU24(subObj + 5); } } - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; - int Xtmp = _api.MemLib.ReadS32(curObj + 0x2C); - int Ytmp = _api.MemLib.ReadS32(curObj + 0x30); - int Xtmp2 = _api.MemLib.ReadS32(curObj + 0x34); - int Ytmp2 = _api.MemLib.ReadS32(curObj + 0x38); + Xmid = Mem.ReadS16(curObj + 0x24) - _camX; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; + int Xtmp = Mem.ReadS32(curObj + 0x2C); + int Ytmp = Mem.ReadS32(curObj + 0x30); + int Xtmp2 = Mem.ReadS32(curObj + 0x34); + int Ytmp2 = Mem.ReadS32(curObj + 0x38); Xpos = (Xtmp >> 16) - _camX; Xpos2 = (Xtmp2 >> 16) - _camX; Ypos = (Ytmp >> 16) - _camY; Ypos2 = (Ytmp2 >> 16) - _camY; - Xvec = ((_api.MemLib.ReadS32(curObj + 0x24) + _api.MemLib.ReadS32(curObj + 0x54) + _api.MemLib.ReadS32(curObj + 0x5C)) >> 16) - _camX; - Yvec = ((_api.MemLib.ReadS32(curObj + 0x28) + +_api.MemLib.ReadS32(curObj + 0x58) + _api.MemLib.ReadS32(curObj + 0x60)) >> 16) - _camY; + Xvec = ((Mem.ReadS32(curObj + 0x24) + Mem.ReadS32(curObj + 0x54) + Mem.ReadS32(curObj + 0x5C)) >> 16) - _camX; + Yvec = ((Mem.ReadS32(curObj + 0x28) + +Mem.ReadS32(curObj + 0x58) + Mem.ReadS32(curObj + 0x60)) >> 16) - _camY; DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); if (mode < 7) { double overlap = 0; - DrawEccoOct(Xmid, Ymid, 0x5C, _api.MemLib.ReadByte(curObj + 0x7C) == 0 ? Color.Blue : Color.Gray); + DrawEccoOct(Xmid, Ymid, 0x5C, Mem.ReadByte(curObj + 0x7C) == 0 ? Color.Blue : Color.Gray); DrawEccoOct(Xmid, Ymid, 0x5C, Color.Cyan, 0); - Xvec = (_api.MemLib.ReadS32(curObj + 0x54) + _api.MemLib.ReadS32(curObj + 0x5C)); - Yvec = (_api.MemLib.ReadS32(curObj + 0x58) + _api.MemLib.ReadS32(curObj + 0x60)); - subObj = _api.MemLib.ReadU24(curObj + 0x69); + Xvec = (Mem.ReadS32(curObj + 0x54) + Mem.ReadS32(curObj + 0x5C)); + Yvec = (Mem.ReadS32(curObj + 0x58) + Mem.ReadS32(curObj + 0x60)); + subObj = Mem.ReadU24(curObj + 0x69); if (subObj != 0) { - Xpos = _api.MemLib.ReadS32(subObj + 0x2C); - Ypos = _api.MemLib.ReadS32(subObj + 0x30); - Xpos2 = _api.MemLib.ReadS32(subObj + 0x34); - Ypos2 = _api.MemLib.ReadS32(subObj + 0x38); + Xpos = Mem.ReadS32(subObj + 0x2C); + Ypos = Mem.ReadS32(subObj + 0x30); + Xpos2 = Mem.ReadS32(subObj + 0x34); + Ypos2 = Mem.ReadS32(subObj + 0x38); while ((Xtmp > Xpos) && (Xtmp2 < Xpos2) && (Ytmp > Ypos) && (Ytmp2 < Ypos2) && ((Xvec != 0) || (Yvec != 0))) { Xtmp += Xvec; Xtmp2 += Xvec; @@ -1304,19 +1321,19 @@ namespace BizHawk.Client.EmuHawk Ypos -= _camY; Ypos2 -= _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, (overlap >= 6) ? Color.Orange : Color.White, 0); } - Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; - Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; + Ypos = Mem.ReadS16(curObj + 0x30) - _camY; + Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; + Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, (overlap >= 6) ? Color.Orange : Color.White, (overlap >= 6) ? 63 : 0); if (mode < 4) { - Xmid = _api.MemLib.ReadS16(curObj + 0x4C) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x50) - _camY; + Xmid = Mem.ReadS16(curObj + 0x4C) - _camX; + Ymid = Mem.ReadS16(curObj + 0x50) - _camY; if ((mode & 1) == 0) DrawEccoOct(Xmid, Ymid - 0xAE, 32, Color.Orange); if ((mode & 2) == 0) DrawEccoOct(Xmid, Ymid + 0xAE, 32, Color.Orange); } - TickerText($"{mode}:{_api.MemLib.ReadByte(curObj + 0x7F)}:{_api.MemLib.ReadByte(curObj + 0x6D)}:{_api.MemLib.ReadByte(curObj + 0x7C)}", Color.Red); + TickerText($"{mode}:{Mem.ReadByte(curObj + 0x7F)}:{Mem.ReadByte(curObj + 0x6D)}:{Mem.ReadByte(curObj + 0x7C)}", Color.Red); } else if (mode == 8) { @@ -1325,15 +1342,15 @@ namespace BizHawk.Client.EmuHawk } else if (type == 0xE1BA2) // Vortex Queen Boss { - var vulnCount = _api.MemLib.ReadByte(curObj + 0x7F); - var state = _api.MemLib.ReadByte(curObj + 0x7C); - var stateCounter = _api.MemLib.ReadU16(curObj + 0x6E); - var mode = _api.MemLib.ReadU16(curObj + 0x64); - var modeCounter = _api.MemLib.ReadU16(curObj + 0x66); - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x40); - Xvec = Xmid + _api.MemLib.ReadS32(curObj + 0x54); - Yvec = Ymid + _api.MemLib.ReadS32(curObj + 0x58); + var vulnCount = Mem.ReadByte(curObj + 0x7F); + var state = Mem.ReadByte(curObj + 0x7C); + var stateCounter = Mem.ReadU16(curObj + 0x6E); + var mode = Mem.ReadU16(curObj + 0x64); + var modeCounter = Mem.ReadU16(curObj + 0x66); + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x40); + Xvec = Xmid + Mem.ReadS32(curObj + 0x54); + Yvec = Ymid + Mem.ReadS32(curObj + 0x58); Xvec >>= 16; Yvec >>= 16; Xmid >>= 16; Ymid >>= 16; Xvec -= _camX; Yvec -= _camY; @@ -1350,35 +1367,35 @@ namespace BizHawk.Client.EmuHawk new Point(Xmid - hexOff.X, Ymid + 32), new Point(Xmid + hexOff.X, Ymid + 32) }; - _api.GUILib.DrawPolygon(roundedRect, Color.Orange, Color.FromArgb(63, Color.Orange)); + Gui.DrawPolygon(roundedRect, Color.Orange, Color.FromArgb(63, Color.Orange)); } DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - TickerText($"{state:X2}:{stateCounter}:{mode}:{modeCounter}:{_api.MemLib.ReadByte(curObj + 0x70) & 0xF}", Color.Red); - var subObj = _api.MemLib.ReadU24(curObj + 0x5); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + TickerText($"{state:X2}:{stateCounter}:{mode}:{modeCounter}:{Mem.ReadByte(curObj + 0x70) & 0xF}", Color.Red); + var subObj = Mem.ReadU24(curObj + 0x5); var tongueMode = mode; - mode = _api.MemLib.ReadByte(subObj + 0x15); - modeCounter = _api.MemLib.ReadU16(subObj + 0x6E); - Xmid = _api.MemLib.ReadS32(subObj + 0x24); - Ymid = _api.MemLib.ReadS32(subObj + 0x40); - Xvec = (Xmid + _api.MemLib.ReadS32(subObj + 0x5C) >> 16) - _camX; - Yvec = (Ymid + _api.MemLib.ReadS32(subObj + 0x60) >> 16) - _camY; + mode = Mem.ReadByte(subObj + 0x15); + modeCounter = Mem.ReadU16(subObj + 0x6E); + Xmid = Mem.ReadS32(subObj + 0x24); + Ymid = Mem.ReadS32(subObj + 0x40); + Xvec = (Xmid + Mem.ReadS32(subObj + 0x5C) >> 16) - _camX; + Yvec = (Ymid + Mem.ReadS32(subObj + 0x60) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; Ymid -= 32; Yvec -= 32; - var levelHeight = _api.MemLib.ReadS16(0xFFA7AC) - _camY; + var levelHeight = Mem.ReadS16(0xFFA7AC) - _camY; switch (mode) { case 0: DrawBox(Xmid - 32, Ymid - ((state == 5) ? 0x60 : 0x70), Xmid + 32, Ymid - 16, Color.Red); break; case 2: - Ypos = _api.MemLib.ReadS16(subObj + 0x50) - _camY; - _api.GUILib.DrawLine(Xmid - 48, Ypos, Xmid + 48, Ypos, Color.Orange); + Ypos = Mem.ReadS16(subObj + 0x50) - _camY; + Gui.DrawLine(Xmid - 48, Ypos, Xmid + 48, Ypos, Color.Orange); DrawBoxMWH(Xmid, Ymid + 32, 1, 1, Color.Orange, 0); break; case 3: - modeCounter = _api.MemLib.ReadByte(subObj + 0x7C); + modeCounter = Mem.ReadByte(subObj + 0x7C); break; case 5: Point[] throatShape = @@ -1390,7 +1407,7 @@ namespace BizHawk.Client.EmuHawk new Point(Xmid + 48, Ymid + 60), new Point(Xmid + 48, levelHeight) }; - _api.GUILib.DrawPolygon(throatShape, Color.Red, Color.FromArgb(63, Color.Red)); + Gui.DrawPolygon(throatShape, Color.Red, Color.FromArgb(63, Color.Red)); DrawEccoOct(Xmid, Ymid, 24, Color.Red); DrawEccoOct(Xmid, Ymid, 24, Color.White, 0); break; @@ -1401,41 +1418,41 @@ namespace BizHawk.Client.EmuHawk } if (tongueMode == 7) { - uint subObj2 = _api.MemLib.ReadU24(0xFFCFCD); + uint subObj2 = Mem.ReadU24(0xFFCFCD); while (subObj2 != 0) { - if (_api.MemLib.ReadU16(subObj2 + 0x10) == 0xFF) + if (Mem.ReadU16(subObj2 + 0x10) == 0xFF) { - Xpos = _api.MemLib.ReadS16(subObj2 + 0x24) - _camX; - Ypos = _api.MemLib.ReadS16(subObj2 + 0x28) - _camY; - Xpos2 = ((_api.MemLib.ReadS32(subObj2 + 0x24) + _api.MemLib.ReadS32(subObj2 + 0x54)) >> 16) - _camX; - Ypos2 = ((_api.MemLib.ReadS32(subObj2 + 0x28) + _api.MemLib.ReadS32(subObj2 + 0x58)) >> 16) - _camY; + Xpos = Mem.ReadS16(subObj2 + 0x24) - _camX; + Ypos = Mem.ReadS16(subObj2 + 0x28) - _camY; + Xpos2 = ((Mem.ReadS32(subObj2 + 0x24) + Mem.ReadS32(subObj2 + 0x54)) >> 16) - _camX; + Ypos2 = ((Mem.ReadS32(subObj2 + 0x28) + Mem.ReadS32(subObj2 + 0x58)) >> 16) - _camY; DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Orange); + Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Orange); } - subObj2 = _api.MemLib.ReadU24(subObj2 + 1); + subObj2 = Mem.ReadU24(subObj2 + 1); } } - Ypos = _api.MemLib.ReadS16(subObj + 0x50) - _camY; - _api.GUILib.DrawLine(Xmid - 48, Ypos - 94, Xmid + 48, Ypos - 94, Color.Orange); - _api.GUILib.DrawLine(Xmid - 48, Ypos, Xmid + 48, Ypos, Color.Orange); + Ypos = Mem.ReadS16(subObj + 0x50) - _camY; + Gui.DrawLine(Xmid - 48, Ypos - 94, Xmid + 48, Ypos - 94, Color.Orange); + Gui.DrawLine(Xmid - 48, Ypos, Xmid + 48, Ypos, Color.Orange); DrawBoxMWH(Xmid, Ymid + 32, 1, 1, Color.Orange, 0); break; default: break; } - if ((mode < 7) || ((mode == 7) && (_api.MemLib.ReadU24(0xFFCFC9) != 0))) + if ((mode < 7) || ((mode == 7) && (Mem.ReadU24(0xFFCFC9) != 0))) { - if (_api.MemLib.ReadByte(subObj + 0x70) == 0) + if (Mem.ReadByte(subObj + 0x70) == 0) { DrawEccoOct(Xmid, Ymid, 32, Color.Red); DrawBox(Xmid - 48, Ymid + 32, Xmid + 48, levelHeight, Color.Red); } - Ypos = _api.MemLib.ReadS16(subObj + 0x50) - _camY - 94; - _api.GUILib.DrawLine(Xmid - 48, Ypos, Xmid + 48, Ypos, Color.Orange); + Ypos = Mem.ReadS16(subObj + 0x50) - _camY - 94; + Gui.DrawLine(Xmid - 48, Ypos, Xmid + 48, Ypos, Color.Orange); DrawBoxMWH(Xmid, Ymid + 32, 1, 1, Color.Orange, 0); } - if (_api.MemLib.ReadS32(subObj + 0xC) == 0xE17B4) + if (Mem.ReadS32(subObj + 0xC) == 0xE17B4) { Point[] shapePoints = { @@ -1446,31 +1463,31 @@ namespace BizHawk.Client.EmuHawk new Point(Xmid + 48, Ymid + 60), new Point(Xmid + 48, levelHeight) }; - _api.GUILib.DrawPolygon(shapePoints, Color.Red, Color.FromArgb(63, Color.Red)); + Gui.DrawPolygon(shapePoints, Color.Red, Color.FromArgb(63, Color.Red)); DrawEccoOct(Xmid, Ymid, 24, Color.Red); DrawEccoOct(Xmid, Ymid, 24, Color.White, 0); } - Ypos = (_api.MemLib.ReadS16(subObj + 0x50) - _camY) - 264; + Ypos = (Mem.ReadS16(subObj + 0x50) - _camY) - 264; DrawBoxMWH(160 + _left, Ypos, 320, 12, (32 < stateCounter) && (stateCounter < 160) ? Color.Brown : Color.Gray); if ((32 < stateCounter) && (stateCounter < 160)) { DrawBoxMWH(_left + 160, Ypos, 320, 12, Color.White, 0); } DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); TickerText($"{mode:X2}:{modeCounter}:{HP}:{vulnCount}", Color.Red); HP = 0; } else if (type == 0xA5BD2) // Telekinetic future dolphins { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C); + Xpos2 = Mem.ReadS16(curObj + 0x34); + Ypos = Mem.ReadS16(curObj + 0x30); + Ypos2 = Mem.ReadS16(curObj + 0x38); + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; @@ -1479,66 +1496,66 @@ namespace BizHawk.Client.EmuHawk DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red, 0); DrawEccoOct(Xmid, Ymid, 4, Color.Red); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if ((type == 0x9F5B0) || (type == 0x9F4DC) || (type == 0x9F6A0)) // Falling rock, breaks barriers { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C); + Xpos2 = Mem.ReadS16(curObj + 0x34); + Ypos = Mem.ReadS16(curObj + 0x30); + Ypos2 = Mem.ReadS16(curObj + 0x38); + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid -= _camX; Ymid -= _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); - _api.GUILib.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); - _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); + Gui.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); + Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); if (type == 0x9F6A0) { - int width = _api.MemLib.ReadS16(curObj + 0x44) << 1; + int width = Mem.ReadS16(curObj + 0x44) << 1; DrawBox(Xpos - width, Ypos - (width << 2), Xpos2 + width, Ypos2, Color.Lime); } - TickerText($"{_api.MemLib.ReadS32(curObj + 0x54) / 65536.0:0.######}:{_api.MemLib.ReadS32(curObj + 0x58) / 65536.0:0.######}", Color.Lime); + TickerText($"{Mem.ReadS32(curObj + 0x54) / 65536.0:0.######}:{Mem.ReadS32(curObj + 0x58) / 65536.0:0.######}", Color.Lime); } else if (type == 0xA3B18) { - Xpos = _api.MemLib.ReadS32(curObj + 0x24); - Ypos = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xpos + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ypos + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos = Mem.ReadS32(curObj + 0x24); + Ypos = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xpos + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ypos + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xpos >>= 16; Ypos >>= 16; Xpos -= _camX; Ypos -= _camY; - DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(curObj + 0x44), Color.Yellow); + DrawEccoOct(Xpos, Ypos, Mem.ReadS16(curObj + 0x44), Color.Yellow); DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); } else if (type == 0xA4018) { - Xpos = _api.MemLib.ReadS32(curObj + 0x24); - Ypos = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xpos + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ypos + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos = Mem.ReadS32(curObj + 0x24); + Ypos = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xpos + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ypos + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xpos >>= 16; Ypos >>= 16; Xpos -= _camX; Ypos -= _camY; - DrawEccoOct(Xpos, Ypos, _api.MemLib.ReadS16(curObj + 0x44), Color.Gray); + DrawEccoOct(Xpos, Ypos, Mem.ReadS16(curObj + 0x44), Color.Gray); DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); } else if (type == 0xA091E) // Blue Whale { - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; Xpos = Xmid; Ypos = Ymid; @@ -1548,39 +1565,39 @@ namespace BizHawk.Client.EmuHawk DrawEccoOct_scaled(Xmid, Ymid, 2, 0, 0x30, Color.Red, 31); DrawEccoOct_scaled(Xmid, Ymid, 2, 0, 0x20, Color.Red, 31); DrawEccoOct_scaled(Xmid, Ymid, 2, 0, 0x10, Color.Red, 31); - if (_api.MemLib.ReadByte(curObj + 0x7F) == 0) + if (Mem.ReadByte(curObj + 0x7F) == 0) { - Xpos += (_api.MemLib.ReadS16(curObj + 0x6E) == 0) ? -278 : 162; - Ypos += 44 - _api.MemLib.ReadS16(curObj + 0x48); + Xpos += (Mem.ReadS16(curObj + 0x6E) == 0) ? -278 : 162; + Ypos += 44 - Mem.ReadS16(curObj + 0x48); DrawEccoOct(Xpos, Ypos, 32, Color.Blue); } DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if (type == 0xE66D8) //Vortex Larva { - uint subObj = _api.MemLib.ReadU24(curObj + 5); + uint subObj = Mem.ReadU24(curObj + 5); while (subObj != 0) { - Xpos = _api.MemLib.ReadS16(subObj + 0x1C); - Ypos = _api.MemLib.ReadS16(subObj + 0x20); - Xpos2 = _api.MemLib.ReadS16(subObj + 0x24); - Ypos2 = _api.MemLib.ReadS16(subObj + 0x28); + Xpos = Mem.ReadS16(subObj + 0x1C); + Ypos = Mem.ReadS16(subObj + 0x20); + Xpos2 = Mem.ReadS16(subObj + 0x24); + Ypos2 = Mem.ReadS16(subObj + 0x28); Xpos -= _camX; Ypos -= _camY; Xpos2 -= _camX; Ypos2 -= _camY; DrawEccoOct(Xpos, Ypos, 30, Color.White, 32); DrawEccoOct(Xpos, Ypos, 30, Color.Yellow, 0); DrawEccoOct(Xpos2, Ypos2, 30, Color.White, 32); DrawEccoOct(Xpos2, Ypos2, 30, Color.Yellow, 0); - subObj = _api.MemLib.ReadU24(subObj + 5); + subObj = Mem.ReadU24(subObj + 5); } - Xpos = _api.MemLib.ReadS32(curObj + 0x24); - Ypos = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xpos + _api.MemLib.ReadS32(curObj + 0x54) + _api.MemLib.ReadS32(curObj + 0x5C)) >> 16) - _camX; - Yvec = ((Ypos + _api.MemLib.ReadS32(curObj + 0x58) + _api.MemLib.ReadS32(curObj + 0x60)) >> 16) - _camY; - Xpos2 = _api.MemLib.ReadS16(curObj + 0x72) - _camX; - Ypos2 = _api.MemLib.ReadS16(curObj + 0x76) - _camY; + Xpos = Mem.ReadS32(curObj + 0x24); + Ypos = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xpos + Mem.ReadS32(curObj + 0x54) + Mem.ReadS32(curObj + 0x5C)) >> 16) - _camX; + Yvec = ((Ypos + Mem.ReadS32(curObj + 0x58) + Mem.ReadS32(curObj + 0x60)) >> 16) - _camY; + Xpos2 = Mem.ReadS16(curObj + 0x72) - _camX; + Ypos2 = Mem.ReadS16(curObj + 0x76) - _camY; Xpos >>= 16; Ypos >>= 16; Xpos -= _camX; Ypos -= _camY; DrawEccoOct(Xpos, Ypos, 0xB0, Color.Yellow); @@ -1588,112 +1605,112 @@ namespace BizHawk.Client.EmuHawk DrawEccoOct(Xpos, Ypos, 0x70, Color.Red); DrawEccoOct(Xpos, Ypos, 0x38, Color.White); DrawEccoOct(Xpos, Ypos, 0x38, Color.Red, 0); - DrawEccoOct(Xpos, Ypos, 48, Color.Blue, ((_api.MemLib.ReadByte(curObj + 0x7B) > 2) && (_api.MemLib.ReadByte(curObj + 0x14) != 0)) ? 63 : 0); + DrawEccoOct(Xpos, Ypos, 48, Color.Blue, ((Mem.ReadByte(curObj + 0x7B) > 2) && (Mem.ReadByte(curObj + 0x14) != 0)) ? 63 : 0); DrawEccoOct(Xpos2, Ypos2, 32, Color.Orange); DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); - _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Orange); - TickerText($"{_api.MemLib.ReadByte(curObj + 0x14):X2}:{_api.MemLib.ReadByte(curObj + 0x7B):X2}:{_api.MemLib.ReadS16(curObj + 0x6E):D2}", Color.Red); - TickerText($"{ _api.MemLib.ReadByte(curObj + 0x7C):X2}:{_api.MemLib.ReadS16(curObj + 0x18):D3}", Color.Red); - TickerText($"{(_api.MemLib.ReadS32(curObj + 0x54) + _api.MemLib.ReadS32(curObj + 0x5C))/65536.0:0.######}:{(_api.MemLib.ReadS32(curObj + 0x58) + _api.MemLib.ReadS32(curObj + 0x60)) / 65536.0:0.######}", Color.Red); + Gui.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Orange); + TickerText($"{Mem.ReadByte(curObj + 0x14):X2}:{Mem.ReadByte(curObj + 0x7B):X2}:{Mem.ReadS16(curObj + 0x6E):D2}", Color.Red); + TickerText($"{ Mem.ReadByte(curObj + 0x7C):X2}:{Mem.ReadS16(curObj + 0x18):D3}", Color.Red); + TickerText($"{(Mem.ReadS32(curObj + 0x54) + Mem.ReadS32(curObj + 0x5C))/65536.0:0.######}:{(Mem.ReadS32(curObj + 0x58) + Mem.ReadS32(curObj + 0x60)) / 65536.0:0.######}", Color.Red); } else if (type == 0x9CE3A) //Remnant Stars { - flags = _api.MemLib.ReadU16(curObj + 0x10); - uint subObj = _api.MemLib.ReadU24(curObj + 0x5); - uint anim = _api.MemLib.ReadU16(curObj + 0x6C); - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); + flags = Mem.ReadU16(curObj + 0x10); + uint subObj = Mem.ReadU24(curObj + 0x5); + uint anim = Mem.ReadU16(curObj + 0x6C); + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; if ((anim <= 7) && (subObj == 0xFFA9D4)) { DrawEccoRhomb(Xmid, Ymid, 96, Color.Red); - PutText($"{((7 - anim) * 4) - ((_api.MemLib.ReadByte(0xFFA7C9) & 3) - 4)}", Xmid, Ymid + 4, 1, 1, -1, -1, Color.Blue, Color.Red); + PutText($"{((7 - anim) * 4) - ((Mem.ReadByte(0xFFA7C9) & 3) - 4)}", Xmid, Ymid + 4, 1, 1, -1, -1, Color.Blue, Color.Red); } } else if (type == 0xA997C) // Vortex Soldier { - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = (Xmid + _api.MemLib.ReadS32(curObj + 0x54) >> 16) - _camX; - Yvec = (Ymid + _api.MemLib.ReadS32(curObj + 0x58) >> 16) - _camY; - Xvec += _api.MemLib.ReadS16(curObj + 0x64); - Yvec += _api.MemLib.ReadS16(curObj + 0x66); + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = (Xmid + Mem.ReadS32(curObj + 0x54) >> 16) - _camX; + Yvec = (Ymid + Mem.ReadS32(curObj + 0x58) >> 16) - _camY; + Xvec += Mem.ReadS16(curObj + 0x64); + Yvec += Mem.ReadS16(curObj + 0x66); Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; - if (_api.MemLib.ReadByte(curObj + 0x7A) == 0) + if (Mem.ReadByte(curObj + 0x7A) == 0) { DrawRectRhombusIntersection(new Point(Xmid, Ymid + 6), new Point(Xmid, Ymid), 50, 44, 64, Color.Red); } DrawRectRhombusIntersection(new Point(Xmid, Ymid - 25), new Point(Xmid, Ymid), 38, 47, 64, Color.Red); - DrawBoxMWH(Xmid, Ymid, _api.MemLib.ReadS16(curObj + 0x44), _api.MemLib.ReadS16(curObj + 0x48), Color.Blue, 16); + DrawBoxMWH(Xmid, Ymid, Mem.ReadS16(curObj + 0x44), Mem.ReadS16(curObj + 0x48), Color.Blue, 16); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if ((type == 0xA6C4A) || (type == 0xC43D4)) // Barrier Glyphs { - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; - var subType = _api.MemLib.ReadByte(curObj + 0x13); - if ((_api.MemLib.ReadU8(curObj + 0x7A) == 0) && (_api.MemLib.ReadU8(0xFFA7B5) != 0) + var subType = Mem.ReadByte(curObj + 0x13); + if ((Mem.ReadU8(curObj + 0x7A) == 0) && (Mem.ReadU8(0xFFA7B5) != 0) && ((type != 0xA6C4A) || (subType == 0x14) || (subType == 0x97))) { DrawEccoOct(Xmid, Ymid, 70, Color.Red); } - DrawBoxMWH(Xmid, Ymid, _api.MemLib.ReadS16(curObj + 0x44), _api.MemLib.ReadS16(curObj + 0x48), Color.Blue); - DrawBoxMWH(Xmid, Ymid, _api.MemLib.ReadS16(curObj + 0x44), _api.MemLib.ReadS16(curObj + 0x48), Color.PowderBlue, 0); + DrawBoxMWH(Xmid, Ymid, Mem.ReadS16(curObj + 0x44), Mem.ReadS16(curObj + 0x48), Color.Blue); + DrawBoxMWH(Xmid, Ymid, Mem.ReadS16(curObj + 0x44), Mem.ReadS16(curObj + 0x48), Color.PowderBlue, 0); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if ((type == 0xB4F46) || (type == 0xB4E1C) || (type == 0xB4C18) || (type == 0xB4ACC) || (type == 0xB4B72)) // Guiding Orca/Dolphin { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C); + Xpos2 = Mem.ReadS16(curObj + 0x34); + Ypos = Mem.ReadS16(curObj + 0x30); + Ypos2 = Mem.ReadS16(curObj + 0x38); + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid -= _camX; Ymid -= _camY; - int Xdst = _api.MemLib.ReadS16(curObj + 0x64); + int Xdst = Mem.ReadS16(curObj + 0x64); Xdst <<= 7; Xdst = Xdst + 0x40 - _camX; - int Ydst = _api.MemLib.ReadS16(curObj + 0x66); + int Ydst = Mem.ReadS16(curObj + 0x66); Ydst <<= 7; Ydst = Ydst + 0x40 - _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - _api.GUILib.DrawLine(Xmid, Ymid, Xdst, Ydst, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xdst, Ydst, Color.Orange); DrawBoxMWH(Xdst, Ydst, 64, 64, Color.Orange); - TickerText($"{_api.MemLib.ReadS16(curObj + 0x24)}:{_api.MemLib.ReadS16(curObj + 0x28)}:{_api.MemLib.ReadByte(curObj + 0x7D)}:{_api.MemLib.ReadByte(curObj + 0x7A)}", Color.Lime); - TickerText($"{_api.MemLib.ReadS32(curObj + 0x54) / 65536.0:0.######}:{_api.MemLib.ReadS32(curObj + 0x58) / 65536.0:0.######}", Color.Lime); - TickerText($"{_api.MemLib.ReadS32(curObj + 0x72) / 65536.0:0.######}:{_api.MemLib.ReadS32(curObj + 0x76) / 65536.0:0.######}", Color.Lime); + TickerText($"{Mem.ReadS16(curObj + 0x24)}:{Mem.ReadS16(curObj + 0x28)}:{Mem.ReadByte(curObj + 0x7D)}:{Mem.ReadByte(curObj + 0x7A)}", Color.Lime); + TickerText($"{Mem.ReadS32(curObj + 0x54) / 65536.0:0.######}:{Mem.ReadS32(curObj + 0x58) / 65536.0:0.######}", Color.Lime); + TickerText($"{Mem.ReadS32(curObj + 0x72) / 65536.0:0.######}:{Mem.ReadS32(curObj + 0x76) / 65536.0:0.######}", Color.Lime); } else if (type == 0xB5938) // Lost Orca { - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xpos = _api.MemLib.ReadS16(curObj + 0x1C) - _camX; - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xpos = Mem.ReadS16(curObj + 0x1C) - _camX; + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; //DrawBoxMWH(Xmid, Ymid, 64, 32, Color.Lime); - if (_api.MemLib.ReadU16(curObj + 0x6E) == 0) + if (Mem.ReadU16(curObj + 0x6E) == 0) { - if (_api.MemLib.ReadByte(curObj + 0x7D) == 0) + if (Mem.ReadByte(curObj + 0x7D) == 0) { DrawBox(Xmid + 8, Ymid - 32, Xmid + 64, Ymid + 32, Color.Red); } @@ -1702,87 +1719,87 @@ namespace BizHawk.Client.EmuHawk DrawBox(Xmid - 64, Ymid - 32, Xmid - 8, Ymid + 32, Color.Red); } } - _api.GUILib.DrawLine(Xpos - 80, Ymid, Xpos + 80, Ymid, Color.Green); + Gui.DrawLine(Xpos - 80, Ymid, Xpos + 80, Ymid, Color.Green); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if ((type == 0xB552A) || (type == 0xB5C42) || (type == 0xB5AFE)) // Following Orca, Returning Orca, & Idling Orca { - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if (type == 0xB624A) // Orca Mother { - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; - int height = _api.MemLib.ReadS16(curObj + 0x48) + 32; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; + int height = Mem.ReadS16(curObj + 0x48) + 32; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; DrawBoxMWH(Xmid, Ymid, 80, 32, Color.Red, 31); - DrawBoxMWH(Xmid, Ymid, _api.MemLib.ReadS16(curObj + 0x44), _api.MemLib.ReadS16(curObj + 0x48), Color.Blue); + DrawBoxMWH(Xmid, Ymid, Mem.ReadS16(curObj + 0x44), Mem.ReadS16(curObj + 0x48), Color.Blue); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - if (_api.MemLib.ReadS32(0xFFAB7E) != 0) + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + if (Mem.ReadS32(0xFFAB7E) != 0) { DrawEccoOct(Xmid, Ymid, 0x50, Color.Red, 31); } } else if (type == 0xC047E) { - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + Xmid = Mem.ReadS16(curObj + 0x24) - _camX; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; var width = 2; var height = 2; - if (_api.MemLib.ReadByte(curObj + 0x15) == 0) + if (Mem.ReadByte(curObj + 0x15) == 0) { - width = _api.MemLib.ReadS16(curObj + 0x44); - height = _api.MemLib.ReadS16(curObj + 0x48); + width = Mem.ReadS16(curObj + 0x44); + height = Mem.ReadS16(curObj + 0x48); } DrawBoxMWH(Xmid, Ymid, width, height, Color.Lime); } else if (type == 0xC056E) { - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; - var width = _api.MemLib.ReadS16(curObj + 0x44); - var height = _api.MemLib.ReadS16(curObj + 0x48); + Xmid = Mem.ReadS16(curObj + 0x24) - _camX; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; + var width = Mem.ReadS16(curObj + 0x44); + var height = Mem.ReadS16(curObj + 0x48); DrawBoxMWH(Xmid, Ymid, width, height, Color.Lime); } else if (type == 0xC4208) // Broken Glyph Base { - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; - var width = _api.MemLib.ReadS16(curObj + 0x44); - var height = _api.MemLib.ReadS16(curObj + 0x48); + var width = Mem.ReadS16(curObj + 0x44); + var height = Mem.ReadS16(curObj + 0x48); DrawBoxMWH(Xmid, Ymid, width, height, Color.PowderBlue); - if (_api.MemLib.ReadByte(curObj + 0x15) == 0) + if (Mem.ReadByte(curObj + 0x15) == 0) { DrawRectRhombusIntersection(new Point(Xmid, Ymid), new Point(Xmid, Ymid), 80, 80, 120, Color.Orange); } DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if (type == 0xAC242) // Broken Glyph Top repairing { - uint subObj = _api.MemLib.ReadU24(curObj + 0x5); - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; - Xpos = _api.MemLib.ReadS16(subObj + 0x24) - _camX; - Ypos = _api.MemLib.ReadS16(subObj + 0x28) - _camY; - var width = _api.MemLib.ReadS16(curObj + 0x44); - var height = _api.MemLib.ReadS16(curObj + 0x48); + uint subObj = Mem.ReadU24(curObj + 0x5); + Xmid = Mem.ReadS16(curObj + 0x24) - _camX; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; + Xpos = Mem.ReadS16(subObj + 0x24) - _camX; + Ypos = Mem.ReadS16(subObj + 0x28) - _camY; + var width = Mem.ReadS16(curObj + 0x44); + var height = Mem.ReadS16(curObj + 0x48); DrawBoxMWH(Xmid, Ymid, width, height, Color.Gray); Point[] rhombPoints = { @@ -1791,98 +1808,98 @@ namespace BizHawk.Client.EmuHawk new Point(Xpos + 3, Ypos), new Point(Xpos, Ypos + 3) }; - _api.GUILib.DrawPolygon(rhombPoints, Color.Orange, Color.FromArgb(63, Color.Orange)); + Gui.DrawPolygon(rhombPoints, Color.Orange, Color.FromArgb(63, Color.Orange)); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xpos, Ypos, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xpos, Ypos, Color.Orange); } else if (type == 0xBE9C8) // Broken Glyph Top free { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; - Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; + Ypos = Mem.ReadS16(curObj + 0x30) - _camY; + Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime, 0); - _api.GUILib.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); - _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Gui.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); + Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - TickerText($"{_api.MemLib.ReadS32(curObj + 0x54) / 65536.0:0.######}:{_api.MemLib.ReadS32(curObj + 0x58) / 65536.0:0.######}", Color.Lime); _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + TickerText($"{Mem.ReadS32(curObj + 0x54) / 65536.0:0.######}:{Mem.ReadS32(curObj + 0x58) / 65536.0:0.######}", Color.Lime); Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if ((type == 0xD9C0E) || (type == 0xDA9EA)) { - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + Xmid = Mem.ReadS16(curObj + 0x24) - _camX; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; DrawBoxMWH(Xmid, Ymid, 0xA0, 0x70, Color.Red); } else if ((type == 0xBF204) || (type == 0xDA2C0)) { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54) + _api.MemLib.ReadS32(curObj + 0x5C)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58) + _api.MemLib.ReadS32(curObj + 0x60)) >> 16) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C); + Xpos2 = Mem.ReadS16(curObj + 0x34); + Ypos = Mem.ReadS16(curObj + 0x30); + Ypos2 = Mem.ReadS16(curObj + 0x38); + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54) + Mem.ReadS32(curObj + 0x5C)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58) + Mem.ReadS32(curObj + 0x60)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid -= _camX; Ymid -= _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if (type == 0xAF9CC) // Mirror Dolphin { - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xpos = _api.MemLib.ReadS16(curObj + 0x1C) - _camX + (_api.MemLib.ReadByte(curObj + 0x15) == 0 ? 27 : -27); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54) + _api.MemLib.ReadS32(curObj + 0x5C)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58) + _api.MemLib.ReadS32(curObj + 0x60)) >> 16) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xpos = Mem.ReadS16(curObj + 0x1C) - _camX + (Mem.ReadByte(curObj + 0x15) == 0 ? 27 : -27); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54) + Mem.ReadS32(curObj + 0x5C)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58) + Mem.ReadS32(curObj + 0x60)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; - var width = _api.MemLib.ReadS16(curObj + 0x44); - var height = _api.MemLib.ReadS16(curObj + 0x48); + var width = Mem.ReadS16(curObj + 0x44); + var height = Mem.ReadS16(curObj + 0x48); DrawBoxMWH(Xmid, Ymid, width, height, Color.Blue, 31); - if (_api.MemLib.ReadByte(curObj + 0x13) != 0xAC) + if (Mem.ReadByte(curObj + 0x13) != 0xAC) { DrawBoxMWH(Xmid, Ymid, 96, 96, Color.Orange); } - _api.GUILib.DrawLine(Xpos, 0, Xpos, 448, Color.Red); + Gui.DrawLine(Xpos, 0, Xpos, 448, Color.Red); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if (type == 0xAF43E) // Vortex Lightning Trap { - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; - if (_api.MemLib.ReadByte(curObj + 0x15) != 0) + Xmid = Mem.ReadS16(curObj + 0x24) - _camX; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; + if (Mem.ReadByte(curObj + 0x15) != 0) { - if (_api.MemLib.ReadS16(0xFFAA12) != 0) + if (Mem.ReadS16(0xFFAA12) != 0) { Ymid -= 8; } DrawBoxMWH(Xmid, Ymid, 92, 16, Color.Red); - PutText(_api.MemLib.ReadByte(curObj + 0x15).ToString(), Xmid, Ymid, 1, 1, -1, -1, Color.Blue, Color.Red); + PutText(Mem.ReadByte(curObj + 0x15).ToString(), Xmid, Ymid, 1, 1, -1, -1, Color.Blue, Color.Red); } else { DrawBoxMWH(Xmid, Ymid, 92, 16, Color.Gray); - PutText(_api.MemLib.ReadByte(curObj + 0x7F).ToString(), Xmid, Ymid, 1, 1, -1, -1, Color.Blue, Color.Red); + PutText(Mem.ReadByte(curObj + 0x7F).ToString(), Xmid, Ymid, 1, 1, -1, -1, Color.Blue, Color.Red); } } else if (type == 0xA6E24) // Barrier Glyph Forcefield { - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = _api.MemLib.ReadS32(0xFFAA1A) - Xmid; - Yvec = _api.MemLib.ReadS32(0xFFAA1E) - Ymid; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = Mem.ReadS32(0xFFAA1A) - Xmid; + Yvec = Mem.ReadS32(0xFFAA1E) - Ymid; var div = Math.Abs(Xvec) + Math.Abs(Yvec); Xvec /= div; Yvec /= div; Xvec += Xmid; Yvec += Ymid; @@ -1891,31 +1908,31 @@ namespace BizHawk.Client.EmuHawk Xmid -= _camX; Ymid -= _camY; Xvec -= _camX; Yvec -= _camY; DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if ((type == 0xC4A44) || (type == 0xAA32C)) // Pulsar power-up and Vortex bullet-spawner { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; - Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; + Ypos = Mem.ReadS16(curObj + 0x30) - _camY; + Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue, 16); } else if (type == 0xC2F00) // Sky bubbles { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C); + Xpos2 = Mem.ReadS16(curObj + 0x34); + Ypos = Mem.ReadS16(curObj + 0x30); + Ypos2 = Mem.ReadS16(curObj + 0x38); + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid -= _camX; Ymid -= _camY; - var mode = _api.MemLib.ReadByte(curObj + 0x15); + var mode = Mem.ReadByte(curObj + 0x15); switch (mode) { case 0: @@ -1933,75 +1950,75 @@ namespace BizHawk.Client.EmuHawk break; } DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if (type == 0x9FA7E) //Air refiller/drainer { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); + Xpos = Mem.ReadS16(curObj + 0x2C); + Xpos2 = Mem.ReadS16(curObj + 0x34); + Ypos = Mem.ReadS16(curObj + 0x30); + Ypos2 = Mem.ReadS16(curObj + 0x38); Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Lime)); } else if (type == 0xBFC14) //Pushable fish { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; - Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; + Ypos = Mem.ReadS16(curObj + 0x30) - _camY; + Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime, 0); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - TickerText($"{_api.MemLib.ReadS32(curObj + 0x54) / 65536.0:0.######}:{_api.MemLib.ReadS32(curObj + 0x58) / 65536.0:0.######}", Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + TickerText($"{Mem.ReadS32(curObj + 0x54) / 65536.0:0.######}:{Mem.ReadS32(curObj + 0x58) / 65536.0:0.######}", Color.Orange); } else if ((type == 0xBE97C) //Slowing Kelp //Default Bounds nose-responsive || (type == 0xACDAE)) //Metasphere { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C); + Xpos2 = Mem.ReadS16(curObj + 0x34); + Ypos = Mem.ReadS16(curObj + 0x30); + Ypos2 = Mem.ReadS16(curObj + 0x38); + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid -= _camX; Ymid -= _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if (type == 0xACB42) // Turtle { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; - Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; - var mode = _api.MemLib.ReadByte(curObj + 0x15); + Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; + Ypos = Mem.ReadS16(curObj + 0x30) - _camY; + Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; + var mode = Mem.ReadByte(curObj + 0x15); switch (mode) { case 0: case 1: case 2: case 3: - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x4C)) >> 16) - _camX; + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x4C)) >> 16) - _camX; break; case 4: case 5: case 6: case 7: - Xvec = ((Xmid - _api.MemLib.ReadS32(curObj + 0x4C)) >> 16) - _camX; + Xvec = ((Xmid - Mem.ReadS32(curObj + 0x4C)) >> 16) - _camX; break; default: Xvec = (Xmid >> 16) - _camX; @@ -2011,300 +2028,300 @@ namespace BizHawk.Client.EmuHawk Xmid >>= 16; Xmid -= _camX; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); - _api.GUILib.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); - int width = _api.MemLib.ReadS16(curObj + 0x44) << 1; + Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); + Gui.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); + int width = Mem.ReadS16(curObj + 0x44) << 1; DrawBox(Xpos - width, Ypos - (width << 2), Xpos2 + width, Ypos2, Color.Lime); - TickerText($"{_api.MemLib.ReadS32(curObj + 0x4C) / 65536.0:0.######}:{_api.MemLib.ReadS32(curObj + 0x50) / 65536.0:0.######}", Color.Lime); + TickerText($"{Mem.ReadS32(curObj + 0x4C) / 65536.0:0.######}:{Mem.ReadS32(curObj + 0x50) / 65536.0:0.######}", Color.Lime); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if (type == 0xACA7E) // Retracting Turtle { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; - Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + (_api.MemLib.ReadS32(curObj + 0x4C) >> 1)) >> 16) - _camX; - Yvec = ((Ymid + (_api.MemLib.ReadS32(curObj + 0x50) >> 1)) >> 16) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; + Ypos = Mem.ReadS16(curObj + 0x30) - _camY; + Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + (Mem.ReadS32(curObj + 0x4C) >> 1)) >> 16) - _camX; + Yvec = ((Ymid + (Mem.ReadS32(curObj + 0x50) >> 1)) >> 16) - _camY; Xmid >>= 16; Xmid -= _camX; Ymid >>= 16; Ymid -= _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); - _api.GUILib.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); - int width = _api.MemLib.ReadS16(curObj + 0x44) << 1; + Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); + Gui.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); + int width = Mem.ReadS16(curObj + 0x44) << 1; DrawBox(Xpos - width, Ypos - (width << 2), Xpos2 + width, Ypos2, Color.Lime); - TickerText($"{(_api.MemLib.ReadS32(curObj + 0x4C) >> 1) / 65536.0:0.######}:{(_api.MemLib.ReadS32(curObj + 0x50) >> 1) / 65536.0:0.######}", Color.Lime); + TickerText($"{(Mem.ReadS32(curObj + 0x4C) >> 1) / 65536.0:0.######}:{(Mem.ReadS32(curObj + 0x50) >> 1) / 65536.0:0.######}", Color.Lime); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if ((type == 0xB5134) || (type == 0xA7E0C) //Default Bounds sonar-responsive || (type == 0xAF868) || (type == 0xAF960) || (type == 0xD8E5C) || (type == 0xAA5C6)) { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C); + Xpos2 = Mem.ReadS16(curObj + 0x34); + Ypos = Mem.ReadS16(curObj + 0x30); + Ypos2 = Mem.ReadS16(curObj + 0x38); + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid -= _camX; Ymid -= _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if ((type == 0xACCB4) || (type == 0xACD7E) //Default Baunds non-responsive || (type == 0xD8D96) || (type == 0xA955E) || (type == 0xA92E4) || (type == 0xC05DC) || (type == 0xC2684)) { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C); + Xpos2 = Mem.ReadS16(curObj + 0x34); + Ypos = Mem.ReadS16(curObj + 0x30); + Ypos2 = Mem.ReadS16(curObj + 0x38); + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid -= _camX; Ymid -= _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Gray); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if (type == 0x9DE86) // Star Wreath { - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; - Xpos = _api.MemLib.ReadS32(curObj + 0x1C); - Ypos = _api.MemLib.ReadS32(curObj + 0x20); - Xpos2 = ((Xpos + _api.MemLib.ReadS32(curObj + 0x5C)) >> 16) - _camX; - Ypos2 = ((Ypos + _api.MemLib.ReadS32(curObj + 0x60)) >> 16) - _camY; + Xpos = Mem.ReadS32(curObj + 0x1C); + Ypos = Mem.ReadS32(curObj + 0x20); + Xpos2 = ((Xpos + Mem.ReadS32(curObj + 0x5C)) >> 16) - _camX; + Ypos2 = ((Ypos + Mem.ReadS32(curObj + 0x60)) >> 16) - _camY; Xpos >>= 16; Ypos >>= 16; Xpos -= _camX; Ypos -= _camY; DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Orange, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - DrawBoxMWH(Xpos, Ypos, 1, 1, (_api.MemLib.ReadByte(curObj + 0x7F) == 0) ? Color.Blue : Color.Black, 0); - _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Orange); - if (_api.MemLib.ReadByte(curObj + 0x12) % 7 == 0) + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + DrawBoxMWH(Xpos, Ypos, 1, 1, (Mem.ReadByte(curObj + 0x7F) == 0) ? Color.Blue : Color.Black, 0); + Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Orange); + if (Mem.ReadByte(curObj + 0x12) % 7 == 0) { - TickerText($"{_api.MemLib.ReadS32(curObj + 0x5C) / 65536.0:0.######}:{_api.MemLib.ReadS32(curObj + 0x60) / 65536.0:0.######}:{_api.MemLib.ReadByte(curObj + 0x7F)}", Color.Lime); + TickerText($"{Mem.ReadS32(curObj + 0x5C) / 65536.0:0.######}:{Mem.ReadS32(curObj + 0x60) / 65536.0:0.######}:{Mem.ReadByte(curObj + 0x7F)}", Color.Lime); } } else if ((type == 0x9D774) || (type == 0x9DA26)) // Fish { - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid -= _camX; Ymid -= _camY; DrawBoxMWH(Xmid, Ymid, 0x14, 0x14, Color.Lime); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if (type == 0xAD87C) // Enemy dolphins in metamorph levels { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C); + Xpos2 = Mem.ReadS16(curObj + 0x34); + Ypos = Mem.ReadS16(curObj + 0x30); + Ypos2 = Mem.ReadS16(curObj + 0x38); + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid -= _camX; Ymid -= _camY; - DrawBoxMWH(_api.MemLib.ReadS16(curObj + 0x1C) - _camX, _api.MemLib.ReadS16(curObj + 0x20) - _camY, 1024, 1024, Color.Orange, 0); + DrawBoxMWH(Mem.ReadS16(curObj + 0x1C) - _camX, Mem.ReadS16(curObj + 0x20) - _camY, 1024, 1024, Color.Orange, 0); DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if (type == 0xC6128) // Drone attacking dolphin { - Xmid = _api.MemLib.ReadS16(curObj + 0x4C) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x50) - _camY; + Xmid = Mem.ReadS16(curObj + 0x4C) - _camX; + Ymid = Mem.ReadS16(curObj + 0x50) - _camY; DrawEccoOct(Xmid, Ymid, 360, Color.Red, 0); } else if (type == 0xC605A) // Drone attacking dolphin sonar { - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camY; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + Xmid = Mem.ReadS16(curObj + 0x24) - _camY; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; DrawBox(Xmid, Ymid - 1, Xmid + 32, Ymid + 1, Color.Orange); } else if (type == 0xB1BE0) // Globe { - int mode = _api.MemLib.ReadS8(curObj + 0x15); + int mode = Mem.ReadS8(curObj + 0x15); if (mode == 1) { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; - Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; + Ypos = Mem.ReadS16(curObj + 0x30) - _camY; + Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime, 0); - _api.GUILib.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); - _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Gui.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); + Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if (type == 0xB1A10) // Approaching globes { - Xmid = _api.MemLib.ReadS16(0xFFAA1A) - _camX; - Ymid = _api.MemLib.ReadS16(0xFFAA1E) - _camY; + Xmid = Mem.ReadS16(0xFFAA1A) - _camX; + Ymid = Mem.ReadS16(0xFFAA1E) - _camY; DrawEccoOct(Xmid - 56, Ymid, 8, Color.Orange); DrawEccoOct(Xmid + 56, Ymid, 8, Color.Orange); - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xpos = _api.MemLib.ReadS32(curObj + 0x4C); - Ypos = _api.MemLib.ReadS32(curObj + 0x50); - Xvec = ((Xmid - _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid - _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xpos2 = ((Xpos + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Ypos2 = ((Ypos + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xpos = Mem.ReadS32(curObj + 0x4C); + Ypos = Mem.ReadS32(curObj + 0x50); + Xvec = ((Xmid - Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid - Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos2 = ((Xpos + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Ypos2 = ((Ypos + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; Xpos >>= 16; Ypos >>= 16; Xpos -= _camX; Ypos -= _camY; DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Orange); + Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Orange); } else if (type == 0xB1920) // Orbiting globes { - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xpos = _api.MemLib.ReadS16(curObj + 0x4C) - _camX; - Ypos = _api.MemLib.ReadS16(curObj + 0x50) - _camY; - Xvec = ((Xmid - _api.MemLib.ReadS32(curObj + 0x5C)) >> 16) - _camX; - Yvec = ((Ymid - _api.MemLib.ReadS32(curObj + 0x60)) >> 16) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xpos = Mem.ReadS16(curObj + 0x4C) - _camX; + Ypos = Mem.ReadS16(curObj + 0x50) - _camY; + Xvec = ((Xmid - Mem.ReadS32(curObj + 0x5C)) >> 16) - _camX; + Yvec = ((Ymid - Mem.ReadS32(curObj + 0x60)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); } else if (type == 0xC28A0) // Control point in Four Islands/Dolphin that gives Rock-breaking song { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C); + Xpos2 = Mem.ReadS16(curObj + 0x34); + Ypos = Mem.ReadS16(curObj + 0x30); + Ypos2 = Mem.ReadS16(curObj + 0x38); + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid -= _camX; Ymid -= _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, _api.MemLib.ReadByte(curObj + 0x15) == 0 ? Color.Orange : Color.Blue); + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Mem.ReadByte(curObj + 0x15) == 0 ? Color.Orange : Color.Blue); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } // Crystal Springs merging glyphs else if (type == 0xC651E) // Bound glyph { - Xpos = _api.MemLib.ReadS16(curObj + 0x1C) - _camX; - Ypos = _api.MemLib.ReadS16(curObj + 0x20) - _camY; + Xpos = Mem.ReadS16(curObj + 0x1C) - _camX; + Ypos = Mem.ReadS16(curObj + 0x20) - _camY; DrawEccoRhomb(Xpos, Ypos, 4 << 4, Color.Orange); - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; - Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; - Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; + Ypos = Mem.ReadS16(curObj + 0x30) - _camY; + Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if (type == 0xC67E4) // Freed glyph { - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; - Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; - Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; + Ypos = Mem.ReadS16(curObj + 0x30) - _camY; + Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue, 0); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if (type == 0xC6970) // Pulled glyph { - uint subObj = _api.MemLib.ReadU24(curObj + 5); - Xvec = _api.MemLib.ReadS32(subObj + 0x54); - Yvec = _api.MemLib.ReadS32(subObj + 0x58); - for (i = 1; i < _api.MemLib.ReadByte(curObj + 0x7F); i++) + uint subObj = Mem.ReadU24(curObj + 5); + Xvec = Mem.ReadS32(subObj + 0x54); + Yvec = Mem.ReadS32(subObj + 0x58); + for (i = 1; i < Mem.ReadByte(curObj + 0x7F); i++) { Xvec ^= Yvec; Yvec ^= Xvec; Xvec ^= Yvec; Xvec = 0 - Xvec; } - Xpos = (Xvec + _api.MemLib.ReadS32(subObj + 0x1C) >> 16) - _camX; - Ypos = (Yvec + _api.MemLib.ReadS32(subObj + 0x20) >> 16) - _camY; + Xpos = (Xvec + Mem.ReadS32(subObj + 0x1C) >> 16) - _camX; + Ypos = (Yvec + Mem.ReadS32(subObj + 0x20) >> 16) - _camY; DrawEccoRhomb(Xpos, Ypos, 3, Color.Orange); - Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; - Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; + Ypos = Mem.ReadS16(curObj + 0x30) - _camY; + Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue, 0); - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + Xmid = Mem.ReadS16(curObj + 0x24) - _camX; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Orange, 0); } else if (type == 0xC6BA8) // Delivery Point { - Xvec = _api.MemLib.ReadS32(curObj + 0x54); - Yvec = _api.MemLib.ReadS32(curObj + 0x58); - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + Xvec = Mem.ReadS32(curObj + 0x54); + Yvec = Mem.ReadS32(curObj + 0x58); + Xmid = Mem.ReadS16(curObj + 0x24) - _camX; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); for (i = 0; i < 4; i++) { - Xpos = (Xvec + _api.MemLib.ReadS32(curObj + 0x1C) >> 16) - _camX; - Ypos = (Yvec + _api.MemLib.ReadS32(curObj + 0x20) >> 16) - _camY; - _api.GUILib.DrawLine(Xmid, Ymid, Xpos, Ypos, Color.Orange); + Xpos = (Xvec + Mem.ReadS32(curObj + 0x1C) >> 16) - _camX; + Ypos = (Yvec + Mem.ReadS32(curObj + 0x20) >> 16) - _camY; + Gui.DrawLine(Xmid, Ymid, Xpos, Ypos, Color.Orange); Xvec ^= Yvec; Yvec ^= Xvec; Xvec ^= Yvec; @@ -2313,46 +2330,46 @@ namespace BizHawk.Client.EmuHawk } else if (type == 0xC6A6C) // Delivered glyph { - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid - _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid - _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid - Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid - Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if (type == 0xC6F82) // Full delivery point { - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + Xmid = Mem.ReadS16(curObj + 0x24) - _camX; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; DrawEccoOct(Xmid, Ymid, 3, Color.Orange); } else if (type == 0xC6A9E) // Merging glyph { - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid - _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid - _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid - Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid - Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Orange, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if (type == 0xC7052) { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); - Xmid = _api.MemLib.ReadS16(curObj + 0x24); - Ymid = _api.MemLib.ReadS16(curObj + 0x28); + Xpos = Mem.ReadS16(curObj + 0x2C); + Xpos2 = Mem.ReadS16(curObj + 0x34); + Ypos = Mem.ReadS16(curObj + 0x30); + Ypos2 = Mem.ReadS16(curObj + 0x38); + Xmid = Mem.ReadS16(curObj + 0x24); + Ymid = Mem.ReadS16(curObj + 0x28); Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid -= _camX; Ymid -= _camY; - uint dropSpeed = _api.MemLib.ReadU8(curObj + 0x16); + uint dropSpeed = Mem.ReadU8(curObj + 0x16); DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xmid, Ymid + (int)(dropSpeed), Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xmid, Ymid + (int)(dropSpeed), Color.Orange); } else if ((type == 0xD8B7C) || (type == 0xD89EA) || (type == 0x9E3AA) || (type == 0x9E5A8) // GFX particles don't need displayed. || (type == 0x9B5D8) || (type == 0x9E2A6) || (type == 0xACD1E) || (type == 0xD9678) @@ -2380,14 +2397,14 @@ namespace BizHawk.Client.EmuHawk || (type == 0xC32C8) || (type == 0xAB5E6) || (type == 0xAC796) || (type == 0xAC9F2) || (type == 0xA538A)) { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C); + Xpos2 = Mem.ReadS16(curObj + 0x34); + Ypos = Mem.ReadS16(curObj + 0x30); + Ypos2 = Mem.ReadS16(curObj + 0x38); + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; @@ -2397,7 +2414,7 @@ namespace BizHawk.Client.EmuHawk if (type != 0xA975E) { DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } if (HP > 2) { @@ -2406,33 +2423,33 @@ namespace BizHawk.Client.EmuHawk } else // Default bounds { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C); + Xpos2 = Mem.ReadS16(curObj + 0x34); + Ypos = Mem.ReadS16(curObj + 0x30); + Ypos2 = Mem.ReadS16(curObj + 0x38); + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid -= _camX; Ymid -= _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue, 0); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); PutText(type.ToString("X5"), Xmid, Ymid + 8, 1, 9, -1, -1, Color.Blue, Color.Red); } break; } case Modes.Ecco1: - type = _api.MemLib.ReadU32(curObj + 0x6); - Xpos = _api.MemLib.ReadS16(curObj + 0x17); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x1F); - Ypos = _api.MemLib.ReadS16(curObj + 0x1B); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x23); - Xmid = _api.MemLib.ReadS16(curObj + 0x0F); - Ymid = _api.MemLib.ReadS16(curObj + 0x13); + type = Mem.ReadU32(curObj + 0x6); + Xpos = Mem.ReadS16(curObj + 0x17); + Xpos2 = Mem.ReadS16(curObj + 0x1F); + Ypos = Mem.ReadS16(curObj + 0x1B); + Ypos2 = Mem.ReadS16(curObj + 0x23); + Xmid = Mem.ReadS16(curObj + 0x0F); + Ymid = Mem.ReadS16(curObj + 0x13); Xpos >>= 2; Xpos2 >>= 2; Ypos >>= 2; @@ -2446,13 +2463,13 @@ namespace BizHawk.Client.EmuHawk PutText(type.ToString("X8"), Xmid, Ymid, 1, 1, -1, -1, Color.Blue, Color.Red); break; } - curObj = _api.MemLib.ReadU24(curObj+1); + curObj = Mem.ReadU24(curObj+1); } //events - curObj = _api.MemLib.ReadU24(0xFFCFB5); + curObj = Mem.ReadU24(0xFFCFB5); while (curObj != 0) { - type = _api.MemLib.ReadU32(curObj + 0xC); + type = Mem.ReadU32(curObj + 0xC); if ((type == 0) // Null object || (type == 0x9C1FA) || (type == 0x9C6D0) // Skytubes BG Image manager || (type == 0x9ED72) || (type == 0xA57F2) // And Miscellaneous GFX particles @@ -2460,22 +2477,22 @@ namespace BizHawk.Client.EmuHawk || (type == 0xB308A) || (type == 0xA1676) || (type == 0xB6822) || (type == 0xD12E2)) { } else if ((type == 0xA44EE) || (type == 0xD120C)) { - Xmid = _api.MemLib.ReadS16(curObj + 0x1C) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x20) - _camY; + Xmid = Mem.ReadS16(curObj + 0x1C) - _camX; + Ymid = Mem.ReadS16(curObj + 0x20) - _camY; DrawEccoOct(Xmid, Ymid, 0x20, Color.Red); } else if (type == 0x9F0D0) // Water Current { - int Xvec = _api.MemLib.ReadS32(curObj + 0x54); - int Yvec = _api.MemLib.ReadS32(curObj + 0x58); + int Xvec = Mem.ReadS32(curObj + 0x54); + int Yvec = Mem.ReadS32(curObj + 0x58); if ((Xvec != 0) || (Yvec != 0)) { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); + Xpos = Mem.ReadS16(curObj + 0x2C); + Xpos2 = Mem.ReadS16(curObj + 0x34); + Ypos = Mem.ReadS16(curObj + 0x30); + Ypos2 = Mem.ReadS16(curObj + 0x38); + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); Xvec += Xmid; Yvec += Ymid; Xmid >>= 16; Ymid >>= 16; Xvec >>= 16; Yvec >>= 16; @@ -2485,73 +2502,73 @@ namespace BizHawk.Client.EmuHawk Xvec -= _camX; Yvec -= _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Red)); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } } else if (type == 0xDEF94) { - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + Xmid = Mem.ReadS16(curObj + 0x24) - _camX; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; DrawEccoOct(Xmid, Ymid, 0x18, Color.Cyan); } else if (type == 0xA6584) // Eagle { - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + Xmid = Mem.ReadS16(curObj + 0x24) - _camX; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; DrawEccoOct(Xmid, Ymid, 0x10, Color.Red); } else if ((type == 0x9BA8A) // Autoscroller controller || (type == 0xE27D4) || (type == 0xE270E) || (type == 0xE26C2)) { - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - var Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - var Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + var Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + var Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Orange, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if (type == 0x9B948) // Autoscroller waypoint { - Xmid = _api.MemLib.ReadS32(curObj + 0x24); - Ymid = _api.MemLib.ReadS32(curObj + 0x28); - var Xvec = ((Xmid + _api.MemLib.ReadS32(curObj + 0x54)) >> 16) - _camX; - var Yvec = ((Ymid + _api.MemLib.ReadS32(curObj + 0x58)) >> 16) - _camY; + Xmid = Mem.ReadS32(curObj + 0x24); + Ymid = Mem.ReadS32(curObj + 0x28); + var Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; + var Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; DrawBoxMWH(Xmid, Ymid, 8, 8, Color.Orange); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } else if (type == 0xA5448) // Bomb spawner { - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; - PutText($"{_api.MemLib.ReadU16(curObj + 0x6E)}", Xmid, Ymid, 1, 1, -1, -1, Color.White, Color.Blue); + Xmid = Mem.ReadS16(curObj + 0x24) - _camX; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; + PutText($"{Mem.ReadU16(curObj + 0x6E)}", Xmid, Ymid, 1, 1, -1, -1, Color.White, Color.Blue); } else if ((type == 0xA529C) || (type == 0xA5236) || (type == 0xA51E6)) // Explosion { - uint subObj = _api.MemLib.ReadU24(curObj + 5); + uint subObj = Mem.ReadU24(curObj + 5); if (subObj != 0) { - Xpos = _api.MemLib.ReadS16(subObj + 0x1C) - _camX; - Ypos = _api.MemLib.ReadS16(subObj + 0x28) - _camY; - int Width = _api.MemLib.ReadS16(subObj + 0x24) - Xpos - _camX; + Xpos = Mem.ReadS16(subObj + 0x1C) - _camX; + Ypos = Mem.ReadS16(subObj + 0x28) - _camY; + int Width = Mem.ReadS16(subObj + 0x24) - Xpos - _camX; DrawBoxMWH(Xpos, Ypos, Width, 16, Color.Red); } - subObj = _api.MemLib.ReadU24(curObj + 9); + subObj = Mem.ReadU24(curObj + 9); if (subObj != 0) { - Xpos = _api.MemLib.ReadS16(subObj + 0x1C) - _camX; - Ypos = _api.MemLib.ReadS16(subObj + 0x28) - _camY; - int Width = _api.MemLib.ReadS16(subObj + 0x24) - Xpos - _camX; + Xpos = Mem.ReadS16(subObj + 0x1C) - _camX; + Ypos = Mem.ReadS16(subObj + 0x28) - _camY; + int Width = Mem.ReadS16(subObj + 0x24) - Xpos - _camX; DrawBoxMWH(Xpos, Ypos, Width, 16, Color.Red); } } else if (type == 0x9B5D8) { - var subtype = _api.MemLib.ReadByte(curObj + 0x13); + var subtype = Mem.ReadByte(curObj + 0x13); int width = 0; int height = 0; switch (subtype) @@ -2568,10 +2585,10 @@ namespace BizHawk.Client.EmuHawk case 59: case 87: case 181: - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; - width = _api.MemLib.ReadS16(curObj + 0x44); - height = _api.MemLib.ReadS16(curObj + 0x48); + Xmid = Mem.ReadS16(curObj + 0x24) - _camX; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; + width = Mem.ReadS16(curObj + 0x44); + height = Mem.ReadS16(curObj + 0x48); DrawEccoOct(Xmid, Ymid, (width + height) >> 1, Color.Lime); break; case 71: @@ -2579,10 +2596,10 @@ namespace BizHawk.Client.EmuHawk case 158: case 159: case 165: - Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; - Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; + Ypos = Mem.ReadS16(curObj + 0x30) - _camY; + Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red); break; case 82: @@ -2590,71 +2607,71 @@ namespace BizHawk.Client.EmuHawk case 84: case 85: case 86: - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; - width = _api.MemLib.ReadS16(curObj + 0x44); - height = _api.MemLib.ReadS16(curObj + 0x48); + Xmid = Mem.ReadS16(curObj + 0x24) - _camX; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; + width = Mem.ReadS16(curObj + 0x44); + height = Mem.ReadS16(curObj + 0x48); DrawBoxMWH(Xmid, Ymid, width, height, Color.Red); break; case 210: - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; - width = _api.MemLib.ReadS16(curObj + 0x44); - height = _api.MemLib.ReadS16(curObj + 0x48); + Xmid = Mem.ReadS16(curObj + 0x24) - _camX; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; + width = Mem.ReadS16(curObj + 0x44); + height = Mem.ReadS16(curObj + 0x48); DrawBoxMWH(Xmid, Ymid, width, height, Color.Blue); break; case 107: - Xmid = (_api.MemLib.ReadS16(curObj + 0x18) << 7) - _camX + 0x40; - Ymid = (_api.MemLib.ReadS16(curObj + 0x1A) << 7) - _camY + 0x40; - Xpos = (_api.MemLib.ReadS16(curObj + 0x64) << 7) - _camX + 0x40; - Ypos = (_api.MemLib.ReadS16(curObj + 0x66) << 7) - _camY + 0x40; + Xmid = (Mem.ReadS16(curObj + 0x18) << 7) - _camX + 0x40; + Ymid = (Mem.ReadS16(curObj + 0x1A) << 7) - _camY + 0x40; + Xpos = (Mem.ReadS16(curObj + 0x64) << 7) - _camX + 0x40; + Ypos = (Mem.ReadS16(curObj + 0x66) << 7) - _camY + 0x40; DrawBoxMWH(Xmid, Ymid, 64, 64, Color.Orange, 0); DrawBoxMWH(Xpos, Ypos, 64, 64, Color.Orange, 0); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xpos, Ypos, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xpos, Ypos, Color.Orange); break; case 110: //Gravity conrol points case 179: - Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; - Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63,_api.MemLib.ReadByte(curObj + 0x15) == 0 ? Color.Gray : Color.Red)); + Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; + Ypos = Mem.ReadS16(curObj + 0x30) - _camY; + Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; + DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63,Mem.ReadByte(curObj + 0x15) == 0 ? Color.Gray : Color.Red)); DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red, 0); - int dir = _api.MemLib.ReadS8(curObj + 0x71) & 7; + int dir = Mem.ReadS8(curObj + 0x71) & 7; int[] xtable = { 7, 4, -3, -10, -14, -11, -3, 4}; int[] ytable = { 11, 4, 7, 4, -3, -11, -14, -11}; - Xmid = _api.MemLib.ReadS16(curObj + 0x24) - _camX; - Ymid = _api.MemLib.ReadS16(curObj + 0x28) - _camY; + Xmid = Mem.ReadS16(curObj + 0x24) - _camX; + Ymid = Mem.ReadS16(curObj + 0x28) - _camY; DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawImage(".\\dll\\gravitometer_bg.png", Xmid - 15, Ymid - 15); - _api.GUILib.DrawImage(".\\dll\\gravitometer_fg.png", Xmid + xtable[dir], Ymid + ytable[dir]); + Gui.DrawImage(".\\dll\\gravitometer_bg.png", Xmid - 15, Ymid - 15); + Gui.DrawImage(".\\dll\\gravitometer_fg.png", Xmid + xtable[dir], Ymid + ytable[dir]); break; case 176: - Xmid = (_api.MemLib.ReadS16(curObj + 0x18) << 7) - _camX + 0x40; - Ymid = (_api.MemLib.ReadS16(curObj + 0x1A) << 7) - _camY + 0x40; - Xpos = (_api.MemLib.ReadS16(curObj + 0x64) << 7) - _camX + 0x40; - Ypos = (_api.MemLib.ReadS16(curObj + 0x66) << 7) - _camY + 0x40; + Xmid = (Mem.ReadS16(curObj + 0x18) << 7) - _camX + 0x40; + Ymid = (Mem.ReadS16(curObj + 0x1A) << 7) - _camY + 0x40; + Xpos = (Mem.ReadS16(curObj + 0x64) << 7) - _camX + 0x40; + Ypos = (Mem.ReadS16(curObj + 0x66) << 7) - _camY + 0x40; DrawEccoOct(Xmid, Ymid, 32, Color.Orange, 0); DrawEccoOct(Xpos, Ypos, 32, Color.Orange, 0); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xpos, Ypos, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xpos, Ypos, Color.Orange); break; case 194: // Kill plane - Xpos = _api.MemLib.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34) - _camX; - Ypos = _api.MemLib.ReadS16(curObj + 0x30) - _camY; - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38) - _camY; + Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; + Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; + Ypos = Mem.ReadS16(curObj + 0x30) - _camY; + Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Black, 127); DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red, 0); break; default: - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2 = _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2 = _api.MemLib.ReadS16(curObj + 0x38); - Xmid = _api.MemLib.ReadS16(curObj + 0x24); - Ymid = _api.MemLib.ReadS16(curObj + 0x28); + Xpos = Mem.ReadS16(curObj + 0x2C); + Xpos2 = Mem.ReadS16(curObj + 0x34); + Ypos = Mem.ReadS16(curObj + 0x30); + Ypos2 = Mem.ReadS16(curObj + 0x38); + Xmid = Mem.ReadS16(curObj + 0x24); + Ymid = Mem.ReadS16(curObj + 0x28); Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid -= _camX; Ymid -= _camY; @@ -2666,58 +2683,58 @@ namespace BizHawk.Client.EmuHawk } else { - Xpos = _api.MemLib.ReadS16(curObj + 0x2C); - Xpos2= _api.MemLib.ReadS16(curObj + 0x34); - Ypos = _api.MemLib.ReadS16(curObj + 0x30); - Ypos2= _api.MemLib.ReadS16(curObj + 0x38); - Xmid = _api.MemLib.ReadS16(curObj + 0x24); - Ymid = _api.MemLib.ReadS16(curObj + 0x28); + Xpos = Mem.ReadS16(curObj + 0x2C); + Xpos2= Mem.ReadS16(curObj + 0x34); + Ypos = Mem.ReadS16(curObj + 0x30); + Ypos2= Mem.ReadS16(curObj + 0x38); + Xmid = Mem.ReadS16(curObj + 0x24); + Ymid = Mem.ReadS16(curObj + 0x28); Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid -= _camX; Ymid -= _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Cyan); - PutText($"{type:X5}:{_api.MemLib.ReadByte(curObj + 0x13)}", Xmid, Ymid - 4, 1, 1, -1, -9, Color.White, Color.Blue); + PutText($"{type:X5}:{Mem.ReadByte(curObj + 0x13)}", Xmid, Ymid - 4, 1, 1, -1, -9, Color.White, Color.Blue); PutText(curObj.ToString("X6"), Xmid, Ymid + 4, 1, 9, -1, -1, Color.White, Color.Blue); } - curObj = _api.MemLib.ReadU24(curObj+1); + curObj = Mem.ReadU24(curObj+1); } //Ecco head - Xpos = _api.MemLib.ReadS16(0xFFA8F8); - Xpos2 = _api.MemLib.ReadS16(0xFFA900); - Ypos = _api.MemLib.ReadS16(0xFFA8FC); - Ypos2 = _api.MemLib.ReadS16(0xFFA904); - Xmid = _api.MemLib.ReadS16(0xFFA8F0); - Ymid = _api.MemLib.ReadS16(0xFFA8F4); + Xpos = Mem.ReadS16(0xFFA8F8); + Xpos2 = Mem.ReadS16(0xFFA900); + Ypos = Mem.ReadS16(0xFFA8FC); + Ypos2 = Mem.ReadS16(0xFFA904); + Xmid = Mem.ReadS16(0xFFA8F0); + Ymid = Mem.ReadS16(0xFFA8F4); Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid -= _camX; Ymid -= _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.PowderBlue, 0); //Ecco tail - Xpos = _api.MemLib.ReadS16(0xFFA978); - Xpos2 = _api.MemLib.ReadS16(0xFFA980); - Ypos = _api.MemLib.ReadS16(0xFFA97C); - Ypos2 = _api.MemLib.ReadS16(0xFFA984); - Xmid = _api.MemLib.ReadS16(0xFFA970); - Ymid = _api.MemLib.ReadS16(0xFFA974); + Xpos = Mem.ReadS16(0xFFA978); + Xpos2 = Mem.ReadS16(0xFFA980); + Ypos = Mem.ReadS16(0xFFA97C); + Ypos2 = Mem.ReadS16(0xFFA984); + Xmid = Mem.ReadS16(0xFFA970); + Ymid = Mem.ReadS16(0xFFA974); Xpos -= _camX; Xpos2 -= _camX; Ypos -= _camY; Ypos2 -= _camY; Xmid -= _camX; Ymid -= _camY; DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.PowderBlue, 0); //Ecco body - Xpos = _api.MemLib.ReadS32(0xFFAA22); - Ypos = _api.MemLib.ReadS32(0xFFAA26); - Xpos2 = _api.MemLib.ReadS32(0xFFAA2A); - Ypos2 = _api.MemLib.ReadS32(0xFFAA2E); - Xmid = _api.MemLib.ReadS16(0xFFAA1A); - Ymid = _api.MemLib.ReadS16(0xFFAA1E); - int Xvel = _api.MemLib.ReadS32(0xFFAA36); - if (_api.MemLib.ReadU32(0xFFA9D6) > 7) Xvel += _api.MemLib.ReadS32(0xFFA9D6); - if (_api.MemLib.ReadU32(0xFFAA3E) > 7) Xvel += _api.MemLib.ReadS32(0xFFAA3E); - int Yvel = _api.MemLib.ReadS32(0xFFAA3A); - if (_api.MemLib.ReadU32(0xFFA9DA) > 7) Yvel += _api.MemLib.ReadS32(0xFFA9DA); - if (_api.MemLib.ReadU32(0xFFAA42) > 7) Yvel += _api.MemLib.ReadS32(0xFFAA42); + Xpos = Mem.ReadS32(0xFFAA22); + Ypos = Mem.ReadS32(0xFFAA26); + Xpos2 = Mem.ReadS32(0xFFAA2A); + Ypos2 = Mem.ReadS32(0xFFAA2E); + Xmid = Mem.ReadS16(0xFFAA1A); + Ymid = Mem.ReadS16(0xFFAA1E); + int Xvel = Mem.ReadS32(0xFFAA36); + if (Mem.ReadU32(0xFFA9D6) > 7) Xvel += Mem.ReadS32(0xFFA9D6); + if (Mem.ReadU32(0xFFAA3E) > 7) Xvel += Mem.ReadS32(0xFFAA3E); + int Yvel = Mem.ReadS32(0xFFAA3A); + if (Mem.ReadU32(0xFFA9DA) > 7) Yvel += Mem.ReadS32(0xFFA9DA); + if (Mem.ReadU32(0xFFAA42) > 7) Yvel += Mem.ReadS32(0xFFAA42); int XV = ((Xpos + Xvel) >> 16) - _camX; int YV = ((Ypos + Yvel) >> 16) - _camY; int XV2 = ((Xpos2 + Xvel) >> 16) - _camX; @@ -2733,58 +2750,58 @@ namespace BizHawk.Client.EmuHawk int X4 = (Xmid + X2) >> 1; int Y3 = (Ymid + Y) >> 1; int Y4 = (Ymid + Y2) >> 1; - _api.GUILib.DrawLine(X, Y, Xmid, Ymid, Color.Green); - _api.GUILib.DrawLine(Xmid, Ymid, X2, Y2, Color.Green); + Gui.DrawLine(X, Y, Xmid, Ymid, Color.Green); + Gui.DrawLine(Xmid, Ymid, X2, Y2, Color.Green); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Red); DrawBoxMWH(X, Y, 1, 1, Color.Lime); DrawBoxMWH(X2, Y2, 1, 1, Color.Blue); DrawBoxMWH(X3, Y3, 1, 1, Color.Yellow); DrawBoxMWH(X4, Y4, 1, 1, Color.Yellow); - _api.GUILib.DrawLine(X, Y, XV, YV, Color.Orange); - _api.GUILib.DrawLine(X2, Y2, XV2, YV2, Color.Orange); + Gui.DrawLine(X, Y, XV, YV, Color.Orange); + Gui.DrawLine(X2, Y2, XV2, YV2, Color.Orange); // sonar - if (_api.MemLib.ReadU8(0xFFAB77) != 0) + if (Mem.ReadU8(0xFFAB77) != 0) { - Xmid = _api.MemLib.ReadS32(0xFFA9EC); - Ymid = _api.MemLib.ReadS32(0xFFA9F0); - int Xvec = ((_api.MemLib.ReadS32(0xFFAA04) + Xmid) >> 16) - _camX; - int Yvec = ((_api.MemLib.ReadS32(0xFFAA08) + Ymid) >> 16) - _camY; + Xmid = Mem.ReadS32(0xFFA9EC); + Ymid = Mem.ReadS32(0xFFA9F0); + int Xvec = ((Mem.ReadS32(0xFFAA04) + Xmid) >> 16) - _camX; + int Yvec = ((Mem.ReadS32(0xFFAA08) + Ymid) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; - Width2 = _api.MemLib.ReadS16(0xFFA9FC); - Height2 = _api.MemLib.ReadS16(0xFFAA00); - color = ((_api.MemLib.ReadU8(0xFFAA0C) != 0) ? Color.FromArgb(255, 0, 127) : Color.FromArgb(0, 0, 255)); + Width2 = Mem.ReadS16(0xFFA9FC); + Height2 = Mem.ReadS16(0xFFAA00); + color = ((Mem.ReadU8(0xFFAA0C) != 0) ? Color.FromArgb(255, 0, 127) : Color.FromArgb(0, 0, 255)); DrawBoxMWH(Xmid, Ymid, Width2, Height2, color); DrawBoxMWH(Xmid, Ymid, 1, 1, color, 0); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } //Pulsar - curObj = _api.MemLib.ReadU24(0xFFCFD1); - if ((curObj != 0) && ((_api.MemLib.ReadU32(curObj + 0xC) == 0xC9222) || (_api.MemLib.ReadU32(curObj + 0xC) == 0xC9456))) + curObj = Mem.ReadU24(0xFFCFD1); + if ((curObj != 0) && ((Mem.ReadU32(curObj + 0xC) == 0xC9222) || (Mem.ReadU32(curObj + 0xC) == 0xC9456))) { curObj += 0x26; for (int l = 0; l < 4; l++) { - if (_api.MemLib.ReadU16(curObj + 0x12) != 0) + if (Mem.ReadU16(curObj + 0x12) != 0) { - Xmid = _api.MemLib.ReadS32(curObj); - Ymid = _api.MemLib.ReadS32(curObj + 4); - int Xvec = (Xmid + _api.MemLib.ReadS32(curObj + 8) >> 16) - _camX; - int Yvec = (Ymid + _api.MemLib.ReadS32(curObj + 0xC) >> 16) - _camY; + Xmid = Mem.ReadS32(curObj); + Ymid = Mem.ReadS32(curObj + 4); + int Xvec = (Xmid + Mem.ReadS32(curObj + 8) >> 16) - _camX; + int Yvec = (Ymid + Mem.ReadS32(curObj + 0xC) >> 16) - _camY; Xmid >>= 16; Ymid >>= 16; Xmid -= _camX; Ymid -= _camY; DrawBoxMWH(Xmid, Ymid, 0x30, 0x30, Color.Red); DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue); - _api.GUILib.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); + Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); } curObj += 0x14; } } //Water Level - int waterLevel = _api.MemLib.ReadS16(0xFFA7B2); - _api.GUILib.DrawLine(0, waterLevel - _camY, _left + 320 + _right, waterLevel - _camY, Color.Aqua); + int waterLevel = Mem.ReadS16(0xFFA7B2); + Gui.DrawLine(0, waterLevel - _camY, _left + 320 + _right, waterLevel - _camY, Color.Aqua); } @@ -2792,43 +2809,43 @@ namespace BizHawk.Client.EmuHawk { //Modif N - ECCO HACK - make caps lock (weirdly) autofire player 1's C key uint charge; - uint mode = _api.MemLib.ReadU8(0xFFA555); - int frameCount = _api.EmuLib.FrameCount(); - int lagCount = _api.EmuLib.LagCount(); - _api.JoypadLib.Set("Start", on, 1); + uint mode = Mem.ReadU8(0xFFA555); + int frameCount = Emu.FrameCount(); + int lagCount = Emu.LagCount(); + Joy.Set("Start", on, 1); switch (mode) { case 0x00: if (on) { - if (_api.MemLib.ReadU16(0xFFF342) == 0xFFFD) - _api.JoypadLib.Set("C", true, 1); + if (Mem.ReadU16(0xFFF342) == 0xFFFD) + Joy.Set("C", true, 1); else - _api.JoypadLib.Set("C", false, 1); + Joy.Set("C", false, 1); } break; case 0xE6: - if (_api.MemLib.ReadU16(0xFFD5E8) == 0x00000002) { + if (Mem.ReadU16(0xFFD5E8) == 0x00000002) { Dictionary buttons = new Dictionary(); buttons["B"] = buttons["C"] = true; - _api.JoypadLib.Set(buttons, 1); + Joy.Set(buttons, 1); } else { Dictionary buttons = new Dictionary(); buttons["B"] = buttons["C"] = false; - _api.JoypadLib.Set(buttons, 1); + Joy.Set(buttons, 1); } break; case 0xF6: - charge = _api.MemLib.ReadU8(0xFFB19B); + charge = Mem.ReadU8(0xFFB19B); if (on) { - if ((charge <= 1) && ((_api.MemLib.ReadU8(0xFFB1A6) == 0) || (_api.MemLib.ReadU8(0xFFB1A9) != 0))) - _api.JoypadLib.Set("B", true, 1); + if ((charge <= 1) && ((Mem.ReadU8(0xFFB1A6) == 0) || (Mem.ReadU8(0xFFB1A9) != 0))) + Joy.Set("B", true, 1); else if (charge > 1) - _api.JoypadLib.Set("B", false, 1); - _api.JoypadLib.Set("C", (_api.MemLib.ReadU16(0xFFA7C8) % 2) == 0, 1); + Joy.Set("B", false, 1); + Joy.Set("C", (Mem.ReadU16(0xFFA7C8) % 2) == 0, 1); } break; case 0x20: @@ -2836,19 +2853,19 @@ namespace BizHawk.Client.EmuHawk case 0xAC: if (on) { - if ((_api.MemLib.ReadU8(0xFFAB72) & 3) == 0) - _api.JoypadLib.Set("C", (_api.MemLib.ReadS8(0xFFAA6E) < 11), 1); + if ((Mem.ReadU8(0xFFAB72) & 3) == 0) + Joy.Set("C", (Mem.ReadS8(0xFFAA6E) < 11), 1); } break; default: break; } } - public override void Init(IPluginAPI api) + public override void Init(IApiContainer api) { base.Init(api); - _api.MemLib.SetBigEndian(); - string gameName = _api.GameInfoLib.GetRomName(); + Mem.SetBigEndian(); + string gameName = GI.GetRomName(); if ((gameName == "ECCO - The Tides of Time (J) [!]") || (gameName == "ECCO - The Tides of Time (U) [!]") || (gameName == "ECCO - The Tides of Time (E) [!]")) @@ -2858,7 +2875,7 @@ namespace BizHawk.Client.EmuHawk _camYAddr = 0xFFAD9E; _top = _bottom = 112; _left = _right = 160; - EmuHawkPluginLibrary.SetGameExtraPadding(_left, _top, _right, _bottom); + ClientApi.SetGameExtraPadding(_left, _top, _right, _bottom); } else if ((gameName == "ECCO The Dolphin (J) [!]") || (gameName == "ECCO The Dolphin (UE) [!]")) @@ -2869,7 +2886,7 @@ namespace BizHawk.Client.EmuHawk _camYAddr = 0xFFB834; _top = _bottom = 112; _left = _right = 160; - EmuHawkPluginLibrary.SetGameExtraPadding(_left, _top, _right, _bottom); + ClientApi.SetGameExtraPadding(_left, _top, _right, _bottom); } else { @@ -2879,48 +2896,47 @@ namespace BizHawk.Client.EmuHawk } private Color BackdropColor() { - uint color = _api.MemLib.ReadU16(0, "CRAM"); + uint color = Mem.ReadU16(0, "CRAM"); int r = (int)(( color & 0x7) * 0x22); int g = (int)(((color >> 3) & 0x7) * 0x22); int b = (int)(((color >> 6) & 0x7) * 0x22); return Color.FromArgb(r, g, b); - } public override void PreFrameCallback() { - _api.GUILib.ClearText(); + Gui.ClearText(); if (_mode != Modes.disabled) { - _camX = _api.MemLib.ReadS16(_camXAddr) - _left; - _camY = _api.MemLib.ReadS16(_camYAddr) - _top; - EccoAutofire(_api.JoypadLib.Get(1)["Start"]); + _camX = Mem.ReadS16(_camXAddr) - _left; + _camY = Mem.ReadS16(_camYAddr) - _top; + EccoAutofire(Joy.Get(1)["Start"]); if (_dumpMap == 0) { Color bg = BackdropColor(); - _api.GUILib.DrawRectangle(0, 0, _left + 320 + _right, _top, bg, bg); - _api.GUILib.DrawRectangle(0, 0, _left, _top + 224 + _bottom, bg, bg); - _api.GUILib.DrawRectangle(_left + 320, 0, _left + 320 + _right, _top + 224 + _bottom, bg, bg); - _api.GUILib.DrawRectangle(0, _top + 224, _left + 320 + _right, _top + 224 + _bottom, bg, bg); + Gui.DrawRectangle(0, 0, _left + 320 + _right, _top, bg, bg); + Gui.DrawRectangle(0, 0, _left, _top + 224 + _bottom, bg, bg); + Gui.DrawRectangle(_left + 320, 0, _left + 320 + _right, _top + 224 + _bottom, bg, bg); + Gui.DrawRectangle(0, _top + 224, _left + 320 + _right, _top + 224 + _bottom, bg, bg); } - uint mode = _api.MemLib.ReadByte(0xFFA555); + uint mode = Mem.ReadByte(0xFFA555); switch (mode) { case 0x20: case 0x28: case 0xAC: - //EmuHawkPluginLibrary.SetGameExtraPadding(160, 112, 160, 112); + //ClientApi.SetGameExtraPadding(160, 112, 160, 112); if (_dumpMap <= 1) EccoDrawBoxes(); // Uncomment the following block to enable mapdumping - if ((_api.MemLib.ReadU16(0xFFA7C8) > 1) && (_api.MemLib.ReadU16(0xFFA7C8) < 4)) + if ((Mem.ReadU16(0xFFA7C8) > 1) && (Mem.ReadU16(0xFFA7C8) < 4)) { _dumpMap = 1; _rowStateGuid = string.Empty; _top = _bottom = _left = _right = 0; - EmuHawkPluginLibrary.SetGameExtraPadding(0, 0, 0, 0); + ClientApi.SetGameExtraPadding(0, 0, 0, 0); } if (_dumpMap == 3) { - var levelID = _api.MemLib.ReadS8(0xFFA7D0); + var levelID = Mem.ReadS8(0xFFA7D0); int[] nameGroupLengths = { 7,1,11,6, @@ -2946,15 +2962,15 @@ namespace BizHawk.Client.EmuHawk if (i < 0) { i += nameGroupLengths[nameGroup]; - uint strOffset = _api.MemLib.ReadU32(nameStringPtrOffsets[nameGroup] + 0x2E); + uint strOffset = Mem.ReadU32(nameStringPtrOffsets[nameGroup] + 0x2E); Console.WriteLine($"{i}"); - strOffset = _api.MemLib.ReadU32(strOffset + ((i << 3) + (i << 5)) + 0x22); + strOffset = Mem.ReadU32(strOffset + ((i << 3) + (i << 5)) + 0x22); strOffset += 0x20; List strTmp = new List(); byte c; do { - c = (byte)_api.MemLib.ReadByte(strOffset++); + c = (byte)Mem.ReadByte(strOffset++); if (c != 0) strTmp.Add(c); } while (c != 0); @@ -2962,14 +2978,14 @@ namespace BizHawk.Client.EmuHawk TextInfo textInfo = new CultureInfo("en-US", false).TextInfo; name = textInfo.ToTitleCase(name).Replace(" ", string.Empty); } - EmuHawkPluginLibrary.Screenshot($"c:\\Ecco2Maps\\{levelID}_{name}_top.png"); + ClientApi.Screenshot($"c:\\Ecco2Maps\\{levelID}_{name}_top.png"); _destX = _destY = 0; - EmuHawkPluginLibrary.SetGameExtraPadding(0, 0, 0, 0); + ClientApi.SetGameExtraPadding(0, 0, 0, 0); _dumpMap++; } if (_dumpMap == 6) { - var levelID = _api.MemLib.ReadS8(0xFFA7D0); + var levelID = Mem.ReadS8(0xFFA7D0); int[] nameGroupLengths = { 7,1,11,6, @@ -2995,15 +3011,15 @@ namespace BizHawk.Client.EmuHawk if (i < 0) { i += nameGroupLengths[nameGroup]; - uint strOffset = _api.MemLib.ReadU32(nameStringPtrOffsets[nameGroup] + 0x2E); + uint strOffset = Mem.ReadU32(nameStringPtrOffsets[nameGroup] + 0x2E); Console.WriteLine($"{i}"); - strOffset = _api.MemLib.ReadU32(strOffset + ((i << 3) + (i << 5)) + 0x22); + strOffset = Mem.ReadU32(strOffset + ((i << 3) + (i << 5)) + 0x22); strOffset += 0x20; List strTmp = new List(); byte c; do { - c = (byte)_api.MemLib.ReadByte(strOffset++); + c = (byte)Mem.ReadByte(strOffset++); if (c != 0) strTmp.Add(c); } while (c != 0); @@ -3011,11 +3027,11 @@ namespace BizHawk.Client.EmuHawk TextInfo textInfo = new CultureInfo("en-US", false).TextInfo; name = textInfo.ToTitleCase(name).Replace(" ", string.Empty); } - EmuHawkPluginLibrary.Screenshot($"c:\\Ecco2Maps\\{levelID}_{name}_bottom.png"); + ClientApi.Screenshot($"c:\\Ecco2Maps\\{levelID}_{name}_bottom.png"); _destX = _destY = 0; _left = _right = 160; _top = _bottom = 112; - EmuHawkPluginLibrary.SetGameExtraPadding(_left, _top, _right, _bottom); + ClientApi.SetGameExtraPadding(_left, _top, _right, _bottom); _dumpMap = 0; } break; @@ -3025,52 +3041,52 @@ namespace BizHawk.Client.EmuHawk default: break; } - _prevF = _api.MemLib.ReadU32(0xFFA524); + _prevF = Mem.ReadU32(0xFFA524); } } public override void PostFrameCallback() { - uint frame = _api.MemLib.ReadU32(0xFFA524); - if ((frame <= _prevF) && !_api.EmuLib.IsLagged()) + uint frame = Mem.ReadU32(0xFFA524); + if ((frame <= _prevF) && !Emu.IsLagged()) { - _api.EmuLib.SetIsLagged(true); - _api.EmuLib.SetLagCount(_api.EmuLib.LagCount() + 1); + Emu.SetIsLagged(true); + Emu.SetLagCount(Emu.LagCount() + 1); } - uint mode = _api.MemLib.ReadByte(0xFFA555); + uint mode = Mem.ReadByte(0xFFA555); _tickerY = 81; - string valueTicker = $"{_api.MemLib.ReadU32(0xFFA520)}:{_api.MemLib.ReadU32(0xFFA524)}:{_api.MemLib.ReadU16(0xFFA7C8)}:{mode:X2}"; + string valueTicker = $"{Mem.ReadU32(0xFFA520)}:{Mem.ReadU32(0xFFA524)}:{Mem.ReadU16(0xFFA7C8)}:{mode:X2}"; TickerText(valueTicker); switch (mode) { case 0x20: case 0x28: case 0xAC: - valueTicker = $"{_api.MemLib.ReadS16(0xFFAD9C)}:{_api.MemLib.ReadS16(0xFFAD9E)}"; + valueTicker = $"{Mem.ReadS16(0xFFAD9C)}:{Mem.ReadS16(0xFFAD9E)}"; TickerText(valueTicker); - valueTicker = $"{_api.MemLib.ReadS32(0xFFAA1A) / 65536.0:0.######}:{_api.MemLib.ReadS32(0xFFAA1E) / 65536.0:0.######}"; + valueTicker = $"{Mem.ReadS32(0xFFAA1A) / 65536.0:0.######}:{Mem.ReadS32(0xFFAA1E) / 65536.0:0.######}"; TickerText(valueTicker); - valueTicker = $"{_api.MemLib.ReadS32(0xFFAA32) / 65536.0:0.######}:{_api.MemLib.ReadU8(0xFFAA6D)}:{_api.MemLib.ReadU8(0xFFAA6E)}"; + valueTicker = $"{Mem.ReadS32(0xFFAA32) / 65536.0:0.######}:{Mem.ReadU8(0xFFAA6D)}:{Mem.ReadU8(0xFFAA6E)}"; TickerText(valueTicker); - valueTicker = $"{_api.MemLib.ReadS32(0xFFAA36) / 65536.0:0.######}:{_api.MemLib.ReadS32(0xFFAA3A) / 65536.0:0.######}"; + valueTicker = $"{Mem.ReadS32(0xFFAA36) / 65536.0:0.######}:{Mem.ReadS32(0xFFAA3A) / 65536.0:0.######}"; TickerText(valueTicker); - valueTicker = $"{_api.MemLib.ReadS32(0xFFA9D6) / 65536.0:0.######}:{_api.MemLib.ReadS32(0xFFA9DA) / 65536.0:0.######}"; + valueTicker = $"{Mem.ReadS32(0xFFA9D6) / 65536.0:0.######}:{Mem.ReadS32(0xFFA9DA) / 65536.0:0.######}"; TickerText(valueTicker); - valueTicker = $"{_api.MemLib.ReadS32(0xFFAA3E) / 65536.0:0.######}:{_api.MemLib.ReadS32(0xFFAA42) / 65536.0:0.######}"; + valueTicker = $"{Mem.ReadS32(0xFFAA3E) / 65536.0:0.######}:{Mem.ReadS32(0xFFAA42) / 65536.0:0.######}"; TickerText(valueTicker); - valueTicker = $"{(_api.MemLib.ReadS32(0xFFAA36) + _api.MemLib.ReadS32(0xFFA9D6) + _api.MemLib.ReadS32(0xFFAA3E)) / 65536.0:0.######}:" + - $"{(_api.MemLib.ReadS32(0xFFAA3A) + _api.MemLib.ReadS32(0xFFA9DA) + _api.MemLib.ReadS32(0xFFAA42)) / 65536.0:0.######}"; + valueTicker = $"{(Mem.ReadS32(0xFFAA36) + Mem.ReadS32(0xFFA9D6) + Mem.ReadS32(0xFFAA3E)) / 65536.0:0.######}:" + + $"{(Mem.ReadS32(0xFFAA3A) + Mem.ReadS32(0xFFA9DA) + Mem.ReadS32(0xFFAA42)) / 65536.0:0.######}"; TickerText(valueTicker); - valueTicker = $"{_api.MemLib.ReadU8(0xFFAB72)}:{_api.MemLib.ReadU8(0xFFAB70)}:{(short)_api.MemLib.ReadS16(0xFFAA52):X4}:{(short)_api.MemLib.ReadS16(0xFFAA5A):X4}"; + valueTicker = $"{Mem.ReadU8(0xFFAB72)}:{Mem.ReadU8(0xFFAB70)}:{(short)Mem.ReadS16(0xFFAA52):X4}:{(short)Mem.ReadS16(0xFFAA5A):X4}"; TickerText(valueTicker); - switch (_api.MemLib.ReadU8(0xFFA7D0)) + switch (Mem.ReadU8(0xFFA7D0)) { case 1: case 2: case 3: case 30: case 46: - var globeFlags = _api.MemLib.ReadU32(0xFFD434) >> 1; - var globeFlags2 = _api.MemLib.ReadU32(0xFFD438) >> 1; + var globeFlags = Mem.ReadU32(0xFFD434) >> 1; + var globeFlags2 = Mem.ReadU32(0xFFD438) >> 1; int i, j = i = 0; while (globeFlags > 0) { @@ -3089,33 +3105,33 @@ namespace BizHawk.Client.EmuHawk } if (_dumpMap != 0) { - _api.MemLib.WriteS16(0xFFAA16, 7); - _api.MemLib.WriteS16(0xFFAA18, 56); - int PlayerX = _api.MemLib.ReadS16(0xFFAA1A) - _camX; - int PlayerY = _api.MemLib.ReadS16(0xFFAA1E) - _camY; + Mem.WriteS16(0xFFAA16, 7); + Mem.WriteS16(0xFFAA18, 56); + int PlayerX = Mem.ReadS16(0xFFAA1A) - _camX; + int PlayerY = Mem.ReadS16(0xFFAA1E) - _camY; if ((PlayerX < -64) || (PlayerX > 384) || (PlayerY < -64) || (PlayerY > 288)) { - _api.MemLib.WriteByte(0xFFAA70, 0xC); - _api.MemLib.WriteS16(0xFFA7CA, 1); + Mem.WriteByte(0xFFAA70, 0xC); + Mem.WriteS16(0xFFA7CA, 1); } else { - _api.MemLib.WriteByte(0xFFAA70, 0x0); - _api.MemLib.WriteS16(0xFFA7CA, 0); + Mem.WriteByte(0xFFAA70, 0x0); + Mem.WriteS16(0xFFA7CA, 0); } } if (_dumpMap == 1) { - int levelWidth = _api.MemLib.ReadS16(0xFFA7A8); - int levelHeight = _api.MemLib.ReadS16(0xFFA7AC); - var levelID = _api.MemLib.ReadByte(0xFFA7D0); - var s = _api.EmuLib.GetSettings() as GPGX.GPGXSettings; + int levelWidth = Mem.ReadS16(0xFFA7A8); + int levelHeight = Mem.ReadS16(0xFFA7AC); + var levelID = Mem.ReadByte(0xFFA7D0); + var s = Emu.GetSettings() as GPGX.GPGXSettings; s.DrawBGA = false; s.DrawBGB = false; s.DrawBGW = false; s.DrawObj = false; s.Backdrop = true; - _api.EmuLib.PutSettings(s); + Emu.PutSettings(s); if ((_camX == _destX) && (_camY == _destY)) { if ((_prevX != _camX) || (_prevY != _camY)) @@ -3124,9 +3140,9 @@ namespace BizHawk.Client.EmuHawk { if (_rowStateGuid != string.Empty) { - _api.MemStateLib.DeleteState(_rowStateGuid); + MemSS.DeleteState(_rowStateGuid); } - _rowStateGuid = _api.MemStateLib.SaveCoreStateToMemory(); + _rowStateGuid = MemSS.SaveCoreStateToMemory(); } _snapPast = 1; } @@ -3136,14 +3152,14 @@ namespace BizHawk.Client.EmuHawk } if (_snapPast == 0) { - EmuHawkPluginLibrary.Screenshot($"c:\\Ecco2Maps\\{levelID}\\{_destY}_{_destX}_top.png"); + ClientApi.Screenshot($"c:\\Ecco2Maps\\{levelID}\\{_destY}_{_destX}_top.png"); if (_destX >= levelWidth - 320) { if (_destY < levelHeight - 224) { if (_rowStateGuid != string.Empty) { - _api.MemStateLib.LoadCoreStateFromMemory(_rowStateGuid); + MemSS.LoadCoreStateFromMemory(_rowStateGuid); } _destX = 0; _destY = Math.Min(_destY + 111, levelHeight - 224); @@ -3153,70 +3169,70 @@ namespace BizHawk.Client.EmuHawk _destX = Math.Min(_destX + 159, levelWidth - 320); if ((_prevX == _destX) && (_prevY == _destY)) { - EmuHawkPluginLibrary.SetGameExtraPadding(levelWidth - 320, levelHeight - 224, 0, 0); + ClientApi.SetGameExtraPadding(levelWidth - 320, levelHeight - 224, 0, 0); _dumpMap++; } } } - _api.MemLib.WriteS16(0xFFAD8C, _destX); - _api.MemLib.WriteS16(0xFFAD90, _destY); + Mem.WriteS16(0xFFAD8C, _destX); + Mem.WriteS16(0xFFAD90, _destY); } else if (_dumpMap == 2) { if (_rowStateGuid != String.Empty) - _api.MemStateLib.DeleteState(_rowStateGuid); + MemSS.DeleteState(_rowStateGuid); _rowStateGuid = String.Empty; - int levelWidth = _api.MemLib.ReadS16(0xFFA7A8); - int levelHeight = _api.MemLib.ReadS16(0xFFA7AC); - EmuHawkPluginLibrary.SetGameExtraPadding(levelWidth - 320, levelHeight - 224, 0, 0); - var levelID = _api.MemLib.ReadS8(0xFFA7D0); - var s = _api.EmuLib.GetSettings() as GPGX.GPGXSettings; + int levelWidth = Mem.ReadS16(0xFFA7A8); + int levelHeight = Mem.ReadS16(0xFFA7AC); + ClientApi.SetGameExtraPadding(levelWidth - 320, levelHeight - 224, 0, 0); + var levelID = Mem.ReadS8(0xFFA7D0); + var s = Emu.GetSettings() as GPGX.GPGXSettings; s.DrawBGA = false; s.DrawBGB = false; s.DrawBGW = false; s.DrawObj = false; s.Backdrop = true; - _api.EmuLib.PutSettings(s); + Emu.PutSettings(s); - var a = _api.GUILib.GetAttributes(); + var a = Gui.GetAttributes(); a.SetColorKey(Color.FromArgb(0, 0x11, 0x22, 0x33), Color.FromArgb(0, 0x11, 0x22, 0x33)); - _api.GUILib.SetAttributes(a); - _api.GUILib.ToggleCompositingMode(); + Gui.SetAttributes(a); + Gui.ToggleCompositingMode(); - _api.GUILib.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{levelHeight - 224}_{levelWidth - 320}_top.png", 2, 2, 318, 222, (levelWidth - 318), (levelHeight - 222), 318, 222); + Gui.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{levelHeight - 224}_{levelWidth - 320}_top.png", 2, 2, 318, 222, (levelWidth - 318), (levelHeight - 222), 318, 222); for (int x = ((levelWidth - 320) / 159) * 159; x >= 0; x -= 159) { var dx = (x == 0) ? 0 : 2; - _api.GUILib.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{levelHeight - 224}_{x}_top.png", dx, 2, 320 - dx, 222, x + dx, (levelHeight - 222), 320 - dx, 222); + Gui.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{levelHeight - 224}_{x}_top.png", dx, 2, 320 - dx, 222, x + dx, (levelHeight - 222), 320 - dx, 222); } for (int y = ((levelHeight - 224) / 111) * 111; y >= 0; y -= 111) { var dy = (y == 0) ? 0 : 2; - _api.GUILib.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{y}_{levelWidth - 320}_top.png", 2, dy, 318, 224 - 2, levelWidth - 318, y + dy, 318, 224 - dy); + Gui.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{y}_{levelWidth - 320}_top.png", 2, dy, 318, 224 - 2, levelWidth - 318, y + dy, 318, 224 - dy); for (int x = ((levelWidth - 320) / 159) * 159; x >= 0; x -= 159) { var dx = (x == 0) ? 0 : 2; - _api.GUILib.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{y}_{x}_top.png", dx, dy, 320 - dx, 224 - dy, x + dx, y + dy, 320 - dx, 224 - dy); + Gui.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{y}_{x}_top.png", dx, dy, 320 - dx, 224 - dy, x + dx, y + dy, 320 - dx, 224 - dy); } } - _api.GUILib.ToggleCompositingMode(); - _api.GUILib.SetAttributes(new System.Drawing.Imaging.ImageAttributes()); - _api.GUILib.DrawFinish(); + Gui.ToggleCompositingMode(); + Gui.SetAttributes(new System.Drawing.Imaging.ImageAttributes()); + Gui.DrawFinish(); _dumpMap++; } else if (_dumpMap == 4) { - int levelWidth = _api.MemLib.ReadS16(0xFFA7A8); - int levelHeight = _api.MemLib.ReadS16(0xFFA7AC); - var levelID = _api.MemLib.ReadByte(0xFFA7D0); - var s = _api.EmuLib.GetSettings() as GPGX.GPGXSettings; + int levelWidth = Mem.ReadS16(0xFFA7A8); + int levelHeight = Mem.ReadS16(0xFFA7AC); + var levelID = Mem.ReadByte(0xFFA7D0); + var s = Emu.GetSettings() as GPGX.GPGXSettings; s.DrawBGA = (levelID != 29); s.DrawBGB = (levelID == 7); s.DrawBGW = true; s.DrawObj = true; s.Backdrop = false; - _api.EmuLib.PutSettings(s); + Emu.PutSettings(s); if ((_camX == _destX) && (_camY == _destY)) { if ((_prevX != _camX) || (_prevY != _camY)) @@ -3225,9 +3241,9 @@ namespace BizHawk.Client.EmuHawk { if (_rowStateGuid != string.Empty) { - _api.MemStateLib.DeleteState(_rowStateGuid); + MemSS.DeleteState(_rowStateGuid); } - _rowStateGuid = _api.MemStateLib.SaveCoreStateToMemory(); + _rowStateGuid = MemSS.SaveCoreStateToMemory(); } _snapPast = 1; } @@ -3237,14 +3253,14 @@ namespace BizHawk.Client.EmuHawk } if (_snapPast == 0) { - EmuHawkPluginLibrary.Screenshot($"c:\\Ecco2Maps\\{levelID}\\{_destY}_{_destX}_bottom.png"); + ClientApi.Screenshot($"c:\\Ecco2Maps\\{levelID}\\{_destY}_{_destX}_bottom.png"); if (_destX >= levelWidth - 320) { if (_destY < levelHeight - 224) { if (_rowStateGuid != string.Empty) { - _api.MemStateLib.LoadCoreStateFromMemory(_rowStateGuid); + MemSS.LoadCoreStateFromMemory(_rowStateGuid); } _destX = 0; _destY = Math.Min(_destY + 111, levelHeight - 224); @@ -3254,80 +3270,80 @@ namespace BizHawk.Client.EmuHawk _destX = Math.Min(_destX + 159, levelWidth - 320); if ((_prevX == _destX) && (_prevY == _destY)) { - EmuHawkPluginLibrary.SetGameExtraPadding(levelWidth - 320, levelHeight - 224, 0, 0); + ClientApi.SetGameExtraPadding(levelWidth - 320, levelHeight - 224, 0, 0); _dumpMap++; } } } - _api.MemLib.WriteS16(0xFFAD8C, _destX); - _api.MemLib.WriteS16(0xFFAD90, _destY); + Mem.WriteS16(0xFFAD8C, _destX); + Mem.WriteS16(0xFFAD90, _destY); } else if (_dumpMap == 5) { if (_rowStateGuid != String.Empty) - _api.MemStateLib.DeleteState(_rowStateGuid); + MemSS.DeleteState(_rowStateGuid); _rowStateGuid = String.Empty; - int levelWidth = _api.MemLib.ReadS16(0xFFA7A8); - int levelHeight = _api.MemLib.ReadS16(0xFFA7AC); - var levelID = _api.MemLib.ReadS8(0xFFA7D0); - var s = _api.EmuLib.GetSettings() as GPGX.GPGXSettings; + int levelWidth = Mem.ReadS16(0xFFA7A8); + int levelHeight = Mem.ReadS16(0xFFA7AC); + var levelID = Mem.ReadS8(0xFFA7D0); + var s = Emu.GetSettings() as GPGX.GPGXSettings; s.DrawBGA = (levelID != 29); s.DrawBGB = (levelID == 7); s.DrawBGW = true; s.DrawObj = true; s.Backdrop = false; - _api.EmuLib.PutSettings(s); - _api.GUILib.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{levelHeight - 224}_{levelWidth - 320}_bottom.png", 2, 2, 318, 222, (levelWidth - 318), (levelHeight - 222), 318, 222); + Emu.PutSettings(s); + Gui.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{levelHeight - 224}_{levelWidth - 320}_bottom.png", 2, 2, 318, 222, (levelWidth - 318), (levelHeight - 222), 318, 222); for (int x = ((levelWidth - 320) / 159) * 159; x >= 0; x -= 159) { var dx = (x == 0) ? 0 : 2; - _api.GUILib.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{levelHeight - 224}_{x}_bottom.png", dx, 2, 320 - dx, 222, x + dx, (levelHeight - 222), 320 - dx, 222); + Gui.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{levelHeight - 224}_{x}_bottom.png", dx, 2, 320 - dx, 222, x + dx, (levelHeight - 222), 320 - dx, 222); } for (int y = ((levelHeight - 224) / 111) * 111; y >= 0; y -= 111) { var dy = (y == 0) ? 0 : 2; - _api.GUILib.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{y}_{levelWidth - 320}_bottom.png", 2, dy, 318, 224 - 2, levelWidth - 318, y + dy, 318, 224 - dy); + Gui.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{y}_{levelWidth - 320}_bottom.png", 2, dy, 318, 224 - 2, levelWidth - 318, y + dy, 318, 224 - dy); for (int x = ((levelWidth - 320) / 159) * 159; x >= 0; x -= 159) { var dx = (x == 0) ? 0 : 2; - _api.GUILib.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{y}_{x}_bottom.png", dx, dy, 320 - dx, 224 - dy, x + dx, y + dy, 320 - dx, 224 - dy); + Gui.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{y}_{x}_bottom.png", dx, dy, 320 - dx, 224 - dy, x + dx, y + dy, 320 - dx, 224 - dy); } } - _api.GUILib.DrawFinish(); + Gui.DrawFinish(); _dumpMap++; } _prevX = _camX; _prevY = _camY; break; case 0xF6: - valueTicker = $"{_api.MemLib.ReadS32(0xFFD5E0) / 4096.0:0.######}:{_api.MemLib.ReadS32(0xFFD5E8) / 4096.0:0.######}:{_api.MemLib.ReadS32(0xFFD5E4) / 2048.0:0.######}"; + valueTicker = $"{Mem.ReadS32(0xFFD5E0) / 4096.0:0.######}:{Mem.ReadS32(0xFFD5E8) / 4096.0:0.######}:{Mem.ReadS32(0xFFD5E4) / 2048.0:0.######}"; TickerText(valueTicker); - valueTicker = $"{_api.MemLib.ReadS32(0xFFB13A) / 4096.0:0.######}:{_api.MemLib.ReadS32(0xFFB142) / 4096.0:0.######}:{_api.MemLib.ReadS32(0xFFB13E) / 2048.0:0.######}"; + valueTicker = $"{Mem.ReadS32(0xFFB13A) / 4096.0:0.######}:{Mem.ReadS32(0xFFB142) / 4096.0:0.######}:{Mem.ReadS32(0xFFB13E) / 2048.0:0.######}"; TickerText(valueTicker); - valueTicker = $"{_api.MemLib.ReadS32(0xFFB162) / 4096.0:0.######}:{_api.MemLib.ReadS32(0xFFB16A) / 4096.0:0.######}:{_api.MemLib.ReadS32(0xFFB166) / 2048.0:0.######}"; + valueTicker = $"{Mem.ReadS32(0xFFB162) / 4096.0:0.######}:{Mem.ReadS32(0xFFB16A) / 4096.0:0.######}:{Mem.ReadS32(0xFFB166) / 2048.0:0.######}"; TickerText(valueTicker); - valueTicker = $"{_api.MemLib.ReadU8(0xFFB19B)}:{_api.MemLib.ReadU8(0xFFB1A6)}:{_api.MemLib.ReadU8(0xFFB1A9)}"; + valueTicker = $"{Mem.ReadU8(0xFFB19B)}:{Mem.ReadU8(0xFFB1A6)}:{Mem.ReadU8(0xFFB1A9)}"; TickerText(valueTicker); - int SpawnZ = _api.MemLib.ReadS32(0xFFD5F0) + 0x180000; + int SpawnZ = Mem.ReadS32(0xFFD5F0) + 0x180000; int nextRingZ = SpawnZ; while (((nextRingZ >> 17) & 0xF) != 0) { nextRingZ += 0x20000; } - valueTicker = $"{_api.MemLib.ReadS32(0xFFD856) / 4096.0:0.######}:{_api.MemLib.ReadS32(0xFFD85A) / 4096.0:0.######}:{(nextRingZ - 0x160000) / 2048.0:0.######}:{nextRingZ / 2048.0:0.######}"; + valueTicker = $"{Mem.ReadS32(0xFFD856) / 4096.0:0.######}:{Mem.ReadS32(0xFFD85A) / 4096.0:0.######}:{(nextRingZ - 0x160000) / 2048.0:0.######}:{nextRingZ / 2048.0:0.######}"; TickerText(valueTicker); - var levelId = -1 - _api.MemLib.ReadS16(0xFFA79E); + var levelId = -1 - Mem.ReadS16(0xFFA79E); bool spawn = false; bool firstRand = true; int SpawnX, SpawnY, z; - int CamX = (_api.MemLib.ReadS32(0xFFD5E0) >> 0xC) - _left; - int CamY = (_api.MemLib.ReadS32(0xFFD5E8) >> 0xC) + _top; - int CamZ = (_api.MemLib.ReadS32(0xFFD5E4) >> 0xC) + _top; + int CamX = (Mem.ReadS32(0xFFD5E0) >> 0xC) - _left; + int CamY = (Mem.ReadS32(0xFFD5E8) >> 0xC) + _top; + int CamZ = (Mem.ReadS32(0xFFD5E4) >> 0xC) + _top; while (!spawn) { var temp = (SpawnZ >> 17) & 0xFF; - var controlList = _api.MemLib.ReadS32(0x7B54 + (levelId << 2)); - temp = _api.MemLib.ReadS16(controlList + (temp << 1)); + var controlList = Mem.ReadS32(0x7B54 + (levelId << 2)); + temp = Mem.ReadS16(controlList + (temp << 1)); var v = temp & 0xFF; var num = (temp >> 8) + v; temp = v; @@ -3343,7 +3359,7 @@ namespace BizHawk.Client.EmuHawk break; case 2: // Jellyfish - SpawnX = _api.MemLib.ReadS32(0xFFB13A) + 0x40000 - (EccoRand(firstRand) << 3); + SpawnX = Mem.ReadS32(0xFFB13A) + 0x40000 - (EccoRand(firstRand) << 3); firstRand = false; SpawnY = -0xC0000 + (EccoRand() << 3); z = SpawnZ + 0x20000;// ? @@ -3357,7 +3373,7 @@ namespace BizHawk.Client.EmuHawk break; case 3: // Eagle - SpawnX = _api.MemLib.ReadS32(0xFFB13A) + 0x40000 - (EccoRand(firstRand) << 3); + SpawnX = Mem.ReadS32(0xFFB13A) + 0x40000 - (EccoRand(firstRand) << 3); firstRand = false; SpawnY = 0x50000; z = SpawnZ - 0x40000 + 0x20000;// ? @@ -3374,8 +3390,8 @@ namespace BizHawk.Client.EmuHawk bool left = (EccoRand(firstRand) > 0x8000); firstRand = false; var xdiff = 0xC0000 + (EccoRand() << 3); - SpawnX = _api.MemLib.ReadS32(0xFFB13A) + (left ? -xdiff : xdiff); - SpawnY = Math.Min(_api.MemLib.ReadS32(0xFFB142), -0x10000) - (EccoRand() + 0x10000); + SpawnX = Mem.ReadS32(0xFFB13A) + (left ? -xdiff : xdiff); + SpawnY = Math.Min(Mem.ReadS32(0xFFB142), -0x10000) - (EccoRand() + 0x10000); z = SpawnZ + 0x20000; valueTicker = $"{SpawnX / 4096.0:0.######}:{SpawnY / 4096.0:0.######}:{(z - 0x180000) / 2048.0:0.######}:{z / 2048.0:0.######}"; TickerText(valueTicker); @@ -3406,7 +3422,7 @@ namespace BizHawk.Client.EmuHawk break; case 14: // Shell - SpawnX = _api.MemLib.ReadS32(0xFFB13A) - 0x20000 + (EccoRand(firstRand) << 2); + SpawnX = Mem.ReadS32(0xFFB13A) - 0x20000 + (EccoRand(firstRand) << 2); firstRand = false; SpawnY = -0x80000; z = SpawnZ + 0x20000; @@ -3425,16 +3441,16 @@ namespace BizHawk.Client.EmuHawk } break; } - _api.JoypadLib.Set("C", null, 1); - _api.JoypadLib.Set("Start", null, 1); - var color = _turnSignalColors[_api.MemLib.ReadS8(0xFFA7C9) & 7]; - _api.GUILib.DrawRectangle(_left - 48, _top - 112, 15, 15, color, color); + Joy.Set("C", null, 1); + Joy.Set("Start", null, 1); + var color = _turnSignalColors[Mem.ReadS8(0xFFA7C9) & 7]; + Gui.DrawRectangle(_left - 48, _top - 112, 15, 15, color, color); } public override void LoadStateCallback(string name) { - _api.GUILib.DrawNew("emu"); + Gui.DrawNew("emu"); PreFrameCallback(); - _api.GUILib.DrawFinish(); + Gui.DrawFinish(); } } } diff --git a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Communications.cs b/BizHawk.Client.EmuHawk/Api/Libraries/CommApi.cs similarity index 95% rename from BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Communications.cs rename to BizHawk.Client.EmuHawk/Api/Libraries/CommApi.cs index 43012c1817..152658c639 100644 --- a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Communications.cs +++ b/BizHawk.Client.EmuHawk/Api/Libraries/CommApi.cs @@ -2,7 +2,7 @@ using System.ComponentModel; using BizHawk.Emulation.Common; -using BizHawk.Client.Common; +using BizHawk.Client.ApiHawk; using System.Text; using System.Collections.Generic; using System.Net.Http; @@ -11,7 +11,7 @@ using System.Windows.Forms; namespace BizHawk.Client.EmuHawk { - public sealed class CommunicationPluginLibrary : PluginLibraryBase + public sealed class CommApi : IComm { [RequiredService] private IEmulator Emulator { get; set; } @@ -19,7 +19,7 @@ namespace BizHawk.Client.EmuHawk [RequiredService] private IVideoProvider VideoProvider { get; set; } - public CommunicationPluginLibrary() : base() + public CommApi() : base() { } public string SocketServerScreenShot() diff --git a/BizHawk.Client.Common/plugins/PluginLibrary.GUIDraw.cs b/BizHawk.Client.EmuHawk/Api/Libraries/GUIApi.cs similarity index 65% rename from BizHawk.Client.Common/plugins/PluginLibrary.GUIDraw.cs rename to BizHawk.Client.EmuHawk/Api/Libraries/GUIApi.cs index 2647c19a89..5270a6eece 100644 --- a/BizHawk.Client.Common/plugins/PluginLibrary.GUIDraw.cs +++ b/BizHawk.Client.EmuHawk/Api/Libraries/GUIApi.cs @@ -5,44 +5,47 @@ using System.Drawing.Imaging; using System.Windows.Forms; using System.IO; +using BizHawk.Client.ApiHawk; using BizHawk.Emulation.Common; -namespace BizHawk.Client.Common +namespace BizHawk.Client.EmuHawk { - public abstract class GUIDrawPluginBase : PluginLibraryBase + public sealed class GuiApi : IGui { [RequiredService] - protected IEmulator Emulator { get; set; } - - public GUIDrawPluginBase() : base() - { } - - public bool HasGUISurface = false; - - protected Color _defaultForeground = Color.White; - protected Color? _defaultBackground; - protected Color? _defaultTextBackground = Color.FromArgb(128, 0, 0, 0); - protected int _defaultPixelFont = 1; // gens - protected Padding _padding = new Padding(0); - protected ImageAttributes _attributes = new ImageAttributes(); + private IEmulator Emulator { get; set; } + private Color _defaultForeground = Color.White; + private Color? _defaultBackground; + private Color? _defaultTextBackground = Color.FromArgb(128, 0, 0, 0); + private int _defaultPixelFont = 1; // gens + private Padding _padding = new Padding(0); + private ImageAttributes _attributes = new ImageAttributes(); private System.Drawing.Drawing2D.CompositingMode _compositingMode = System.Drawing.Drawing2D.CompositingMode.SourceOver; - public virtual void ToggleCompositingMode() + + public GuiApi() + { } + + private DisplaySurface _GUISurface = null; + + public bool HasGUISurface => _GUISurface != null; + + #region Gui API + public void ToggleCompositingMode() { _compositingMode = 1 - _compositingMode; } - public virtual ImageAttributes GetAttributes() + public ImageAttributes GetAttributes() { return _attributes; } - public virtual void SetAttributes(ImageAttributes a) + public void SetAttributes(ImageAttributes a) { _attributes = a; } - #region Gui API - public virtual void Dispose() + public void Dispose() { foreach (var brush in _solidBrushes.Values) { @@ -55,16 +58,35 @@ namespace BizHawk.Client.Common } } - public abstract void DrawNew(string name, bool? clear = true); - public abstract void DrawFinish(); + public void DrawNew(string name, bool? clear = true) + { + try + { + DrawFinish(); + _GUISurface = GlobalWin.DisplayManager.LockLuaSurface(name, clear ?? true); + } + catch (InvalidOperationException ex) + { + Console.WriteLine(ex.ToString()); + } + } + + public void DrawFinish() + { + if (_GUISurface != null) + { + GlobalWin.DisplayManager.UnlockLuaSurface(_GUISurface); + } + + _GUISurface = null; + } #endregion #region Helpers - protected readonly Dictionary _imageCache = new Dictionary(); - - protected readonly Dictionary _solidBrushes = new Dictionary(); - protected readonly Dictionary _pens = new Dictionary(); - protected SolidBrush GetBrush(Color color) + private readonly Dictionary _imageCache = new Dictionary(); + private readonly Dictionary _solidBrushes = new Dictionary(); + private readonly Dictionary _pens = new Dictionary(); + private SolidBrush GetBrush(Color color) { SolidBrush b; if (!_solidBrushes.TryGetValue(color, out b)) @@ -76,7 +98,7 @@ namespace BizHawk.Client.Common return b; } - protected Pen GetPen(Color color) + private Pen GetPen(Color color) { Pen p; if (!_pens.TryGetValue(color, out p)) @@ -88,7 +110,22 @@ namespace BizHawk.Client.Common return p; } - protected abstract Graphics GetGraphics(); + private Graphics GetGraphics() + { + var g = _GUISurface == null ? Graphics.FromImage(new Bitmap(1,1)) : _GUISurface.GetGraphics(); + + // we don't like CoreComm, right? Someone should find a different way to do this then. + var tx = Emulator.CoreComm.ScreenLogicalOffsetX; + var ty = Emulator.CoreComm.ScreenLogicalOffsetY; + if (tx != 0 || ty != 0) + { + var transform = g.Transform; + transform.Translate(-tx, -ty); + g.Transform = transform; + } + + return g; + } public void SetPadding(int all) { _padding = new Padding(all); @@ -97,7 +134,7 @@ namespace BizHawk.Client.Common { _padding = new Padding(x / 2, y / 2, x / 2 + x & 1, y / 2 + y & 1); } - public void SetPadding(int l,int t,int r, int b) + public void SetPadding(int l, int t, int r, int b) { _padding = new Padding(l, t, r, b); } @@ -107,11 +144,21 @@ namespace BizHawk.Client.Common } #endregion - public abstract void AddMessage(string message); + public void AddMessage(string message) + { + GlobalWin.OSD.AddMessage(message); + } - public abstract void ClearGraphics(); + public void ClearGraphics() + { + _GUISurface.Clear(); + DrawFinish(); + } - public abstract void ClearText(); + public void ClearText() + { + GlobalWin.OSD.ClearGUIText(); + } public void SetDefaultForegroundColor(Color color) { @@ -352,7 +399,7 @@ namespace BizHawk.Client.Common { using (var g = GetGraphics()) { - g.CompositingMode = _compositingMode; + g.CompositingMode = _compositingMode; g.DrawLine(GetPen(color ?? _defaultForeground), x1, y1, x2, y2); } } @@ -424,12 +471,13 @@ namespace BizHawk.Client.Common var bg = background ?? _defaultBackground; if (bg.HasValue) { - g.FillRectangle(GetBrush(bg.Value), x + 1, y + 1, Math.Max(w - 1, 0), Math.Max(h - 1, 0)); } + g.FillRectangle(GetBrush(bg.Value), x + 1, y + 1, Math.Max(w - 1, 0), Math.Max(h - 1, 0)); + } } } - public void DrawString(int x, int y, string message, Color? forecolor = null, Color? backcolor = null, int? fontsize = null, - string fontfamily = null, string fontstyle = null, string horizalign = null, string vertalign = null) + public void DrawString(int x, int y, string message, Color? forecolor = null, Color? backcolor = null, int? fontsize = null, + string fontfamily = null, string fontstyle = null, string horizalign = null, string vertalign = null) { using (var g = GetGraphics()) { @@ -508,7 +556,7 @@ namespace BizHawk.Client.Common { for (var yd = -1; yd <= 1; yd++) { - g.DrawString(message, font, GetBrush(bg.Value), x+xd, y+yd); + g.DrawString(message, font, GetBrush(bg.Value), x + xd, y + yd); } } } @@ -522,7 +570,86 @@ namespace BizHawk.Client.Common } } - public abstract void DrawText(int x, int y, string message, Color? forecolor = null, Color? backcolor = null, string fontfamily = null); - public abstract void Text(int x, int y, string message, Color? forecolor = null, string anchor = null); + public void DrawText(int x, int y, string message, Color? forecolor = null, Color? backcolor = null, string fontfamily = null) + { + using (var g = GetGraphics()) + { + try + { + var index = 0; + if (string.IsNullOrEmpty(fontfamily)) + { + index = _defaultPixelFont; + } + else + { + switch (fontfamily) + { + case "fceux": + case "0": + index = 0; + break; + case "gens": + case "1": + index = 1; + break; + default: + Console.WriteLine($"Unable to find font family: {fontfamily}"); + return; + } + } + + var f = new StringFormat(StringFormat.GenericTypographic) + { + FormatFlags = StringFormatFlags.MeasureTrailingSpaces + }; + var font = new Font(GlobalWin.DisplayManager.CustomFonts.Families[index], 8, FontStyle.Regular, GraphicsUnit.Pixel); + Size sizeOfText = g.MeasureString(message, font, 0, f).ToSize(); + var rect = new Rectangle(new Point(x, y), sizeOfText + new Size(1, 0)); + if (backcolor.HasValue) g.FillRectangle(GetBrush(backcolor.Value), rect); + g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit; + g.DrawString(message, font, GetBrush(forecolor ?? _defaultForeground), x, y); + } + catch (Exception) + { + return; + } + } + } + + public void Text(int x, int y, string message, Color? forecolor = null, string anchor = null) + { + var a = 0; + + if (!string.IsNullOrEmpty(anchor)) + { + switch (anchor) + { + case "0": + case "topleft": + a = 0; + break; + case "1": + case "topright": + a = 1; + break; + case "2": + case "bottomleft": + a = 2; + break; + case "3": + case "bottomright": + a = 3; + break; + } + } + else + { + x -= Emulator.CoreComm.ScreenLogicalOffsetX; + y -= Emulator.CoreComm.ScreenLogicalOffsetY; + } + + GlobalWin.OSD.AddGUIText(message, x, y, Color.Black, forecolor ?? Color.White, a); + } } } \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Input.cs b/BizHawk.Client.EmuHawk/Api/Libraries/InputApi.cs similarity index 92% rename from BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Input.cs rename to BizHawk.Client.EmuHawk/Api/Libraries/InputApi.cs index e2e289bae0..56e2cd767f 100644 --- a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Input.cs +++ b/BizHawk.Client.EmuHawk/Api/Libraries/InputApi.cs @@ -3,13 +3,14 @@ using System.Linq; using System.Collections.Generic; using System.Windows.Forms; +using BizHawk.Client.ApiHawk; using BizHawk.Client.Common; namespace BizHawk.Client.EmuHawk { - public sealed class InputPluginLibrary : PluginLibraryBase + public sealed class InputApi : IInput { - public InputPluginLibrary() : base() + public InputApi() : base() { } public Dictionary Get() diff --git a/BizHawk.Client.EmuHawk/Api/Libraries/PluginLibrary.cs b/BizHawk.Client.EmuHawk/Api/Libraries/PluginLibrary.cs new file mode 100644 index 0000000000..ca44e44a3d --- /dev/null +++ b/BizHawk.Client.EmuHawk/Api/Libraries/PluginLibrary.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; + +using BizHawk.Common.ReflectionExtensions; +using BizHawk.Emulation.Common; +using BizHawk.Client.ApiHawk; + +namespace BizHawk.Client.EmuHawk + +{ + public static class ApiManager + { + private static ApiContainer container; + private static void Register(IEmulatorServiceProvider serviceProvider) + { + // Register external apis + var libs = Assembly + .Load("BizHawk.Client.ApiHawk") + .GetTypes() + .Where(t => typeof(IExternalApi).IsAssignableFrom(t)) + .Where(t => t.IsSealed) + .Where(t => ServiceInjector.IsAvailable(serviceProvider, t)) + .ToList(); + + libs.AddRange( + Assembly + .GetAssembly(typeof(ApiContainer)) + .GetTypes() + .Where(t => typeof(IExternalApi).IsAssignableFrom(t)) + .Where(t => t.IsSealed) + .Where(t => ServiceInjector.IsAvailable(serviceProvider, t))); + + foreach (var lib in libs) + { + var instance = (IExternalApi)Activator.CreateInstance(lib); + ServiceInjector.UpdateServices(serviceProvider, instance); + Libraries.Add(lib, instance); + } + container = new ApiContainer(Libraries); + GlobalWin.ApiProvider = new BasicApiProvider(container); + } + private static readonly Dictionary Libraries = new Dictionary(); + public static void Restart(IEmulatorServiceProvider newServiceProvider) + { + Libraries.Clear(); + Register(newServiceProvider); + } + } +} diff --git a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Savestate.cs b/BizHawk.Client.EmuHawk/Api/Libraries/SaveStateAPI.cs similarity index 84% rename from BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Savestate.cs rename to BizHawk.Client.EmuHawk/Api/Libraries/SaveStateAPI.cs index 90f4e5e7f6..df75742920 100644 --- a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Savestate.cs +++ b/BizHawk.Client.EmuHawk/Api/Libraries/SaveStateAPI.cs @@ -2,13 +2,13 @@ using System.Collections.Generic; using System.IO; -using BizHawk.Client.Common; +using BizHawk.Client.ApiHawk; namespace BizHawk.Client.EmuHawk { - public sealed class SavestatePluginibrary : PluginLibraryBase + public sealed class SaveStateApi : ISaveState { - public SavestatePluginibrary() : base() + public SaveStateApi() : base() { } public void Load(string path) diff --git a/BizHawk.Client.EmuHawk/Api/Libraries/ToolApi.cs b/BizHawk.Client.EmuHawk/Api/Libraries/ToolApi.cs new file mode 100644 index 0000000000..d356761cdf --- /dev/null +++ b/BizHawk.Client.EmuHawk/Api/Libraries/ToolApi.cs @@ -0,0 +1,162 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +using BizHawk.Common; +using BizHawk.Emulation.Common; +using BizHawk.Client.ApiHawk; +using BizHawk.Client.Common; + +namespace BizHawk.Client.EmuHawk +{ + public sealed class ToolApi : ITool + { + private class ToolStatic + { + public Type GetTool(string name) + { + var toolType = ReflectionUtil.GetTypeByName(name) + .FirstOrDefault(x => typeof(IToolForm).IsAssignableFrom(x) && !x.IsInterface); + + if (toolType != null) + { + GlobalWin.Tools.Load(toolType); + } + + var selectedTool = GlobalWin.Tools.AvailableTools + .FirstOrDefault(tool => tool.GetType().Name.ToLower() == name.ToLower()); + + if (selectedTool != null) + { + return selectedTool; + } + + return null; + } + + public object CreateInstance(string name) + { + var possibleTypes = ReflectionUtil.GetTypeByName(name); + + if (possibleTypes.Any()) + { + return Activator.CreateInstance(possibleTypes.First()); + } + + return null; + } + + public static void OpenCheats() + { + GlobalWin.Tools.Load(); + } + + public static void OpenHexEditor() + { + GlobalWin.Tools.Load(); + } + + public static void OpenRamWatch() + { + GlobalWin.Tools.LoadRamWatch(loadDialog: true); + } + + public static void OpenRamSearch() + { + GlobalWin.Tools.Load(); + } + + public static void OpenTasStudio() + { + GlobalWin.Tools.Load(); + } + + public static void OpenToolBox() + { + GlobalWin.Tools.Load(); + } + + public static void OpenTraceLogger() + { + GlobalWin.Tools.Load(); + } + + } + [RequiredService] + private static IEmulator Emulator { get; set; } + + [RequiredService] + private static IVideoProvider VideoProvider { get; set; } + + public ToolApi() + { } + + public Type GetTool(string name) + { + var toolType = ReflectionUtil.GetTypeByName(name) + .FirstOrDefault(x => typeof(IToolForm).IsAssignableFrom(x) && !x.IsInterface); + + if (toolType != null) + { + GlobalWin.Tools.Load(toolType); + } + + var selectedTool = GlobalWin.Tools.AvailableTools + .FirstOrDefault(tool => tool.GetType().Name.ToLower() == name.ToLower()); + + if (selectedTool != null) + { + return selectedTool; + } + + return null; + } + + public object CreateInstance(string name) + { + var possibleTypes = ReflectionUtil.GetTypeByName(name); + + if (possibleTypes.Any()) + { + return Activator.CreateInstance(possibleTypes.First()); + } + + return null; + } + + public void OpenCheats() + { + ToolStatic.OpenCheats(); + } + + public void OpenHexEditor() + { + ToolStatic.OpenHexEditor(); + } + + public void OpenRamWatch() + { + ToolStatic.OpenRamWatch(); + } + + public void OpenRamSearch() + { + ToolStatic.OpenRamSearch(); + } + + public void OpenTasStudio() + { + ToolStatic.OpenTasStudio(); + } + + public void OpenToolBox() + { + ToolStatic.OpenToolBox(); + } + + public void OpenTraceLogger() + { + ToolStatic.OpenTraceLogger(); + } + } +} diff --git a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj index 46f0aa381a..efbb0d391d 100644 --- a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj +++ b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj @@ -658,9 +658,14 @@ - - - + + + + + + + + @@ -734,7 +739,6 @@ NameStateForm.cs - Form @@ -747,10 +751,6 @@ PlatformChooser.cs - - - - @@ -1888,7 +1888,6 @@ - diff --git a/BizHawk.Client.EmuHawk/GlobalWin.cs b/BizHawk.Client.EmuHawk/GlobalWin.cs index 5ede6c61fc..06a2bbaab5 100644 --- a/BizHawk.Client.EmuHawk/GlobalWin.cs +++ b/BizHawk.Client.EmuHawk/GlobalWin.cs @@ -1,4 +1,5 @@ using BizHawk.Bizware.BizwareGL; +using BizHawk.Client.ApiHawk; // ReSharper disable StyleCop.SA1401 namespace BizHawk.Client.EmuHawk @@ -7,7 +8,7 @@ namespace BizHawk.Client.EmuHawk { public static MainForm MainForm; public static ToolManager Tools; - public static PluginLibrary Plugins; + public static BasicApiProvider ApiProvider; /// /// the IGL to be used for rendering diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 9fb06ed416..2cc7539c80 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -252,8 +252,6 @@ namespace BizHawk.Client.EmuHawk GlobalWin.Sound.StartSound(); InputManager.RewireInputChain(); GlobalWin.Tools = new ToolManager(this); - GlobalWin.Plugins = new PluginLibrary(Emulator.ServiceProvider); - GlobalWin.Plugins.Load(new Ecco2AssistantPlugin()); RewireSound(); // Workaround for windows, location is -32000 when minimized, if they close it during this time, that's what gets saved @@ -2937,7 +2935,6 @@ namespace BizHawk.Client.EmuHawk { GlobalWin.Tools.LuaConsole.LuaImp.CallFrameBeforeEvent(); } - GlobalWin.Plugins.CallFrameBeforeEvent(); if (IsTurboing) { @@ -3024,7 +3021,6 @@ namespace BizHawk.Client.EmuHawk { GlobalWin.Tools.LuaConsole.LuaImp.CallFrameAfterEvent(); } - GlobalWin.Plugins.CallFrameAfterEvent(); if (IsTurboing) { @@ -3798,7 +3794,7 @@ namespace BizHawk.Client.EmuHawk } GlobalWin.Tools.Restart(); - GlobalWin.Plugins.Restart(Emulator.ServiceProvider); + ApiManager.Restart(Emulator.ServiceProvider); if (Global.Config.LoadCheatFileByGame) { @@ -3846,7 +3842,7 @@ namespace BizHawk.Client.EmuHawk } } - ClientApi.OnRomLoaded(); + ClientApi.OnRomLoaded(Emulator); return true; } else @@ -3857,10 +3853,11 @@ namespace BizHawk.Client.EmuHawk // The ROM has been loaded by a recursive invocation of the LoadROM method. if (!(Emulator is NullEmulator)) { - ClientApi.OnRomLoaded(); + ClientApi.OnRomLoaded(Emulator); return true; } + ClientApi.UpdateEmulatorAndVP(Emulator); HandlePlatformMenus(); _stateSlots.Clear(); UpdateStatusSlots(); @@ -3950,6 +3947,7 @@ namespace BizHawk.Client.EmuHawk var coreComm = CreateCoreComm(); CoreFileProvider.SyncCoreCommInputSignals(coreComm); Emulator = new NullEmulator(coreComm, Global.Config.GetCoreSettings()); + ClientApi.UpdateEmulatorAndVP(Emulator); Global.ActiveController = new Controller(NullController.Instance.Definition); Global.AutoFireController = _autofireNullControls; RewireSound(); @@ -3972,7 +3970,7 @@ namespace BizHawk.Client.EmuHawk Global.Game = GameInfo.NullInstance; GlobalWin.Tools.Restart(); - GlobalWin.Plugins.Restart(Emulator.ServiceProvider); + ApiManager.Restart(Emulator.ServiceProvider); RewireSound(); Text = "BizHawk" + (VersionInfo.DeveloperBuild ? " (interim) " : ""); HandlePlatformMenus(); @@ -4068,7 +4066,6 @@ namespace BizHawk.Client.EmuHawk { GlobalWin.Tools.LuaConsole.LuaImp.CallLoadStateEvent(userFriendlyStateName); } - GlobalWin.Plugins.CallLoadStateEvent(userFriendlyStateName); SetMainformMovieInfo(); GlobalWin.Tools.UpdateToolsBefore(fromLua); @@ -4198,7 +4195,6 @@ namespace BizHawk.Client.EmuHawk { GlobalWin.Tools.LuaConsole.LuaImp.CallSaveStateEvent(quickSlotName); } - GlobalWin.Plugins.CallSaveStateEvent(quickSlotName); } private void SaveStateAs() diff --git a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Client.cs b/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Client.cs deleted file mode 100644 index b37d5f37dc..0000000000 --- a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.Client.cs +++ /dev/null @@ -1,351 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -using BizHawk.Common; -using BizHawk.Emulation.Common; -using BizHawk.Client.Common; - -namespace BizHawk.Client.EmuHawk -{ - public sealed class EmuHawkPluginLibrary : PluginLibraryBase - { - [RequiredService] - private IEmulator Emulator { get; set; } - - [RequiredService] - private IVideoProvider VideoProvider { get; set; } - - private readonly Dictionary _filterMappings = new Dictionary - { - { 0, "None" }, - { 1, "x2SAI" }, - { 2, "SuperX2SAI" }, - { 3, "SuperEagle" }, - { 4, "Scanlines" }, - }; - - public EmuHawkPluginLibrary() : base() - { } - - public void CloseEmulator() - { - GlobalWin.MainForm.CloseEmulator(); - } - - public void CloseEmulatorWithCode(int exitCode) - { - GlobalWin.MainForm.CloseEmulator(exitCode); - } - - public static int BorderHeight() - { - var point = new System.Drawing.Point(0, 0); - return GlobalWin.DisplayManager.TransformPoint(point).Y; - } - - public static int BorderWidth() - { - var point = new System.Drawing.Point(0, 0); - return GlobalWin.DisplayManager.TransformPoint(point).X; - } - - public int BufferHeight() - { - return VideoProvider.BufferHeight; - } - - public int BufferWidth() - { - return VideoProvider.BufferWidth; - } - - public void ClearAutohold() - { - GlobalWin.MainForm.ClearHolds(); - } - - public static void CloseRom() - { - GlobalWin.MainForm.CloseRom(); - } - - public void EnableRewind(bool enabled) - { - GlobalWin.MainForm.EnableRewind(enabled); - } - - public void FrameSkip(int numFrames) - { - if (numFrames > 0) - { - Global.Config.FrameSkip = numFrames; - GlobalWin.MainForm.FrameSkipMessage(); - } - else - { - Console.WriteLine("Invalid frame skip value"); - } - } - - public static int GetTargetScanlineIntensity() - { - return Global.Config.TargetScanlineFilterIntensity; - } - - public int GetWindowSize() - { - return Global.Config.TargetZoomFactors[Emulator.SystemId]; - } - - public static void SetGameExtraPadding(int left, int top, int right, int bottom) - { - GlobalWin.DisplayManager.GameExtraPadding = new System.Windows.Forms.Padding(left, top, right, bottom); - GlobalWin.MainForm.FrameBufferResized(); - } - - public static void SetSoundOn(bool enable) - { - Global.Config.SoundEnabled = enable; - } - - public static bool GetSoundOn() - { - return Global.Config.SoundEnabled; - } - - public static void SetClientExtraPadding(int left, int top, int right, int bottom) - { - GlobalWin.DisplayManager.ClientExtraPadding = new System.Windows.Forms.Padding(left, top, right, bottom); - GlobalWin.MainForm.FrameBufferResized(); - } - - public static bool IsPaused() - { - return GlobalWin.MainForm.EmulatorPaused; - } - - public static bool IsTurbo() - { - return GlobalWin.MainForm.IsTurboing; - } - - public static bool IsSeeking() - { - return GlobalWin.MainForm.IsSeeking; - } - - public static void OpenCheats() - { - GlobalWin.Tools.Load(); - } - - public static void OpenHexEditor() - { - GlobalWin.Tools.Load(); - } - - public static void OpenRamWatch() - { - GlobalWin.Tools.LoadRamWatch(loadDialog: true); - } - - public static void OpenRamSearch() - { - GlobalWin.Tools.Load(); - } - - public static void OpenRom(string path) - { - var ioa = OpenAdvancedSerializer.ParseWithLegacy(path); - GlobalWin.MainForm.LoadRom(path, new MainForm.LoadRomArgs { OpenAdvanced = ioa }); - } - - public static void OpenTasStudio() - { - GlobalWin.Tools.Load(); - } - - public static void OpenToolBox() - { - GlobalWin.Tools.Load(); - } - - public static void OpenTraceLogger() - { - GlobalWin.Tools.Load(); - } - - public static void Pause() - { - GlobalWin.MainForm.PauseEmulator(); - } - - public static void PauseAv() - { - GlobalWin.MainForm.PauseAvi = true; - } - - public static void RebootCore() - { - ((LuaConsole)GlobalWin.Tools.Get()).LuaImp.IsRebootingCore = true; - GlobalWin.MainForm.RebootCore(); - ((LuaConsole)GlobalWin.Tools.Get()).LuaImp.IsRebootingCore = false; - } - - public static int ScreenHeight() - { - return GlobalWin.MainForm.PresentationPanel.NativeSize.Height; - } - - public static void Screenshot(string path = null) - { - if (path == null) - { - GlobalWin.MainForm.TakeScreenshot(); - } - else - { - GlobalWin.MainForm.TakeScreenshot(path); - } - } - - public static void ScreenshotToClipboard() - { - GlobalWin.MainForm.TakeScreenshotToClipboard(); - } - - public static void SetTargetScanlineIntensity(int val) - { - Global.Config.TargetScanlineFilterIntensity = val; - } - - public static void SetScreenshotOSD(bool value) - { - Global.Config.Screenshot_CaptureOSD = value; - } - - public static int ScreenWidth() - { - return GlobalWin.MainForm.PresentationPanel.NativeSize.Width; - } - - public void SetWindowSize(int size) - { - if (size == 1 || size == 2 || size == 3 || size == 4 || size == 5 || size == 10) - { - Global.Config.TargetZoomFactors[Emulator.SystemId] = size; - GlobalWin.MainForm.FrameBufferResized(); - GlobalWin.OSD.AddMessage("Window size set to " + size + "x"); - } - else - { - Console.WriteLine("Invalid window size"); - } - } - - public void SpeedMode(int percent) - { - if (percent > 0 && percent < 6400) - { - GlobalWin.MainForm.ClickSpeedItem(percent); - } - else - { - Console.WriteLine("Invalid speed value"); - } - } - - public static void TogglePause() - { - GlobalWin.MainForm.TogglePause(); - } - - public static int TransformPointX(int x) - { - var point = new System.Drawing.Point(x, 0); - return GlobalWin.DisplayManager.TransformPoint(point).X; - } - - public static int TransformPointY(int y) - { - var point = new System.Drawing.Point(0, y); - return GlobalWin.DisplayManager.TransformPoint(point).Y; - } - - public static void Unpause() - { - GlobalWin.MainForm.UnpauseEmulator(); - } - - public static void UnpauseAv() - { - GlobalWin.MainForm.PauseAvi = false; - } - - public static int Xpos() - { - return GlobalWin.MainForm.DesktopLocation.X; - } - - public static int Ypos() - { - return GlobalWin.MainForm.DesktopLocation.Y; - } - - public List GetAvailableTools() - { - var tools = GlobalWin.Tools.AvailableTools.ToList(); - var t = new List(tools.Count); - for (int i = 0; i < tools.Count; i++) - { - t[i] = tools[i].Name.ToLower(); - } - - return t; - } - - public Type GetTool(string name) - { - var toolType = ReflectionUtil.GetTypeByName(name) - .FirstOrDefault(x => typeof(IToolForm).IsAssignableFrom(x) && !x.IsInterface); - - if (toolType != null) - { - GlobalWin.Tools.Load(toolType); - } - - var selectedTool = GlobalWin.Tools.AvailableTools - .FirstOrDefault(tool => tool.GetType().Name.ToLower() == name.ToLower()); - - if (selectedTool != null) - { - return selectedTool; - } - - return null; - } - - public object CreateInstance(string name) - { - var possibleTypes = ReflectionUtil.GetTypeByName(name); - - if (possibleTypes.Any()) - { - return Activator.CreateInstance(possibleTypes.First()); - } - - return null; - } - - public void DisplayMessages(bool value) - { - Global.Config.DisplayMessages = value; - } - - public void SaveRam() - { - GlobalWin.MainForm.FlushSaveRAM(); - } - } -} diff --git a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.GUI.cs b/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.GUI.cs deleted file mode 100644 index e22bd3e0fd..0000000000 --- a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.GUI.cs +++ /dev/null @@ -1,162 +0,0 @@ -using System; -using System.Drawing; - -using BizHawk.Client.Common; - -namespace BizHawk.Client.EmuHawk -{ - public sealed class GUIPluginLibrary : GUIDrawPluginBase - { - public GUIPluginLibrary() : base() - { } - - private DisplaySurface _GUISurface = null; - - #region Gui API - - public override void DrawNew(string name, bool? clear = true) - { - try - { - DrawFinish(); - _GUISurface = GlobalWin.DisplayManager.LockLuaSurface(name, clear ?? true); - HasGUISurface = (_GUISurface != null); - - } - catch (InvalidOperationException ex) - { - Console.WriteLine(ex.ToString()); - } - } - - public override void DrawFinish() - { - if (_GUISurface != null) - { - GlobalWin.DisplayManager.UnlockLuaSurface(_GUISurface); - } - - _GUISurface = null; - HasGUISurface = false; - - } - #endregion - - #region Helpers - protected override Graphics GetGraphics() - { - var g = _GUISurface == null ? Graphics.FromImage(new Bitmap(1,1)) : _GUISurface.GetGraphics(); - - // we don't like CoreComm, right? Someone should find a different way to do this then. - var tx = Emulator.CoreComm.ScreenLogicalOffsetX; - var ty = Emulator.CoreComm.ScreenLogicalOffsetY; - if (tx != 0 || ty != 0) - { - var transform = g.Transform; - transform.Translate(-tx, -ty); - g.Transform = transform; - } - - return g; - } - #endregion - - public override void AddMessage(string message) - { - GlobalWin.OSD.AddMessage(message); - } - - public override void ClearGraphics() - { - _GUISurface.Clear(); - DrawFinish(); - } - - public override void ClearText() - { - GlobalWin.OSD.ClearGUIText(); - } - - public override void DrawText(int x, int y, string message, Color? forecolor = null, Color? backcolor = null, string fontfamily = null) - { - using (var g = GetGraphics()) - { - try - { - var index = 0; - if (string.IsNullOrEmpty(fontfamily)) - { - index = _defaultPixelFont; - } - else - { - switch (fontfamily) - { - case "fceux": - case "0": - index = 0; - break; - case "gens": - case "1": - index = 1; - break; - default: - Console.WriteLine($"Unable to find font family: {fontfamily}"); - return; - } - } - - var f = new StringFormat(StringFormat.GenericTypographic) - { - FormatFlags = StringFormatFlags.MeasureTrailingSpaces - }; - var font = new Font(GlobalWin.DisplayManager.CustomFonts.Families[index], 8, FontStyle.Regular, GraphicsUnit.Pixel); - Size sizeOfText = g.MeasureString(message, font, 0, f).ToSize(); - var rect = new Rectangle(new Point(x, y), sizeOfText + new Size(1, 0)); - if (backcolor.HasValue) g.FillRectangle(GetBrush(backcolor.Value), rect); - g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit; - g.DrawString(message, font, GetBrush(forecolor ?? _defaultForeground), x, y); - } - catch (Exception) - { - return; - } - } - } - - public override void Text(int x, int y, string message, Color? forecolor = null, string anchor = null) - { - var a = 0; - - if (!string.IsNullOrEmpty(anchor)) - { - switch (anchor) - { - case "0": - case "topleft": - a = 0; - break; - case "1": - case "topright": - a = 1; - break; - case "2": - case "bottomleft": - a = 2; - break; - case "3": - case "bottomright": - a = 3; - break; - } - } - else - { - x -= Emulator.CoreComm.ScreenLogicalOffsetX; - y -= Emulator.CoreComm.ScreenLogicalOffsetY; - } - - GlobalWin.OSD.AddGUIText(message, x, y, Color.Black, forecolor ?? Color.White, a); - } - } -} \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.cs b/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.cs deleted file mode 100644 index 132ba4a2df..0000000000 --- a/BizHawk.Client.EmuHawk/Plugins/Libraries/PluginLibrary.cs +++ /dev/null @@ -1,125 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; - -using BizHawk.Common.ReflectionExtensions; -using BizHawk.Emulation.Common; -using BizHawk.Client.Common; - -namespace BizHawk.Client.EmuHawk - -{ - public class PluginLibrary - { -// public LuaDocumentation Docs { get; } - private void Register(IEmulatorServiceProvider serviceProvider) - { - // Docs.Clear(); - - // Register lua libraries - var libs = Assembly - .Load("BizHawk.Client.Common") - .GetTypes() - .Where(t => typeof(PluginLibraryBase).IsAssignableFrom(t)) - .Where(t => t.IsSealed) - .Where(t => ServiceInjector.IsAvailable(serviceProvider, t)) - .ToList(); - - libs.AddRange( - Assembly - .GetAssembly(typeof(PluginLibrary)) - .GetTypes() - .Where(t => typeof(PluginLibraryBase).IsAssignableFrom(t)) - .Where(t => t.IsSealed) - .Where(t => ServiceInjector.IsAvailable(serviceProvider, t))); - - foreach (var lib in libs) - { - var instance = (PluginLibraryBase)Activator.CreateInstance(lib); - ServiceInjector.UpdateServices(serviceProvider, instance); - Libraries.Add(lib, instance); - } - } - public PluginLibrary(IEmulatorServiceProvider serviceProvider) - { - Register(serviceProvider); - } - private readonly Dictionary Libraries = new Dictionary(); - public List PluginList { get; } = new List(); - - public IEnumerable RunningPlugins - { - get { return PluginList.Where(plug => plug.Enabled); } - } - -// private FormsPluginLibrary FormsLibrary => (FormsLuaLibrary)Libraries[typeof(FormsLuaLibrary)]; -// private EmulatorPluginLibrary EmuPluginLibrary => (EmulatorPluginLibrary)Libraries[typeof(EmulatorPluginLibrary)]; - private GUIPluginLibrary GuiLibrary => (GUIPluginLibrary)Libraries[typeof(GUIPluginLibrary)]; - - public void Restart(IEmulatorServiceProvider newServiceProvider) - { - Libraries.Clear(); - Register(newServiceProvider); - foreach (var plugin in PluginList) - { - plugin.Init(new PluginAPI(Libraries)); - } - } - - public void StartPluginDrawing() - { - if (PluginList.Any() && !GuiLibrary.HasGUISurface) - { - GuiLibrary.DrawNew("emu"); - } - } - - public void EndPluginDrawing() - { - if (PluginList.Any()) - { - GuiLibrary.DrawFinish(); - } - } - - public void CallSaveStateEvent(string name) - { - foreach (var plugin in RunningPlugins) plugin.SaveStateCallback(name); - } - - public void CallLoadStateEvent(string name) - { - foreach (var plugin in RunningPlugins) plugin.LoadStateCallback(name); - } - - public void CallFrameBeforeEvent() - { - StartPluginDrawing(); - foreach (var plugin in RunningPlugins) plugin.PreFrameCallback(); - } - - public void CallFrameAfterEvent() - { - foreach (var plugin in RunningPlugins) plugin.PostFrameCallback(); - EndPluginDrawing(); - } - - public void CallExitEvent() - { - foreach (var plugin in RunningPlugins) plugin.ExitCallback(); - } - - public void Close() - { - GuiLibrary.Dispose(); - } - - public void Load(PluginBase plugin) - { - plugin.Init(new PluginAPI(Libraries)); - PluginList.Add(plugin); - } - } -} diff --git a/BizHawk.Client.EmuHawk/Plugins/PluginAPI.cs b/BizHawk.Client.EmuHawk/Plugins/PluginAPI.cs deleted file mode 100644 index c2e1ea3960..0000000000 --- a/BizHawk.Client.EmuHawk/Plugins/PluginAPI.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Reflection; -using System.Linq; - -using BizHawk.Client.Common; - -namespace BizHawk.Client.EmuHawk -{ - public sealed class PluginAPI : IPluginAPI - { - public EmulatorPluginLibrary EmuLib => (EmulatorPluginLibrary)Libraries[typeof(EmulatorPluginLibrary)]; - public GameInfoPluginLibrary GameInfoLib => (GameInfoPluginLibrary)Libraries[typeof(GameInfoPluginLibrary)]; - public GUIDrawPluginBase GUILib => (GUIDrawPluginBase)Libraries[typeof(GUIPluginLibrary)]; - public JoypadPluginLibrary JoypadLib => (JoypadPluginLibrary)Libraries[typeof(JoypadPluginLibrary)]; - public MemoryPluginLibrary MemLib => (MemoryPluginLibrary)Libraries[typeof(MemoryPluginLibrary)]; - public MemoryEventsPluginLibrary MemEventsLib => (MemoryEventsPluginLibrary)Libraries[typeof(MemoryEventsPluginLibrary)]; - public MemorySavestatePluginLibrary MemStateLib => (MemorySavestatePluginLibrary)Libraries[typeof(MemorySavestatePluginLibrary)]; - public MoviePluginLibrary MovieLib => (MoviePluginLibrary)Libraries[typeof(MoviePluginLibrary)]; - public SQLPluginLibrary SQLLib => (SQLPluginLibrary)Libraries[typeof(SQLPluginLibrary)]; - public UserDataPluginLibrary UserDataLib => (UserDataPluginLibrary)Libraries[typeof(UserDataPluginLibrary)]; - public Dictionary Libraries { get; set; } - public PluginAPI(Dictionary libs) - { - Libraries = libs; - } - } -} diff --git a/BizHawk.Client.EmuHawk/tools/ToolBox.cs b/BizHawk.Client.EmuHawk/tools/ToolBox.cs index 503714c6b1..67aefdfd0f 100644 --- a/BizHawk.Client.EmuHawk/tools/ToolBox.cs +++ b/BizHawk.Client.EmuHawk/tools/ToolBox.cs @@ -6,7 +6,7 @@ using System.Reflection; using System.Windows.Forms; using BizHawk.Emulation.Common; -using BizHawk.Client.Common; +using BizHawk.Client.ApiHawk; namespace BizHawk.Client.EmuHawk { @@ -66,6 +66,8 @@ namespace BizHawk.Client.EmuHawk continue; if (!ServiceInjector.IsAvailable(Emulator.ServiceProvider, t)) continue; +// if (!ApiInjector.IsAvailable(, t)) +// continue; var instance = Activator.CreateInstance(t); diff --git a/BizHawk.Client.EmuHawk/tools/ToolManager.cs b/BizHawk.Client.EmuHawk/tools/ToolManager.cs index 05d530176d..321b301c36 100644 --- a/BizHawk.Client.EmuHawk/tools/ToolManager.cs +++ b/BizHawk.Client.EmuHawk/tools/ToolManager.cs @@ -7,6 +7,7 @@ using System.Reflection; using System.ComponentModel; using System.Windows.Forms; +using BizHawk.Client.ApiHawk; using BizHawk.Client.Common; using BizHawk.Emulation.Common; using BizHawk.Common.ReflectionExtensions; @@ -121,6 +122,11 @@ namespace BizHawk.Client.EmuHawk (newTool as Form).Owner = GlobalWin.MainForm; } + if (isExternal) + { + ApiInjector.UpdateApis(GlobalWin.ApiProvider, newTool); + } + ServiceInjector.UpdateServices(Global.Emulator.ServiceProvider, newTool); string toolType = typeof(T).ToString(); @@ -491,6 +497,8 @@ namespace BizHawk.Client.EmuHawk if ((tool.IsHandleCreated && !tool.IsDisposed) || tool is RamWatch) // Hack for RAM Watch - in display watches mode it wants to keep running even closed, it will handle disposed logic { + if (tool is IExternalToolForm) + ApiInjector.UpdateApis(GlobalWin.ApiProvider, tool); tool.Restart(); } } diff --git a/BizHawk.Common/BizHawk.Common.csproj b/BizHawk.Common/BizHawk.Common.csproj index 8b9b8cac99..193d86f3fc 100644 --- a/BizHawk.Common/BizHawk.Common.csproj +++ b/BizHawk.Common/BizHawk.Common.csproj @@ -109,4 +109,4 @@ --> - + \ No newline at end of file From 79aaef02574530972b47dc989dac81abfc373953 Mon Sep 17 00:00:00 2001 From: upthorn Date: Sat, 22 Dec 2018 11:16:54 -0800 Subject: [PATCH 030/301] Removed project references to old, unrefactored files that no longer exist. --- .../BizHawk.Client.Common.csproj | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/BizHawk.Client.Common/BizHawk.Client.Common.csproj b/BizHawk.Client.Common/BizHawk.Client.Common.csproj index 84c1eed24d..cee56ac8a8 100644 --- a/BizHawk.Client.Common/BizHawk.Client.Common.csproj +++ b/BizHawk.Client.Common/BizHawk.Client.Common.csproj @@ -132,21 +132,6 @@ - - - - - - - - - - - - - - - From 3b1fd8fec6d837f2d48215e71edb912bbf011b2e Mon Sep 17 00:00:00 2001 From: upthorn Date: Sat, 22 Dec 2018 11:58:14 -0800 Subject: [PATCH 031/301] Unrename SetExtraPadding methods. --- BizHawk.Client.ApiHawk/Classes/ClientApi.cs | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/BizHawk.Client.ApiHawk/Classes/ClientApi.cs b/BizHawk.Client.ApiHawk/Classes/ClientApi.cs index 8756885f54..19d01f9f08 100644 --- a/BizHawk.Client.ApiHawk/Classes/ClientApi.cs +++ b/BizHawk.Client.ApiHawk/Classes/ClientApi.cs @@ -307,7 +307,7 @@ namespace BizHawk.Client.ApiHawk /// Top padding /// Right padding /// Bottom padding - public static void SetClientExtraPadding(int left, int top, int right, int bottom) + public static void SetExtraPadding(int left, int top, int right, int bottom) { FieldInfo f = clientAssembly.GetType("BizHawk.Client.EmuHawk.GlobalWin").GetField("DisplayManager"); object displayManager = f.GetValue(null); @@ -321,9 +321,9 @@ namespace BizHawk.Client.ApiHawk /// Sets the extra padding added to the 'native' surface so that you can draw HUD elements in predictable placements /// /// Left padding - public static void SetClientExtraPadding(int left) + public static void SetExtraPadding(int left) { - SetClientExtraPadding(left, 0, 0, 0); + SetExtraPadding(left, 0, 0, 0); } /// @@ -331,9 +331,9 @@ namespace BizHawk.Client.ApiHawk /// /// Left padding /// Top padding - public static void SetClientExtraPadding(int left, int top) + public static void SetExtraPadding(int left, int top) { - SetClientExtraPadding(left, top, 0, 0); + SetExtraPadding(left, top, 0, 0); } /// @@ -342,12 +342,11 @@ namespace BizHawk.Client.ApiHawk /// Left padding /// Top padding /// Right padding - public static void SetClientExtraPadding(int left, int top, int right) + public static void SetExtraPadding(int left, int top, int right) { - SetClientExtraPadding(left, top, right, 0); + SetExtraPadding(left, top, right, 0); } - /// /// Set inputs in specified to specified player /// From 15131a062658174800846992e5a39a1da069179e Mon Sep 17 00:00:00 2001 From: zeromus Date: Sun, 23 Dec 2018 00:23:57 -0500 Subject: [PATCH 032/301] support --config=c:\path\to\config.ini (fixes #1404) --- BizHawk.Client.Common/PathManager.cs | 12 +++- BizHawk.Client.EmuHawk/ArgParser.cs | 6 ++ BizHawk.Client.EmuHawk/MainForm.Events.cs | 2 +- BizHawk.Client.EmuHawk/MainForm.cs | 72 +++++++++++------------ BizHawk.Client.EmuHawk/Program.cs | 11 ++-- 5 files changed, 60 insertions(+), 43 deletions(-) diff --git a/BizHawk.Client.Common/PathManager.cs b/BizHawk.Client.Common/PathManager.cs index c908157956..465dacb381 100644 --- a/BizHawk.Client.Common/PathManager.cs +++ b/BizHawk.Client.Common/PathManager.cs @@ -13,6 +13,11 @@ namespace BizHawk.Client.Common { public static class PathManager { + static PathManager() + { + SetDefaultIniPath(MakeProgramRelativePath("config.ini")); + } + public static string GetExeDirectoryAbsolute() { var path = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); @@ -40,7 +45,12 @@ namespace BizHawk.Client.Common /// /// The location of the default INI file /// - public static string DefaultIniPath => MakeProgramRelativePath("config.ini"); + public static string DefaultIniPath { get; private set; } + + public static void SetDefaultIniPath(string newDefaultIniPath) + { + DefaultIniPath = newDefaultIniPath; + } /// /// Gets absolute base as derived from EXE diff --git a/BizHawk.Client.EmuHawk/ArgParser.cs b/BizHawk.Client.EmuHawk/ArgParser.cs index 0912c68ba9..6c4823af50 100644 --- a/BizHawk.Client.EmuHawk/ArgParser.cs +++ b/BizHawk.Client.EmuHawk/ArgParser.cs @@ -14,6 +14,8 @@ namespace BizHawk.Client.EmuHawk public string cmdRom = null; public string cmdLoadSlot = null; public string cmdLoadState = null; + public string cmdConfigPath = null; + public string cmdConfigFile = null; public string cmdMovie = null; public string cmdDumpType = null; public string cmdDumpName = null; @@ -55,6 +57,10 @@ namespace BizHawk.Client.EmuHawk { cmdLoadState = args[i].Substring(args[i].IndexOf('=') + 1); } + if (arg.StartsWith("--config=")) + { + cmdConfigFile = args[i].Substring(args[i].IndexOf('=') + 1); + } else if (arg.StartsWith("--movie=")) { cmdMovie = args[i].Substring(args[i].IndexOf('=') + 1); diff --git a/BizHawk.Client.EmuHawk/MainForm.Events.cs b/BizHawk.Client.EmuHawk/MainForm.Events.cs index 314c2adaaa..e47ce7a138 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Events.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Events.cs @@ -2782,7 +2782,7 @@ namespace BizHawk.Client.EmuHawk showMenuVisible = true; // need to always be able to restore this as an emergency measure } - if (argParse._chromeless) + if (argParser._chromeless) { showMenuVisible = true; // I decided this was always possible in chromeless mode, we'll see what they think } diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 6f5348da71..5eb4a1d93d 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -154,7 +154,7 @@ namespace BizHawk.Client.EmuHawk } }; - argParse.ParseArguments(args); + argParser.ParseArguments(args); Database.LoadDatabase(Path.Combine(PathManager.GetExeDirectoryAbsolute(), "gamedb", "gamedb.txt")); @@ -270,14 +270,14 @@ namespace BizHawk.Client.EmuHawk Location = new Point(Global.Config.MainWndx, Global.Config.MainWndy); } - if (argParse.cmdRom != null) + if (argParser.cmdRom != null) { // Commandline should always override auto-load - var ioa = OpenAdvancedSerializer.ParseWithLegacy(argParse.cmdRom); - LoadRom(argParse.cmdRom, new LoadRomArgs { OpenAdvanced = ioa }); + var ioa = OpenAdvancedSerializer.ParseWithLegacy(argParser.cmdRom); + LoadRom(argParser.cmdRom, new LoadRomArgs { OpenAdvanced = ioa }); if (Global.Game == null) { - MessageBox.Show("Failed to load " + argParse.cmdRom + " specified on commandline"); + MessageBox.Show("Failed to load " + argParser.cmdRom + " specified on commandline"); } } else if (Global.Config.RecentRoms.AutoLoad && !Global.Config.RecentRoms.Empty) @@ -285,7 +285,7 @@ namespace BizHawk.Client.EmuHawk LoadRomFromRecent(Global.Config.RecentRoms.MostRecent); } - if (argParse.cmdMovie != null) + if (argParser.cmdMovie != null) { _supressSyncSettingsWarning = true; // We dont' want to be nagged if we are attempting to automate if (Global.Game == null) @@ -296,21 +296,21 @@ namespace BizHawk.Client.EmuHawk // If user picked a game, then do the commandline logic if (!Global.Game.IsNullInstance) { - var movie = MovieService.Get(argParse.cmdMovie); + var movie = MovieService.Get(argParser.cmdMovie); Global.MovieSession.ReadOnly = true; // if user is dumping and didnt supply dump length, make it as long as the loaded movie - if (argParse._autoDumpLength == 0) + if (argParser._autoDumpLength == 0) { - argParse._autoDumpLength = movie.InputLogLength; + argParser._autoDumpLength = movie.InputLogLength; } // Copy pasta from drag & drop - if (MovieImport.IsValidMovieExtension(Path.GetExtension(argParse.cmdMovie))) + if (MovieImport.IsValidMovieExtension(Path.GetExtension(argParser.cmdMovie))) { string errorMsg; string warningMsg; - var imported = MovieImport.ImportFile(argParse.cmdMovie, out errorMsg, out warningMsg); + var imported = MovieImport.ImportFile(argParser.cmdMovie, out errorMsg, out warningMsg); if (!string.IsNullOrEmpty(errorMsg)) { MessageBox.Show(errorMsg, "Conversion error", MessageBoxButtons.OK, MessageBoxIcon.Error); @@ -328,7 +328,7 @@ namespace BizHawk.Client.EmuHawk else { StartNewMovie(movie, false); - Global.Config.RecentMovies.Add(argParse.cmdMovie); + Global.Config.RecentMovies.Add(argParser.cmdMovie); } _supressSyncSettingsWarning = false; @@ -355,20 +355,20 @@ namespace BizHawk.Client.EmuHawk } } - if (argParse.startFullscreen || Global.Config.StartFullscreen) + if (argParser.startFullscreen || Global.Config.StartFullscreen) { _needsFullscreenOnLoad = true; } if (!Global.Game.IsNullInstance) { - if (argParse.cmdLoadState != null) + if (argParser.cmdLoadState != null) { - LoadState(argParse.cmdLoadState, Path.GetFileName(argParse.cmdLoadState)); + LoadState(argParser.cmdLoadState, Path.GetFileName(argParser.cmdLoadState)); } - else if (argParse.cmdLoadSlot != null) + else if (argParser.cmdLoadSlot != null) { - LoadQuickSave("QuickSave" + argParse.cmdLoadSlot); + LoadQuickSave("QuickSave" + argParser.cmdLoadSlot); } else if (Global.Config.AutoLoadLastSaveSlot) { @@ -377,14 +377,14 @@ namespace BizHawk.Client.EmuHawk } //start Lua Console if requested in the command line arguments - if (argParse.luaConsole) + if (argParser.luaConsole) { GlobalWin.Tools.Load(); } //load Lua Script if requested in the command line arguments - if (argParse.luaScript != null) + if (argParser.luaScript != null) { - GlobalWin.Tools.LuaConsole.LoadLuaFile(argParse.luaScript); + GlobalWin.Tools.LuaConsole.LoadLuaFile(argParser.luaScript); } GlobalWin.Tools.AutoLoad(); @@ -407,9 +407,9 @@ namespace BizHawk.Client.EmuHawk } // start dumping, if appropriate - if (argParse.cmdDumpType != null && argParse.cmdDumpName != null) + if (argParser.cmdDumpType != null && argParser.cmdDumpName != null) { - RecordAv(argParse.cmdDumpType, argParse.cmdDumpName); + RecordAv(argParser.cmdDumpType, argParser.cmdDumpName); } SetMainformMovieInfo(); @@ -1023,15 +1023,15 @@ namespace BizHawk.Client.EmuHawk { // TODO - maybe apply a hack tracked during fullscreen here to override it FormBorderStyle = FormBorderStyle.None; - MainMenuStrip.Visible = Global.Config.DispChrome_MenuFullscreen && !argParse._chromeless; - MainStatusBar.Visible = Global.Config.DispChrome_StatusBarFullscreen && !argParse._chromeless; + MainMenuStrip.Visible = Global.Config.DispChrome_MenuFullscreen && !argParser._chromeless; + MainStatusBar.Visible = Global.Config.DispChrome_StatusBarFullscreen && !argParser._chromeless; } else { - MainStatusBar.Visible = Global.Config.DispChrome_StatusBarWindowed && !argParse._chromeless; - MainMenuStrip.Visible = Global.Config.DispChrome_MenuWindowed && !argParse._chromeless; - MaximizeBox = MinimizeBox = Global.Config.DispChrome_CaptionWindowed && !argParse._chromeless; - if (Global.Config.DispChrome_FrameWindowed == 0 || argParse._chromeless) + MainStatusBar.Visible = Global.Config.DispChrome_StatusBarWindowed && !argParser._chromeless; + MainMenuStrip.Visible = Global.Config.DispChrome_MenuWindowed && !argParser._chromeless; + MaximizeBox = MinimizeBox = Global.Config.DispChrome_CaptionWindowed && !argParser._chromeless; + if (Global.Config.DispChrome_FrameWindowed == 0 || argParser._chromeless) { FormBorderStyle = FormBorderStyle.None; } @@ -1401,7 +1401,7 @@ namespace BizHawk.Client.EmuHawk private int _lastOpenRomFilter; - private ArgParser argParse = new ArgParser(); + private ArgParser argParser = new ArgParser(); // Resources private Bitmap _statusBarDiskLightOnImage; private Bitmap _statusBarDiskLightOffImage; @@ -1470,7 +1470,7 @@ namespace BizHawk.Client.EmuHawk } } - if (!Global.Config.DispChrome_CaptionWindowed || argParse._chromeless) + if (!Global.Config.DispChrome_CaptionWindowed || argParser._chromeless) { str = ""; } @@ -3368,9 +3368,9 @@ namespace BizHawk.Client.EmuHawk try { // is this the best time to handle this? or deeper inside? - if (argParse._currAviWriterFrameList != null) + if (argParser._currAviWriterFrameList != null) { - if (!argParse._currAviWriterFrameList.Contains(Emulator.Frame)) + if (!argParser._currAviWriterFrameList.Contains(Emulator.Frame)) { goto HANDLE_AUTODUMP; } @@ -3453,13 +3453,13 @@ namespace BizHawk.Client.EmuHawk } HANDLE_AUTODUMP: - if (argParse._autoDumpLength > 0) + if (argParser._autoDumpLength > 0) { - argParse._autoDumpLength--; - if (argParse._autoDumpLength == 0) // finish + argParser._autoDumpLength--; + if (argParser._autoDumpLength == 0) // finish { StopAv(); - if (argParse._autoCloseOnDump) + if (argParser._autoCloseOnDump) { _exitRequestPending = true; } diff --git a/BizHawk.Client.EmuHawk/Program.cs b/BizHawk.Client.EmuHawk/Program.cs index 051f48faeb..8321603006 100644 --- a/BizHawk.Client.EmuHawk/Program.cs +++ b/BizHawk.Client.EmuHawk/Program.cs @@ -284,19 +284,20 @@ namespace BizHawk.Client.EmuHawk BizHawk.Common.TempFileManager.Start(); - HawkFile.ArchiveHandlerFactory = new SevenZipSharpArchiveHandler(); - string iniPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "config.ini"); + ArgParser argParser = new ArgParser(); + argParser.ParseArguments(args); + if (argParser.cmdConfigFile != null) PathManager.SetDefaultIniPath(argParser.cmdConfigFile); try { - Global.Config = ConfigService.Load(iniPath); + Global.Config = ConfigService.Load(PathManager.DefaultIniPath); } catch (Exception e) { new ExceptionBox(e).ShowDialog(); new ExceptionBox("Since your config file is corrupted, we're going to recreate it. Back it up before proceeding if you want to investigate further.").ShowDialog(); - File.Delete(iniPath); - Global.Config = ConfigService.Load(iniPath); + File.Delete(PathManager.DefaultIniPath); + Global.Config = ConfigService.Load(PathManager.DefaultIniPath); } Global.Config.ResolveDefaults(); From b9d35399b7b75b7dd7ce451488c0265080875097 Mon Sep 17 00:00:00 2001 From: upthorn Date: Sun, 23 Dec 2018 00:46:20 -0800 Subject: [PATCH 033/301] Created some working small integers to bypass C#'s hatred of 8bit and 16bit arithmetic. --- .../BizHawk.Emulation.Common.csproj | 4 + .../WorkingTypes/wbyte.cs | 112 ++++++++++++++++++ .../WorkingTypes/wsbyte.cs | 111 +++++++++++++++++ .../WorkingTypes/wshort.cs | 111 +++++++++++++++++ .../WorkingTypes/wushort.cs | 112 ++++++++++++++++++ 5 files changed, 450 insertions(+) create mode 100644 BizHawk.Emulation.Common/WorkingTypes/wbyte.cs create mode 100644 BizHawk.Emulation.Common/WorkingTypes/wsbyte.cs create mode 100644 BizHawk.Emulation.Common/WorkingTypes/wshort.cs create mode 100644 BizHawk.Emulation.Common/WorkingTypes/wushort.cs diff --git a/BizHawk.Emulation.Common/BizHawk.Emulation.Common.csproj b/BizHawk.Emulation.Common/BizHawk.Emulation.Common.csproj index 0a8aa6ec09..7287faab8b 100644 --- a/BizHawk.Emulation.Common/BizHawk.Emulation.Common.csproj +++ b/BizHawk.Emulation.Common/BizHawk.Emulation.Common.csproj @@ -121,6 +121,10 @@ + + + + diff --git a/BizHawk.Emulation.Common/WorkingTypes/wbyte.cs b/BizHawk.Emulation.Common/WorkingTypes/wbyte.cs new file mode 100644 index 0000000000..f09a152bd6 --- /dev/null +++ b/BizHawk.Emulation.Common/WorkingTypes/wbyte.cs @@ -0,0 +1,112 @@ +using System; +using System.Globalization; +using System.Security; + + +namespace BizHawk.Emulation.Common.WorkingTypes +{ + // + // Summary: + // Represents an 8-bit unsigned integer, that is capable of arithmetic without making you weep. + // Also provides all the base functionality of the standard C# Byte by calling its methods where relevant. + public unsafe class wbyte : IComparable, IFormattable, IComparable, IEquatable + { + private Byte val; + public const Byte MaxValue = Byte.MaxValue; + public const Byte MinValue = Byte.MinValue; + public static implicit operator wbyte(uint value) + { + return value; + } + public static implicit operator byte(wbyte value) + { + return value.val; + } + public wbyte() + { + + } + public wbyte(uint value) + { + val = (Byte)(value & 0xFF); + } + public wbyte(int value) + { + val = (Byte)(value & 0xFF); + } + public wbyte(double value) + { + val = (Byte)(((int)value) & 0xFF); + } + public static wbyte Parse(string s, NumberStyles style, IFormatProvider provider) + { + return (uint)Byte.Parse(s, style, provider); + } + public static wbyte Parse(string s, IFormatProvider provider) + { + return (uint)Byte.Parse(s, provider); + } + public static wbyte Parse(string s) + { + return (uint)Byte.Parse(s); + } + public static wbyte Parse(string s, NumberStyles style) + { + return (uint)Byte.Parse(s, style); + } + public static bool TryParse(string s, out wbyte result) + { + result = new wbyte(); + return byte.TryParse(s, out result.val); + } + public static bool TryParse(string s, NumberStyles style, IFormatProvider provider, out wbyte result) + { + result = new wbyte(); + return byte.TryParse(s, style, provider, out result.val); + } + public int CompareTo(wbyte value) + { + return val.CompareTo(value.val); + } + public int CompareTo(object value) + { + return val.CompareTo(value); + } + public override bool Equals(object obj) + { + return val.Equals(obj); + } + public bool Equals(wbyte obj) + { + return val.Equals(obj); + } + public override int GetHashCode() + { + return val.GetHashCode(); + } + public TypeCode GetTypeCode() + { + return val.GetTypeCode(); + } + [SecuritySafeCritical] + public string ToString(string format, IFormatProvider provider) + { + return val.ToString(format, provider); + } + [SecuritySafeCritical] + public override string ToString() + { + return val.ToString(); + } + [SecuritySafeCritical] + public string ToString(string format) + { + return val.ToString(format); + } + [SecuritySafeCritical] + public string ToString(IFormatProvider provider) + { + return val.ToString(provider); + } + } +} \ No newline at end of file diff --git a/BizHawk.Emulation.Common/WorkingTypes/wsbyte.cs b/BizHawk.Emulation.Common/WorkingTypes/wsbyte.cs new file mode 100644 index 0000000000..859b0a563c --- /dev/null +++ b/BizHawk.Emulation.Common/WorkingTypes/wsbyte.cs @@ -0,0 +1,111 @@ +using System; +using System.Globalization; +using System.Security; + +namespace BizHawk.Emulation.Common.WorkingTypes +{ + // + // Summary: + // Represents an 8-bit unsigned integer, that is capable of arithmetic without making you weep. + // Also provides all the base functionality of the standard C# SByte by calling its methods where relevant. + public unsafe class wsbyte : IComparable, IFormattable, IComparable, IEquatable + { + private SByte val; + public const SByte MaxValue = SByte.MaxValue; + public const SByte MinValue = SByte.MinValue; + public static implicit operator wsbyte(int value) + { + return value; + } + public static implicit operator SByte(wsbyte value) + { + return value.val; + } + public wsbyte() + { + + } + public wsbyte(int value) + { + val = (SByte)(value & 0xFF); + } + public wsbyte(uint value) + { + val = (SByte)(value & 0xFF); + } + public wsbyte(double value) + { + val = (SByte)(((uint)value) & 0xFF); + } + public static wsbyte Parse(string s, NumberStyles style, IFormatProvider provider) + { + return (int)SByte.Parse(s, style, provider); + } + public static wsbyte Parse(string s, IFormatProvider provider) + { + return (int)SByte.Parse(s, provider); + } + public static wsbyte Parse(string s) + { + return (int)SByte.Parse(s); + } + public static wsbyte Parse(string s, NumberStyles style) + { + return (int)SByte.Parse(s, style); + } + public static bool TryParse(string s, out wsbyte result) + { + result = new wsbyte(); + return SByte.TryParse(s, out result.val); + } + public static bool TryParse(string s, NumberStyles style, IFormatProvider provider, out wsbyte result) + { + result = new wsbyte(); + return SByte.TryParse(s, style, provider, out result.val); + } + public int CompareTo(wsbyte value) + { + return val.CompareTo(value.val); + } + public int CompareTo(object value) + { + return val.CompareTo(value); + } + public override bool Equals(object obj) + { + return val.Equals(obj); + } + public bool Equals(wsbyte obj) + { + return val.Equals(obj); + } + public override int GetHashCode() + { + return val.GetHashCode(); + } + public TypeCode GetTypeCode() + { + return val.GetTypeCode(); + } + [SecuritySafeCritical] + public string ToString(string format, IFormatProvider provider) + { + return val.ToString(format, provider); + } + [SecuritySafeCritical] + public override string ToString() + { + return val.ToString(); + } + [SecuritySafeCritical] + public string ToString(string format) + { + return val.ToString(format); + } + [SecuritySafeCritical] + public string ToString(IFormatProvider provider) + { + return val.ToString(provider); + } + } +} \ No newline at end of file diff --git a/BizHawk.Emulation.Common/WorkingTypes/wshort.cs b/BizHawk.Emulation.Common/WorkingTypes/wshort.cs new file mode 100644 index 0000000000..04040691b9 --- /dev/null +++ b/BizHawk.Emulation.Common/WorkingTypes/wshort.cs @@ -0,0 +1,111 @@ +using System; +using System.Globalization; +using System.Security; + +namespace BizHawk.Emulation.Common.WorkingTypes +{ + // + // Summary: + // Represents an 16-bit unsigned integer, that is capable of arithmetic without making you weep. + // Also provides all the base functionality of the standard C# Int16 by calling its methods where relevant. + public unsafe class wshort : IComparable, IFormattable, IComparable, IEquatable + { + private Int16 val; + public const Int16 MaxValue = Int16.MaxValue; + public const Int16 MinValue = Int16.MinValue; + public static implicit operator wshort(int value) + { + return value; + } + public static implicit operator Int16(wshort value) + { + return value.val; + } + public wshort() + { + + } + public wshort(int value) + { + val = (Int16)(value & 0xFFFF); + } + public wshort(uint value) + { + val = (Int16)(value & 0xFFFF); + } + public wshort(double value) + { + val = (Int16)(((uint)value) & 0xFFFF); + } + public static wshort Parse(string s, NumberStyles style, IFormatProvider provider) + { + return (int)Int16.Parse(s, style, provider); + } + public static wshort Parse(string s, IFormatProvider provider) + { + return (int)Int16.Parse(s, provider); + } + public static wshort Parse(string s) + { + return (int)Int16.Parse(s); + } + public static wshort Parse(string s, NumberStyles style) + { + return (int)Int16.Parse(s, style); + } + public static bool TryParse(string s, out wshort result) + { + result = new wshort(); + return Int16.TryParse(s, out result.val); + } + public static bool TryParse(string s, NumberStyles style, IFormatProvider provider, out wshort result) + { + result = new wshort(); + return Int16.TryParse(s, style, provider, out result.val); + } + public int CompareTo(wshort value) + { + return val.CompareTo(value.val); + } + public int CompareTo(object value) + { + return val.CompareTo(value); + } + public override bool Equals(object obj) + { + return val.Equals(obj); + } + public bool Equals(wshort obj) + { + return val.Equals(obj); + } + public override int GetHashCode() + { + return val.GetHashCode(); + } + public TypeCode GetTypeCode() + { + return val.GetTypeCode(); + } + [SecuritySafeCritical] + public string ToString(string format, IFormatProvider provider) + { + return val.ToString(format, provider); + } + [SecuritySafeCritical] + public override string ToString() + { + return val.ToString(); + } + [SecuritySafeCritical] + public string ToString(string format) + { + return val.ToString(format); + } + [SecuritySafeCritical] + public string ToString(IFormatProvider provider) + { + return val.ToString(provider); + } + } +} \ No newline at end of file diff --git a/BizHawk.Emulation.Common/WorkingTypes/wushort.cs b/BizHawk.Emulation.Common/WorkingTypes/wushort.cs new file mode 100644 index 0000000000..3e5a84abe3 --- /dev/null +++ b/BizHawk.Emulation.Common/WorkingTypes/wushort.cs @@ -0,0 +1,112 @@ +using System; +using System.Globalization; +using System.Security; + + +namespace BizHawk.Emulation.Common.WorkingTypes +{ + // + // Summary: + // Represents an 16-bit unsigned integer, that is capable of arithmetic without making you weep. + // Also provides all the base functionality of the standard C# UInt16 by calling its methods where relevant. + public unsafe class wushort : IComparable, IFormattable, IComparable, IEquatable + { + private UInt16 val; + public const UInt16 MaxValue = UInt16.MaxValue; + public const UInt16 MinValue = UInt16.MinValue; + public static implicit operator wushort(uint value) + { + return value; + } + public static implicit operator ushort(wushort value) + { + return value.val; + } + public wushort() + { + + } + public wushort(uint value) + { + val = (UInt16)(value & 0xFFFF); + } + public wushort(int value) + { + val = (UInt16)(value & 0xFFFF); + } + public wushort(double value) + { + val = (UInt16)(((int)value) & 0xFFFF); + } + public static wushort Parse(string s, NumberStyles style, IFormatProvider provider) + { + return (uint)UInt16.Parse(s, style, provider); + } + public static wushort Parse(string s, IFormatProvider provider) + { + return (uint)UInt16.Parse(s, provider); + } + public static wushort Parse(string s) + { + return (uint)UInt16.Parse(s); + } + public static wushort Parse(string s, NumberStyles style) + { + return (uint)UInt16.Parse(s, style); + } + public static bool TryParse(string s, out wushort result) + { + result = new wushort(); + return ushort.TryParse(s, out result.val); + } + public static bool TryParse(string s, NumberStyles style, IFormatProvider provider, out wushort result) + { + result = new wushort(); + return ushort.TryParse(s, style, provider, out result.val); + } + public int CompareTo(wushort value) + { + return val.CompareTo(value.val); + } + public int CompareTo(object value) + { + return val.CompareTo(value); + } + public override bool Equals(object obj) + { + return val.Equals(obj); + } + public bool Equals(wushort obj) + { + return val.Equals(obj); + } + public override int GetHashCode() + { + return val.GetHashCode(); + } + public TypeCode GetTypeCode() + { + return val.GetTypeCode(); + } + [SecuritySafeCritical] + public string ToString(string format, IFormatProvider provider) + { + return val.ToString(format, provider); + } + [SecuritySafeCritical] + public override string ToString() + { + return val.ToString(); + } + [SecuritySafeCritical] + public string ToString(string format) + { + return val.ToString(format); + } + [SecuritySafeCritical] + public string ToString(IFormatProvider provider) + { + return val.ToString(provider); + } + } +} \ No newline at end of file From 34c207ff38e689dce820f8fb0c4b9fea7f4b9a84 Mon Sep 17 00:00:00 2001 From: upthorn Date: Sun, 23 Dec 2018 04:25:08 -0800 Subject: [PATCH 034/301] Fixed an infinite recursion in the implicit conversions of the working types --- BizHawk.Emulation.Common/WorkingTypes/wbyte.cs | 2 +- BizHawk.Emulation.Common/WorkingTypes/wsbyte.cs | 2 +- BizHawk.Emulation.Common/WorkingTypes/wshort.cs | 2 +- BizHawk.Emulation.Common/WorkingTypes/wushort.cs | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/BizHawk.Emulation.Common/WorkingTypes/wbyte.cs b/BizHawk.Emulation.Common/WorkingTypes/wbyte.cs index f09a152bd6..aeabe1ffd6 100644 --- a/BizHawk.Emulation.Common/WorkingTypes/wbyte.cs +++ b/BizHawk.Emulation.Common/WorkingTypes/wbyte.cs @@ -16,7 +16,7 @@ namespace BizHawk.Emulation.Common.WorkingTypes public const Byte MinValue = Byte.MinValue; public static implicit operator wbyte(uint value) { - return value; + return new wbyte(value); } public static implicit operator byte(wbyte value) { diff --git a/BizHawk.Emulation.Common/WorkingTypes/wsbyte.cs b/BizHawk.Emulation.Common/WorkingTypes/wsbyte.cs index 859b0a563c..183f4af48e 100644 --- a/BizHawk.Emulation.Common/WorkingTypes/wsbyte.cs +++ b/BizHawk.Emulation.Common/WorkingTypes/wsbyte.cs @@ -15,7 +15,7 @@ namespace BizHawk.Emulation.Common.WorkingTypes public const SByte MinValue = SByte.MinValue; public static implicit operator wsbyte(int value) { - return value; + return new wsbyte(value); } public static implicit operator SByte(wsbyte value) { diff --git a/BizHawk.Emulation.Common/WorkingTypes/wshort.cs b/BizHawk.Emulation.Common/WorkingTypes/wshort.cs index 04040691b9..7e0808471f 100644 --- a/BizHawk.Emulation.Common/WorkingTypes/wshort.cs +++ b/BizHawk.Emulation.Common/WorkingTypes/wshort.cs @@ -15,7 +15,7 @@ namespace BizHawk.Emulation.Common.WorkingTypes public const Int16 MinValue = Int16.MinValue; public static implicit operator wshort(int value) { - return value; + return new wshort(value); } public static implicit operator Int16(wshort value) { diff --git a/BizHawk.Emulation.Common/WorkingTypes/wushort.cs b/BizHawk.Emulation.Common/WorkingTypes/wushort.cs index 3e5a84abe3..57851100b6 100644 --- a/BizHawk.Emulation.Common/WorkingTypes/wushort.cs +++ b/BizHawk.Emulation.Common/WorkingTypes/wushort.cs @@ -16,7 +16,7 @@ namespace BizHawk.Emulation.Common.WorkingTypes public const UInt16 MinValue = UInt16.MinValue; public static implicit operator wushort(uint value) { - return value; + return new wushort(value); } public static implicit operator ushort(wushort value) { From a2ae8ed47fe53101107214b30f53897ae7bff656 Mon Sep 17 00:00:00 2001 From: feos Date: Sun, 23 Dec 2018 18:23:44 +0300 Subject: [PATCH 035/301] return gpgx tracelog padding --- .../Consoles/Sega/gpgx64/GPGX.ITraceable.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs index b6f867ace4..2fcef986a8 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs @@ -23,12 +23,11 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx { var regs = DebuggableCore.GetCpuFlagsAndRegisters(); uint pc = (uint)regs["M68K PC"].Value; - var length = 0; - var disasm = Disassembler.Disassemble(MemoryDomains.SystemBus, pc, out length); + var disasm = Disassembler.Disassemble(MemoryDomains.SystemBus, pc, out int length); var traceInfo = new TraceInfo { - Disassembly = string.Format("{0:X6}: {1}", pc, disasm) + Disassembly = string.Format("{0:X6}: {1}", pc, disasm).PadRight(40) }; var sb = new StringBuilder(); From 40d0ddb1c2260e974d333fbfa23d4fd5bc62cdeb Mon Sep 17 00:00:00 2001 From: feos Date: Sun, 23 Dec 2018 18:33:06 +0300 Subject: [PATCH 036/301] update gliden --- libmupen64plus/GLideN64 | 2 +- output/dll/mupen64plus-video-GLideN64.dll | Bin 2118656 -> 2106880 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/libmupen64plus/GLideN64 b/libmupen64plus/GLideN64 index 57ba873c5e..7432d1f408 160000 --- a/libmupen64plus/GLideN64 +++ b/libmupen64plus/GLideN64 @@ -1 +1 @@ -Subproject commit 57ba873c5e117a42f94299cb7ddaa1066249b416 +Subproject commit 7432d1f40808b22d3ef7e403cf7ae45b1061dcd7 diff --git a/output/dll/mupen64plus-video-GLideN64.dll b/output/dll/mupen64plus-video-GLideN64.dll index 054dc854c15d8af961a0a25028e16d05531a1e4a..c8eb531227c68a9da295708ffd0382d69d6f56c3 100644 GIT binary patch literal 2106880 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 z zm($_S<`fd`7PQEc(Rk}jv3ftIChOx-uY%;kP=nm|&?dL`#yC5!R55?6n8Ql;4;MlO zUjY4zzDMsiMM`pznLoKFXb%44gx0*Apw9u+c=%e%~@llc|uONL(PZghOzc;5VDI;oG| z1oF;tCKZL0gX4o<+W{}U;Sv|7qV66Hp&`qC$N38nCu$coMj1gSG|{%|SQm_t5^^ef zpjdQzZUNJY9s)^vG@|Eoot|}q3ea=-Sd^Ye*GK8mx$F4p^f-C`OWXH2|6wURD#iD1 zh;PI<5^M8kIxcM0o;eDFoNbNtBp}T-XcqDy!J_j?!(V!W|F&$Ptr!Cjn)I3Zg=5}zCdTYq?n5eimc3qUIvt=W1I>J@xDDBXP@lTt0 zLmmg6(1i&X9jKm10qq8=eLPU%42E)lsrjS6_U zDqD~6mq*>8`5K7ym|_s`ox+MG1?ZcFq0K3cNSLr>2HNmOU>HZc3rpx5MvX!U9RIrC2{!HM&PuGM}!1gB!O3jTW!|Mk&d{8QlXPrkl~V<_zMLSYBPIBD0GYif@$D z5R&cBcm7M!)lEtwkaeYqaDJ9h)L5M(K}uSh;2n1u743=!sd0^W`kDMOYghIJ7u~a$Qh2rUux_D`GY@O_mj!WYWJOSm{_e2D94rXms6$ z^%=i6JYrZk_-8naG|6TBH;4ZY;&C%+6)+!VnfP|QvOOB9p8w>sSx*q8)@sE8FWP|mz3Kox_D zFdJNOvSG;M)$G_2R@L%{r=*T|XO_6>&8gkg2Xcz=-Z5-9EHijBu?%?kIM&nL)oPvXmeH9$2F81a(`})z*>SB8Hn_dLpr2X?1Ff_WnOVc0S{}+xLqu#UQ zydm>=rv#N`dE+o}paiF$^idCzI3FTZ?tmwKY+vN=4VKpA4f0!XL_drZ_*)`e|HiR- z86*8iXv#xN zuy};c3?U#s??GH6r&2G&>coYloqDN~}~(#Ekc>NHeWud7QC1nY%g>=j&_3DfqjM z38e|Gwen$-ck#}3R`|)Pz1Aw6($&kC`6m=(#Yf#0DN#K6js9Df6Cv~dw}kjDflWza zYm|~Fm>1}{4p|PQc|;Z{Gm)KzGb<2%G~vy}erAYb-h%1) zHuM+mw&x)}S~0pT*xZ9I$lZ-rz&b%vCbiTA)q4)NAntzBIt~`NX!Iz-=z)==EC(Y9 z)=xhZM`WOOVNacjd|`4RA9D@hlaRHTtJWmKgCn z9lxNmr8Y8e;(gLT!S|PEt2P7X&td2a&ppF)1eh z5s!+_i|5*Dd<0Sjwztxhz@~^2X{Z=81PHuxwu|CxFrs^qn1|E%2-1c@JLU`Lc9;yb zoQ%3h-+7Yczl*m`eV4`=L2~ZRo8I7N^Z`q`=lx%?&=#{%I4N~_Y?5Ko2U}lI4;YPh zEBS{P=0cyR<6?sk`wquXE?j`mvP*EkR2v6No_a9^3ttg-9JrduBY&a@YOS z%I2PEZz7d#D$(BPKf;`{zD|oEm@?AxJQ)>W09nu;)tlT-m$Bs=SUgY;iv#sxaTA8c z}?Nz|`X19rhp!r{yT~6y2EKQ)c zClP|34neyh3-2TO?C6xRAtr=U9kgL&-mLB3-W#h3v_W}P$v&x=e^jcz^7l}x+N_mt zqqQNxC$0B?Ltmp8rI(>1=(L-(!k4)VSS$GoaQ^pY*GEeqN~NDi^8KX}z4DZdCUsWl zh3^0lA>-k>ol@6-La5(4M)EEPdF>8+fIy#>YT#AZ!x+*A=qOZN+?kN1JaC$h>5!F5 z90ylRXlIJ-bDj60v=TRZSm5vIVNl4q6qqan=To4F0{TDfhfa4*r&%5}BVA~RXtIxt z-PowL-uEOf?_gmJ6VRK*_Sbw*{yOV@f22D-=#?;Inu(%v7KLKNlS3 zb-Xt+9*wY>=21tsaU-r#LeEFF%>AlkfL z3RlEO%{QW0q*ToBDdw%(qOH_?`kmO$O3X2qsCkg0^(-#-$1>mPiX}B{BdL)DYbjLV zX*&XHT7&K*=>@G+Sd5^a+4SZ}9(h0cwkkLDt!V;hsQ zAO{Uz^m*#;S*}^LXlFl^cB2!W`r*Hc?mm?Q_shU9C@@_HhEc%7fjO=dSRrnmjjIWY z{Jt5tAN22*IQR*`bzMQfSe5z5=e$HO)`-OVHK2baD9!y7+UgU0;=G`C?mk-6pj9Vq z=W#Y{-%0DtEzb;M$kMO7TE6>?Ggs3t!TV&88%KV!uSYN$=lpx(oIj2zMC^Y~!58-E zbF_E(CRE5WfGIM|?FWUL9opmBk7FAhbP$4VEzDybswZ7d#7aPqAdL2*|3r3i>s=rw zIo^Ic1|!6oa%XZQ-qb-t+_7+Q;^bgT#C`|TD(Ve6O8yObzO!hd0z*aAB1je|6K}}# zx01Ss^%AwBqAbOuo3>c#@4kD)l|}A6tbdaG*jNea2^jfbAQ(Q$twJ=K@NwrN22fpD zby}~$z66;mhx^CEPPj{gw&xX`JaJ+ZHr6q3s4}wxd|T_n(F{~GVt<9IHb+3=b>`mg zBWqhd=+f*%fNmw93zC*oy_{@wcta0ll3}dpq(00U!U0ai{$dYe(|8!+Zd_^~pB1dk zTn zF}7Gt1;xA_jX{y3bS!CLxvZ9+EO`pCm>}-;-9(m7iIUwAJ?hy&EBh6=7mW#eA&z=B z;BN4p9L#P}0zc5*;F~xY_<`;QPZyXiB!-vUyU7dxSc;*Avl38ZS_My&@FqXYu((A1 zi{?L_^bgTNa2yGT|FG`6!GlHY{OuSiLrGw3VRCB#nJW2P%a(Z5ZJzAy-cY~Gy()a| zs|_A3b-~adhjT{}`bdM$s2T-jFy^n&8Bj*Oi?dsRr@+lFhVvuaJ>~{XT|D`lyw<{6 zm;oMZA({vCH#9$5d?H9Nd$a4j<|Zs(J`Y<3z@8Xu6kfeXXVyF0Y3qaaMr@D;UFdNx zo0fwrRMz@>Lr-EESM8}?O?FViBA8li@5JY;cc9o*iPkQ$#e`K)EEtO%=~S9a-y+L^ z5Bm!+y}Iji?VY_)OCjX~CGg2U;2x!&piSC82nq&-ux=i-Vwu>6MhcQkrRelUd-lmV z+lgr4^S9h+a6?9RRNUDEsFHbNvI#HsOntSkK%Pp6XX1!{E}}SNvXcn;G|Tvc4X-8q__cqo3i71 z=#V8_P(g!RPu}6yiclCN-?*m|E$_-M%eytcyeR&VF7Zdl<9DSW^!@WnF@Az=d&F0h zE19-#u+ot_@I)li$e1U~hf> zI22OVhVp@xJN(@Oi&Ek6G&U?zz8!OqGEA@qY2X+FT#RM-#71UNH* z6W77ot^Y*NqlYZdf69h|;D0*OYU_7(!vE9p=Vp-&__Og7&afSSz$a!RaQLzEJIdc>jXC*Jvi@r9Bk?bHd;m(ruurS z+k%Cu5&IR$4;)nO#~y|BZYb|de6)<7(hs)FlztKW*&Ls)+FM7=jE~Qt_>74CWP*{q za(wAbz9$NH2>v>Vzqh>qGx(b%vH^eVKaS_G6hE-nCd4qE*(=%H_ z)&}CGX18h|IcBEG9l9aW3nhWG7ErLicB?LL5%$+^wyvI(J~wbY!EY~8kGtL^QFhgR z)6I2cSJ8PVutcp|#`HqV;pOxEP5zWXo*A1!>Sy7hM=XnTW&#Nhoz{n&FjPZm&MT_?%HPvHdQK`t=Qf+KuUlR34$i?l z>;J)oBVxZ0{8K0Pi^E)$4$QI)!fbR07p1$@UBNPlQzViBOh+7MStc+SWf5kRJ6M(p zKS{wwSrPktz+5);vn%i(5DuJC2QQ(;3ang+#R^B%S&lxC$N{}e{rfyUTp}hHJ=c<@ zpsnBeGvxDTkqzW?f%t0I|Iz&)yE3B@>%#N{DSNy{Na7;Al`SOk&k}MgL)xjySpTjl znCw7Xqh~{?e7USBt<_DS9KAe+l%=(D4MI_c8B>E8l-$VNy4t=ll{&EHFBi=;1wKt6 zamWsor}p;`RV~*cs!mIr8`#%lZa_=+cW1>K?m4%rb`4B(llAKDqWyKHkxEJdN~QHj zYDL?(R-63`OsepkwgQVk(HdW&e9;=& z60(;e8SS+|v^{bH1xJR@G$n}k@S{C4aO9}ECfXhjvd{k`4! zg*NoU{E7Yimi)qW-?_K~<3@Y9ap=e$oY*f|m<}t-5wY*!l3x7{(a2+DBP;KTMo#`gZ{%4L(srC6u;lHdB;<33%&DOEJ!%tFNP9bt8r(%UXOw%qC{I;6M}-){o?= zPDAh$bG&5b7drfXAXu6HR0vj3a$aARW?dkWsS#(vK+?D>mY+;NCwA5>`wv9x;m{V&_b@-e|!To)7Nj=F>-0( zA9uv^`wMBPbC@uKP0Yz{LxFZ-zLbsf^~~K7EE^TE&!mDT=EcR05pl@gg*YMN7&LS% zv`hI`p_QZKgOlX@+08#gzTF}l$oHq>tKIm}&OUTkyBv_cFYxRZxfq*%RF~KT65?hE z*@%ZFWF$knvJs`dqVM0SmKSqpnsOsUO{N?$Lzs$(3y7^{^HlqTh=hm;{m@31p|0eU zP>O0_fOx3-y8TH;EZu(m=m=qX87sYRe>Z_ePB|&B4BvEEk>QD=bqKTwrYTx(5k`@} zQBpSU(W)HRPsG72y`SUK$p~;GUuvwnYCjo@NB{- zITgnozBJYH5^x~xV_-bJLt^PnS>(WO-tkuwSuAooTTa9LL7pGW5sF?r3!WbWHCfjq z1K)HW5UtfOAV9<3d2ce7Sj0nwVZoo6%^SMp8WiYsGk zm&S$fGvMzE`<9BT*kC03XIn4y!2$RGbx)uo=8w`I!xzd$K%q{TLk02}%LU3Y76mq9 zjO}a9dY^__jJv(dV46)w?$#{i7b~*?8F?IHWN+;%uR7%QE(q82ng}aJA1gp~ZPK2h_y`ifCXukTHGW0UH86PPLLJ6l3Z7;?J$3i*WM-+Br9f+yKH&g=bn4DwR# z|0ERZ$GxNd*f0<553J7XTT$??9cq}?K>XN{w@f_`9EKU0R#Dy;E_a2^n5xp^JI~)D zc-?kb=k;(2`J5r7Ux!J^4u+78kR>6t48a~lC$sXHzHqCS!i#5;z3x)C2~}ISKUMI1 zkQlh2U2SYaKZhKF-xv7cX(>;jY;MdFkp~56&Eo<}(-U)b49lY@ruzmIsdbpNV@!tq z{F=yM2kd$p=GAR=`+Eoh(2H_VQ84uK1?Ea%x~yyW^(^a7KPd~QsuMHe`yKOsx0-eZ z|5$SIquMXTUzDFq<@e8@lEt>?aJD^j$o3rNOAk(gT~G+SU}8?NaFnn+uR}pGEumYK zU5>YBZI2so^PnfSOX)UF`}MHX$;*G}tzDiE{7QVa>u>sai(g)lfek4qX4kzdWa86< zx=hTLkZlYhnV2OZZ!-kPg6%UTiP}Qe%DW)?;;?Mx zZTN)MLjD-Q1|RkTFI|E8UEqrZ>!bA$LVXC=2fjiSN!_K5%)A_bK2UTKYu9fEGA3D@ zH;^EsV`Z3pQ=1C$q5;k3!-cASZWfJhFoNTSPd65J;~i?%UI-KxQHv2v7tvQ3YcOLu z>h`A?2jWbc5~0V080*Ldlvh^W{zPM5!wGA6#QsZQwOO_SD~W8=6AyFqP1@8eNA(=zDJ4RbR!nY5a{=s`QOrtH82>B5jgOc>ANsh_iOSPX5 zh>)L1eV6vp@ApG9cvVY}L0rI&z{W_CTKxosker9WLq}@@yjIYHua#U=hkFR)D-rG~ zbd!sg|Kqo&uAnU2wO{mpjB5GoK*2!!$iZkUI>oCbYs0WjOBZ@lh)ds>;u#yW^_mT0 z!VuH+?F{Pg>3!M^wy`Vv zYwac14m5qMSclaD*8HutbOYKvwoDnP`DxA;U8W>`Jq7cp{#yHLomT#vb@@*bU(z0d z`9a%guuR2|Tl|!YpWFFoSq17#UrN)mN_?`yZdyjS?^%T}qYDvIi@&-~^qx#mD75&? z64HkuWWTPG5EDa4AHN_WUw=ud+<^Q`LOx(fDIoupkc|wv9gx~AQC1B>?ymq50B)7Q zzcH{{0N<9t2N}4WfbERtm^?tYH-1>`t-Wb~YsnX+)UXg+K8E@{W#K@orRZ*)MHT}0{D0KF34B!5+4!H33<*oP z0f_` ztV)8I1W|)p6>F>1s@ym#h?N8v=J$QhxigswVNvP(|NQxU$lQDGy=QsObDrlp&v_PZ zR25fqK^0fuS3UBziBRX{J>-<4ierdDC{)%e6f zs<YdLTt912K{3RTb5#RZQoro{1`EapOu<@tocm)m&36VB(&G-g?XG0x}V&YuhNr+hBA z@q$Hso3v3A-4<8)EMazjJ$_EuYk}a7`dFA z;BjE&VlF_ZoB45O!NZZ*X4E4#naL7V_dxVQM3^dVSRZv6x^HZHPkCDP((|~Sz+l^z z+oT9WlRH~c0C%ol{_fts@cWsew?%zeS?4>B^>|bRi?k(Pa1Ygq&Q~QzC4J1>mx%Ie=;Q5JY1ZS(dsan_EUuy26VvdrM$4Y}z=rv+|UpcRy zEorM28)A@Mi7$@);+dxH+td6o@fi@)NG4{EitWU7+_W)4%@+bp&__><7i~|JZNpG^ z#)0Q2#{3Xu!i-KRo;^G1e|VtxO}KmF{c(r=K9yf^pc*xXG)>UFWx`yAIZYFS3Xvu( zR0@)C4QM7;m30$xE9)lr0BzoX3PgH7UhwR{1d)1EVml@4REg{c-g8QRqe_Y?`M@c; zN0kV#+3l3vrb@<9vdbx%t4d5tK5|MfRV5ds)Zi7Hv(Aa=DJ z5YH58e~w_c91!DiYHEKT&g{v`rnpq3I-gT}e0gl~BZw^6?vKpe=8w$T>W?gFt~5?^ z--k=45TXowO22*aKy-GlsAQ{r(M$WQWFh|Ow|~w)&^T$KBoHDW;kCsj{?c8NO9`RF zQ!}oZlfZLXz&@+@cTnjXwWrJ8#p4g#-G2Ke?A@q+kJ_zUsv)X34(HD;W!O%iVpq|e zEH-?pDjI_QjG>ho8DkdY2hWpCOZeV?f>Ypkn%vdWH*0dcZ1lHr>E?L;SZbN@g(!jh zDq5XooZ2J`=yg12ZOs3|D0z+F3ZvwO)}K>mhU@c#s{?eC7`z39$XjJK;s z^GB)RA#_d!!&B%{SqeR3Qv04?7B6`9pE3+8a7zV9mHDPvRCH8OnNoq7QbDCufL!on zrvlUOi3Bu6Jn<%9d=sX@z0GiAt}pydwkI6#X52>bIqc*fD_#j4Dvc5>WsMRrRMh{( zWjtqrn1W*jcx~|d z%$2{>g4p-|128S!B+Jv2n*4~Ji^_lG*c&_1ULH{PyP`L}g3m_b?}|;VP;6GS9~;4_ zYr_)>vOV~(>Pp!Jqkf4_%N3%XN?*Hyq?ohe_%0N9ml=IZQ3J43iF;v7KAPrZI7F_>0&ETkBW)H`tTp1q=3B7}HMJCngcdkgjlbia^mGVwboLZLT zV+g$PkIK)_aUuWcw_=az3|QIwri6-6`#OhzUt5e7Z?L!!8&bvDiXd_R==jB;4^(bc z+l8)kI097<&bqIb;c!J^7)^jQ8k1u4hMloj}_$~SwHF*Vf7!&QGzg*!J` zw3~U?VBR$NtJy(+=$$! zYW-Gvt@<@xv3@IFu;K56GU81Y;|+F~#_i=YQ80J65PDMxy@)Z&5~w5QlzVE@LTmrz zMw+>cA1rO^*%Zmb#Pc5Lg3wlH|Pju-J7esqv^liXF3!y)QAdcB}i z_oj);CbDUwGKpmVzx9|FzJ5Z7#n@F6UX7WM8{%q@oUy)0`tDDwX4teERR}FNH!odsHmq<&$ zdql$q91s^163RAkDUK&x*6Zp2Xm=OAKdGzUd-iy9GD8=vual~$97fg06Z&pHz`Wq< z3NS@d=jXpqol4iXF1}vT)z{(iySg)#q3_9T>2$rpA{<;o7e&o8?O&(Wx|6g+^eJ|% zhEQGF!+ssku`l`-dm#qxsc>V+QXRL1^lO}Had}_@c75G1#^0Y$3HI@iDBKSn0yMCsbVRn&4@Fs1=NcC_RpRfp6Q(g z&I9V#Cabx1^lOT0U-g?V^lJzFzE|q^YA`2s`8}TIc(LJQ-heA6VpM~PLlfy5aO%yR z&rZ3A?{SgX`8U)oebGlisfN$8^Ys>x6mhDP@IqJ)&-8>tvvL~bkvaP6768O z>`RpURy=loY9zE>`1$?hyVPe!d%r?M?11(v->wtTE#YX^fN$4L>N#>#;MX8ebOG*N zJGSFl)*j2X$4U_)3L;Mw*YLIYEL+nMIQ!TOxLx757IQNsVD0di{@d5^MV2@wj`EQP zgNV>wg#+PH=-o~!FwXdMJdOufo8!qv_yY0d!asqb0T{OqJJjLL_1tsHi%a=)VUyJn zcsBeCiViBB>tfB_M)Ei(O)9==G1FI=B1&ynUEs2$(X*y}z#Dpin6Rh4!PlT5hO zDamb7xuEv>JFa?msf0#BaR*ksARb`}?=TgXA=mzut6v78RKzo^L24ukYMRUBA?x2l zFqVVVzdifl^(%a*+XRKw@w3@QRKI>S3tw#5f76(_TIgJ*N4tLRxsi?^Z{iS7ob;2* zWeN|to<7-@sM?ckWPrX(@j+|&Wv4ZYzATv?Hu`Y;UP#^254MYh24LMzG#qAWZjp)K z$a&5NeA!my775>=lEzvEZ>}Abag}LhpHNM2Ra_Hpwp#r&#}q6H%*a^GCOz*aF6n zj1L_3oGM2(-%Qct>dRedq?Kx#*Ae zi-DE)o4NfmW>-dj{jmBnuo9J{F|>xUNf^)Bm1BxMp*=VPpBQg8uWUB6HqQ<(%v*U{ zXaGxE*w_4AKAx4gGS=PB|CL(tftB%sNJIaOhx0?6)ahRQYnCf9sAcu0QTYOtL&wb^ zc!qMgp2^;V;1_uFOMUEtQ8}13OL|~3lWBL~!;5P2{l)|V?fMgrA6EO$1G~2btWAFC#ex9z=LFySM*(35|DF0L7;Cb- znWLJ0#;VP}czpoRXks=m#PSlukP>kTm319;4QCu`E+v5a4t#=E5OK8zqMko5phBtA zwRFeTet2V}{`EMCb+XiLDTIBmcw7IcS)OXgRa;#{Wm{fj2KEDwABEUV;@RZR>qiew zRAU+LbEAD~fd?hQpu9}iqajU^A0`vH-R-iKx%Lz03u4)y57d=fw~@P40SUdiTmJxVnrfQs%He`s?L`)PM*3|QSd`< zd=-O=gTvD%u5~&n$y|s3!(5NOOwD!PO>%RJ+z|V*xU7!x7vlr45);p)v?U^oJ7@X|F zmB}vPX}>w9yFq--tSw6~*WK_PtQ)fq)D2^e3Pm(4*^S?D#A|;_;#Hdexg7T@2)rW& z3IboN`FF4F8VWw^ZvupgCnSJSBCX#{W25RTt?hy64LQDs53~FgZGK~t?X%t_SdvjI zCq$$6DE+tJs-T~HbDZjDJ2Mp`?h*0JlGD}HdAd}T!AAT_%XCC{HC^Kp9o3QY zvs#?#l1wt3+x)CJ(a|L|X}|D0phBoR4m<)C?;6XlhwKPJnW;jF2@x~lwCmW`ijG-$ z`dp0_Q?G_e)o}cg5%hMvYx(omA$G>A=1881;T;d4G;__YX6syuV(UcbRM!%rbMu7~ zQ|+p2VxuswX!fTJI1xg5jAu`y1Q;1A&&V0lPApUc zjO5ELCzHPLK4E#8>S=hN1Q_|WK^|GVWHr7Hv(khgGA|J|h!t%{y@hhY@EmS|h_zCk zhFA86*gA#LyX1^7azSs7Wo5i?7Ns&6KKb?oAWkIh6G_S@?4BwRA-2&@l|I_DFN-v6+`i8auzuk;P6!c99~ z)npb|^Hqy*gDrL;?X6&w;G}}n=PODco@PcLUMISxr5`Az6`XmlBMSqjxkbiFbGI2M z>Eq*doFSVJ^QY=Q{#4f?C$E~6;M(;{nZcfLuidRZ9^&)nn>-c*L&px3x`3neeh1qOwCIGf(f zajuEnBGO8TsZpL~Dd&la7TwZZ6{?pKInIYLxd|mpaGHz#&<|5YO1F@YnX+!G?N@)q ziGF4A=y*La9?h|6^={*|wwunD+LZC4$GGTeiZ87A4O%p@*l04JvemjpLN~poNWZC+7bv$s1A-{03Xe`4EMg;qxF{y7{iTqMm(>G;C;$o2)O!V@dNlB`J;+B16#3-D za`5x`!1Va}bLG3dc^oL)FFv?0?p}iv{TsoHNyn53#Z$gV1$X-2Csgke!JY0=x21{T zPRrD-4(@b|eiKP+i#=mY2TZFKhSE#Zp4MCX?KOo2FMvq>|{}zB_Trd$SR_ z+!98#8=;1*sG=^A$+ec=bqK9;b{*y5?)+W+xpg}jJz*<i(Yt)TJNP2xc^S+Z}QzTmSq3Dj2oXXVc7 zDX?acJ+?kk34BeLTIroDKM{`>Sp-c?VL62@BCMK-F|D)c1JQeo)_W;p(n9W zY`3O9*6@B|&D)u6Ps?$mI$vtGZ^Y}R(h9hVw`fgWC$?~JJprj?39;y#>E|{;+AJU~ zV$xUpqh56?MLw>7K{Q#1rv2Vs2_0=cpw9S-fVw+ZKmW11YMhu0m;Ye6xXQx?x82k)Y_KrKj%4*aGRMeaBp=ab&F*;UeGZ$)ZP0StxNi>#8kd);2U3~;Ul8-9* zD9q*%rs?|M_ot`wx7Bpg?)3nOmgq-U^}w2>o==9*I6TWC!3{=9yD$dV?@xv?K#AK~ zH(M#Wl%;gxW}~ESR9sBG{v@M5SoL7IRFA`@de1HR=;#x+DmUP5gvI_dXh!Y@3HN>! zWFmfEA$Cn7s|8M@_mM&vQZ=6br@e4fd2~u9?F*OKOt&s-rtL(ZLHtXbjf<1~ef3%y z|Np=+jOsS*D$ueRw@nd|nl8UOx{D4F)Nze9|2equU#U4galJelURX0Q)yi)Z-$%DD{p$mCX z+t@7qAOq@ZHr32w9Ub1+L(cXn2v+un49d4Nun%=hE<)>BZBNtq$na z>gipyIw8H)YrASS$7%H}T6Kin;j2U}WezA}Bobv(O+ak`KIh!I?TM>kV2)(VCRB;H zvcxXst)##U`+swHUkO@QTTf-qR9*6!h8PTErc5ZJT1(<&=-Wgn9ZCp;(;t)2l|)8{ zW4P>-$Iy-WEuRnGTperF39RQm82h=b^szjdafX^AclnS4xKHd*L6=;M6qYeh20gtA_ zr-$4n;q&>QlknLkmuy&o&npcFh0h*Y>YdQGTN*%Ir9bEbK8;f~d?bTU%0}x%j;Zb2 zeoT~qiODGIZ$Eq*JsEJNupcZs>xKX1l@{xbNdx@nMa6%N3nA!zQN=?IcX1Ugo;7NZ zY<5K7SMjkCj)GkQ659*9DlR$KE`Usf#){9_=5K`soDT_au|E(V1cPBq@tLmGIBnle zXGYIS<1(9N>XMt2bS`r?2f6mI@6p>5r$6yV>5q)3^%~(fOx|TCb%5LnaVUY?m;5Pp z?gDa`oVzpSPUH4y^_rTyf%ONPyBY>=pFEzqORzPi_&$UV=5;S1h~_Qkc;5c!-RiKz zA%8oC6?H;`&+Ag>-Bp}+>wLH2d_w}ZT6ZeCFU+ifBN&m_gohj!Gt<`W`{ySWr#+Qk zdWed=Udq{adzO9sJf3d4asVv|%Pc_WOMl>j~=$(8!VhP_Ko7x`N~r@{C398K}N>dgGj5I-yV9a^eC0 zQ8&B&IdbYc*CXq5x7e_L$ZZjo4^zEkPrX!Wc33@-;Jim}muX-VlJ~tk)D=|~i3o}b zjMC2$cRHf7o{exybk?&GUtrgd8G(Aqm&KXe%XYOuFXg*c>E9`x7bzb{kZw&vgh0n{ zznd@U+dd4B0J^*GnuYwo5%&xMej&l85qL;f9i33ZJ!^168NY6RO@6ER_4CUy$w_Rc z-DZS61z8m3FX|=vDc3($+(dpaXpJa-7jYW+DriQonGTIe3emTcI)jgpOgQ zsvE~#Z92J!cAf=x`#1+-+dN0CYUhF`?$q$C2RdK2mR89$=_Js*)TnEFs-li3;ER+9 zzWC*32VWl7JAtsSK;g^jYRYN{>I#xiNC6GLsBgakz8s@^C-|ZyKL=kH)+X>}?6L#k z%P&AFvgCE(izK85Un1A%f-_LdRGcaPQ5w$t^AG9Y-X%jz$C>l)(m3<%BmajuGlMWK z9XLa(v;@xlt^6=?=C2q590X^ac&N;T?uDCRzzwQtyj62 z;Pk@oB-Gs-^<>AgM6o~pG^vvVcXZYxqD zn~O}R`{+e{9G_vC;pGE(e zvQWNqMeoUJ$()Q(mKlE`0fpcq`{v2WvfnlY~8&=bv(C}^hq6wXBh^>523=XqHH&TGUVdv&!BJqlMFgX20cj+ znt_@^;Ho4nxA-Kh@nX1?s_%-<`2`9u)mD=?v8Q9QNy=xrVy8KqH}8ouvjD~Mi{xzQ zLXxa@!%hmnt>*cIJW+Q%LW;X7ypfW2ymbIGV}>`>NH;@0Ofb1MTWteXzR9`1F$51V zt$S7b)^ZuS4~C}FNve^ngp%PUKzo>j7xu-)SRb)Wi2u8*^)DiwkR`D75iZ0rEwX3; z|A(Tz8>$UH77eJZTa=UdcrYJVGNXJ_(P-4>^A)ZTcdt1*)jx(ky=hGyV3t0MA~@5y zU8Sy#UQG1)&&jy5QEg8HL(PgU^9j37WO32E=GfmsdIkMRuvR3!V8fro=lLA4dvof5 zCKXzIg(mg1v}cudqk;Df=YvH<^%srVP)K>7@6g=kkdjwb7ceF?`=e8H_}%KaE}P@e zde&!U`6@Pr`uHPLck=2Ee($uL4UnBhd9>Elj+X+3f1 z1s)S8iPA|ear-yJ6xb!vQ|$xP+Il|{k3eT$k6HWmD|J+Dd}%&#{37tv0b)rr&I~uYF9J*d!6M(VLSY0!ZLQ5sUW)wOA}`0I?WbzxnQT zHD-dp$ntv~O_`Vy!X!MB-P)J6m23m^C5V@2u>8En! zyv06-wjc-{#c3Qx=%JHORxSD0h5ji|mG3})3e7RO^G^wXrdFUQUa?VD@Pw*3r~;je z=Z>lmvs?92y9kPO=`sk8Vm4woGmnSC>qy9gU68&wY43009?8C$Y-VV@m$ zj5OW;=-T4fJ1F2zEs0~i1cab~ttTfa-~g3eo?(Zev8^GYJC@`fCxGEg!Be@eCh0Wk zX}U>@i6Ne-85cr!KI;5#zNkr3gr1(dGOMw*LQ$;0)=+;&C|3yLNkW7KuF(kzf~bkV zW(A5MDh{Anfn?ZK&>QSFo`Oy($l4$OyKe@Td=*a{-ZxucWfi;YLa%9hm;*I3JWpt9 zc$L9j4ivF%6gkbI5KZ13;TA0AHedJ)p*;v4IImq(xf3c$y>hqSOK76{3)y;wH`H-Mz z<5lHCf_}(XV!Gr=4PJ5t>P|Q<)|=L%9c+(-r=)d5vsw&-Ra^r5XUDVVE80U7r2A4s zDH9!c``G&HWcbzz2>L~pTg9WLAH zsOzscscnI2T{2VnB-BQ`lVH7#0ZTr4X6l2?rgqCzrv>>dw4IHTw#zPQefK87lH52s zqd?v03#_hswW4#j&%Zj5WyLsS=x_YEc z)a3CU6LmAVbC8KjIp{1zLI7oNEl~$POjZYeA9#K$75n;z^Ye-4E6vZZWRNmHy=MJ4 z=0~hux|$#N5tyINxU*pYR?#s(uZi9$fr0zy6g`ajxezg9wV-j6yDnw ztE4-#xv0)$ah+w#GJ!1D8~0$M&BD2wD9gOXa?zQ|j1mq`xkKTrdX*y@12!FZ7H^e% z#rhEfSWS1TUlu{ z#N-I%5wB(O$inIHo=>iyBQ!rlDh@e6mhNt|J?{z`_y3RPr~2#7&-YLHCiA26Z>Q%7 zQ^~T{i>}=sf-@?@!}5m(Wxz5t%&v>)YQZGxs=Gm5*<~!{6?>k}4EA|k9PQ-%YyI_V zx2LuWq6|vrl|Ep5qR_P8#1&H7Q%l)t?|t10Ef+fN)sIcKm+!RaJ5YNa`z`I>bteZ^ z($&1j?^Da5#qPtWPE)0Krd}TGjaduf zBwfD9kQk4;8TsA}qc1yow$B*fiX{BhRaD~yQjrs*PR?!sO2a3S#E6hcXrPRf9xI;9 zFMB-K;G~JdOjS}_yi5JQFQH=E<&xoI-2aF=x(ZnTlFdws7=%&oRuFskr(}KuM0WnS z#2~BPt}bK)!sBvT-i+OC6*dW6$)}jtFT={=*pl~0M}~S45{}u8k^{Vk=pEw9_xosPZ~If0M27L&vhXBiE(kG z{U)=9&FgOC;sjW0;GhQvD@VqM0Bg~ehX!i`o)X3;A;ER5;MvD?UcuVqP}t;lP(hGX zui#(pzk+3r4n9ewwyo-14ZIaJOqmEa3~TOoNrPg!A+g?(T~WDpm+6YZ$n7SBG%UBHoJw6^por@g)3fJA76T z4xfnwzaf0SJn>NQnG8wn0zRw1{ng+z8g8G0OJ4;(uh0D2@cCBZH-yhWzjY}1l%Ccl zd}e*eNM#O(LZ5=m4+b93!O-XN%MJpbB>nGteRUu34dL_T35SADuT#5*&*-lNpHDCQ z+VJ`5rC%RD?-iuN=U>VW8qUaZP-pt{MA!7^XT@E>=eYnZTuTuxb`1SbiWG4`L^1Jz zyhuq0?7pi{;YhzdU9Lc?+c`>r>M+HPmv(?`3jIwo!h+I`>xCQpMrENlCh8w}CHoKb^*xYvUFlQTVO%pb`O(s@p^9FQ?spPTF zh+fFaC8o#uqxP7Q(1ZMch@KEugs-?qmA-s-B($8e2NC5F>!z*}zWVO5Xf6F#3(8|T z@Q((T+h?7uTIBFUoV1+-q*du^;Onh4HSlHXHmL@#Qny+ST&dq|wo8Ai4v?Ch9&Kp! zt|CakYOzM#jhznl-@ikDg7>pAK4^#j`Gd3$y`XNB9onF7b%!3+Z#LUMy?_4>q0V2< z32&0q zbw5<9@KXII6S~DVbXStI)#zQG(Rv%LDto{(V6)slwrIZxL7SKf>!p)To%8j zJHOpxJqZ@3>;da?5y`WQ5sAELC?G$a&LWV%haoN^k*tdjLHrU4O_PYfvVZFAs`S*^ zDX~{L48fb?m|^O)^MJ8eK08jHqp^EY7-}>nwRW!kloYXuI2@dro>%*U$tth*(K@g8 zZl5@sBV6b6Rz9h>m35wdE&AeU_UAZ>NPg^3_~i^w<;P|P6S_7fKX#zB**}JpBENAK ze?3-1Cxx^?t;8S680EwXQTMXA@zA1+>|i;RSjPs&ImuX^nO=cgGHx&ZU?nfG{p)Tx zlt!zuBrJz95|jM6Tka8%tL#S!yF>5`(GR;t^#Ha(kc>5Y zYYk~oTW5?vM2jrQIub^w_O4n5Ces|poS11|Nu`Ml-U<3B@(NL3T9bN1?<%2=vUQc$ z>HFDz5>&E{J_izZgW5&uHBOG+f@r3Za z8C-wG9GWU$W-A(6qRK*8+cp{(xSrfwNVN0QTt90s%(!U;3+5r&ecs!LZI}0<`$ugo z-FS8Ly`hYZb&&=|wPUXB$$kC#= zl%YdYV|IQ<%rHy03K@+Cn(U9Tm9s7^Z1nCRD3I6Qv#}_c+vv4RxoO?AF+bS7G2?iN zK+=?P>dB36QVl=5^j|WdJsY!w#}iJ7(S)-9JUdp&HN{+eV&#udVsw?!v-ZVOUpX%M z%H^?w$5B9FXU{e|gW`OyjmoWcRauShY^FPq>~f%Kx7ZsORa#p(z1+b8<7@Ws*5UnQ z2k^PA7##zm>`}5*EVccq-yAHFjAV zi7r*QNfJFs-D(n@uitF8+wN8*Iyw1`-X@KDoZW(UbrcL# z*pH3Mp>Xk!x256YgX%Vki!0Qv#>HCwX0v_GT?fU*FU~zUE;{sDa1@$1tw)kx3-SuR zhU;-4QFVgHI+x?;%Hnesq4tTE^JAeOJ$ZUA1f;U~ygeIp6BNXH78>IF4%7o{ZYarU zmVLG&7&pWQaE-PznEmHatXKWpS$kfpdAq3Q*=pej?X)T+zY5|Yd|;;H2tp?8Uq03a zLzpQHVV8WwDK*5P1lJhN5MHp4LtUs8yUwWzEAyi&#Smn)4nycP{@nl5@z457>@UxKxMTV+C_e9Dnf-3?kBwGyW4CMd+$ZLJ z^$oFt#JsN##d_3l&)T!KxTtq^W!kKtg@Tn?Z#=78hMIZ%5hBLzCk7mB)=N=pcAE9} zb2^W@L&M)`{=5I5jDOZw82_KX>iCb}fBb=ijKA}K@na;Shgly8H%cOcD!5$^RJ?5} z%=LCTA&N|Wh`2Y4ZuYc!)aEc$BGdvVeXrl@Ypj{NMD+NTbr@H`kMBkJ@x;$FTgM|g zBIVrcv!1vAb(FJ(G)?I;JC4AEvK8Q7au!48&S!;(rU>Ytgb-sHw6pgk*s5 zV{NG{4=o8^ZO_hAv{p8bYwh1+@h^mTrw9SYZOWro;%;GRq&%mM+wNz)S{OKGQ5pdr zqHdD}*ig4ZfWK>J$+bN`wIO$ELx~-#)5ttW+IVhZS_4n2+hhZORJWSK|5Cr%Y)33t zMx*yNjFmz=81_yXw$EAwsS7n>Y_%8znSD38%+h_aET6THFv5i=)MtvJmpeF*Ims@T zNf8$*9L8q=;WvUFtoqz$n50}MU}8i1Px zdc8!YchTX`gVz-M>;F zI8<3vullfc|33KQjb`|x%+PO>T^O~;7g4y_G44yH-9-EdhR+Zg{+P0FKKegNv()~O z(HH2jQ%zA#tWEB~m6-YR_tPeRle$e#{9n|qp7`JDH=FGh5yjdSo}(;jYV@vUorsy5 z5;KoGTPlb3DbW8p`R&A!cu3Ys`%tLVr zC};DjEL5LvM6^<7qG_e>x>2!Xb*(O9h{goLFuZ&fOGEn|uej#Xpc%O}e;$vs?fUJxd@lK!S#a^)?$-(QxD{Z8dU#!ok$ z@dJlz*&hRETo0moul|v7f7(|AVYA%Wa+C6pShtQ9VWyb<-&Myb{npYI{9x}}S&GR$ zrqI~IVgg+mk^IUX_R47Tkoukle;@;+UgEgLFe74`D)X(UI&$kAOl?89ui~WESFJ~B z6DKwK%T`u?bU(04mIf$MO{9!PE>rz2RDy=NkjUl~6QDvE*phw6>ck%2U7}nU4-=zy zGU~IMTW;ja!<9G*xnGXQg}UX8tZzMyGR$j@i z;&9MIBAj@Lhc=9w>qW9G-<>eKeT&$oeU#2;GrXBmjo<(ee|nWvr9oj zQ2TGWNa-cylzc&Eq(A1}Gn}s$*-EdmwXT0*>q_1y?{RR*$Tz5+_5XWW|9zbGFE<~` z&7<%%uboPlx2DtOiclI|9RE`MoHT8+(jv;e>#DZt8C>Eks;uqJ$ox5Kd0v`k%pmJi z=tl?tNtiP;zEF44$h5_V*<&OSnq}31O{0ilW?BRvscf?sez7RZv*lL$o zs#6C2CHw-J1Gv756$^X<+jKfQMhQ0Rr&|4Ggi^-Xjw+dnxL7R~y+#0g)cd>8F@6*d_07=CB> zI#G$L&GyD}S$$ij><(f!tPrIulc(h20~r3m1Y+G#?S(hF6L1%0SeN$Xu_fZe#`em! z^xDMLh59NbesiWz*=>olqK;a3!214Llc?qO#fhsElQn;NjVep2`607Y%^IKwtpCwu ze_zyf(esD)tM%N@wJQC6(w<&Be_MY?|5+(Clo0PFI4%}yVm=|ivM#H#yj!rp57MUd zGZB&ZteSD%GD3S~B8K#4iz0K4Jk8{EfW^TE=e*!x?G=5M_Ws!G8@HGLRoXk_knI_3 zJOfiT{M;9&-ggaeWznWU2IiI@41$O8ec8dj@9b|R3VrdkgE13c4Z;$6px7<|Nm`FTUMaczOBuw5t*nYC+IkI}K2g;R z*&O6@HnHI`B1p9htDY%ghiNgeN|x`@9oyMn9EeI-BRLP14XYfE^+I2z?-VhDyPq4> z>)tlY^%E{5-ng;WwSueJ5pR~U#&rjmbzWDjulOBtMzer>`r(Pcq+&5`vA1#_O2|@9 z9Jbh_@yO+OthZYz$J6M|D2?^AizplG%?$OGf>U_vi-t1opNdOyBy>k(_cD{+8vLee zWId|-vQe8Wt&bsBMHrJ_*Cf4e-PGwhUm@J>pwwIYj#2xjJZ6+L%K-k^O~$h4r2vxXD}4sZ2`}AM z6!@Zx*z(JMNK&r(E8_F}2INGQGbfZR_ZZqkH;w~XWKmOUZ`c(|FLZAfwTLESRO<7y z8na8l5dD$T7%SS;*;)#0 zmYW^w2JJ&ZYMTOq#n=!~CD2}h$<0p##O5AA7e0EOBG&<@4faz9Y)j+!Pmi*d#(4#-gn>k3Q3bo z@YM0_wgvT0R)V4>``ut4krq)2Ep{1ey2ZMiVr*Q-ZYb!go6sYcV2 z-dUh|d0lsA!V_;)E5zyBIMp}NQ5^@@uCltJqZ)vYicP4myhBIT(b;n8YhZfz*rQ>y5Xv?n>tF zuouK~0e{7(iy%gMJ-(}md~O2!WBs7^<;I%LtPYRieGZCWURgIwbUkV!zR8LZ@JUx4 z5OhCXuLkkORiMH4jFm=c_QfDf=nh}SzTok;`&|hXU=WdgY;G{OX789#ZetEiye0P5 zz8qc&^=ix+k$^Gu6PF}!?H-bY!Hk`Ten#vQL9O)^9f?IHh?N~AE5Q+3Zb z#_m@sUZCK7=GUS;J%sXjM|~LU$sd2DRMww&zdD~?ES+d@}*2%LNb zmW2ZZr>i?vTpgqKLY76$1unx+l+@}xZ_&?}eZ)`*ZDL;O@Y8QHm1(5ISaCpRI-lqc zxr=%WzbsM|Bi{61fk6x*9yF~zK0z8Jw$X>shY`360g@0|Fhch>c86){6SV^zbp8AC zG`-s2)NN9)_KdpKdbRcX&1QS$TqW+P11==+9dhX9!Hm!fEOpYJX_CuC~+ngMmBLcJMQ{gBV+emPq*7KVS{4yo{!@A858O zC4kBbMAX-C`x&_zLxbaD$Fu2zn9sUFbNHUdnkfU-gP!c2*mbbeL4bL|zA{%fak+l$ zT=r)LUtUK9i0I%qFPHtam@W3-)J;5ed|T5_FfnwjYCE+_dFu?`iVfhjg;dbU0dy$VgYCuOaJ*-*(DM|t zMQ-SL0Cl2rI2YE2*FV~c5)6;9aWo^CibcE|lAFN|QUbIe!Z7)vxgjM}#venm|aNz>Y5EYeIB1m=z3S{wy%>rQ zQ@4+t=65uyw~r6$E-l)S*ghr)lGr|~k64=<)EU7;&h{}mlq192(svf3r`ck!KSfha zhM+g0Rd=)RykSot$*Yn#L2j;)8w7EJqwFDHV#?^$M$|>;V%a0>W9+>|OBsdQI7XaP zn>c2hDxaNctm!Em)YFq2)FcRGgE}IyLG38bT{x)b`+9@AG4_PUjXs{nYz{f&n_}6h zyOzrx2@^3I@3d=uNOrA5r>E^&^X0Z<*P5xGI{9BNkw;Gcm+vVuu1?HGy}{|t+PWDJ zv3?F_g!vcw9=Xd&uJ#*so8%Vvs$0!1Ed3__-MSfNgh?Z>i4mp+mDbE6yHqm^MeE7z z0?zHvEYRY1<`-iAvXYnK7i$yx!|if!xyHPm;1_ZHR0&q|5dJ#;i1$Gl#wxLexq;I- zsNSL_f}_~LWDPHU_{&hPCL@ZCY71dVtR|>Ke9-_gjaqIlK<8Xq7U~0cuPn_RUj6V} zextG#JXkKK{p)spDaQfL_Rwy^L!d?4W`3aBq_cb9&m&k-HWXV}1~++MGo=3!Z%dtb zgYu^kjm-x8?YB5&fRStvekMj5ferp>_D~7Vp>>ECeHWGncVXX}$C138XY?7|H$!v- zFTigSy*nn+yQPZN97gZ>@-1PB`E+arhoB(FqBdEzGu{Gd`Qlj^?V} zjWst7lz1(K2r0sZp{8OGB1s--(- zG|MrnF=}6dzKs{eGHPuBtz%kqugZsZgv@J}JLWYQm@F5E&QX}A!-1k9JzW4Rv>{-9 zs?ux8F)pa5+Gp6xyvEJ>IW{ikhq7@wh;sk zUD08+DmFcMyo4T<@vG4TXbvA|V9a!6Y?xAkJSrZ$<^TH;rh~Zj-Ls>kPYur2lUoC> zW&9UF{ed>0QfMX%K|HnQiZx#n=rg1PTE8uzcW~>Q*iSi-7yBt>?HQ}I{S=YUI$XQn zN8%(ktz;!ydH+h)ibG{XEsfp{v;uhv#AVlVYq4fT+ocoQ7bTSub;W;H%d08;XP4Yt zuJv!E@Sj%UKPk-Tssk|}l{ZDjr{(Q?lP)UiXp0D8(Sq+^K!VqkxCn9Ki<*id4TK?O zm4*5VL&{1pqz0)$B%UcPedVlc-Klg8VR^ZI^vg*lrVuIFKW(v3;w|A;m>Cp_z30cR z4jZff{7bYRz1TO+tLIVrz=+2u!PkSZ^f!z#UIpyV>dU{cPVY_p;*SjtQC z6lONLP?(umQyObH#_}eKx_3ie?=oKY$(AJ=(wq_A%#}5x#Zz+zr#&Kl6Mj&yM-5>W@UM~&p4+M+<|i& z%Q8ewb0T8GTX!I1?|WYh+%L(^$Ii_wa+4dACjd#a`MI$9Jz_QciCE2k0-N8HVDp;W z2;oBvSG;}~0Caf$ZUGR2_{E5LphjHGXeYT7X0%h%%xI^$JB}zS>xMB)o0JLb-$Yv= zdI4od>(aY2VX>V@^vo7TCs)VUv@$zc&3sZ;xh4U5C;z{9Eo9RCUP$Ms8gMgLvU zV_FW3TbDA)T@Lw58S-rM{E2+^73Th{jrTgN=TpX<-VGyPUsRtMJ9+QWC#cAB4~Z-{pu^ZnqCa>fU9@BEq(T7=-owu&VgHB zyPTr2UY97)IWrS8r<*eEM{%v5-PFBoff;V>CRR@6>VTlgNgZ1v5jF9TQT5-U>ksg) z9pk&P-kl-0++5F%dZ*dGQomCy#ZBs+T&)?Gd?#ZG4lmNBJ)WDGrk@*7zhtZzGb&}d zyR=+vsEo?JXvK&7qu1e^vS^2>d9G_g8u4a``BdH?fufjCdHBjdCiGUQr+Z}FU592j zcAT=IY6$h_?IiqDLi|U=3f=9TTi#F}$iz7+&QK zHuagjU}AaF@Ty!HUX>uNu1Yt&lC#{@QmsD6=;|sYw$Q59XF5IChF2npE6w>k@)+3c z;50&M&R>=Sr8(cE$@^a@@DZ8EA?^2b>!{8-784PDm3_?ni0I@-(3V#sQYSm9Rp+a8 zcd)O54T$Ac@;TaH{O=%4}wMz8Z7vfBmVtr-GZHFFvjC!i|*r%vRT94iL0>#F4 zWSAy)_573QFv_l6tglLt)$Z_PFjLlACX%vTIV=3v1qwXN3Mps*H>F*Yj9rB_=0DN8oHd^{B*w%5vBSNK@M; z_|i+m1q;MrFD#Nm$)k2fB4_DW|0~v5>&}IDbZw0l*qBsgh)vp&07IHJmNLDP_3uDr z(NP*t>M0VGD*n3m5oxAZJ43TP@fVoOBhdd2!z(o}&-K$&C|TDOOH=5gRzsy6a1nB| z!}_X8AIV~U#S>@5mabsge;6_Qhi^Pybyk{K3tiYxB#6HezD;0U5iB0Q=qS*C)LH51 ze*`hV6UgrGt3lRR)D=CH#qC!3tpkr+_0wffQuH;=g3{)`XVCwRVJenUJ&a{1)1}7l zb34|-ncu`R>K(C+BE9$Vj%8G(*bR8BFB~|`&(|yA8<|I`y0v*!_it<-l~S4O$eTwU zpO}BN(;^dztKBzP4-Q=Q*ms8JU>l?Wd?YAD-v`ulmNo&}Sh^3h7ivxsb*a8R;h6x!I>LwcY zck~f^4`U4>sj!94#)@dUvXsJ;t}?=whmb}oXAdpuXAgfGC%S~>8Tc>NZBn0cx4PAu zhCB3|&Gz+^m58!KPBtXiyqAx94xy|to2?e~^$+RjU=L zUu%iyv8IuWoE&$FoN=fOumn_F+@#BpZm;GRdHwa!6w^|z;!=Xg;vo#t^Dsp3s8BFH z)y!Kq(of@^L?Se~a<f_B3V1mi89G0EWOybL@xiJL(9@j zYgtI0XkWl)PfO~Rslf9W$p+ztA3Fw?ul%zDAT`%7Z+h`0Gb?KIB$ zK^E!FN@BG0G#90@p`E;0LF?Yc6v9rkAx) zAC#NBoty8<&FylN{3rScoeHK>dq|1`Yk_ICN=!w6@f>@=-};EA)(oB0db*?bS4DQ2&&;ZNz5pj0o^%2*55^wiDGvfO63BHg>G4>?tql$N= zzzXD=6&DrGC&#^b)sEW+^o?at18X_Uufgywc$D4qRX(VwE}W0sxx3@7pUI4{89}eK zuXTl*o>!!Wx%O|_oiRc2&{=4I-YFG55Vlvc`^BM0{$SAOdgA&4s=SQr)k;IeJ18ig zdl)4P)s)yrV>`j}#xK~k2-P?E2kWKB%y(5T-`vvx4pnRo_1YE3eO}&*fe%|SvtWNX z^c4Yz0$(+dar8`R8aBB*YYYzw|9fB3@IPLfci_MLuUx0Xf1Y}2%;1}NAn?DQIKBe^ z*%HrJ;6FpYQ1EZ!Rp9TJg2RIU4`jl=3j7DA!hhDuUBiFebsg|8t90H0{{Dv&@c+rN z>F^)6PI{bxfB*V}!2dyojtc(UUi^meA3y~w!2i3~(!2xz99avg@ZY^v9Fu$FzBnmf3GVQ|4X`t{}b1Az<>2w9q@nd*9rI^ zeM~z1f3$`nB;kM0QwM?nP=$^f|AEXm!~Yfy|6`?j2mTKVDx|`Ho_cA_;M;ki@SnKD z3jg_4@V`#J(D=`*;Qw@mO@{;jAIOA#75GOG!;|!9)`?xif86&v;9utHfWQA&3Hbk{ zFdhEK{DmPT;otwsgTVhmg^n8kUpO@Uli`QMAIubETk`#AM_h3MFfG@v$LZ53@`e#p zz-N6-_+im{!^if*mHT>eraXa*XR-F0y~0Phf=ut&XMKiulb;tkN=9$ME^2e=9jV)- zN|f6~j7wgKFqC|R{8!Ftc|Ad^WxmSo7~v#Wtdkzmd~s!TL6+!ks{HW0a^!E37c)k^ zG3vv>GCU)1KnB3zeiSyC1;&~_JRjQ->}AFgG^8*@7&Pklg}-#1F-tPYkCj@)aeOxH zdt2*DI_1m4zAbyy*zUnOR5(j?X$-o>UcdxX*@fkkl-HRda@fg-BN4gkCMnmv92tA# zByr7~)T2CmRH*l#GOtVXV2pyXCF z{*15U1LHOq5JH;@vvPX*5=vWod6_THDTnIg*L4yhhi(k*P_oy|UNNo3TbD2`($RV6 z_@drK1mm%L0I_KC?iv9Cclc1=Cbu10y!q;>*5Z9vJb4S)6D%OWi8?mZzdVvw#i+iG22PirZUXXR1qyfPc|F1|05T8h8xT7 z;%dE|7TGW5NJG2KNNw?Id93sBg~Sx+-q`~(Vwk@Zq=59&*=F=y#0idN?AdEMDETYM zn1M7^giQ7`#RmIu^{BpTnur++wMFy(euk|6KCF_bRXB+kYzf!9!i=0A{`Wrpxm5XY zs$7@NCz4%jCBIGrry^fk0;hwHcQ>MQ+ITJLf*S8quGZ)C$9}uJjJLgGyyxTs8#UgC zt~$VYZ(756mE{tPRL1*thpSQSC5w`xx4Jmg zeCl{p;r?dL}@IV_q(w& zU-D?dIDHivnl^L3zkrz#n?qpcVXVi)!q2mC5I+EZ<{W6euRhvoym@N8f}h9hs}B5p zUyYYYS?TzBB_KPz^+(z|$*-BnB%YSwt`Nfv32L^Bm1wW{y(q8Sg=Cc2Ij{9m4lZP8 zmta1T2_^2@J=my?x?%uvoBh_!>@Fn{&0B1TByeM2_A5rdnQ!!kOLBzjF5>(Y{%W~P zSX5OKHmGD2ksw~M_dcaHkt8e?DOX5F``c|VrTov zCU&;|(!GJKeg4u0sq96Y<7~6-MPC+~xP2AP7`ScqRlMdmCJ@1i_#nzp@CEy!7sbGF zy9hWicmjYtP+TVsmHu6s)-~IWALf(Kc--;wKQ60Y2zc@wrBn@q(9C2+N)QAv#lMT$59Kl*bdN!M-Eyzy#q+ zUxm10T3^QU#X-V)-kz%Ng*Ve6m?RyN-YlOd4~SE?5X}#7w%DccTp6)jBKMi1YN-Ow z*o(;fi!ql_Z;6Y6bNMW!F!p?62{`Z|o}=id3RT`+8dYXNqyu2})3l$^CHMQn^$d&g zy&waL4r20OwgeCteUY>I&rxjym9)$w!TOswjrT<-w$S@F8$ zGA6vhQKo!KNw}3NKbiL;pNGa!QE*Y9;>BQZ=_tD1NR}_sGhl%lFH7TQ_~~3}&}Y%T zo@S(*FOu6@$;3!id>ks3R{Rxj1beIQ_wq$(OLsT?KG1M#Y|WQ%EaEy)zZ!xs(yR4z zWI%N!ta5HGEOwJmPoZ=mGEJ6{Xwee0_Z<0>z*mWqSNgiy@Ht5Gc{k(Ew-n%>)~NSl zyPw5EF3=w~OL24p#&Lh8v~Kagyi$Y zll`jLyod?yU+*K--vD2vf3qy>cyr40h1&y>LCpbV-{n`RB>|2KaPpJ%Bm4mc8~xU1 zS-N_e0D(NkB?urOgM>4Ezg-+Qb3IRq)ZmYdEB2S7uH7rxU*v0hOBA{#vaF0dSE|8f z`l5r*^jkwm5tT8=iyBd2E1*+LTmS~0tY3Wc3P_%U$7HL2Lm*lepImW4Lwf)+4m@6D z&;Sy6yejZ`wF4fn3p_S=h6iHoVu43P0v?;w;lcAI0*}o^%FXpfv(HG5H+nX}@mmZF z*nnU%X0FPFCX@*B6oEJ@&K8T(sC|?%P8B0SGII#Mu-^AaZ{)L&{S~{7+8^*#0OQ6) z8Zn!2ABq=gFJ9PJ8a|j-HR{F%d`!}aA@lnOqS=^us$>ZxcEA_lp zp&KtUuwW7U`}k&Axkt0%7fabpPhB@(e51E6lhV-JEMPp(%!<#0$0z7RoaxyZ?9aOh z4&6L;8ANQW>q!~<0PE=h+H=yk9?`1cJ0k^ijZ`Ip0r%s)EGh3jLT_&1Fw1y%#S#`N)jW^?V<_9Kc63LJ-;X z$Lb^a_?4b7h=kSpMFeW;T-V682yg(s&}_;kml*|7*L}s<<*87GFMJ_dEjdC;1fAp6 zauM-V^hGQ0nY=+6SD9A!3DtoAaoNtAR_|sjyXP3!wEvx+v3NMLT!0IE*X}+U;qe|W z^%NL@OHmsDvvrQz`>Ny8z|M5OY*s`66(qA9gic-CE`Z?Bfy;i`jl zV2&=_B!x$*UeW6!T{v{O)55DyNV}t9bZAk=BueWk4UhlRxwLC6dw@@*U8D9#T=}Dj z&(VT&PL&EoU2s8fF-%2dm0{fck&3*>?gt)&YqYF<1je%T^V-azN}-zYS>8QFZcCf7 z2G5<}-Tt?_)#tUZscS65pE|{*bx;Xql$*YY&an)1h9l1uUIwTzUN>VQdq>OWmPrg)_gxV11h=hXrXV>f;WBa z*iKrHLE(j-bqjRa`)5;DKv~UVg6@=r$5&Pf1`Q35zfdkhOh<`yFzv123cu!*Fhw6i3V>&u!6idc*+&ch_W6Jep2Z6$aIfOW7W|84q>9Q^5kZ6t zZa=qB7Y$ZLMHGb-MLktfv6XkiL{Xei$gju^_K+6#k_MV_$?8sqVNEXZkBsss;?6c{61`?{^0OqoAv<>`$=W~IxJxLU{d?Ki8-B(HR|V9yk1zOLh*S+(-&D$|ECU3I==a+EwG>!*m7 zqUPknlsP$7sZ!<{+mb^pPyp zgnlk+<|Fn6Cz%qKneFcx#@edkv&URGDAdzf>ppe%m`Ou|C(n*tI7nVF)|#gpYd6l0 zOc^rUxc)_JN+CbZERyT$%=R~Pe{mapm&#fHVhKqxQt$ceY>>hlYSbuHTl5g~1iN~`>_biT~A zo^&fh?b`JpO{Jo)-waY%NLTtFo4D$!%kXrpjNF0-!;{Z%F=3Z}`|$u|nP1PLW`E?# z8vRoz#HwkT{0MDz9#qynDL!n}dyj(4GWp1}?r|Amv|y%?kZ4riut$pq6MJg6efIl` z_=D$D-GD(Nwf?RTlUJCZ{`ZYX4B#JgJefjjsO;t2qt$$|nLl4Z3LV75L z(!=ohznwijgScCC?%rc$(97g&`Xldq%NOSg`z;ik>uAAyqu_pdo^|6nGvT&v93=TR z(LvHTd0o0xWmnO;6|pKRJVPzj)CxU9y`{!_lsi=Ms}psNg(w8Ly$VKXm+e>MzD(t= zp}J&WzWPgcznGLnSJR|DZ?AgxV^P!V_P6pj9n!-P81394@hY}awnDuGbpJuo3T>!@ z%7*L@3rLW_6&Q!&quKt)iJWo3o2_LJ%O}EqrzrLtRaK~jEs0zzH3QNZ@Qvy=$$+m= zx0(S@({DE0gSk>*I$x51OTqc#%g=I2xsg0_!q&3K!(P}HzF1EH6mm1dMP{$5*fHnTqAN zF@ov6Ix47%`er$E1cI``O0fFnkv4j6@ ziMxvNA)FtS>SYlJ!&AnF5+}nF>v_Wdgl3E*sGZ(lKEtM3z%2htS|~7f#9hxzo$gef z$5q$)c{gjnf4ZNnuSWi~%QN?fQq-;X`%Q2%!Nl5o^=DS@_oF}Nytm))Uw*%X{XzC8 zY_I9^T%&3e6&({?%8=(Q`7b5Zku3$B%3Ak7_C;KcCmCN|q&~&C%uZJNCsk>hyyZ#s z?09+WEAS)RV7??AmMAy~50cKnWziW2F}BgX@JX$G6NK6yUyS@OJed&QhVRGmi6`67 zKR?ZyugBZf7G`bI?rBnQ)c##pV!jleCg!U^mbNDIoYv0fi|{>;-#(5%+uuXMW0OEW z=Qw!m=e5#N*L_$dq+h%6tQM}W=pnvL8f9^7&*Mw@aufTXP0{FENX8tb*77j&V6FQU zS&aO3mt}(RXLy?l!jr)-n85d2+f_A^RjGdVW~EX4;Jyj?UHd^gz9-=K&U;@EetWR< zvYq*=o#Wv51o{CeU4zD@U%$k&f?oqtM*d%iWddV~^gG4c%7XHx;W4dUZKbSD+TGMk z!J}871UyE^I)cZ`?|waa?8mAv^ri6jIC%UP{Qx{hp>gR~1kVZ{&!{i%atohs#WT2n zh*3-R$u^Oph(oKL1lydlOt6hX<`fR4%L5QIJ6eEGLjj0pP()hN*(B6U0no@FfVv?D zilF(4yluy>pL9Kbp|?ffTQAM*<|C+1&BrjNxDNG7%*QjW>GR>X=(_^DrwlAZ{({mN z4kg^SQljT*)ELg+IZkbTMM-5BFete`w%2c+p6KYg?K*k{cRZ_(u3!os-RVqpw5RGQ zg+a>z0RM!Eyq{j~yM0t{LTN8PL=x^a_J(^BVnj1=Mcp~d4wgWMC;^iYF#cYqM2X*< zga~gpxn3G)>NLSCrltwxvf!a#9{H|_5;&Ofy>}=^{Bs6s2IpR_ewO1WLyV9Q<;#Ch zmIXCc3hic!5vOs9vBZcE{|Gh;wUV_%tz`M|GhNlnAH@L52h^%~cl)){XJOZUYY%cd zqplpU)XE&@{j61llfS-x0^y|UAUQWO-ak><(u9)?LE$`Ptc0&KOg)IQ2KfbMeUWok zv!hbO(ASP*-3Q~XEq%7Kww?<}hB|GQJ6>S5j4KZ~lrP*nX* zkJKtNTK`Cbs(0WPG_2ems~m3oBtg}yRkqHkdOS0dswH-!XeHWH_0*lmQT157IuTVv z*tGe+tVI4%*9@|LQy!CK-7JratY1($8_mc1eOlWPhOnNTr#;g?drhx;WA3jjGWT(DU!MXVUXMyOZ=>|7sdN z-|&YtdcIW(os6EpWfc)582&&SJzvO&OnSZrM_EpZo(~9-W*PZ^D9)tk+j0~1>|_dr zG|8Tz=bwRkz6L#yj(k~qK1UkjuDm-pLC-$b<4msmgI%XU&pTv|$fV~-xLR2I^V|nd zg`NjXPp$oVliHuBd@DuIgITL^-Iu;}0(yQGh5$v+PL-`QdVYc#PfX9xH6KUMkKxsc z==m{dslGHlUunyr=PTqfNm?cHs7R|&Dzx@Z8+)2=kSZ_xzF4^ErHhU9>LJP=wL?9AhDUSN$^-$f*&+l8VRfRH zLBO35XStJuI;+gFVk`w`MJt0k&O4QwqAJ6asNJ!+=k=TiO6j@4*o|* ze>wY9%jX%0zfB&Kh`(MQ72>Z^IUCJi_xQThc5`NzU_KPCOyLp-idts z&dY3)`{x5+BvOM_k2Ckrzr1t`H2t19j9E1OwzBvhcn$4X`{$+io(fGbQMD?5_+@ze zfQ+M5c_i3q={SPE8Lv)6&^N=v z{-yWNo`*9iI^M>|Bt`F&M@7+ZOB%-CrmkO?qJOEXO7O!!&1`f*TBEln8ofp}dIE~R zr!j+~FRy7P+KJlgiLFdpYOAXsNTcX!QYf9GJF@Z)wu%Tv4_T2$(S!JqxqnV>I59+#g)P1K7C#V^JnG z9~Mvk1VJZu=hLMLQu4OL(nF*MslKMUvf$-gTliVFL~PPZQ~b~A+?!HPBGw1Xi3EjS zPN%t^vXQwWT&^sd`_az{Zn#oJqmSaN`RkX(Ndq$J>;|Dh5Z6R(p>S78YJ{;`o(U9mn5c`}b}-h4Fuo9RKO<#-D7zo7MjKWc$km z)s7qgskHxTa{TSuKX4#9ex^8naqpA)@38%Q8&6^Ud5QKP8qjY1$@aTh?T=5kzf9=s zxbdG#`&Ub)#Q%2fANV9Wex^8nIAtj|vTKL!-;1rU1N=|;1L1^Ao3RVQFs_7M`|@)N zZ0oRY+TyMes9vJS-j7Fo8o^I+EwI5?(RB_!;@z2i$M_03+$hdRbQIF#=X6n@&%lAC)tKJRdJM4S%ZmW7{<2#k@m4-~t7(eYWd=|7DTKmc^T zhOf0Hk}<-JZC1vjL`H)dx5iyh;cMI#WuBer>ZfO;s{|w~JG4*6Z)5ip5ZtTYy~cbB zf^pYYyfa?ms3)?X9ZZd73cn+*4)x$O+RNdutZCDEq-zFjW8O5Eua4t;!^s(A)Eh<= zaP!b3Bb>`|kZ~KmaGQRL6`ZdAvXO|lN5Ym)c*=S$mCB)LIUkGj&;W9Y90dp#PO4=| z^O0M4Bp3EdoJ|I-2y-{jR?+R!VgBiC#s`DTcJiPvE5|=ofBK;tVD|F>7^RgZ^*U7& zbk@p!RXLn@x_^iw1ODb2Ma_Tj%CfCcq10QhM^!i=y9lSQK^E3A0rn{!hfY?1VP^e5 zI==ohPhNjJf3xTr_szs&!y|SW{CZ#pA~1#Vs=>Yl|MTBQ`y!?Y*ZldCIsZ2Gvq1eU zR6n=lCz8LI57GSPvvBapvjY%Nrw2H%n7EWHoRR;|&eJn9k>T zzUdt#m!LIrNW#7YuaU9t^*%PUE4F`p%72!nZu=*AfvEi%epjcSlz-*3 za*`_QnmQOkQlDuu-<_3(1tU5Z4v&vOT#inNN5^)JyY5e<9dVa|v|2#>pz#7EDDxqXc7wFnQ!-pgw{Ua#Yst8klRj(r^ikYs#+ z2O_@YP2dz~6|SC3KB!|YhW+YU7L%Wd&ax}+YC$0r!Y2+BeTrQl*_yQb>z0q~Vc1*o zjPMGE{cTAUnhQZ*<;F+^-N`=;Cv0Pa+q~{`97~x{2%;-58{6Y~S!l;1Xv4krIIHRQ zh3m5spD6D74q7S4u@01WmCVNx>-HB=1;-6f+HjdI)XSsihVsfiUPq`)xkt|no*vP2 zjcuiy8jue;BVI>&M9+)6{_u7mI5O>poQEB`8w?}iP2Nbp4T<{J{6pKqd$QuLZ=j)!WBW!X6h_HX5$utxa+%n0nCMkGi|kq3XfZ4Ywh@nyRO1(&Jxg$b7P+@`vTzP5b`u<=giCpVd)$e~0atcGUhw9hLui zhwU%usQpj=(ZTrrz*~U19sEoAwtfGf?5KQehvm0-RDRZRkWIDC<+TwlD3>y{JrkY`MA zAdes_NU`U8?bjFKSK9Fta_}y!Wx5Tiy!c-tv{`}7VBGb+cQAR^;=uE0$C9$xa;`iCcCQ8-9{}!J{sQE_+Eygw2HR_$ zzNkMt?wZQ7u6y#h=VTV|eO&R5c}l?#uTfK24aig&+sd(o&8)zgB|xhLuWZI%ESdHpUmEL!!6jNsdR4Pfv?jAo*Rt=rP&$<%)DVUpzl7hs-fqi{(5TbePFW`X{=# zq5=N<_=gNVB|{hM0H~WUjVRGy$FEZ<>#ZL|}o@ z4p5uSKYXe&_n3CRH1dDP3=?uY`syq_7+zeE?bYttXz01&!|`A-n26xHidpdFe-}kV zsN24JFVG(QO&7?%&9N?V*M+ZP%NjYvm{0%*^PE>e(|vQcfU2FCWZf89gdZ<%&ipF>)Y&iV%7VJ0Td5%K;a3&}lX7372IBFKMum$MfWy^UyG&Y1qfTr5f(XhE?#k z=?USmYTAalYs+r6V@~HsB{bqa*RW3M^AUA0MA0W_z^r(tGy3d^zGDSK-+F`3!E@6M zJ_fhJF>0S2r*81cX=*$csjns0*E03!wH|f#SY+>!&+!a?IHTVYd2OR7XxK*PY-w*R;A+-y*LTiTU*}^cCL1)9rqHN|LIh3+WtS6p- zzeJu@*0D2C#}?Kxa)`=UVh6us9{snJKNA7z98x|{{Wyi28QE8A8;Gycn~{0y$0^+y z*;kYt_HljtgV~#8*hffWa>K~!s`L$A`>&v|@=ECbq)$&>(2KKYQY<&|_12c?Zk?{VSE?PvHSKJV#10WJqgppRJrsp_g4ZjN3a`cP+h`UXq&6wtN|RW-6=dpVOfg%Jb>}ozWEL&@RMzSuIY)mDaQ^}pF zWJ@Y(rjq+o$+lFIe1hzl%N$k;jpe11eN)MSsU(+2mWtd(6-&di66?8aY&We28gW~L z;%3MF1W7Qh%nKd`92w4q<5>=92cmZtRwFM?8)J^Qn>A1YNT9FLReCMsFyUWU<=T)X z5iuXo5E1iNKjtkEjDv-25rh$h21kz|sOC7m(&$zh#jOhrHZ60O?T`(>0qaCnO0Aq& zUsFm>d@pOAh%pFKkv}Y8WKXdZ1Ps5fN3Zh&8xYTUy7JJmcHIf^9SLUOZ;ayV%U&4>h+vDJqID*a_bPctFbbQ&~*qq zW=AxxSXaLsNMtC(pwm<34B|QlTdW0f$m?SWaagZ=M(d&f^&7(o(@6n3n5mQR#*P3u zR4^~ix6GZk9d6Muh!9gADLEw zKR5o0^l$?v8G#Mu?rJ1~D7fOvi_|nkgwukE_;s4O_w8KrcTKuyQ0QX@2v4pTt&RAU zSTQl4oV;EzFb;G-kl{bubVy+QkWt<}j?)@}#NwS4$j?hP<;Gw->0MJ2JCoiCq zX)Hjaos1uI1gkHKkHX*%- z`{r~p|9lJAqG;aB=pv#<9JT>nW}Sn0mFIzE=XNoFD&MhvefQ7U(xQ{j)5CjPKyhs` z#3|z|2>F=wnaPb#GvCDgVoLiXI)U8&f;<*HLywHy16Tr`h#<&c zAkUyACCXqE*be;T`CAO3Tj?fYnTj@~kE40+$j(ME=R$71zyA~auA}dJ(090iS(TV~ z@`KR`@D^<_AG#T!Fn`Ja#R{kbB2Sb?*s7zSg(zi%Hlo#`p+>+ zTyJ!KHn#(YNd7TGAU67ox9IhU5sGz-7Vd_rtt{Rz09ltr6ohsy-l$sQCT~J?VO<-E7|UA&+Q`F!$Uh3JF?EQUY~s9(1d2gSeD2u+ z<7o+p94Nk&O^%7??F&FfvkIROtI}+PU7G3{bP8EvYqf$W8=83rR!n}vP;hT*?j?a} zF1~Yxy;Ev5KewwXmSqO9R2hLZM`9>v%<{c|KNiRA;+~$-*wT`-+-gUgI4sL`oUno2 zgq;dRhku42e0ha2Z3wZYc+}xLR*m0EiLu#eR;#udIur3$PSb?vf3i-=bI#fh@mkA)g4t*d3HSs01Nw6 zM!R*+39Pp!@ zL}|8-uTI|%n~AX7u@wLlHs_=hS)%N{_adv*rDsT-Ja z*jwb@^3%Y8;At3Q!J#tVWR6G4z%&u{nu0M#?t0xb$`R7WM24@&@>?(_varq(yHNLR z2zBARSm79>oRi`h6A9oK0g$mpvZTD#t=9!)D-E!M+Yo#fH-RPbEyY*@H^EQB6UT=zr&pC&d?cTHr=|N?Y5w?)F$Mm!oAvs) za`l|efnk0}=$yc?ZlQh%eoZWp?~*LupXj&jYYfC#x{Uxk_9}dubt@^326lOr;{UGjxc@EYJiYMrG6}kwn z8T8NpO4wPKkwf}IBtZkJo?LEF5%QDkxh|!zMzSAg;t%3P4&o9DI7s~3aGjtBY?oLt z1c6@TE|$Qd&c;uEvPyuAJAv#U<461C5#ge{^UdocEN8!Z4v6tAt*xsn*4PukRsoD z=5NV42-}*DI47B386O$-sQo(W6s-dk&*HA%{tLE&(u2ku!=~wTPBWS!!Mg$oWx91< z-1Qtk#W#4S>9gL0P*`M6`9uab&S_4Nlwer8rGWgBVekI=^|pu);(Qho98w8Pi?!Gn z@o-CFnWvuJ@nZASqZ1G+7zOHal)fbIRIYNvi%&0ZhIiRUpykm? zp4s}WpEIzuTiSFT+mEheXkG^OE>k@qMU|*7^vmo55Uhxn9sVYCRh$x;PYxP*gZmG_ z$jdbsUc)z&(Q0P(#WfekO$C)C?_I{#O8|MFH{BG}E3+LjsEma9a$KHqZLXn}BP!*P zq_K-()zJ(LTsLg!gK)V{TWAtS-5<9X#a-P1U}Nk|?97q!rg_H5nen9C8aO<*4p-b2KSwZH%WGUY62!a4M3p?TG}uVFt*YBvT{AG9=8i`1Q7n$#?zKnI6ElgQ9yXoi(eM+3awv=)mto2F!Q|pO6*hY-r1;P|kH0Qeru}yVK>!A_k#dMG;k?2-pw#P#ztFOYlIq z<=W$;2lBr>MIuRB;=V_IoIby2ZA`Z~C;TCHN!4*zIle03Uio1raQkO29H^2WcCtdH zIpuV^AIeto?&rMWsk41>H1@&K*at^rAB2q;``{bzla3@U+r<_CohUPQdI#?&b?~mL zgLird@4$l}*G5?f?}X27*B2<3jw|c#;9Wrn@0`cKTL8vC9>i=fg!lxj3sI-ae72Rw zA9)8r{gqGa$}B)_zmI^7+8-A%Lme_1qIZfmNkqx>b?tYwnP4U>N)MJto)Fti^oeSj z?=9wSZg_Z>Jwr4K_BQMvf7;I$vH$+s)A9c!_&+dgt|N3!ExTYYL;Dm7rbBH)ZQ0}R zh@lEvX)5J#@6-ic{-+<0aoE?{&K6r$RxP2 z&UD5uP#5pj9$)6&WYfP(m4UhdIzL(o4J9 z?Mo7+87*472kf=0k2LH=%4elmNo0m|xn6*}icpu}VOm`QW3i)pQ8!y?Ku;gE?lrauVAU3LYC7m3fEm6`Ry^HG| zVD)=Bdqt={AQb>#AXghCs?kF7>CHwoA4+%xl8YnlrJ<8!VkZ5*$B*N<%c+DYa4i{TxWcEyM4=!$( z4b{iu$=!0x3V__e<^jtYb70M-to|5~=-BL8k{$%bPiUkw? zoyIG7buCfBMx)R!ZRrD;(Q;!wuIH&?Xgy!p%nDBSh1;^UrPcUkxE}fltS6$Lnt$E{ z|9tTa)M{u@hl`$8(*ucwo1Skx-1IOm`=jf?3quvujc$6aCaR6QhCbcL*7`czbyX&6 zoRqAQo`zZUG(>f9_&Zc(c^Xc&YD#(JZnmZURvgW-DeLu;`A#Om6i6XfJX*B)!%wQoq*f>Hyz zwjfo*WptywIN?S)fHe$8mwsr~;3Alg>rC9W>&XuKm|&=lCG31khEK>Nh^nrw*=c@( zh2QG`#Bu|-MQ-=O2r(w&tl1rOd-CrahdzMGwtul!rYZ!6`WI*pgb10$lRt;w`{DbG zwQ4H6vybX)+~rN?O!Nl)y~M`_nuOUhE6Py6Sl@jPWBFS28#k5pgu-J5({Yzm)t6C# zp4#wK@EObh!Tj~XUbxBJ7pdkGgt3>O=#w^hbVIez`s0LjOMt@-hPNsDLS;G4KP(q zE-dmdss8{)wW3zU?8h@SyhU2kTX?vo&|QuvH>NZn9afXm7YDm+=C-agNG zfWqg2{vFQyzP#Wdt*E&olBE^B=!=Zc)r$V*ivZ^$zC6I|mx>+Hawjf{(Bmz*&j}T@d!Jf4)f%Q1)oVqYfx{l; z#jE6cip>KGiY(FhrYQuVgm6+FfYx^*T|x_7iFFcV-(T3=SP~I5GAN2VU>9ANaJmAz zmFY=4EgZ7y0;ToZnn2+&SiaU<>C4j69xIJX9ZbUL3FoV3I$z;}#mbybFddFF@^Fh` z-)1;pHN&14p#K$)KGXk-7Si4U7-)w2hWX%t1-Gc!o4D4s!#q7e<<5|m2e&eH!6mD_ zWfbG{(%$E##P=M|imKfpu>$~aAjZIKINc$y@C?voJQrm=(|)M*p#xyXH^$@|x1pO= z4$n`kG5;Zl=U3!RgJ(tLc}aa89wYKD?t17c(8zY45`X8h#LT8lcUJp8hi3&{8-l%S zKZ8?VL>@4~x1orf4=&=E%H(6*^%uOAd9gMw*-zwqDI%4{U3VV;9o}YnIE-p^hmiw- zDSM5j(V3l{H^CZonT z`VDL8B(E^Dx|Y}L*@9is*TUawb{hK8hHCaXj(-i+cd}yqOU!yX#wq@VQc1X$B%i|#Ygee0J8O6?30_gP zY}$&d&-inas$cyR&qD&C2zGkw`8=ZY3U#aSEMarO0odAnN)cu>Rz&2bFaGltY28Sm zU+R1Zur76`4QF+8Rs&ZsI}xZ=(&#qaIG6qGk;T~#5!nRp{nJ&fOznms3XW$PLN66ZKw6^ zs;*T67aGDt3CU zm-$+;qfr*cOi69qMEQheKG|80-$Lf=AYJVaITFWv&8N>i79SR73?c2_x&-oe1~15$ zU{7}G#(a^{`k8ZBdYM(arcSGY&}*w*h1z7Fm0pSGZ}h2Ze8H&cN^D8U=ielnTFQJd zz$Ik9?X%KkzE|()X{#;bAagOufHKTuoMUGOj7Slx3K&WqZ1~YJfHiUvF8+2@BCthe zWK4l>XLJ6@2set%3q&T&6Nyu4XBVMvZhAli4y&C|2z;H{x?}3GIFSecuoUQeR2m~z zo`pVfbVa0P9ZtD!)fSO7*ZNjs&SfN4g^QJpdLAxY%Pp;o z4N*{fV~Iiq0As9^dQ~?U4$J@m(1)02k5Wj6)h3PAk@0mH|xM zI20$V@1n=PQhl-N)R3Xx2yjY{8+)U9%YB)(cG|xOzFd7n?*EeYjs0@<4P1Hh`rL%y z(ZyeCydT{8CF^_a%hh*hyZ%w~GV<@(2E*)6No2wNi2PzZ9{*=-zo4HP8S8uU*{SF$ z`COo$DIb%cppQTq25PJQUvM;t|MPGk2m(&X1VG!A2pm4rZSFk%`|A;jV(@dH$9={< z)m0;MZ2p|)_*>RG$_tgXHA|??;qT9^UtVL*XPnxSUn)Gneu&b?D#D0IcqJT0D9>Uo zLOG>%8`ff|whb56ZHW7FY#-q75dQk3VGVy>@yBL>#40NJ(`@&u;82P!;8m0zLN{-0CKkv$ z)HsPx2}1;`EV;gQzN#|aQl@$={*=nemt3e?=fpW6;IW0y48ZC0H1mE`$Yqxv_1G{Y z8m9wLO7@SXbx?RkLMHz9q3AvpoGD~_moxP3#GTQp zS+Og@{6j|zCv`nqRf3$2_-jV)W-E6ia@|bLJyF97}8&u9l^KVZ|gGs<{tk{Y1g2k(BBhPrnY_bB@R4sX- z8t}2g6eh?w$v*+NUZve-wF?LW%amt*=w?wwm)6llUwqW>*{N%z+sMy+o9GY8_lMYu zDQ_DG^h0lGgIGN@jxe&mY<@Aar)_zT9!H#(+%s`NBJ>{73|Uza{5UN2ULk&qHOCPu zUwm8a6WZ(j>Mkn9=vwPX)LzQBY4&i+DhtW+UwoT`Lkanh|J$wR5_z))u zpKs4SCHUN}W>w)AH+u84IUT{rvstUz&ZYnjp&#W)O%)vWvl5*0pey40NqF#N3Ab{1 zw<2uP!rQ`aJr?}{t5$GmxUF~ajBs0@(2crhkvlX!ym)9l)U{#sQ10cJdn~O03Y0;| zV&#!>LnBuXjSVNXbMOEMe?WeBuo%)Hcxhk*c8BS*8(hy1q4#1v;r;JcN4ZAhL+K{n znB&wvpJ_{HNIp@w!84PDEwn72g}k2**VC!9Gto!On03hql$@|I)+t=D?x%~)b8F|% zY{VWi=v-?LS-MkR~H{z@XVl~}czkFOb zEL^{1IBxI)I}`8gmXCHwoP)0176Q@#$@N8s7RKBVCTmZ>gY`avdimaO{HJ!Hym^Q% zMb8MJE}V<;md))}sa0%zj)G4)PUJ;hH{y%-%oelXIa%=T>}JDh#y2XAyh5I$iMmRx zuWdMCT5FTOM^~Z^xIaf-6ReNB`7ujA&csLE*k=v%dy>_}i9+B3WHRb+Dg8c?Wj=Hn zP!j1Gl*p!=jZUHuzssY)0{b5xafs4x@>-Ut>lOLI$pQ0D?4m0W8@COAoC1li%je}& z%(62>_Httbyy&r~TI)Br*6QJ1Y@vgcW}}s+`JFQH|Ee_g@a;CIu8l;>nAoQ0Y~$zD zOVT1p zhu!BJYSje7pP9DID$5*J5+5!Hb`tB~Y7c#2cK~2VeeiP%+QB9J?Mac4!% z!64LuaKxEg(0Tz-1;Aa2IK`_tC1serx5_wq6>9;l)n-1X0}rd@VZ}&JT*af9w;8-c z2X~jsPvuJUWhft4l*15Qg6gmoPVr*yyeQ1-%QjXN*{Z*dKtI5{Sbxr5^88Z!`71Ji zbqVJ0S^9o+eF39XggNtaB9Y3OSca}7-&BeUQ_UiJ5${F+5^X6jl~9nGNxYnw7+O~~ zv=yjgxp`4fc8*{9^z;ZBTQ$bEi1%$oT{p=Oq63+2c^DkfrG$=c7*7HI+!&wR8ehTk zDUJkg_T=c=56WS_crgdX{MMix7?fKEh4VBM3($w;n@UGIYR)vzmr;f66&D?h<@nZQ z9o*mu{y4n%kkn*UxYJoQM<$DQ<*zbWv@7H>$)c6WqhiqtRZiUh@+U!6HMWKd>I!Td zD;(epbAyY*dylGC0Tv?JumsY=5Ff%GM<0okBdzS@7~@RVothw!9+-zs!GaX#=BH!s z3bMhnidSI$PVvD-nPdLWFEhqGRvwdM9xjh+%q1#kquKva8MELk-Q6daEuUCK9#~qd zT*+Qt+-|5K8jN&M8hP@>Sdui?acrSIsB2}CxG=!ACnL>n<&nh&t<<3d1^e@o8=M1q zYPxJ5!ETTgxI4t=;N$zRsE_xheI(VyuEWO8~G{FoORUa&GuN-J$= z>C^FXtM$=ieZ(eRz<9YREcHOJL9U-87voXZo|$Dcy244vXXF+}5iW3Y;n3>EP>6Nk zIJ&!SQZtsUm7D`iF&8rc-pr+1eYz*f3j0P0S zT0XkF_aa7m>Y^=u1EUV${t^7Ofbd#KNPLE<)#xh=VP(OA$5?{)Mph3m!iL~CUItkq zUgkxhJ>-VNQD{0!Pq#`>+E}6E{zncB9f`e6s;|_|0g~PL5w@ov=%CW+&VV-Z2YThw z4?~bo-)N;aLN_1~lG8z)RG6?n(w6-Y34iftdVFIb3Xw2;dkc#p#aw=T^l8ua#lE|d z2QPOJt~iFp*p1)Bw@TwhZ0ghtMsIL3@T3+fKH!gU@#h>2L}zEk)&Yf7omd5tD&C2i z(8EXLTFrh!LOMG#t1{HLH zAdOT^Pj67qY;a;`gQGGVyfm%B;zWbJrNK<>Kr1cjtu$t~^6@yCjehE^!_kOA?Wbd90Vzl9yTr?-4_{VS{aH|hMv`n z`@#U3ksGzk1tuU-UBBwZ-EBdaeCp0mpCqUgWSDsgqY5_ua(=Oc3L+83{fPV;IO2V#z9=BUe!pPD*dtJtP0bg2r@ zza5@JTg~oLQ_x)wmKN!JyTU*$-bn1zpOT)4x1&@zqG7{5ISG;?th_m$~{ha@kn;z8Ajy zzzgj7<@o#!tNK||eXtK+9parK=;}1pBI|kq`SGO^nWe595_J)*Z*EfgFO>W#u#&}( zS#|Znx8?9rj=IKM4Q9!kUL0rWjPTKK-p-~6S|8u879>lX@!t4)qxE$ozAhil{6nob zPpka>Ilhq88MFiQf?WiWaw?2t<;xfM4_{s?<35XTLjx;n;vo)hkQ$s9b;;nC6=Y%j zQ4yY?_R+tq?u4P#mAcA!fe!bT**K`aH*wN@3REl|%lqbwHi`{VY8}M@Hx{ajP28Qy z1B0um3-$pkA%6W>W+`J|?~l9XH`72V^+VB`Iy4FmdI2i~C!VYfcG&dF%2ZuEb^P_q zCtO`1VV6SLDe7u6l_DIF&l)a*w{GAV^zPt5rGsgL8b*yS0ug{trjQQa)+66mY7^0A zL3cfEgS?_ESSV(QJ5sy zDK`R{U>i37hcc>Xq;rlP*by?sSoP%_z1PJ?p%)ZqRt^;)#y;C|{9~LJg7C>m8xV&j z1j4JtQ=CR$?`J&zCNtmD(`Gc{oPIaVv_i|$x}}?xEjXp^v+%0}eVv@9fj;Sm-?|{8 zV0-izn2kSkk|^xe%lQsB0okunDRm~w4Y+d^`r-!B`-p~3XWQvVE~y{Uqci@Lh?w3` zaYcKjh-e8JQD@@g_C*xV1f4w6>?hKfN%k%o#3k4~BEz^BK}eiSz)H5^QU}uOHt9eNATNyTBV8Ez&Q-yWOHix!+9?$HQ<$7makJI*w+(!DGfIfIsx}QHjtG*A>i$2^r_gjp5)R z0;sbDtZSU_w}x(ndi ztdl6cphXgJ$cX{r=A>A!|E$1@?f zs8qu!2Z~|_?Zv;gJ_QQP%rTe1In!y=dW~}GkxP}_jqvnMU zSY*mCw3)^|g*;!tY?I8P&?cq5m}gFaYVAfu=5umxY#VD3J|BK&ctI?fA}XBSqiaJ|?3I~HnUAc*z-ZcJi}9@Zn+y%xi^ zna>U;e!fC`x7pOgW?ScyPT=X^11X-4g{d}BScLQaaKOf;4+Zghcp@X{58|#N=81X# zd%$DH*u%P@b0@7zZbO~X=g+Iz1OQVE*CUQK0hb2=cOm$&9$Xa07l9)~n~a}VmT2%BY*3FZD8e6>%LQPqHejJitw-2*QtQz_ zb^(j^hzA*wX#v(}4mq{yb~IiqT%EV0_3akccY^ipIRAtW*0x;pMhH0_*Mj|@N7*L8 ztPV4Y3Pu4_rFX3&tv$lpy)XBi!U`)rodhdPygV|`8HjiS7$*LlfvDFBR08^pCAjda zpfa+k2!AE`EAvMed37s3m>%VM&Ib!QZ`3HmUo5Q}=xbFyIf;4#k;S0e#U=PdJwM~D z2O`4)k@;wNzSAFBvkGtgk-t5PA5s(%!5_JAHGV)+tMKEC{A4YD%JIld6_KCNC$wVu zb9MN^%a!;+o)_?Qa73OXnCClK=fp7sQQ#w6BR*6{{?N?aR~4Gq;TPDvk+UkI%VZd_ z69i}3hZ$sQR|1u+Ehg7|6O`G0F2&14t!*d9Pwpf+aEnC>-t@irVia4P;A(a}(1{p|7nM07xnv2cnJ{Bpen1>N#w zKg6v*11cbxQ!0x$`_TmHcAFU}uJh;Amu`Z~3A9X&x@R+fwvijV4TA!`Atn~1pmmit zz~L1)o2#+V;mc@8;&t&(_EXOS0<k8w21c{b zDCp>-xu^`Le;jX=E|vHra|*)m4w{2NPF;*Gh?DiGYHYeg4x?yDsA%fTl+Lva315l!6X%^xE z9yxFBc_Q&_23{4l-thBWn|bRUV7bg6%KzV&|EI|R*Yba>J<4Yt+PAAPR>IGUw|G^0 zl&?0}uP!^C(~Ogk^?Py?MzFMSi>Is4jpiqlu=r<&TYQtRpx?wI2ythW!*BG%YDwz< zXE{U?Ji=0rS^tC-;6#oj1-y=BMX!Gkv9yl*Ba6VRy}M7(IRL1`r4$0Vx??8OK92Y) zf)B!ymneQqtoK0*pbHCURC3??1k^#<m~v=mDCZm>lyJ;7#XH_xZu&!0<-~VCd$y zcRz<1fyk#o&}i;z{5o}G5ChLvEf*$%QTD`#w#hsP`y4VoC7IF9NyLKb#2pa|feOj_ zNSr4?Z|HvnQ4N>ar22GDMxW*mHpfUe6#E*@T}u{LT`5okM4&_;&A*hL{^&H~7-6o? zD?klE{lP9?PZ7#*@GS%{6yNBZ7mpQc&)Jsy=8;RxAO0fH^ZR3zeW8o?+{k&cY@;DE zav_u9x`W}i+1j$PAYt(O-unQMmD-w`?6RA4Y{s2;IPrt1XYoCp+TKvp()AeD08D<4 z_MD!zeC)i)*oB-ntFH%TQ_j_D4rA#VwqT&PbRQB8BNr~@Qq(@5LtDzjl92_+SK-u_ zt~u`0A*mg&(E!(M;YY^yR^5UMuw6~b?AgH|NmjRH4NcE%FfH3CjElZkP#Xjyk`&km%~@N|f~`B2cCICjrGKrSv;QG2_R&`7mU1 zC}Io43l=Wami7V`sF1znxi$i_B9$QhXTcA}EPjMFPd7|e9hi>rrC#@Yy76duko?yg4ugX%HOVrAcrY=&)$rFo% zz#BV6CalpI_x9QncDiN)I*lHCLA%ZMPzy&8Ioa#Lod>wE51}g2lPd6G`S)1gB2|Tv zsv*`gh7ijDKFUlhXc+CL#L+NXxydVuJDm}=)~gQBS6~mu?!hJ17~=>Z#tkmf>#}0~ zpCvOLKHNQ+zm{S__;3%ce1ox5`L8!!m4r6>ZtpAo%Z_}<0kzeBC*Kt(Y zdSsSccmtUNEWw#mV7-tjKw1XQXqxQ>h>rTNz*&SYnipsGYLV4;!w3hkS$MHzzphf> zBHuZcZejDwVXG7dv?I&EX$ize{n_;uui6`XZGHZR^}y|TWpSgwzSZup-;-Tgyv?73n3$E#F=5{7O*=NGCD6k)qhPpY z5K=p}q6#ej6?OjNW~${{a5|4j<%a1HxtgG%YcYG1PQx$EoU%a+A3*D3T8unhSdFx9 ze2eV*a!DS80+E z1RZPfp@UE$nhdNewbQp2(SfT`bpj0RJbT>??qU8wa(RG8-vGJMBnSdo6PsgDlOYp^ z#&)B5%Lx<|ZV5yyTf%P*l95AW2~RCJ?-l{h(TV#odc3b}Ha8@PpO`B7mHm}WD9{!0 zp_Jd4%wP%36(IdjDvf&9yie7(D*&g)9az6BjY0nK=6E17Wgi`^8YGJ7XFKhmV`o;07*d#lG;KLFqM1t(cAZ zXIXPG0JWj2c5{(cu}@%y>eL)5Snbn|+r7|M`@(xMCsW$kS2Z%a>lzdHX@k5FB(@`d zzGqXgu=)y{ksY*ak2S_}w5J+D!QsP$X4|n|$6kdqUU+?O48lIxDS#$z^vOOBwEEb$ z65*rk-v=_kmF)+Mm=)R=bIM?W%7{T+jcG*JzzWJe=MriICx{b0^l80#X{ao$P#w0L zuR!F6LU-Dv!QZ_ISiS{I^Dw9*0>*V9!nfEb(8OV&XmbGZ{XsF6(V3rD!roE|C2~uk zxPdA`Fz)t1PK7ytu+{a`;H-g8Wr8=5(;P#f*E${D4@CPeQz$;MnYE(ztkRbR1dOi^ ziU2;EY$ref>%}|t`Xkx!ueZZVsBQjW3)!u9^kRkDilhQLjWO(%2yxAJ@|FR^1CdIp z(2o_b_)We3D5~0PhaAXT54r_B>$RHafP^?4$|f(aG@3Y+4Wy^!P?|FEu8l*1OvOcI zIEJzZ$Lxi8S~v&*t70cQPV(d&Rkj5%ihyT_LXj&hS;@CF8<^6iTzjl8mRqhpRTs(j zhueTF@SBQt#WWCEQrPo6d`yWw&-jb`BMwahBCzL}AMIz5^A2$etHW-t4lN-!HR_k`{gy zh)_C_LHA`PsM3wgD0CDLqnB)b98iA`6L_103nL~L_QY@#Fm3}DLcga@yW?4`HU4N7 z<_qc$NY+@8s6){~1;D8C$n9>kP}GFiz!LdVXfOip15K$KVSk}6N9Rh=XX)3}X;U@? zAYnDsb7u%dCbq!L6o}kzQrPm&KgYr$`fqb8+u=|h&=SkCg-3`Aeg~IjJgS|;^yj>S zDx3AlHHbmVYIg>`T!+6zwb+m{t8E5~%K94tl0ko&mizNrT??^=os8)uzAjf=7WB)OC4MUKyT7&eiJJ; z?gF^G2W8bL|L4D?{<0%+Sd?`~gkfhuL+GHew@^<6?Z{R*OBci4KX)A@Oh+r7vb8Yv z$GYc}*^2|7SLWWv)wupxHVvr7h)sXJlWPU!dM<^Y`ZTT46Dg28un3jw< zqPvfG1`!x?Ni~oR+CvdqvPEdoM41SwC0j`?tFw5lEr~!ZPh%gV;*?ciHaS!xwKadq z%Jc|Y&uV?|<9PD?Y*Igfn~9BG;rR>UM79fyizROvV;6=GFVt!_;#K(Y`Jn;f1p{G= zdIpb4LD;F)JSm?q2u-HYvks;RoB0+LvLda)#O7&Cm)07;nzS|yy=}cn8knpt{X6RZ zuT=ZiM+o>M8iI2;3&FwF3+8<<1b0Ua0A074gJl3sW(4a(E1fB@T7MInMug5wW%?Yf zoDu+=!ZY)5Idff}If(@#Bo)Y*2Gk&}K|F*HUmu#mH^aEj;1>sODGN@~mM)gO*sQ-U zsCr^dtzD(DqR{OB3Yeb#Q1$jHjAPyT0{kXzO2u0o+Ak2e!-+CAR3m={u zg189~V!mu9{WLk$Q3&rJyDfaU(E13V+01(DIduz{iEg3Ee902>;mAxd=$t6ltlSY6VgA zyJA_Wl_}4bBt1aQLtT<@KaeC`5p3ojCe#0c7#-_ugPk@UTMQrWJJ+r~vUyg&@Zszb zZff!tSZ^J8J3FTxDN8lp4t24XIz>ckrJQ&W2hv1^O65fK;&-0F5fAumLez&w0ddb6 zkr97@z1@dzdIX9N%E7$mDnnQv>rB3gT&F%pc%WsPLn#zWr6FwSq6Lu_06RsqlHK6Z}0OTwU$=_BdH6)pX${%ih z!J!@uwFrR2-%PZ}-%)^*C=%E&C~_xJpip+}j{2|k32x%cJ3daEK$BXI3#66fwHz{4 zR4rvp6;(^ti{tbfohcA3f0XGocU#JDWjeF;GfP^~t)+E~`o|k1R(f%dS}JNxdoFO> zSn^t029-tz7;$ap+d0VKz34-5L|RP^2!?zrRCM-Bt3Qt$*Epgh;^DTw+Onx!I9K|N zJF9Q0;nDBL_#We~e;}(-e@+$`C(wBfucp-2?QzV)AeXJgM}1gVttN{_jjq-6;@!R4 zy)U-z$4YTfVlZWEORbN(XW1&`*J}QQkI=emOHCwNH{w6l%)$EHU|y=$V6TJq4yfu3 zDTZc3xfgAUO+YiKi7kh^OGk1q+8yhsJy!*X>HN?B4E}9$si?ul^3J?$Rm!@w=YV)M)&ByO<*UvOn%Wlp0ZR}cboL1N3AQG-&+827U_+^}YP`{UOGsF~UP*tK;7f0M)1 zYMSNw6m?%BWw%JeAoX7FL~>JjBNAP?qK zSQS?QAKlC}3D?TFS#1;x>SY^3xGk9_dH$LoqcHA8up&g^QEraGBJ2Ho7G+V@7PCdE zv9#LO5pRkzgI1G+PO0PFmXFPE)`?fv0c|n!1Es6bS6l0DAQ3x&i)R>tmI7Zc%$B3w z#wa%hs4#bH94RUX2On>wty8`+dtBiTMeseS;a7wC}s)BD5kBcFNDdc z5zRl+sD(wRW@wd&gk_8_y3)vPywV6XI$$&nUU0(cH_Kh@7woE-{#JBYk7%tg@RyO0 zx0-fPv{zg6A*Q@M*7_%WC^tss`L>z9>Xt0X_g1zyu&JlA-67?#aT{ZBgdaw}oV%*= zCVbmaTj-{81dXzamm>_<`a?pLZZ{YwkXlzA(Poer9^}vO#IKEa0xnyH1jr4J!I=J{ z>gVh5EZMi3_x2$=()oFu7bhCcivh2V%a|bx?))_$hKgiup@SOCd=N#DaJByYXgn^c zR7-8Fd38J=3)Zq0q_Lto;4mj?6i2)Wo*Ng9VfcmVJT#8jVtuh1y|*~Wc6N1+?MnQ$ z;Lo`v$2J~+{Kmh9Nb|2Z(!=h^vE7Nk-T12ttM5O=?+Pou7Qc|^Qm(<)eMEyPMRrSB z7gJXfVV?zI#a_k!VO>eoQTa1O3WaD1V_>Rmt}6RRsw{WVbo*X54Ff0>UhjY^UM{dP zxEK2h%omA|(FsL>cad2DfGI8rBDL5I)n2UXgZ;Eq8xO=7-Wv!l29E*nmU?=NMHjAo zzyqmzvhN>oyY`Ra52<#EwJi#X{CxA z>z^|KQ4s|}$#cKuhw(R%bEMK}V4 zhrn9=IS@SapOWWOjyF)!L!5wJT5NDKKVrq_{Jfo*A6z4sK0p7G`DqkY&tVAOT`G+$ zF+VUF;K{RT?zv)|Z#3QKaEh>a7HiZAAS1Qr^pa?epbBNDuM^Fur*ZDZW1>TU3TfCX zytj~rIaTo9D1JkrEKAd7eBe~khay%^SA0Oa*?j8h&oN!sqOtze=0x$6g04tjYES>x%n9PN|){+>VB3ItgWPAsm9v~W05L9wH zcL!6~P{KuEr??1gx(icPeFRg*i*z5`NG}0g*#rcN=B~sq*jIv~A3gNNmxL103ujCJ zq3=o}nyx(EpvM#bQuzo_Uo>p|!cgUZL+}T&7q!0sW*lL88qI#}amM@;a4 zr2MT8EvW_qi;JbPE4aX110f2SHcS8hgdmi2y%HV8{YN*+;Y;fU_!As4I?_#BMgkZ% zp+LKn715?NY(m+bxs2#Vn~T!ASHd`vQWXYq4ioWzu-;zZy5=+#VhT%7lUXLbS+F-m z*kCHpEO3K~eq`H%=ROI~kS6mV($moTSif3y26wr&VHV{&9@0ZQ(`R)LFIsrMR&yh_1uPvU2kYHhO&h-A{T15MkC4)dv7K^R6kjj0Pe&;Z@X&Kx|Uy}qYa*QKZ{ zeDpFX4^Z)C;Cka%4ovfTnYtl-bZ}?@0kp-uS$!4^fJzHM=I6_`rAyHqT?Mz8dIwn! zjhboW>|UXq6tFIU5x&xE4*Z0}*aFep%o5zfSp>ZP3`>*M3Fb^J-SF^2{RRDw@1asP zJbaL|B|ftEGilME*bi0E6W_wpgW;`ca#y(R8^OGATe0$NiO$9D4sz7s!45SGa9K=m(}JCKPHy%|Md70gVnZW(R}02=hT3ggF2i@bY$snr|}UD93CFFdyX0 z(3o(Xr(Ch;d5&q(R{X{;^*xbQ4o(KtWxQg>0DLtc5Y*v&OP8qHt{9Vf&SwO^BnPCD z8k4Diqy{;^)o4nv5 z3vPO$nYbFy3ATExx#noT&1i#Exvr(hZ0ssy3-Ee}`3%Hq=+M-yqX-mYj4T{B(mi(o zG89E;Ix!0WyVxGEH6ob)$fC$>_((&zJNB4)?}3cb z0KYQgnaubtyx~`Kf*UH%Q+z`zn2ETR>=!1k;*anKcpR3V|G`kOkKu^TQ*Asv40#D} z0qbkPO5(syem6>m&trD^PxC)7zw!7L6;Men-L2JJ52B)7IHjLK-HdO8N_ca06o-VO zS31nXLqLlt4(3F!EHdYQMjU~c4~VH4>=Jx*u#l+0F3+_(P-S`9-x@KDP}irjT90rM z18)+kcn`h)SoQiE_WEP<3sjrvbyus`nt81Qy$%@P4iw-1M_^VFkImF9M140RZ^!+s zIhfYJ9iOs)*Gm5ks9b@dSOYMqoqF+s<6cl<2>s+Ol0y;U~n^AfY{V2p^w*l^&-=D^cKaU$U5orkvyMmgPXgJf z{5Un?>;*K=6>-%IFp})W>({au(OfRRw#=Tamru!_JSC6Gp8QT8RZmu`oQ>w<8>J^7 zTRk}x%f4tgV1d(I3IcCtK;XMl>^KOFQMDx?;E~5E9=^;+mK>CA@xni6~E_ zuI1Cyw`pxDkAGQP^%k?or`W3Z>4pa#b_b$!c}NU_+l;$cF&F0bVKNq;hG0)zt>mi( z-YAO~LVMtrlta`ChURhN~%gs@VZDvYY!3V`SA zN<_FEfiu-wFf>kMU}`qm=&s)jrGRn@E)9#f0#dYHslK3Mt59BJvJA}X46%-@9B~OaIXdl*09HJ5YuX*X zG2edUrAp8C;OSJzo~Eto4iN}LhEloivc^!JAHHty;8Q>=hbP;5G17lseFHR48Ty86 z($z;w-*DYx=o_5xgV7Ux1LZ7B-@wB%InXLi?NH?~zR#CXIVk-Sv<{i-5@<@qv5vtH zv+ku44fHkN&2W5|kiARB?_&HzV=?Gb>}3ebH=znAJl456ePHK*doEA*g5B9+y#h}Y zm3RM-xp#q&s=5~cC(H~4$Z#f@(TJdsjHB!D9L1bl$n$BFTQkMa;?{@=CFVmv(y!o%YbNmG?@=VB?e#RgY~xM?g^e1GT$m9_7`&C%wvvXVW!)-5nQmSd_h! z6XntrnA?llY1RiCvdXNCCOJ4HzHmum|Cu=`{&#rSRuy-9wN>2bBD*KdOuQ7-DwnR} zI=@m`0+sJ+6K`|hJzv-ghj;jn3Oc;QLKQT5hpWw;oyN4w#K8>ZqUu*KA)c;w>UGKS zPdpIRiL2F@Im87`m}{R)vpcNlZH_iv-+)jp37vw>+dNz zETaW9;Rj0p&_iWxtzWiN4^zMt-5wS}T8pe;5j@<-SqK2uf^b_`ez^JVJmUu_<+R6l z&le9-_mByziv%8Urg6TOeL3dL0xkq@hXIJ1V(YXfu|8m>DTqogRmK^ZujL5#Imajd zL4%x!H)XJ6x&KqReE>r7?+#%BPGCfKzO>pCx zt?=TkdCNf+d&}wCieK>dFKPLQ8-*)c%5Y;Jf+me6ez9u7T=^+L6Nk5qa%Kx$~1 zkg#~ONWPYu#z#aQWD82nU$j-#iO4w}i>?vyN(SSnXz{vzwhqs@NH%Aw<~mi4w&Ex- zLRMZiM`q*b+|>0MqsaIB)74N0)hA9CQ^EJGKZ(`?zQSc(oqe4tuUYtt*_QA-Ef>OW zm}))~#B1L6H^9|bH%*$~IIyESAshYOmrlAt1;nDIJ2q*N3doLH_oPV)6+o(Yb&s92 zSOsM7zxyQAhFZgos;Dbfv?x-#2T!`HaSr85`{X#Xnnqg^|A@lyDCpx8xswKbs&sX)=P8o}8<_x7XQ4kcO#ZSn6Rr9M>c*4wE zWP_IBRF9Xo){~hx&9@H7bS67@Wm<_~SRon4joV=Kr!uUQnzR+2X8Q`Xq*zePz+Xu6 zT8iK}o1#kQezdmArbqeO(;JdqW!=Nm;h#+ME-`~Mx_#;JT7oyI)U%WOGl_YMS|P`} z+x}I=>MtEath5z3(E2X!K9)escX)Q42@obVYAc>K`!iTeK56x5`D^qCsqX(`e~!-W z&*Lmn(x2b*>|O}c_!>sbfP_JDG&Mn?G}?;qOX_8uYGhtBY}4&HIdd6^f#1 zK-qi;R7*b}CkfGcIH5Q{XuL+gh)CSZx&VBfQ&J`t2`25eOcZp_GSfamdgZJ^z3OM5 z*i?8+^<}7SSz3_#O3zaDuFsjLPIq$7Q`n2J>d7@wJzyTy_Zb@*8@T~T z7OSWE)+{Qul$A;f&TSmUs`Vm=_tdwq7DmH(07Y<)A=RJn6jrSt&ZF{$4q?zB)@E|G zOxk;;m6n2H@QZ076<~cr@_m~!B&+(ZN<~cqxsdIe!Jy?z-+k2Ht zGyldZ=$vMrn{B4BU$V#OoFDsTN_F9Xc79B_YdE1R)^i@y_Ez1SXI~&<@MG9O8g<9KYX~2F=9*^%T{$;y$ete|CpBI3JL% zEi*dRSG&!xQYyRR=(DDVKUbOi;}Rmst-_`9(LL&;U0?Fijp`!~W{7Se1`PNvXw2q2 z%Yc$5dLJTFH06$VRI5Xt(bRRI&vnK45;o3|oMumax2kOFNTsZaSu052I4dPpPaW(T z#8dN-df*~c^~G_VUDT%Lmqx|DL2l~i>7ZIH#qHr%1Rg0=qI?if$;E|J_*l#irxc@f z;e83uZ{wu-12_nv9m7_NR4xElmK_ug&ZAL7;Nu=lKH;CsFuVRrW6g7x^Ed`>_dA|G z`B%4#;b>5XhKjJQ964WsLO&V{pptMpnwOedLIHdaKZou5 zo5yj8u%BF{8B1MD?bpf_9J4|OIj<&lQ?Mp=V@WJEv$Q4^E(>>r$Ft&a2nBz90s>{8 zngg3?YMKL^s4`ELOtM9Bxdj{MtAY)OBU96X%}s>olq?WW3k!v^G|9BE9Rx!4`k*Ie zwA+Xm_n4?ZxXqy_@Y6l%NyB&DuKO(paC^ns^SU%>jFWH{mlsU%K%05uCk5({i z_gS6_P`;rSs1eQcPM%-4w68mj;XAY1*S(hZHDfGBgST?x<-u<+i0kKJs|S!?Fy4Me z?Nk)UE6!{5>X!#In=mbbF)d)#W@TH{qVO;%D& zTtAi8m5O>-T6mt>!V3IEYAvFHvP(6!%ksTh>Yg{GNlMkc)`-!h@PFr-{1v8?!ZQ`< z>*-vZmQGSiJVh-vJv;T7lwbj-^JN8?*(R)<*8I+lKC}7OC9VWVx7e1cxex3M^2|2n zy4y;hyplASND2RyD-pC7jGbD>$Pz3)@4f=>P8 zRnV-z)XdpwXlDJkV?YMXntgihPJ1jqvLRvif6|fruadI;S3#%#$5hbjznPQ%;~a_p z@3i{=S9Fhf5-^Daj=LTOw;fVv`NgyNyB_-S82gfXm*}%=SL#b~_WvSkyNMBfF!qXa z#`Rea87GFdvdvzV6FZ!2L5qjN;nq%wzzS)GM+yD?P!1_ z?}rlgq7GZAtr`n`a$DQ$v5IFKuNIv>&FnO0ykY9>$(EB|XX*5xH_j$q?(oTUgwEM5 z`r4h1Kc{5$weL#9>tZ;wqU}^K2+4LoqJsPGUegyrkxvPgtsnl3^j_BXg-k*L)mb?L`?@w71g#zaleu?i- zsX+DLX7z1-8%hWJyqGQD4p=hJly8L^*IW8F#KM>#`BjSz7i(OrChD7-r z{3vyrMADqXf{4w+L`$1RzY+{Jii|58vGLf1LO_HTqYNQS*@vle)}u-p=BQHepVKpy zlsSBqlRvp{wzlFO)jhcO3t*CvW3fL;oYh=Dr*RCYMX^Tt2R)-a|2UX9Z|N<`Oy!b> z=xPc_*XTld{ImTH^Zq3&xa+7vY<4#p-&dMT+WZ9Ia?If*45KSrhS^SZa^Gc%xws@v z%+{U`H>JYJ?Eiuh-L!;VgAKLO)>O{6j2%rrqnEzB1c4=~{ z{t}1b-BI_Y$gG3(^~qfWwEt?mV-P&w&c%P|YNvpT1KM&?#pxZR)>qV&G#oEg{hA1x z8r7dS8bCUg{iCk?h^6jwJe02%0n`}VN8OXlha+>#TL?HG8eU9PL0FW-8e zFOi1wQ{%YJ8CsQZ8hP=m?3%?xkjOQcU*R|ov+&~x{+R02ejTHUyl={ZvpH{#Iz~xz zcvX7nCXoZnajaCMx3|15I?r&jbxEjHt@ZW;Ox4_LW?ta!5HzfGR)(UnTd^-FsXfs1F1bOT1~N z@Fg8w^(~mlru`r^a05i+c86z>44b8(vBt@M^woYDtGd72iH+y=?nM1dN9aVEgUQzn zJiHUtWpHrV9C{|Ymzo$D}Hd;)GQa;hCxc-Lh-qpoY*NKV9#1R#Z za>tnw!=tBupf)v+{m_$7C9XEr0Aut?ZEC53T)RJUaV*t<)&idzyJM+o7|wm7Z-O7i zk$#mPIgzz`cVm%krP5gD*=C~wlE<1_oax{Y!gu(89;|asojCl&scFxNI2Q+9kaoq_ zA}rlpL84n=3)2Om*u>$_CHiyGz?|ob;`-HS!&)%BV>31}aL;;o!ZSa)$*nyuJBxKF ze?^xginC(-VD7k#oDbNZ{QMl;T79FVyC`|6veBb|)IB(PXv`lmPjzXLkJx}YC$687 zXcCtlbur}$)Ya??t;E+`rZu_m+$H^E+Rr)`T_lp9@?Z8(Ez_qwDhy)>7P03v{)hCX zZejyY*3MuiCJ&v{cuqv0wvdbF;!@eP>@MPTv%%Z*lG-gi|dX` z=Z5iJZN+Y_;dY&d${i^lr5m6Bp`4`ykT zanL*?lP{YZiH`1Lgt0Q-mFo`K!umlQM-LTGV{TiFv^rrEBc3L+B1{c69o_J?Wb0GO zeXLTP>b)|8wbuQx11&BWx1Pv(-hJG|7L)V5uoKDFx8OjRjFa=f*_;t8=XjnfXWM(n zB;U!?R;^p#_Fl2|1}E}2N_t#wb<6AVC&ApPKGVCcZ{OxA<+$8=ZnwK%zr22K_V9Sk z{Uh#(e|dT8%Oj>!Vy=^8aNAVRiG2tpqFxC1Tw%KxK+-;j!WgLQ@Dnxeb^Sp2De=Rw zGKRKte)5Y(7mVp!Lfa5qTg}-#{62nQ{1Iv`cf{Qjf|!6Su1PC{VA-!FNQ*)JLJlZ z9wsvNoG~jlE|PraXV}KD^P*Kt5z2|ZH>&4%L&`d%I=q6=c+QzcMUb!R5Vgi&ujke+eHDi@xNK2+9Fsf4w zq8HuF@2N{}pkl*wj%h}-Q1)@eYuExzXzE?4K|(P#L?@-E1&uv<<^XXGYA>c0wy>1@ z#~7cO#k4-_Fs;un`$7h%VMNzkz}0xHR2BmOaxC*j`)`9rpn(XN#oDx`z83{?Hv?6O$y0bz$$vp?#T4Gg{TT^it_(c`cL{ zRuIH4HSSlaOtau!Zh;f#psI2l{hE>&rmhe(=7JOC)>>vsT}&Th>@jt{TV(U?^SxZC zAcM`E%&`Qk>p9phr9B3_Q3ajBp09%DV9zphb{gTc&B0zEgRKUK!LH+&NhWcH)K?xI z)nQdKF|?;c?9Glhznua~b#PihGi%uwO=je@fXl2UBe$D=cB*O*LLK(iXL))-M;)c* zZV|z$Z|u$D6!MJY3Ednp4yq=;Ele1)fMeP#jV%)oYS3G#is%dN^CYmb+N!hRWN}b8 zEni7xM!_ExC!081NmQdmqJnEwLe+Rq&Tz2!knoG@DsNSw^39Jyo~)G^#TwIF&BdN3 zeYw654Q4Gem5#kJew9UiIch)r?g`@qwmvMT!+EY6e?ku(<}-~Pd$e?z_jCvoPc}z` z`Ap+9OHSErG?E%RXJ6xKqQ2^Rp&O)9vSW5#VVJY5>BA@0x-cTH(0w=qbn)-r;k zaWzNsqNzMH!sMTb{h7pytLr?ua(a-mLNJzd;930ODV{|&n4E9-`TeH8zOU-*`>t>F zRsTy8+q?dLeSKfpXZ;8I`hFefy?VCa>aV^-v6pIn%LJC3aFk0X9DA)jI-A8e%RaC! zd2>Dmw&|!1KhdY64hZEpF4il5{M0a41#WgL>OG0$Qu)i;TH(=B^`1;%(y7O}^q2G( zGJ)k(f)HN1`fapB_@OAk14K~2v`ERc`s5P$h;n`Ma2{ox(S*E-0fS2z_)OsG(^@=KbYLi!*@(&Ja?;rtFPbz2>uMvMnHYWr19i zudVn2b?cQAo;(tuUpm?D^05F*??17|p9rRE{0iJaAPezg6Q)B;q~EYQjO_!$PPO#~o$~!4XHfy5oA~U2BfisB@i0wUGDA$6<$Rj~e6aS!djj@yp2v0EW_&;A~%KR=tF(;tOjudt9E)}PQN7r_nXdX$apF@N?} zJsmYcS9J9sgq7ewb!$kpNbpB7jKJdKTD4U*;kfqOHuJSA`&wUW8Mq;XCkU*$Bhj)}7DE3h@Mj>T6rVU$NAW8%zDT?wwJsX1j3H+hckS zr!~&^gt>e{QIn=zYSIM6KRgMDzou`_1jYk1^80JVjSQwi@zg`=a+J8;FNJ)BfS1O?D9t0;;&OiYdi#La4wW@1l5Mcmgwq> zFHwJ#I~gaLA}i!+%hw`^D)C}7Ya%KnOcnGhRG@xrCw9>#B%^_~T>58poi8F-%`Utt zM^bZ(fT-UDpV(g7;49Wz-U+7;7zg-Y?VUqiX-(7IcUkQGX z)aJsk82A+(4!_|R{Q6n&J9y0BgJ04AdH6jj7^Zhd*Yw1{EnEfz{>=nk1b$$fiGXs$ zj`*SB!O62M{#_f-g&+I=lZyp@iE{+^`ZINdiLq+l29fPIJ{uV zwpbN?zg6_7TH(S{t&|Vqx=Foc!87;#uef~nWpZ`OV;6F`>JN{>{}cFy1b%J>{#^q9 zCV||)Bd&k1&&^pcf@=NyxR3SXh~Fo3zt5NNuj%`H3^33>Aq;QL($?&H6Cc;f-ak|| zl!xnf4&W8Dcx)h6qWa~$yKA9VR#+Y!(kqLNtvo5X|Y{X^xMs9t@gSXz< zJwOipSu}NISRXtwYEjiUF{}+w930c+0ITA1;U@Ff$8+9IC<;FYvBY*nn1C|cDo%;T zaU7<}#_>v9#eyEKn3CVPg!LYLX8fXhndw5#QaR%_D&GLdz@Q%FWr|In7hR%A3og}( zQkzUBX_kv&r#qB+dQ4`<`W$&iZF87%mTG!?weaK4<_gB3v-X5~vQaFajA=0=^ zcw%{Ca9ETvnZSL=3M*Ufp9sS+B-P|mvP~w?>_q2FbiPtLX9Cwc(FGD+puE*&0v9^b zeu?%g53HF$g%e#Q(M8H}N+wX^L>EhR@oF*C%mjQ+^l*tDuH1WM0(**SAUja}2l+4M zzl{HK{zLpn`Db~z2HM`rQV4m(`FPJ|HfVllzL}Cnz0Ax_AM`P^v-quWRyh>`zs0$f zC@_-cd5Iz8HgpIVNJl0~i_sNFCsr3HPO;t1FFMu-}uJViX zLr%z*joZWh=L|?^7qy{DhlU9-f>>va-I|So*l9ud% zKr9VfSVCF$@GU)@K&-S18<&~b#BG@A>HQ%7nZS)!^u#8o=S}o{mJ{vFq$XxkwG-`N zKoc`*v=i-&N)t0FK(toco(Xsgj>4-K$cjU9JY=!4B@CV%D+pM`PvSsyl`GCZm zRxKlFuiEFrLT;O}X`9NCSUW#^zMe~-sHS<6=4#vsYCeWE|^l7o%jJ$XA5$BEFY zZ#TYgekqqFIbNbn)v?tIn}DeG&f32T$;@arA5w6rD zE6u?D=Ho&0@vuCWwLQwicmRWom1|_tjHbUU*^EJKXW(IpBP$TB%Z8$`I6ugG%8T;% z#E!}WC8$h>SU?i}7Bx)QGV9y@G7TgJIyTfIVis%hOD9c8j7426{^Glm26#$sIs%ci zh^9GD(051{lG!6M*X|%sGn)`SJKM!}Hc^rFEKLZLo$YkVmcBGmNs~3)TD~n7?#E7= zti0BuYcXugowNcMJlF!8zgr~nHjMD^Xm#ELq^w20UUKAuC?^-3hn?*VJDWgIKxAc8 zY=pki&Nj%-R+^Iy*KmptkZk6f|L&0EL~F-cdFR*=w8F8hbLeeQd2u)1pfJ z%16DLsY9ZgoG&V2ZH;^xDGv=!oE2WZjs|1`4Rll2#=U5U=@mKPm!v#pZ6~clmupS) z@M=S5nrf>P3tc>!{Hob%f1*x}g0(Mt;XTg2sFDg0Xb`r%?_Q`#fF3wy!fXl*7cVQ9 ziH)9?mKS%pBtYv|%abmw)B|6PmyFe9l-X`(9NOWMfMk@X%2+)bp{HE0zL>`(EX8?* z)JBOVD1>Fi1bY|Ai(VZhLr||4rlLgh1uZ0v`DA3%y3h$BYe6H!X|t7aT^BkbXB=vx zy8bZlu~8eMPy9?Dv&Q(TJ|?=i3x~6Aj22>T#(8n~x){!b1MHcYw}#8N(Nyw5^C4dY zjNe=!z+nA|!?m%e`NJI|0H93hWj%ZtKIm0NVcZAdB3OLROckj;?tUR&(RqvV7hRPv z=R@^yesj}cR|1Y`YO!n+yG6)mtJwJN^O~!B3a)I5^}+gueId?8`Qg4{6J-=yI6ty~Zh0H7ORio?$=I6j0GSg<=`rZ+ z%M{dcn~EnbqA$f$`d-1`aNA$Jsu!mUpCP2UMn^Ns(A7v&HXHANZvryWzsN4ITp%dr zgp-{d5WKo18rSE+@H`jBjtw#rGV=bzO$D9N^wToJqLGdL(bl7*HO}fhP#8z>UEfSD zZPi^R%ha=_WI4~6_S;vY+0mYJ_;nOjO^H^vI8hv<{pN$9EiC_?oy9M#7bNA)2W z1KH|iTk)||R36=K5!fqkV{*C@gY{@p>iqJqq$0_9xiLYZZl1G1@fv5*qZ2PLyY)P! z;m{En88y*$;F^F-Iw=Mv{`CCBP$<{2M$<8D+b&?K%foU*vxk{az&lb4A*y!h%r=rRN6uM^O zTAXe4P!A+b`+k2e3Z36QXeo5E>w!Z1{YLjeaR5@yR_t`YzGY&#I57+d>xySUDuV4@ zl#e9Q-+bm~94;A61%;V0W@VJ8KBGKBhr^?`h~1>UvOuVZ=k;V@t@Y*l9Hm(h(_x58 zH2rUiR%Hnr1`!-cijEp=kvP*W@p)1A7Vhv`JjmS0--Lw7iLm4$kGA~oelAyf^1-ma zvCZg*BDp@(%7lxgi&ii|STsbSD^(9;{#ljs}SRzlh zY|7;s*Q+MUvrexH$@5~p3VKApBYE|DRa~BP^r|{}&ef|fmgm({`AEI0NdgP>s$1lF zy}rB|(8=pUeK{Iymo#C4mF0RfOVvU%y(%HkguYzngSsd*&I$C3lRAt_Q{ z{xZMaW%_cVW>SIq#Zy+u{G!zgnO{6(g&yRoFW+W`q!Ie^H>}XZDzuB==(2SoXrmPU zD-~3nK3DJIVL#DJGuTZ)v zcxA&{hl~YeTqp~L(9jA8;V#3OPJOW4R*keI{Jp5XGJ!j#Xr~<83?$oL3w}LSA{HFa z_2j~F+>2tN4j@qx7*BpKKr(>`9K);Y1&jhAfn_@UOCyHEU8P%i_<%Hgu9A$@gB_je&%R(9$X0?41eG5>5f!CRViCBI5$|&7<^}2eAIyG(+(4? zx5xGxiU;1Om>0zgx5g{hFZRbqZHr#FesmP~L#ZkG-B&kU#agZWFLI8CiMx`ekQQ!@ zj)GxrkM4c%uwu;oMu`1OGcy-TNKVCg=d4PjcBqQ-Kyl#ADlKicG1UaJl2>~8hY=nO z-k#%G)qZXc$ujnIs3&7Dw}MQP2FvCOfEGV6u%=XyW!r6gt?gE^XG^i!GUaNLzKZ=b zNYuMjb(Bz@_ko##+lTAK5@f9na)tmgvKAqr)+sa#3w%p9G}MlQ;pvF&?TW2VY^^!w zvcy)dJpCN8gNs!RS;y6dt?OdA%&d)#8gzczgZ7$RQoB(6^~fh*$mN>MxOMT0jo4Oq z#wt4FS~X@Q8)NL534!Vox})A?BlOeJutC4P&)(OvQ5?+~H=5Y3iE~9udF;B@(U#q4 zaL>9E8u7SVg~8~$hOco|CVSKQi%#YD)FlW45QdG^P}=q11s<2t`h|v}^BVR0nEL&V z`h8e_tv}@-uuuD9<^YuQW46y4J>y>Qo}O)0v|=9?sdxU6wnwjfVRUraewUxyR8Nkk z!`!CYwxqvtgGxgls^J_MR>(B)-CZEVzV3YEOo_s(h6y@X_7%AYL0xIG$?&&o;x-&t z9jvKZ(DTU=h1l|8-ExAVAFR*SxA$I>Ke{X zX6hOyCJ)p#jK^4NRV{nk>7upVAU0WB6>qyWa#DQjt;GC@m`DrnjlPJiyd9i;y4H|& z_6S0yio@jp)7;X$4N1)_pO|#p=ByqI0{F0n5`ivW+8)T9sau zbZ-fd+?uWmg)wfw{d6&N!jL^^jIGTRCp51|R*ZQ6^IEM;KOar%!5@I3kF<`X>*Ayhj2 z#!E{11>)LikCoKXCqff0SNUePYo|ShA5|4sd5#(P+Navg=ReizxA5GlN*T@DGsJ9- zXs5N5lu7o8lwL>pE@j9s;dsf#gzqhpJwyp#TvBhALeBA&&`#xYvg&TWH-1eC7`w-{Hu~(R`~jo2;s*{wpigr$t3Q0mvWyfX|>|GKtx(g z{0ls#AKQ6<&U%+S;h*Kb-E3LmWz7mSbBJCqpYi_&F(=Q1- zf~EqtnS4%G3CR@OL1EXI+(MY+7=)#vW@?Dg8yIobzZua=trR9BXQSD-1QQ7i^Sccdn0_z1&7{AJSn-6k`rUH z6qt)X`tuFOT_*L77tayO4DF2+Q&_zCmhLI2a>On5!Wb2!!#=ckm@Cc(qG-^?6-B=j zxofkurdcb!8fcW(t_*91C-NWm6Z;@9G3HER7-FA*gd{uXCOiA3ybE~8N!6pG1z))y zJ^}YcO%O~@jmcu<+(VJ&=Q!FU^3lSm?)~e{&Q`%^z z$wKwEhTd`;i`DmJv3k)R7)s4*$y%q~E~*7{$+~5-wPdA66jDyh>l`*q`-bvb!)1X$ zN%a@CfiX0AFw;F&fsniB)jDQDvD|@TxdX*=fnxbBTB-N*+gS-qeeOGkxstvG5SFXJ zkl(T5lXghb3VnZ2A)kvZr2V&q3Vl!WP+oroRM)ICLA6pEo_uDZv!Dxq7ty`n#PA`W z_6^ws0&P`3_unfX*_M1qtI-R-A8~iqjO+|!OC091)7yU`;MN0Y@(FSM!0W)8dB<=9 zYlGMd1hvy{De-G-J$@D)PYG5n`^eQ_o1FpmKW8RXo}q}z+JZvTwrjIrCw_-Eb`wb> zhLI$n&W~s}wDOs!Mw{I#^V(ZV4ZIY34=|rp7Bj~n$w0J`jW+l&Uz_~_TAy^AdtZ3ue%#IB8*77h`)z_r@Y3Z` zeZsqJpd-6!>1&A8Rz=Qs$I{2HoCkiM&t|&3+Fw-D!uC7xDPg8z7uPH8E<0_yn>2Ti z?^a6MD$g0|=>u}pq!mAovSneW4LK~0O+A%n7p6XVSnY8D%cO5uW|%8z?%s-j3dU8A zBif`>J$sJtWVZjg4gRkmA3nZ^kM5$J(e?6S^78^MeL)|iTdxdE|1Xa24afByU6eQW z=oZSW4cK0zJM^$LXLP3?by%7jUBQ^?1*G*H`FpLAw=04YR$(bC$ZHP0648>rI)tr0 zM^ed)x;HJx3h5DJb`NunY>VjTLdP06Ss$)P+}k1}M_fma+3W(i~V z`JTW4mAjbZ^ER?FphSo!cjqCuigQ-!Oc<1|avE6J@{*vrL{23~zufN9=$8Z%c4Chi zB8dWuY3ZVvouS7xsUn9i=#BuZ%9hFC3;~ciI0wk6T!Q#ku4z(+15}kNGeEArDGaBl z^_WoF%r+=z%RNF#>f-iUJ`-qlHfKCW=fTPi0)qG38!LG(ac@A+134R)S?%5{ zdC7~VQ&PThZSlcO()S@zLLnT=Z;}aXJqge;c)Ve%f4&pQ%Qb~hzy+BskZ%O9ad)fn zYs%8SKO;T4JE*NO@>AX)N@k~ADX+Qm?fo<)F@}ZesSi}aZ9L4P0*gqaDAuJq-onZl z!?;A+IAQAHZKS+naQH<2ug%v=5esJa(@GJVW=@4u8IM5WztN+WzN(eJMcjpcmftNZ zTm4p*t^Pu!gu+5{kUXo1pDK@h%!lE^dyrG)Qp88e7rNFzkpszXcXF0@&6&px~}|hu`w6;92E{M$d9@iVAyVb z9pp%uflzp4YgiwjVh_T-TlU;WeiC(W=Cr$Z``ye5bU%nBaWY16f>_uvTK8Q{#GbZb zqR_a3?K|BkvWxCLhhK6GZ5XttEtK#YKP4@$Pgp9|y7w6F1Bck$+9ZemX`(1mWlMWy z6Z$*jz7goko^3c$@08?Go1*C-O1v}%p(f_uEXuNzM#=;gGirW9z53`ZqP^gyvva;p z-&&O(JwV`fiVd&87#m)_3hH|Oo3e-HeQuzF);HfXp#>qf!8LN7f)-Ay+`Gdg=|jgzPa?yHR;e{Vh&BHQ;s5f2e2iX6}8rSAJoqy+DK{N|#_ zg`|NZqoi6;Ac2fSV;!i3j{Tw1I9o*}Gz*YKMQuaovGcpX56EbvP1IWoL{G3G14YhBq_ zgO_c(lbuwkU-pULsE>_9e>=pc#lwoYahcR83>(-Swmjh7cqXlAZ4MG1 zwc}wD&X9p98}~Zibxv$P&y_eTlAeai%lcTl;4Qv4B4kpYkSpF=v{NyuIpzrn8*=zW zgbgW%tta+VqEGvzWsD`4tZxZQY z{YB9aP1bQu;AX8_Uo%oRNQ>Frs2TZEEImG7pOg%{KaY<5JnG(0i`boH^}3zyXdy0j zVv1KU7&KQYOpK<_4xt?JPpHG>Re7%3iSw#>`cdgs^4){lZDLTaozM(HM|_-&VL(kk z{dtSygWji5?|G=EIp%&<)+m}C?o8pl@&9YqGqZZBn_f5td!XbY0~6; zr);xLL$b*n2Bm$}B?X(>7Sa5hZOZmVHX6(}d3)ufO;bEh`DVV+)H&42SC~i8?_?>A z30RKKCWmRlmC^)<$2P$d7O*%P0kf|$0gIy#u<}V0R2P9u9&izGSfH>#6dSESPo=}M zl?qsjvu#pCb$m409?WKOK%+TvSedS3YSMvSmlM?-qE((c(9lNy%qD72VqM zpTHu8D?ZYaox(dj8%uKwMzRADt{pX|hpuqDvwK^Q`xj~bK}vDZkbOo&D8m9_M#ES1@^GsMu0q8XPX}K5^Z@)}o3heI z6)HQIQ}nx*mwj-&3w>y0qz2lx{}=I2?YaBeIrJAz-W=7c3D18bP}nM#2JhKh zxbJ9TeP6Zyzz+o$?rq_b+tXN*V&@Pse)Ey6Cq=8!4nWXawlqVyKGiO7+0vq3W_oMS zM?{ZmqgyL8P{SpjijE~ibnnj0ELS-7z-`i@zeBY9TrX(vuh4d*nHpiXmj*fw);|fO z$L_1Wqm4r!9+Jxzq{+1EYgoR&sEsvSyO?%O`TOmn>NBW1V&Vy)5=22Zz4zk-8QJn) zSEb*(OaV%^yc6f9s}!itf}c7x%f)R+4Wne6!z-p|SUaLz&pxug^FCB54o)ZXXp(hM3+FPp>M+WKCSj#YPP=ZK!ZW;#dS#Y-t#b zQ({(UV{YV&Ow>K%SlSiSkCrRZ0+c~Zf3$=CoW?OZZN?ti9zfdkS1y`{0(|AT%${m@ zs1dQ$?=42S(JRkS$Vo#TWMcn6~6J!+809X(N{g z`No)E?cFlcdp6$OPN@3fpDyZV-5?7|;*x;)QX=|%< zmM-?H3#Uq)EK}AJ$0m4T6&v}H&1JmQQSN3bcdo=pu?r=JQty=2Um_PugHV4d?_0qV;&}UIkX6FRqdJes$c(H-(In` z!GrY;rk2KUD4=5Jl9AZJ3R?y>S#{TzXPE?hwfWx;XUT=2 z#hFg#KkvP3Yxin2TA6@aT&&#)M;r6pb9i*X^_Ljg>}hjrD>{IAa{nalc5y`y>zdpj zT;z$QW4oANJ|l_`_H^JhCJ4d6^HW5v+x2NRl={xQP+Y>Jp#L0=WA=T)1|RaZwl-2S zv~8Eadq~?pw)8r+$0hu>f3R!@=IL9qASwL4evdXTg z-)x08rt{`N<5Bj|beLs{rLtX2*Jg&w85tpZ433PzkQ!;^<=!8@D{TizPf&Rd3Vawb z({HxZpCY}hnbN4;*GekfffQUU?16goYpZCQsqWu-zx17^+KKr#-her|`5ws07t&Tq z+tg0O&IfZ6oXCfW6k-q(hE=H->y+YDW<-W5o!_uXns*}2gAI()0DNL!#I@l1I;W-U z+TP0tQ|(5`thz&OkXo(9LAI(-C8+&TDPxinKD{WnBQ^A}NYQq_$_4Px7g0b(eZspWN?n#1=B} zeZHg&Y4wa3u_h3xZs9vosRx49<_s{ut6KRP)C)PBlUWRt54R3{T<$8Rp#dNI=q9e zHyIoyauxdaK@Soa7%2~a*f|r(4S=|=3s0=~FY!*SFKWOJnNxvnjUS5YhVzqn+~E8X z+g+K$*}`63OZ6Szi}>}Z=G5{AmcRq#+;S7upUJ(AaM}C2BnPK3EI$DC#oB2LpU_Tg zdKmMO(Ea>G@8D-;6OtUy`xlr`Ooj;I@0nkW_W4D@!|s_0VD1|!`ilrI-XDA-IMs^$ zrayI`V#6^&;8d3{K|;*EpVQFjuwK+!zD-M0BYy6eEZUh1>uzM6+-Tj136j@#i<$h@?-@yAh4&9m9}x z5F@mo#8&$??fn6tMpNE)V&v?&8Its*Zvs&AEc4AH&gIH??eW(0=1C03n#e!l*R;5M zpnBa%ZVYM;Xr(Vf86HqZyZWd4=`XGx=DH@Xk3U%s?u4Hd+{Wedb8fC3`J*i|(LC>M z=L+TV`+mc7zT-cGVaoe>maAHCx!n}*0-t{*Vq1|v*~(^80Y}4xXs5iIk^4ag% zJqyG&gGeNP^adZRD4~zbD&OQ?SiHuGHNrc@wXf}?6EpV-J%oBH(g`_a>#^`&)e}`s zJ{E200Y2%P2D%9o!%&GW6juo-%C^t6(%P@BMU90C))vgKUQ~9UVeRq`VuwiVHe$KJ zrxc5=%f;TZeZ}jz@zY9i&&DqnpDgS3FQ6Ef$Tk&;)sqxDR6gIu=YJxgjJ&v;1w*YG zt^Q@2Kj$TRdsE(C4~xRr^PyglH__KTeYWe{m5|aUycj?H4;)x~ujdsff{mvbYj9$} zGM+m5Dq_ep?TelB{HpV<%cGjAn7*ENGPilDjqp1!r&+a$JOp%smMsh^ICEq*8d_y%;gYVe_1O+^l8Fh&VjRI$tWXG z`6dAtkO*oCNP>31WH%p+8(79hJ#i~){2i3J6lTk+2}@csutxtAFNVUn;$4`t7yJ+t5*5Y zFjx1Fq}Aqu@JH+lwA$M5s9S6&R5tYS)uJu1Ac*ceM|+{R1gb?xZ6&isv9`L1a4ra^ z3J4wU#sXm#Ae@XW?||@Frxc}i&Ak3B~+Yx3- z76{oM$(Eu(n9b}c=~dM^Ae23o+^PjOvZqpgwCv*aMl`b+0o`z?wS|Iw!w6c<5ag@Q z*)mYrC&stApi|g)l3hj)_6|Xf*U$uf7llPZ&n`uQFPk}wdD#!lEg!)=`y&f{3iHn5#By?dDBCE7lcS?-5XFu`mD1s< z_(EI$A$$H1Xh@}q`ej0@5mIfR?$AoKbqnG5ao=z0sNna_OYFHtMI85Diq@_!qCZyB z49K|1q6VWC4pr*=YbrKt$$wX@Z+$+B*;U8^m|V=lUdlh=tO-J|n=oARSB~KwQ!o!C zJA^HcoEPzXPnHa8P4Z(>XW4}k0%<`@Hle2Uce=+8)Y|Npo;ASJ%8AUk^H>91J!!AE z`=#svPs!PY6RKOCuRRT4)PuBC7Z8`T38(V;la*KfO~#c0-td__m9-Lull#Sai<~4z-~NJ8dXz&TzIi0v5!%q#wGUs3KHx&&V?`f+pQR6L zbLqp;XJqNa5Z(`?4_?V2_`%k6b^z2?wP1if;~)}~b1(uTF}XKF2$4{B3~CNJL_&Lf zvInP7?!b>WA%eOCMX1g8dVl|di4wxrRrSIKAskiNwkQk{!cmno6gJ^F4dGA`j+MxL zYGKVOO%V=NlHCmmhf|6Wj-1R6;mG;GAso&}*2*A+qo264cm)%HEZ=69QDQuJEOev8 zq#K8{<^Or4u~#E62p}ZGULh>H(FeUK(>aUHu8!j9w~yM*D&b}mNZ%ikCE_THPy}UN zI36=olsUgZaRu|~!LJbWe^@xfeQ-t1)R^3D5rJ1QML&ckcfVxEpejt$of)k*^VWI> zTBhpu7@_Bpk7X))dgZUm7t3$?pvOTC+k(bUl!G94Y4$=}Vke5>yF1MNw+?MGr&g)T z&?|B@=Gx4+lhAw#4c}xup)udqdn(@2mS=#uIyR(K#iku3D>4!kw7HB`Sm2Ai#QmZo zG@0u!F1ut?&02i7TXXA>EXXOOE*9S($png~Z^p!!k7Dk90_@+Nehfmj9+-#@D}BBg z_V?3SHFiT)Ik9CgfQ3_7cs+&b^92A|^e&vj+>+=X=J;CS0I|bQpWn+2Ur3O6MV6#q z2KXw8MNX0i3K)~^y`VS+to0NsP&utq;GI%pd~h@>s4%lx%o9Ve!v#^r%Q~ZDQ8AICT#zrt%hv1O za^BrCiQJq#@Z{{9s1?GmdygSQruE2KL`>*qt232RtsWQwf1LK4Yhy1-Q|*-tvno7X zuGFR^P2yw=(y~2Mc`e(s>ViJO<4|$-)@9kx!PkFG%G|ZVg3lb?Tf7ndVr#!6_a6{_ zM*d{0`^b3&MmhWH%Dhcrlp{tejzHie60Aw%XFBldEx{@=vRA&*oT*9C>*0OECP$1^ zu*nf46>NHokqUQCvWF!Hcb@6Y!sa0FXgH7DZ(y@ciE8`Wv@`30JEQxA&)1w5n7H#lmJ=W9$in9h-jl8UkKA|Q^MuMX;K+Fd zK4YBLncSS<&O|+{rpnH)98u7LP>v|*K5X{9i1i@E~5C!vbU|%e^nwH(Kwb%Zo?Dt&wy=t*aRk;&I>AD$B-jTNk?+Zr==o?#{GF zC9^*>-|d}D)crDIvbBQnWY1DXF8Psz+=W#k`JF2I-}M$YA;VSo&@f0g(O%}P5ih8( zWb)?-`W>pk;_ma9|2YM;t7us~athe23Xs(`rvNjjkVs@cc6Zkc0$Vh|`~XJu0E}n~ zBoXfF1!FAAb?kGb%drEkO}R{ev`^n`vvA{F z$V1N13c+@?PdUVTTA$jd?n(bj1(JgoG_l0Ek7J@a3Z(mwgbSu1_@xRY>ncMmTx;~M z8hu|l`R9W;I;*L8R!hEaEemtQ>AHThkSq|Hrb$@paye5`7EfQP_IQ+R_|8ekxUh~} zsK|w*FA9T?=}8z+W@^({BM%|nrbjn3Nh2k1MBN|QG?rQC`B25~ux9~L@ee&JZkJ?B zSDBj}_?Yr|;*)c@C*h-^=~O55X6P_^Rsn2~t%wIU9g5pOvWZ+U7&b({n#l&B@9_}DWtW+rc7s)f)Y z%g|uxY3}$r`s2RjSI!63h|(B4VDv(5TCyc8yA~n4A|Iu1_E@qjK1ci$UI{w$e=?qi zIVK>IwB3D#P0{=aI84MY)Ch{?VoDx`Q#{5Wu!f?f0U|rn*NiymnDQu6ed&abJ;C}HdYGT67{Jus!O#7c0nCGz0nEeo zN*&-W8V~C+4jp?$bh4l5TnAlwFE@?v@mBtEn5$pnR6TH$Ts)2gpqTqL?8F{_f>7GG zkcaV|?FTZ+lZ(js1-qPUt&JyoiJ?>>CON#tn zoBinO>_-du=z2b))9W4=22FI8lL|4A@g2Gkn~tdNQ8pds-nZ`Q)C>Ae^c^)8V}mLn zG>8}Dv|D|yWaXhT7^XCyZcKj~Qv>WvUU>Uxu{POFG#R%)fW<*@xoL6mGI7Q|xA8 zzo*@fZ?~Iyc)Zz?-tkh+R*ZHQUz4pSvKfk}>fxwnx2PfLdJl{ehNfYu+x@l7}#c;_Ybtg@%)wD~Fv5cBqex=y4pV zJT)#F9(>6gj~q|1m@=9x|8|OG8eshVB%-{=3ngN7IbkkE*0k)o2_2Wz_-{ojb}F%9 zZOvbXYRN~biIYDIcFYnNMOw>C(Dh_f!7qYKCSv3r$kf<@U`Xc{` z#mB0Tgl1NaR^T@e#wpVPf8b|KPp1iYn}KW-Qf7qRgq*6sN8_BTd)7JAu8RTfQPT>v3A~<^AeqSlM`->Tty!*Qzg1*5uD93sX9B+Tp zy~ZQ5Anjs7!Y&LyTr(Hq@{R9j0<8MorYp*5Q0mf3sbXeRk(n%(!1epA^b#qb#JXaB z>RDUrG25Ftx0IKcO}CIQn7$rakm@^0;zU~gMlN-Io;zKsug$n==uj%WoDN=&-Q1eL z9Mv!e8bST-#y2#QXsjSnb%z5-`JsMbzpa@w%D$4f$|w_QP$2eJ_|{`4E37^&`x1;T&nBKk)y| zR8?gv`=ug_|Cap{s#qT|!-W@1kNhLPWu~e+FUo$Y>YSJTQq^gOsk1=$ef@h!WJ_*g zB~WZh124wi;7GFa>%0nE^2C3eY)Scc#g@z@n&GIr7q%pIlgXA;%2x*)ge|Gz)s>ij zop0MYy;zcG-ks%Ie3sEgarDAIIHCqme*E5s-w5~NeWHj1BSRWl-Dk!R@LMRqvdDic zpcZ-G^xw1k4&e*W0eclcz^d%4ka(d#kps@6d%%;deCz)S6$+~lfTo)wRfW@J!dn=l z#-tkX)>~+!Ks}A>$ze63J#wH{5J!DXEN=n%+gBi|uQUnRS&kRLyu+z}V{^@tJobO^ezX=;!?t@;l>u6cdr=4Ie=Pwzn zxxY`A^YyZvmm2TM+RbwQQgh`gD$@YtK0akRZ}w2a>336NsO5v3{AA$}fJyB?JF1}Cagyx*+y z>H{nwXH$u_fNVE0TP+}4&39)3dDaX+M@!TK@<%hQ7LZ??@6G~Z%{$4vzv~f`6nOWk zrie3FF>0Q0zfVHMe6uOj0Lva5);=FdkpoMkT}Cl8dAnckQUMQ0%y zY^98~QzG5f^mf8Me#ItDIKhlh90(Cxd8-*)Ina!~y4!IY#JdMiPsOqKzfb|IjiyT*PH&68P0JIZ&i;mG{S%$uXi88?=@v z7$p0gb}za2uXQ^99TZrhs53s*WVK9+hj#X zAqO)npOujK2yL}qd{6R1_KQn`l0ERCmA$TjNF06>ck-4Yifx)1xQE0X{jydnKBC(= z@Fv{GoVtUA;2KInygAIHIjTx*16r8}!cxo>_oWCj_1t+b2M2JjMX&Q>$u^-~+X;w= zM3XvJJCNYk3}&X|6m?!dgo!0Xfv=t9p>Rh9(9F>7wd@q2zq6#3{CNhfG6;b9M=L zcJOQ<$Fv|XSK>sB$%%6{Ci6^=2jXdYrf_yM7YO+30MX2aLedSB!K(+tGeeNG`mP)< z4}xOybxi!i(@6Y`f9M%L%J{j!V{~pfz-c@0BmV`iiYn%g>bR($%jjbHdO_yESwEqz z@aDR=g-jy+#N1oN(@nY{#3_qA1$k3dLEU?eBwLY!#Hp$h-CLIvDcGELW zBBe%<`+gv$&3JwON_t)8$BH)uto`@id5|qLnvZbBShU=^Pl6=eb*BqYha@QGpMK$O zZtP2oW8z|4Wt0XHTLrAd@Y9Z#CP{ROM9av|y!TFN5pfrm5_ci&rtd$QT;WWsD8`n5 z6GWm(Qz^&q9bX`8S?3}*XEn&IBC#UPiJ@Hog{7>34dj7%W0kCcXfcyKz?WjY9Ej_= z=^RAIx3fo_6vW*dvx*r-1df${Uh9!bK{H{vpOt4w5LDsCa}rcsKJ!9oKmPV4uD-5} zU-7v2isYzMkYg@NZki|F?Rw-MFS#$E9y5EfWJJ{@*@1}Vd{2rkR~c1GeSxGe7%sna zN0SS@tbd=r18EUb>K9Cs%-5=HV5)y1nCf33*esuf=*{!;5+y$}RS%DQW)HMN^1Lc} z>U(!!TaMR2GS`m>%=M~&h%!=o-;LJ_>r}!*v(;t~r0p^r{>F#(3nx+1!UBdPN3Fvk z`epDJ0wL*|jD*t(kq4z$R%iYX_QX`WD8Dn(6EzM1-RXhdrGK_3bX{n5&(UC@EZF?B zW0Liy$eH}f`b$IY6Fpjt1)d(Vyi-M{hPEItm9MG zL+-+NglZRi!_85cf2dIi=6}5zhWYO_-(`e zn<}>dQ`!p!8g2>%OSM?FXt4;Dg0zNe(xz|=Ma!lwp!B&^RGuOvEQ;Ei7Pt=4s<`_U zed@#IJ$E*JniOmcD60$LhT?KdU5X;KfaL!@XKvC2>ihlP@AKzFb7$t9Gjrz5e&);! z=4}ZXf?jyADK{x}OBxP{e@i=iWba9DkkfpWE`>oYz{OSZ>*c+$JVU}Tgyr6MxPT2c zh6^0iuj%Zf8OZd~L|ns8;Ybm)K6NrIEvD|KtJ&Fw84YfFom#I>Za{bwd|0G zoov+0*1SBgrKvw&RluG9n3R!mubhu%(iB$-JtX{O#~! zZd=9Me17E_niJEs&7SnPR7-=a1O^gL3lL{^(ptEq0panOB7$!TB7*sq_voQ zAs5p-_@dVGU-NZxYl-5ET1ymP)LNqW>ZG-pd{JxZ;EP(zf6dp)ttE;tyx@?vt0&YP9t zM$wtDdY_$gIlm=d{o@J?DIaF2cN*IM+bKJ?#m0Yb&vVKL0Ux zmp%gZH-?_Fr8s+_4uaVN#vM3j;rQF-Kf!^-X-FFJ+3|j)Zy1$PiD&4~L~FvRbRnro z6-ArDdh!WU~zpro2 z@SX{Rs#zdVhrCa>>X3J~>Fui4>>)V~{ZU=A9S%w@*{u%!SY7-#@?!9vg0wM2l~FUZ z*&U`2O~RHo%=BO_gR;yteXK8GnShbB0ThZ`T2lEtJr#9tB07QTn4n^50)r+}r%b0g zD(hBQuL5@f%#*SlmlyE!U1`1l=ttaLNo&h1FmW#5E3^D=1qaIu69L0R3R` z8caY>jrtczlD+l6u^U1|u9Md6(?C^oPk4<^qj351dw2y842^UX%kGiuc2=-TRLBvD zY`^tPZ#wc_!}uiI-d>VQ4HJ;Ri)T0_IS&s25x+HD6+noMCFz$-dnCx~`7q1$Ovx3; zrKYDyy`lkQ1S-Q7WRF+AARW$fX9oRZt&0UKha_`IvX&_alN&LZV9Y>OrA?(3C`V`n z)1eW}EEaRKA<+Nrsr*qH;T@*vDV}U^>9KdZ(B%YZZU6H%E-T22gE<&quAW=-;hWi>jlTilRv}Hnm?N|6~OVrAlQg=;f6&qx%2lQLBkYZ zm%utEvnb~fhRFpW!K0MvWW++_U7Lv zj1@zLPz;Ui2xGlaVWzP6L;}1ucJ&tMm}smmj^Ao{p9+O?4&{wdK%p)kgtZIq5LvN| zw4djFhfl;ljVfc!oAQ;5A@7Uhw>rHSp&m`^iy7`bD)lF7q)y3J$hy9o8m_OZZ5%5P zmerUQbQkK@?&c}zPUwYJEHM%9@(uJd2O8LvHcn;(y~P1<(J}Ha+d!{xz)Q;-JUNK@ z6*WTa+hM@Kj$JPN0sK*;M3tpiipqk<@ZXbh;Y>edf!@Q)rkta;?JAD{*l;1wR0NapAr$+y%NgapZM56iLx8de|81CA5UWpf3X^&vi zWpa;z+A4a4vj3td;C4!CXtP6bT@iIZN9_0;IrBYR9@or&S?AH02IAZAmutMg9j3;7 z-k#-hFvg>CBYI1>wnnb~N>}2PFvj6WaLgB9Q-yB@U7fJL{veOH{b^~A8_A?{cPGlF z7?OK-i7Xb|%S&WI*xp=1(kGqmQRJNJC!R##Lf^4iI(|%!iHXIcfgDq5TeD1=jKU#@ z^-|MeA8R_&iln1laheXR!*tj$Fdb>rzbCm{Mo;-|a6H`wVk`0hRg(Qe)%$3l90>a~RD*z665GT0VzrCwY@^pt?H; z;|U%66&NvTIH@S{<46E%4kjo!Vs0`QW6Eur9eYb~Mc?hh+ZMdv6g_&-{lnq&bbPg= zFaM%d*m@vK#%8tV2ucX&pWi}=TJsY;q)l+`RL$6sFgGJ0i*nkc zV5M@@4u#yEz%~W%N({mm^APBy@pDU}aqerpJJIt2oc(BA>dqIpQiET07dxKoMb! zghH@Z=m=d}Mzz0M5jYu87 z$r+_ZViSrmc75<|)cOE(R=GZa?aTkq^}z^mfNEl{4^B0GHk3tLZ_^{!2Z^Rnt`EA9 z59@>Db^Ns+;qU)xeLyWX?bp`-kLv@>XGYORET+)-MG@c^MTB1nnjV0q(xbM)i-?JE zmDfa?h1|a~TMclqi~u~`SkRLoOk#%@60}C+Kx$~Ta_HktmI2hjdqxtwhq5`Q8(Zq*(A?D=s zDH&-2Z?rrhXQj&7zx1=vlza||)Wrcz$u<2Qepnk#Xc@1Rs8Lxr0S_V9Am8u~bVx6* zo}?uN061$;fDy0%%y^3+OKOWZ!yA5yJN)`Ku$Oaff#V4lYaN&Ds{b_KUmQE%UmQE% zU;Llu`~2V}<`h%7de$_A=liTTTh^ZEW_In6AK zp6@R<$Fr#U{vVi_oAZ5|89C9IP>=A-SDK=GnGLtBB5;H&O{T1t;RmV1k56kt)?4(l za-~p$fW2syCAeqFz*obUt_P&!n{?|R6l(wDN&?B&WV{L@Le8XR2U)0Q)6yYjEG|^6 z-aw~UrbQZlc>MG$#kd7566~A=i-Byq;FS-#h~2_oT^VKNxHf_L>bp%OB$Sq}KiefJ*gd}uXo#h#&($4bzGVr{d(Tm4U>L=;8an1iu#tM9m>!#5&sWlmN9X6I| zFifK}dFi-B*a-X+{NTuR)Z=6V4fMo;E?7M#rW3^<7E=>)r%3KSKADt+@Ry#6OU z2(mYel&7$Iqmzm)t$v7wld@8DD-fM8KMqb#>fm9S)B${r48V{-DxMFV{5lGyU|uLa z9a+U1vy2J}M-0vK(L^)K=kQ-n%xFjXJdBt*`FkjdGdTIX;N;}Ja8OR?5bU|pR*Uf_ z?CP;NO)n8!=^zhoOcG7TSIh7~0mP0~9dUrAT?M#wMlQ#LNIH{$#Yt>MSYj$8(2t77?_P=D$13OC-Ps5n^~2?5mBxI9Hi zl$>rA#odR~^}xyLUIz!Idkw)JE`l_kUvfN@x1g^V_lBo^|HYY&K~@hg_GEc zhyd%YDZED`eni!ntu+?CY93JF{TtFBq16vL+Fy2oMQB{@MWg|^y$OHYfWNI9DmeKo z-TLioD&2W`UZqGhwy4FvrchmRC{Q^%ZNW=Bu{_$&!vD1&yA-6 zJD#Yig$*TQeA8Hef<{>IZ^5MtB_dFg6+|4x+YQapG+rIkI38^(Yt2xk$?L01U*2?Y ze5H=wJ=jGH)#K?+Zwtjru~7=+Yd3oSLdk`bDfXAss}*H(eYO^zH)N;GT!&6~b)UM* zJevp4e+6*8QgfX50CSv(?p1T_@}z3MmM$$HMn|S)?b5a%ZNaX_X7s>#bz}-OYslnt z6su^`d<#+%=k!EJ9PaOt4%9WAm?lwU3qlj)+o)r2agm-;s)~5a0cxULQ*nqZeKmb@hAlEj z$mFsYdvXHM*r#ia1u2xgrWe>M^)CD};dUBK#!wN`l!Ao^Lwo9EWChot+{cYkQJoBc zxy|+-$3olzVOXVyjZmldw3&6PCL^0d{PsjI+KS)We{DZY$iDL~zQuiH_=VQZYp8&l zjB#zymE<4WfLkV#iSfF`_^pcLSk4${ON@~cqg7&T zml&HEBSB*Hml&hb%E0z35+en^ko_BYAdb~fvq(J>!!I!|V~j)@hhJhmCNXZ57>gL= zNg2m&5@U_TD3%z6AF^+d7*|M)28nTw#8}A~&q$1mCB{b*Ly;K&VvH(@F;HUsDlzum z$@2JsF|L#t-6Tf(+nn2=#31~T{UAKZZSxAw?Hv;1DTz@EU&x*+>E!J_bpQ-tdL&(|<4eY<4lRMUScG`7qVX@F&q*jS7JOZ zF;W@hBY2RPG>LJU#JE#pWHZL=5+n2^%VU#wd{(&q<7TCC1@JoZCkj<6MccL}Gj-F+P?Us~96uVq7mVew7$+NQ@5{ z<9m3J+i?=Z7GRm)Co%Rj#s-OTp2YZ<#JE{vRKXXrKO-?zi7`CLag3K3{oo7PnotjWm&Dq48_VPxj^|2=@qolw zDKUZ)gYZN4Q4+%|F}6sIrzFO!jFBoaE|(YwCC2R%<4eY9g9lQ}ml(b4Imgo^#*d8g ziNrWXVx&lnJc)6HG2WCIe>}l5xkzH1A~Dk83)%07$F(L=4$ZrPM+?z(Bj;vXNLqiq zHI+u55kM`$A~zkwN*a@$6;1ZylVP%BH!;~;l8n*|lby+A6kjB@+t3@x)ZUk5cSy2J zqsVfYjN;RvpLk}f1@;xnCHR85OC|bDLRSlwTnfc}fGK={L3nP2f&W^BfnWedb5 zqYyqA`AT9elNb+5j0VQA$z;|_jK?I#T#2!PF@BbDJS8z6kr)#s#wN!2Kw?x&jE5w~ zP>HdNFM) z7)fDk($fn>zWjTouTuJ6lfE+e@TfE0Pb43Hrr67H^BUGH2y!pIh7P>hGsRSkJ9pq2 z_|WoYgIvB;()wj|ZbldHVXBW##%hDOWhzvh(XQ$od20u7H-6O-wh+9S5{YGErEVX<0>b*CFT z2i(XZi|vRFfvr?1S;sX;Yq2`!7%7hW7mLs9)OV8x7;}GDEv}^r12o+G=J?9nqG7$( zQAXsZi%E*b){y;WtdUUNYWu-PhE`ytd@MoLsX!mq$|LMf))R;9>lo7uYkokD1@SgK zB{l4!sV7lA6GK%KLsh_3mQJYNjG?+DhAN4v-hJ@ov?^n$Qevn+=|UVX>x61S4AnPS zDPh@c=4%C0UDXNIxiM5P$57qCRKq)=8Wlq|Pg0#JWjLIvjx3)FHD?=sYXdH|=mXvQ zBitvJ#pgVO43`D1|2la7F^+QjZYNYf$56Fl#n(Z#imB>4p?V~Ssy>FQim9&bglb(3 z)v_3>u}n3%6RK-ss4k14>dRC|9ynPV55-WW$54G~A!#&qLM7+vVHxh96D^IEO!ZhN zRCmRs^=1s!9HyGt3Ds#aRCmNsjbf?`I-$BLhDwW}>dI6JolqslQ1y2YEFVmf`a;RM#-oyiTajj!A2F4Al^((mJ7Pib?Cj7^=48 zl&@Z$P|^B}6xFo56|yJ9P}MWl-uq6L#>+8jZJ8Y{jb%*ruTH2A#ZWyGLv?TJ%(yFQ@z^>)vYm9i(;rQWU6JIP@NV-H9CeWfvKi;LUm;fl`V#9%Tba> zW+zmZ7^*#gjh4nEOm*mXR0Ejmkxr;)$55RcLuIs+G%7oxdMt+O;EmDwdY!3;cS7Zkp?WulY7tX)>4a)t z4As&Ys?kifZQ02(Opl?O7(-=aswX?4Du|&vErx1O8%bkUCsaSO{xe+4-`@}|jc1wa zLQt85$9n+R(c~Lb@;2L?@fz)?kiB(2#$wBy+(W_BJzb5wa@7JmLsuIf)1A}RIG4Ry z*sH0 z_IPo1)K-h!|M2~Y{a@vaugqmE_DP{T=rtXSX|jo)Kvq+}eE;>lt}P^=-(I!?y&zfM zhU`B90Q@hf@#1?40J<{aZtMfvKa-FR67o-mI2aO?kQXInCqo7@$k8|qHKnU4Y30W#32N<%GA-_|Qu-+sgBcCCT z|ILt{5;9pru4Ty83<*leg%Tnd;$p~C5|S<7Bb{<2{}zdlz&h<^BJN`NEZp2%aFe? zWHDq4Lq)@ohP)*qLnP!dL$)*I zaS7=wA@&!E=52;7l#nCWunZgwd5$610TSE``)K>M9Qpu4!O=EghU^8BY`r9_VT5^1 zmMI}GNXR;dR4}BMgxo73tqd8!uJL?W(}h+8FM z9V4bjBR-9uf?~W+B0et>Utz=p@Z_d=6=?HXlF4|2&c{LjSde>~1^P#R%>J(eo6rk> zIvUdQ(r$s<+uyYYX3Esq_ULwetm6pdGQtqnF*5pAj{bglU{3+e&)-Cgg;prtc=wV& zLODCw?e-VgjE7oP=%fSC9o|XWYX_9Oq6v>Ih;70BiR!BQrB)lFS66LZYEOj2y;SLf zPlIyoZpg0V;ySYRSN0>!yulk+fCS)df<1}KtH(vbv$aVuA{vVp^rt!wZF z_xe>V?j0!6ko_1uYjH6z2tShMuDUpy5CFD3m5*RW} zLf(*&zAqEa&pdFX1Cp1v>8_~=*^3a5Vti+WLV0PQBFJMGioiE7Z8v_^qV>A62o7KV z`}mFXc8878BXG34@;pR=5~ znWP17(?VOd_^&kog18nKquqfBKzo6f)j&$;CRR0L1~g0FMh~UuhV+PS5>1%cJ_{V} zp>ltnMw-nb`^}?!Q$0wRe%u89ZUyx?Wiq%tjHXHd`4P0s8SQ)-d{rbkn}btja84w6 z0td&-;OUXzZ#ekJB4%MkBsiXfKbFB)MuK1F;CE&4&`9u4Gl=1T$l!`da03U|$>0vY zyKy87WpD@IYZ&_~8Qj75b`BmVgRhCiy@`W|%is>aALrmS8C)5`zJ`Ol%HWZa;A=Vf z7dK~qW+b>D2k(->u1N4u4h~YVuG|d|3hhP-4cT9m*p3MHLdJeT2G0tk`J~?+K|7Pt zX31c0BsiXfr^w*Zk>Jm-Btc&!gXc$rf9K$HWN@Tjog)29BWTYvnneaj>Q!qYXaBwk z+QW>tTLyQO&r%Mqr(j*#c}1$lIKBs$5C=RX(M!DqKg6-@LF(NG026EDJJ7D%QamvE zwN746;qy3#nfNu_GV*}}hnf}b2u_S2o< zv%O*|@5;y>IeyArnet&DWD53#<%w7cWyVoAf@ZwX2460Gi)d@4*k-&&@uE9Ogf-^x z$B8HO5zls^#9&9ZZD{vxtyAS<2Svlu?hED&D8Vna{Z{ZiUWfgsp5_am8sfe7Oqew?WH^J?n zl;ZXm4lu4flcm1ZKPf)yzD-TAr(0m9IbiM>P0UYxo3XM+dioeY7&QM zm>#@oOhLqRHj_a$R@J;IhuFYNx@*Q2(_jQ>Jq=sZ#^G<0O!MatoKswr%{OlRFK0M+ zheB%t*cvoyu!PsL_QK+_O4joyGFlO?={UK;-*+-BIE8_w`{t$!8tqD z(A?(m0XN3UTHJBsZo{6n8ynOW*jTy-Te6|X+P-+tfLv>DvD3|K!F6PP=@y%4nix4> zfTN;8V}L6s;J!X^t=?@`QGC#?yB}PR6UMNP)vAxohC#=o-TL_DCV4%RN9aWm$T}%OY{5b5n@=z)~%zB){gVQxYbKdj>EY-8}1dd z;f!87-8KY&HvHM}JK=Z2UkZOI{1xz5Xnws4(I9v>g0Zn$MP9Cm|I!3XC5|7HxD!g4 z@!}wFhbfZE zMg@G=YGU1gd0a`>f#TqCfEu*zMzQ!%%fj>N4dcazV#gMksRT+K_1GugCVQ-dU9qo= z8eJ;uwto9kYA`ra5b~5zJHjyvQXR>5j+^Vrng)E@7vWqA#jwB_2IUcY*=^M0u99v9 zL(Amp$;JYPlE(c`Bg`w%d`Ng)30+x@j$LzmH-Ce6fZF|;$Bz5Xzd{4*Tt;u>P^61z z=5D%i+n!a0?a?OVARZ?yL9=w0I6|I<#s2wt@t4lS`YytnMfTWdpbe1M?7(|dlNdm} z4>umdJNF&^bz2+t*Q490r>>B_c7?J2P;`g=F;GhM$~L!tHl9jGS2h~jy+-eS<7;7l z(TW1VjRLW+amClps7XT@Qj z>rf+U4slfq0AfsAv7-^1!&dT^WVIFhLZmtTnxVcBX%0VTkZ8l6y|H#uJgxx?{H9WM z<+|GPmz<48zwcBM)W~mDvQH@z2VJPi{`{8PQERJ@Z$k^4tBn=!T$G4rJ~r!}i|Du) zECxI&#;$#;Wvp1nA>lspt2u^?dc=kl+%+*^&c9J|e-xr$ntsl)P>U75K3GN>KYxL8 z)P$dVE?7)&=_3`F)CEFu2@`|4P*~pPjJj9?HsaC$_`E>42jw#Z73ebqCtB$Ez6gQM|(1J~ZmQgL(F3RFf8e1b0(>M^f;oeYt3=#q}<= zXPh~3y+enVieMKxeNIo-99o zFz|hP*ErIW@#-hC(ZDY~5)Fm|* z{YW1`S~byA#OXy%Lb-QOe~Vu9fx6l?STFhrpCNkDE>TdX7a5{px?c3HD5%hje$+%) zO)mnS(hrGf0%yepZpfU{6e>-mBqFs6w5cf1&e18g*)= z!usubQI!IZ9-{!_hc}@r?7VfVHs9Ip%l~5zSNH%}gjrt-AZ~|Z$HzO!I2%uWLa(w$U%GUu>+s&-{)8Jh z4RB`#f$;b=iMKF`SPCxSJOJg>}|0%tAzIBK6(r zBL8-H9d}nDZEvFEF*<7KIa6nUbua+0&S4?DwGit0on%Nf$pPuyF^LXH@lio^|HzVV zokppKZ*%MHe3T}-6Gv`MOiI*n--}~YY_D3+z3PImR7+inD74Y}9U3CVcEf_(zUnZg z$6Q%21m}e|npVdwXXJSlelZ145Ynr66BoU@gbx-TmwW~D|UWjTS$ zIuiHUbOy?bTkdh?7-~eE?n*4ifJQi&`{FW8#NllDxL5=rU!2K{{%4k651s-vcR{at z0-V+>ru_MsnmiH&$)I(29IhmDCrHP#mVS+2(5sfMIzO$qc_3>hN6eA zq4axdx|S%qxpbGUSic1)Y#UmJ5YvkOlv4M)FEXxc7K4nOB3BRoC3u^_}WVR2=Uv89iT3D zi*e{@Omo^2)S_Kbm36~P;HO`bELFF+TD)gqy@T^!22$B;jOpO_0~5jX4Ir@OjLg_3 zp_{9t9Ln5Wf!tiNt)XZQa&|j-zCFPF=1YEQ$$b}M!W?j`asF@Y*lhIu5fdf!)w9u8 z+c4axV7N~oFKEAV9}V?XcM>D#!Q{h;VmH?E=}~-aMn8&ZH*@oC-u+8Rp6#M~){H50 zc&$bLPWpRvuI*49q-%W5B*}~{97$U+gSa%c1&t6}UBj3ZO^Z2wKH^vJEtfszL2gVV$3 z{c=zTHXC$kog?Vk2A!v)VUCfrPJPKYpq<9?RGhW-l7t}%bah!1fI~yv5oiRV&!$ep6<#i zZ4>nwaff!Dx^esd>aV|gHStkb&eFkHZRBin=}T!dfo^8>Hnt??@5S&tM=^@QJf;eh zeF>p}9xpZtUkw&V!RDT41#`BE`hou}yD${o+l}4Jz6!yuk~?Vh&Z#GcV>`B5lqMG>k8><%IP7FEL3r2F;?)nx>o`##2WKOId@^wPYh+scWgCF=o9A&EcZ} zH@FiqSH-&A*VbiGi-vop5E!~_ z2;fvO&vSWV>(;5yy}gxZwkJ$z3pJY17M9S2wy=~Zv`WeKh)&LAF^dHgFVWQ2KV=0X zS%Gv`(uj}mtLB#{0a$>LS0oC>vz4aKD}~}<$FoA&F^i_Muj)lF3#AtazNypUW993a z(4dW9fz&cFvz4jkBQ>EpjR!}P#_64mM^Flycp{^YzPfTYF;l&v3O;jPgi*SzD!*4Q zm-0b`3*{{=TJn^5psF?BAOwqmpD}}mf%cunxZ*2kqpo}pze@zs{}-sMmsu=q=P@y{ zG8n{5*BkY*Z5*6P!5G*h!N*|8g0MxKAomA&Qf|*cCd@elZSr7H9YvzR*G*pnY4nrn z#!oIv0i&)^25fan9+7>`dh39rhpdxIz3Iz${&X2C+y%n zy{2M8pRB|o3~t=sm#iFk9V~RroWtYG$>XU%?fJfVB94YVj`$JwSs#_3$K>a6`FVmq ze&uiMBiZZL`y}Lkd~hTi-9|1tA~3#?!cSB}^Zdy_^Jz`q!HkwO#$2monm8LH-vX53 zuPC9luR@N-z@C^1>qXZ=V8(rC(peWV14v_1XrIqcL)kRke6o&k$y48hCeD|ph|x*9 zD@nR+nBqxSy6!^cmpC;6dQs-gIaI07O>Hc+SuAmJjfK3tMo3?E^@PEd`lP{B3oG@) zA)-lrWmE9$F8Vm9rh8Ap-|6@}r?F@#P27-$9ID!lMGpD^a*>E9hSrYu(7fQs#1(padSzL)#Z99B;z*I zVh`h=4osaEq6H`yn=gMF7)HNK=ZPSe<5!vNrxW{HVuby1U>}{LhFKyxV%X2KGy9hU zGRAgt2JZe(8L&oWAeQZMC^=*7raxi(TQCZ?{~_5P6K0#GeqXo$728)ysb2~?V9V+x zxxax4#h=RkGVF^{A1NSBOnrUFrKlgi4m>}!F`DOb5VZ?Q;4>ZDO_-lnpwH{LQiXao zfN@tJ?*idI8>~n(jprzJ(KF|ersoiEAdmB37Ka+aB{26SIiosh`rMQ9A#Ov#%|&k% zqTXn$@!^0-Z?x4I-j#YI-iRc9J*J*Buq79D6@{?Yo*JcIioNfqmuhO16gZ4mEu>Lu z?GmaL#6%%Zls5`c4zA+zp{$pG^8Su9qh)iY}7%W ziFRTQP)rZx$CD@R?*v9?dkXchKc}G!j`X&ZIb~s8z$jQ1b~G%Cro8ju3(a7NS~f#4 znmtVmrSms>Y^8o7y8O&HYiZfviuD<~z$09Cq97^Hl|*H@*?6KIk`ZH^z6B*+yuDt> zYHh2bLFbGx^dp7oP=$Sc8Tw)Sr|*-($~tQXX1v$kL29SM6k-3j4807YZs8ndjAzKC zbiT!^5U*7P=mPArO3Y_U(Lh#@9b6)?Wwg3r2&6d}f5S0fbq=Anj6YnbzFMPDH~vb5 z^66FRcCi5znIPo?$%#LW`YiD0$(U)}>I5@1&C&cz>FN+8uaY%*=Q7);Ne17#5^TSE zJF%_20JpHJ0FwgFara=1N}eR0zp%p{l8W#`^lS3^xQ=!9KAOmsh>fJdiq8qaTt+!` zQL05G`o2!=Y2A#`%8Qk2{rd4Du2^hro`Z23wb)cfhY^uQ8)XyKxXk(z%7x>DLB7UOcM0u9p~o7D&F zsi`0=4ken74Ha*n5f)*P;bRE_?h{+rTxxKPIL5z)q#@C4LS&K?%F>E9s z)FUTk=mb{KKXe^Z6ko-DwXX=Y$I$6YWiW!SvDUz<5 z9iHysFSq%hxiF-UR!Txan-~+HU)k6-wL>XMqYa)ID;7{zZPY@0kyMJ-n2;eSu`~lg zONP*Pcuu2!_+DZkS1T#YO&1SVm>aNsQcyqq%4-aYlc{3=99!vPyQ_LH&b3*B`}<(G zJJ@XZeG~8dx?A&4mFB%g;W?A3Z&BVE2Wv{d^@_o%=(y_7f~MEN&f8wKP@GmBzw4~D zCji&ex?-(w47!Qe_k0%{T3e69M?2JI*i`+G>07TmA$^}U8F4zRzeWYJ=+^#~Si{;? z{F*|9O{I0|qiB1V2S^2z@*CDW?1DufRxIVbQuz&wM%s}K!(iGOfqfPQgT-fw!Q%fZuPVLx#V8Jy7$i{cV84NiiJC(g2OD_gfPhh zrN8T8GyNP&AEU{ir{6y+GQx@$L0l9pD*c~PIl?T5)BiG3VMM)dPXb}k=mMmHp^LE~ z`X=728MLbXA%;9z`7A=pO+wV8`2>w#F8mD)VU`!%--X%|xthCFe?tybR{XjhfjPY# zo96Vu6O5v%dA;{o2qG}&8?!Rd1$symi_Iw3#8$Y)0dYk98vLaP9s#2NJAy3f5Jc z6w+Myy5VrTkWn{!k6bic>Umwh@4NZF>xM2l(<7ZM?Eo0HJE5d*pvaGFB=HYXv`ZesgD4n$@o7)c^6?tqMO*OQ%4 zWZQY@UUwVe7NM@`QpGj(e2!Q`(+^63Z6Svu3?TcW8h?~}ff8mNk-C;dA)zEt& zLEqkP$cA>~w&_rhgmcrJB!b}{(?EI4Oro@r*8<(0TEb>XUC3DqJr^n$IVZcQ%CfUe z1i6j@4|S3r+)Q?-jtW;(kPx&9_zWfcaK>h7S`eAYIsfo+k7&9(FYLwRJ) zj*(fl^&TYS!@!J8a~FJ11$DtS_@%T({o2r-sQZSk@~rKZX9d;O0n-RxT}_!$K6^m+ zfNx--YCG2n}u zPw;ES-4lBqJ5buFxxELno>?}k!@FGIim-YH{0T*Hz!3Hatbaw2(PR{dcl8WLpdSK? z8p2?ZM?qFIq~465qa}p;2ra6!j*6qs>sw;QlcRi0^8qHnh_{se%4U_0l zgZph#fMIczfg&s-uBj~YiBX|p%u6_Kv%Oi3`y%moK0e1sMInN+bWbd`Uu0`Fd+OMc zU|$q0Y9x3yDi|%yEdCdxLc?LtBTN=_^W&bF8A!+akh*Hz%7dLVp*&eg`t1>y;!`A& z7LWIzwzx#t>k4QoM4Pj6XQEK_O%{8CEh&z)^V3r;-c#_}ZDN7C%595xC~u#RkSr)P zTh6XN`Ua|jH_^2QW3i>BAF56D(F1VG0GH|xz?h;48-*Sho>TGkc9ET3?ft-@eHM@u zA66cifUy*+8c$D3#ihp&3$%E#Y)JWOmoG2J88W1QSg(d~fxAeayG_nAwY0@1suK z(WKtB4w4j`(b6QGf=EAw9%}|? zl`w+8q~HjV?}u*cv_l9pP{~H@z6U3Z)~nNgqWZf_jsoXxKp^?IQU9+d!<-ktI2l4= zbh|8>sMJ?tsLrHW0;2hxYd;(x;co-}J}_p%%$DwQuQ*|on-||`fUZ~LnsHTdWCo53 z*SsLgPvfmnj$BN$d*v`b&_opb6RPO)Q<@n-5s?ldKwm><)*a(CwQc$*>DNj6)gAOq zT!bg5BN0sOGy+L~tE8WgkBf~ZJ7vMvNeq(yLP>8rri zzkvNk`d*j5and)L^pLtTLi$G2mb$K-E`7Pu*IoL~mA>DKnX?~Zrwq(5r0-|xYlM&5 zyYjsw6$P$*DnEPqW7W|^V;k-+jmAitf2An7mIh3w;SGiPiZ-;p8E;I-Ibu zpMumvij`6q%N`(RI4i!r7wbwq@G-*Ty>*vZ?jzW^(6j4XPff+W%DnY@PXAPBV{2`s zF1;}8c&KVY4|wC?#ct|>K@gfyzQIQ%;)VF4tYnv?ySkVz&lmQ`FT~9PkS(d{F?q;^ zv9EC+l@_}62IVOS4mILwCeL*xBJEXYq)!dqJ4?e;^n!>uJwlNWxvVnAoBx?NRdc8MaX@4+nP9?bjhp z)Np{VTuBK2g7`?l1O$YZe@R7xai19zb|+zB{q2so=aExp)~(yK;G-PY4nPG$30<0r z5^7YE5KRAs^6urR(qsp!u4}c@R3%qkXJ9`Ug`_J_Gf?Rbq6XzSvV>wq`5rk3N$B0N z6GVI7h_xL7EpGr~z`-a#z(G4j$`gwb?m47SQcj=uUsNz>T#wF5Z z$ywZ3xC=vf2rqJAZvxlS2i(w&LL-VlSVLB4m!UrD)w%NHlphTrw_aT;KOf=KSiK9s z^umgJY4zuDYX0iI_!PrH)vY52Cn9trLMNuX&UE}`;x8M2x%hL!Kt{{ifu}?E;?GcR zm?Yq-rV_n$I-nK!n~6VcK{ywb=v7rn2Orvv#-|P+&Hw1qa!PC(Qiw0n3lj}(8mWEb zHUGVn!A8yw*BT--f_rdo z0DX+1`-m6#m=`f_0qLJ(HaaD=EIk72_n2hXOE ziW?SxU=+&nwROm>#dDqZ_8ZGTIos$tB$=!>(v5?78?#QkG4UF$I_NAQ!m^A-%hbhe^M62mbsFvYF)N~%Gg0A47iQ{KT)Rc^G!|W)F7IXfOhvmgus;}5E zExCG+e@vXLzL@nsu`nCE5N>fFfvLkVA*1!02?UXVj&QfWjKjzI`#vtJhZB)wy-O`w zubUp+T38YYdxG!;wfG& z-emQz0q71_CU|FwPaSU)ld3NXA@aNrRtw6j6KT~Qs)wmlA#sc&fI2;i3!TsU3Q}-9 z00j6-)?Y*Dy7al%&m`ELVc0Ck0~Gn3e>VRMHKYjw%4P|DW&&E=z${vU75n zM{o)^2+KGR;1f7-17|wp%;MkaZikOqeoQFWTrw3h@)U(-G}qA~pOsjub}FB8_xe#B zcdnWD?Ls*f5#dcvWZvSv7#phbG#f#k&8b>wvv|&1ne829=JAZ29hG&+(`}Uf5FV^# zsq2&1=SqY*`^=RoDqqKX6yv*4Zm{8=C1pW659DiIV9$QkZAazQ64e@-Nf>Ti&?~eA zUwg=t<;#upoZU!D9gD-d?;rgw-rnf*$AU##Xm`!o5!%+$HDur2qc^IJil~J>4N;#} z?@;34^9}^|C?vwzRSRquZy$sdP_ovSIoZ<0mUD#Crh?RZ4?>7^KYTztl?bs9>**@2 z_X6a&dky&TOwjpDW0Mvdco~v5?i(3lImef4@eFAMBC(uJEW?~Yxzl91J1lRR5Zg^m zf2cdoaKnlBZOAq{-IqTO$yz+OfaozNiKo;QkCBB`aC4Fr&DnV=IERtquzvWwDV5Vs zl*;22wNNG_77}mXqwjzxwPpxZ7dpFPB1XHk$i-5i9#WE_z=&6CtUx%Vd^8}{!j{L` zUh5&{_&DeX@oXziw3I{e476CXEj&X}mwd~ipCdHqvz0crMnic8jULb>sx==VP12;? zOs~_{yh}dPsCa+^-qu`9IlQD$Rsf^;f`}Z4Q_&9%7rpTuGI=TpE~TPD(W_MS!oIS= zZfQOXafR$3C!!A6AEtobGV*C0`2mDb_KhD$L?Ztb!rMv0s|&~bRcySa6wPKZ8?sN~ zcrT`abqD|t@f`1?;dqyK#2YD;T#A>f>Jl^FNLB5M=ng5bV8M{!ITh_%QPAqtA1GBI#;WSXE9zhx>H^~dbEb1r9Ara9cmKU%J>X5@DoOu4r2$XX0-YM+o zhO;rEBO9^O{^%J~5RRl11hGjWLHu~JDTv=-uW@3p@o<><`xA+;1##mN5(ru~n2iX9 z=M&QO%Ks?MNs8A-CNMY^Q4AeO7JAoqp_c-v9o~;AR(MWRj42j2=tjU!Ln8L1Igi-1 z&Pizm+i~*?p7*Ay7*1(!1gfTv*-o>nALbqliF+wRD7f?`95anJ!M!;2gn2xz^-yFq z?SVZi+ri`f&gHO4twPNFGP&48@BQLkPG=K-_?6$%m2j0kV(dQcIG$b(l!yRck|z_4 zUi84HGn;{Wb?nZU!=6O>niUtb7?$1TQM#Ae6 z+28<9aCk=EXkELazvZemr`NVjIQ(^RKTd~ins)}h$BC zn3L#L9JeNU`s>*6-KtMbaEk_gPNIHmlGqutztsg#G7cOK*&IF5PzvQ&xD7w!0{AhX zFei=fY z_^kw014UG>_z`X_N=4<$Y=rC@C=q&xcX|Lt;v~VA1@HSG z>Ns0!zma$;*1u#Zw##_$!lU$5w)MS!#EH%RDZZM(fef5VuO%e{0_Va`J)jPS!rOM+ zaQqA$2Daw)AZ0d~+SGy*qOu4jp*ePO3ol zG&&5r(YoNt6Dm;sygpRE8?oA<*d`!0v?w^00yuL5h=iV_{u0s|ydA;T90Zex-gMrI zzee()Di7XJ}ZElAv(c8oAC{9vq z-ba?*da^zNdKp)uTQ5#>iA}h-%hKD@{DKrme$IR{;dwKoiejM?|4u43HzWifcIoj8 zTRkvhyF8u61jeGo1Y9wuFPI-O#}4MH9{{|GrFPBeXsI=@)IJ6DlW3_G{H=4TJ%9x& zMSCiuC8<#dGHxE4En3PZsw*2wwrAXewgbrazR1Js_MMJOsP!~;zTy$+pS z`x%v3K-G42l+=DKm7+?@alY5)SeW4L$pxi2%Bjho?-rZ&g$d$QDkr@>No)z(&kfP> zcUdsLfiu9+@$j0KH(aQJl%jz|uWr%bW91F)ci6t;a?`Z1lv^v#*l}y+a!xl|`yGdN zs+GF(muQTovrE`6@qUC1MHb*V+ixOaDpwAl z$_*?KT_AZVkXueDkUT1oTN1=4;R3-4?nnPfw)m`{^rjU6hS=F;4Y?p(Lfn~gpC!96 z6ig{uNk*w2WhsbcW&obMB`ZhymVS$Ly;hf_&VWO$*@MEvIYkO}=^Tcf(Gu?^#3Gb9nS)-cZxs-s!^Zw+ zU)bfvV~e

    ui7WaJpQbX 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

    JG}lmT#_)r4C`4R$gV;K}Cf0 zB0y}`O8>${)cN{iZg*pf-IykCZf9VmB_Fdqp-$Y4rx={sHOP-X^f{pNiG3^LOr7;b zPm-r$UFbY&fW2C8qlhWcQ5QI$B(sv+>PiYsq*FIWais`|nPmglZnopxXo@VFs=C<6;92eoa2PmylkB>#*I`TY`0cUV3&olzHtx3h{F!T z_!r}P#-;Jf64vzcm#F$bAD_>OGaeb2nwFYlS50YLe5U>B{ej=dfS<=uo!hf5^S_ht z6-z9~N*^6`43|jnsh)7{H9qU+3k6ykj#GLntfvRfrW7t*qo|RX?IqyBepsNlt37XX5cFuFWf&p0nj{*}Rqv~9y(Mp=K=91PL8nUm>;&UnA^gD?DOv2{y2vTWX%PJoK zpSv)0R##jAj#TiOW7(=6?ywdn7l|g3Zj_JYV@8Ie*(VNnQ#biM3#X&EKhHfM$rZ)a zrz|Y>PWkMy>}ENbRTIm-?dHg#aF7|HYe?X==|W>~mkW=bnR19QlY-0wQ{){RyWJT zxN`aoF8-XVrMoXK|59p6sb~3l&`4zc25{#zey@N!z>#z|jOhk3655ny1_2g4eiz6Z7!n7rdS3zbMYo{%T*A?>k zTf2jAiQ8lj@+x<)f_^L(^aBeOb3l!X)jS`N46E}MmC&4=wH2*WZM2k#fQptGmhgo1 z*#(3vYkg*<8GY5;Jd1yArbzE0 zi}V0#&+pTL3M!-%vM@4(ncvv$Z_(x+p2a^Sr?I`&q^xuq_EHJw7tnC34JSLt+-Fe) z=r+jaTkL=swHXHh1(@=CV%8PCsv71L_2JWkO9rMJdF%c@HtXIhb47R}J)F}f!(8Ug z_Y0`MA|@DFXp$)g!UP}wF5IK9r>+`^M9rUP`K;?m#znoBJ$ggI-xs( zB9ubogHjaXO*1IDVyq{DLG02(=t;EYq#ltxkd;zx<^$T~6XqlCq&m$9O0~Pp$27+% z#0r%u^_+>B?HJij{YM(NHg-8vXG#c7@Ml^5qnZ)=eY7mNt$uxj}{<*bW>jbsMjEk>z_Wa+tO>(|G(bM ztune53LO_@dVXLWAK2c5>_p zcEzloh*RDS^35Z3w|@RY5J@j`hP)ZJ7)O3>zIbrY(q|~17!*LuNN}fh z%SuY8$9RD@O}4s(-Q65bBfk77TeI)IBzKm23NmUBK>P1%>V7&>4K@j6QFR~j6VML3 z0<)Io#)b{zJG=G93mA?wrowhE5xvUAvH-W9ZLBKE!97l?!B*r;kM&45x)*WfCvO_$ z5#ys~VjiU?wcm>@H4~FTF?>u#@}|Kiv$bkGxpVn$mlmm|`vT(nU4Pt1z4Bf;Rf$ks zy~sj|e_Qo|9!Wt#ypr^bRqF!7G0<7t$=3^-&$NZ3IVz^qy`<~Ai-c;xCP%PHe}Qh;Zv1-YvXI0z@Jrw?_(}t?zsf55ZdtgMXgiF1XJ;sbLxg1b#Kz+XhfeKh?sJ zLGknS6p>dl=6(?hi>n{YFu2^qYDps(Xjpw?PUQTyuoEj5Cad8Q)TSOFPcwE=%!mCz zf$m{gwRN+a2SC&#jOtSy!m{~Unu#8)%nHjJRv?S z;oDs5hi@|xQe<4ND(H|Q`NeEIQuU?SMyN>%=G8nn`C4JClFv*D$KP7DNI)P9*<>U; z)HSo|tq=khuYOl8m}P~v7;#LJAB@?D$O!aTTtvtB6V%?j4jzS4HjSloQhy@P>b4cb z)eB$;6FvI+>`{a;Bvvq<=P|vs`~q`L>S?54-Ec*z+*W$LgxE9b`wVb4Em&``bF4X|H*P&~@)(m!Ns@%?Fe+f0XQP0kfX z1g=M*MDIQ({o6;ecv@+Ga_uM{877)Hu5`t1i`!A3O~rQVV)nG~1lY|7|O_0ZA-l)(Xg|0<9=i~MXC!ku6fBW5J!KwiiJ*X0eOoR zcYi;6oD8wSH)U=7$MLsXnwWpEPbgTdtHw($Hl_Eg)@D{#>!Xa)i{zx635-y!UrYi> zoO4odwBhwZ&QYyPCG9nYIq+1RV@vfOdH8=)3rD$C_Ho={Te^)GJxDm_^imq#BDqwR z^aJ+5XY%JJUtz!ce)qBZ%ILp~N4eP1V_sX4lnlTYj0)7vGjA$pbiP2Zsc`+wc%pcCOLggIDCVjYGK+2NAn@*4pnAcD&XBC0v zhRUV7^o0@0BU&p^5$I!eKNB~C4^HGVcVAq+^O=-G_o?SYCB=Hpr>FNGD~4KZZ4AxJ zM}(`|!&N(MEV?Tu!*BB!w(f5u%+K~nRVNA#`Mk2?X8hI3&3^*yFugA}&kC!Su`%|^ zcWU^5Tg#tGDA2bTgSc`o%aDx8_d$=fRXoy((qqcBD+D zgiSeSp!%z>ylQ{@ZkQ^x)hr)}wCXGT|Guqoj@?r=D7BTR$gotqKZ1%k;7#ZoNt$mz zRMdW?$W~){3SC>_t2$gY-4m(O;i`x)wZ-3lxX4Dw4I=0~JN2XtzbMtg&rwSJu{~Q9 z=EOGXw@%<4^n$a>R7kI1Ap8Y4WEo3xEaN;1=*J`@M+k|zz52HjxXqNQ+DoYxEEL)5 zWV~Tb=MkyDOR^W@2m>?xWgAJhz058cE{oJ6rLpqD?AULbMoSU~Bh7 zLHqBn9KA&DRPHZfq8RL{*LZS4MB#d(J6!dW*iCKXafkW{nk;tJUT(JJCIKOy<|6yx z%LiZ1+sQT-K>%@K=bVUhPPpcmudv%(dCoX)9Wmd_vss?U?*rHEf^h*ckkh)3iV#J( zIPE(%9NfFYuHz%PcX=5e%Vf-W!(3C!NB3LgQ+G(*=Fwa@`Vl`wsi)$kJT56)5AOB0 zQNi-T(zbI>w_FWU*TI*GJjt!?;NHIa?&zy;cRZWb*XHYkASkubr?b+frv}@X51~f4 z6W+GWRSY@eec2AaY^}Q-6x?(sbFSKX@I~)-L@Ay%Q{v`We&TV>O5Zb|-7KxS1JOMe zV;KGW0yE4zWSII*qC_TXw!GTKR5h2z@e7$-MsuIy;UaJGx-pinD`&}KPTie24I$)L zhY73?L-F`dC3W*WlT#J|j+`w`9mbAUn8Vx2OhnTzNr%T?8$lz#{YXU@pJDWWC{@j+ zN*)kRV6oBN1Lu>g?m=p)S2I}NovbiOm#q zAH3~$@-YEQqM#E_`@T#OX@U^M=<_Ifj~j{$JBg^XNNGs>M#uz(_@0IVm(Kt%BpaW# zeEyVAY$Cea@So$!Y;U{SG{LXHy@HtYm_SKdcERT9vGfcBD48KxEA&pDcE6^iX+^G$ zhI)0&e##=*J&U3-wH*~-(-4DLz zz5_pokILI1U>HpS_@XR5LPunWqYe<)D~13uF>8l&8FkAp;`Md87zi}p{dyEe++u1d zqJ=#w7S#pT;7QH=I1CKaRy@USViOdbNzFM^~nTf2iF*GV7e3p z0HoLU-m;fcg1JX+XR?t1uzMAwTy)2!ulC{BedB?efqLo(!ZDl2)Yx(Z9nz1E7$m+K zMSCmeTv3cxn9NR0on&wJvlw~^(^T(9%FNWK*ECj3`t#(JFTKkmm|j;?&h9fAauqzE z%c}1)87BKbIWt2(z|NWSw#j-$WxY^kK(&y%%;nRuMlQSm89{y9 z*0^|t-Lb|+B#1FbNid20LK=UDW&=_gbfNu-y~&`k#jo37I700jntV)<7*C=o^oN3s zH+25H>U*-=?cfWE6T-C{HJ8_N7J~2RXd%>1ow1-k~{JOedxuWEXzo;>5Sn&6FxiFO(>WDx|fIs zQT;7)yv=8x9=c>I>BgE?}q=wW}Lq4i&{#+=hLyej_dRmdJPQqmGD zX#733M*4xlC~H-cmQp>4A3V!PSgn)O0Wtib6G71aIkjdQVHz;?AMIg|*UWZvfYz*& zev>Po{%4au$4y5waGeaPU;3k@yX!FhJy`}3gpUl&Om|z6R&yQ5RTxd*A^Wx?V#(=@ zK)v=-n_ei*L=M(Q-b)m#$dTH}ht1$B6NEqER$EN9m=-W&jzDr4N>Qu;y0vA7NeGI8 zsXHSzg6_MGizQ|=(i6={WX@_M2NQ$Unla|{NOM(gDotC=q-j@m=DLW5#C}Z+XkSeG z!ZK>gzu@xkqh@c^IbEQVS!z{(vTVIah8wcBY%K#ra`Jtme!FEfMiRQP8WD8{^Q4Al zBmP2oS|cm-^%uorWEZ9(xR%tVzN)7&T;R#zK{|;Vyr=o(4zC=Z%q)q1C!09MjV|sG zPOT>c$<*H=ZoNF2+SSi2=}Q$1EAv^C3Ka2VPIb!-HZdl#q{AyI$ncr>FQ4o^nD#B2 zPed`mk3sDCNd?8d$Sh|ne8{gB<9IUpWlwXJzRxW&%!Uw%gfNf-(;^#)B%-u8;%7u4 zcdftZ18>jeG8np07YYC|%m$2Z(h%W4Kp|jCf>^2-K|I)rgSlF+8z$>w9^x_ zwl(?1c<{9a-;i32;E?TYvunrAUN%$I15Qu_h|FfaTSdr1xX(l7K^VqTO3&X8({_OEuuV5yP^JKfrf_rZeG zVRj`M7y!-XSvULag0GD2J%vr!d0_cfa$M zHBXGSzfn}Drj4zsQ{l1YlsySCr?F$Jy6URpV@K*4R8Z%H#|H8x(R_=gws9|R4Pg0| zU-_2bEdkjY5-;ERWhHx*C6SeuV*QK6f=8^C@W`149svD0(qgcJw{4@`!t-SQbe7r5 zp`4wfWHMRoV@&qPvH+H+^%;LOFa(Kqz(}lpUs1ic!}f;8rdvHsnOz&5y>vt@9R>Fe zjnz*;TwsxkS=(Z}AT$!Ouf*>;yiIw;H21zR{vo4ym3f*Av&T$)QDbNR!W@-cwu0+{ zr^PVDkB!Y3k-c>4e*q~@uKj4@65$Hye{`8k|NNL52JiMg{Upyu6L53p=p10XKEfywITWhpem+EsCAK= zl|r~}j?wM=^(3C`vGjLE_ZDc$jdQ;~m6qZL7fDaQKi1Obchj_&_^6t`hF-)~J!S>+ z0}5?S3UVRFd<4X12K7r?^<`_708~|nP`Yz1ks11&eY_7!zgY=x2hkn@oE| z@{6g$iU-pzB?KX_B(KT1l#Hh9Tfv~1!?Oq=AMXaRQYvNBkv&+P+AoXC81yfnGh5?y z6VJp*+yw&Q7){99&~czEP$)>r^ffXtVzyNb96K;k8qIEDY*AA8Lw$+sv=x=h(6C5Sj$>~E3b|U9E=Z7)(zUifJ zg474to?z`lIjAg`v(XLut5YR|gxk1@qOB7~2u@(!D;UY@Mf6(Oi_Q%o5lA*W6GjRi zASk!g&%F-Q9lt(#Ld)B{pwN1P#PYiW{Vis8^vet%D4-+fAIO{lqg&4*b`@ZM!v|q2 z{2{8cNZAfo)BTXyfNZtXs%w@FzzE8V^Zyonalr*F3L7cv-HoJrFygmXHL*N`Bo4BJ zA-{FYm9ko?_DcO{*r9TViV$%eftVP$*X6s+`|K)uqXDCI3i-~NP=3;nWrp<|z zp^H?;%_^N$;q%7UM#`+UPm-i&1cEOuINcqb3RjPn#s}E76!%J|b@z}7d$i&7r3EA< z5Z~BQ^(-1_ZNyvYmHdw)w~d*`czS$g6#WJ!Dei5HUDY0~GJ#(E0G8iVpAPLCXAKK` z0@(A8R`VJ6RHxo9NW5CRD(_8incMF#g<6 zRx?M!M-pSaj~+Uj^-dV;?nc>*)zpIYD@eF(nD)OEsj}K|RXA89xz|bVa1eAtwzb*8 zYRX7b%y)Ma$NG=m5y-WJ%CtTb=%y|Q}KV!^Ycj@I! zhg|HV0GRbieJ(^xe1|UP+OKO37X)J2w)&u5KL2g{lhcB5%eUJ`+fwZ~_+sj{f%dbn zv45FU4LjA;SAn;p+EDpI|9X2H%brDOG!_h%&xh$ADz^_jJw6ckj53u^KIPW@V5f8a~^f@|Cv=VofsmqLQIHwVb? zL|P%Fbwuv*eDOTQG3rD5`kj&niJY4ny!Hx$e6;BqeDJo6rqd6Qrmr?Ei~6;(^ta8e z&O-!UhSid${;-b@)^o@a?F?b`jWiS?()*-N+OLKj!ItKV*Ydi;_b%0c86aEXDsAkrY6+=A(Z)t21||7>6qKgkZ#(6ae4nh!Iog^$K@dm zS<)H?(c&3!#aS*eiTdqYzqR^)>QImFrL!Ps`XA32oTLn$Tzj+BylE)^aW!;i25U_s zH$^8mR;mU{Uc6$OwfY9iry}=Y%A&ZGy8rBSN(dJH zj9^skE^^1SeD&*vV%or7ZCcJee1F19s#_KchVmzo~M)H_|He7D>v4@{yFy(OcJpbXO|)F1fw?9kX8Do6Y{* zsh3eJJ(&hDrDKhNip#O6D%pQR3KsWeJ-j{oc0%6$xpl=r7VO0DvWg-v*k~hiFR!mg zfNaII`HwqhmfeN~FZZZo^Z%KA=Ivq({~Ug4s6do$1^I-QUdNPAS?Y zdY-#i8pV9(%I(aXtCk?+nIno_$p1+%G07yeAw3SKM-J4hC2aZ@PL~bP3*BUytO)ED zJ(n;T%p4Q;6{cqt>ZwGfXFwL^Ej+eBhfM`IKQt%BPLC1xM>RA7_O%#Gn`HiEauPG2V7 zbgR*iN?gBnbytnmeekVpwtJuyP8}X(tt%_x3p4kezt~mJNV~IiL5EpEbLcpH8jA+9 z9q$AfKy*qTI<0x2{y!cDnIb)&AF%}SRIyMLDJ;j8Q`_AnJn7Wo0&DH>NV2m#j%(rW zZSry>U;b>5ey00kO2`SW+asPOI#Y+vwAKueH&c2@b?g8{h7GGq*0+~1=(R12`Nb_o z_BBrA?;A111sEb@FK`OP)2ju1F(0@@7ucX@^H}M>X-)GkkaM9&_oKYosPFs#S$(C{ zcU*BXnoIF(|FhyxJ^SyvbB^1cvvc*~=l5R?Z`r@C?-iEnIDjP}i1qFRS|##K29kXo zXia1V0Z!9SOhA(668SN!#|P)VP2X--QuG$wD}{F_=%k(mdfZ(n_-|w_9iInDRs584 z0La&HsjTX1QA*Q4gN|)32;!5RQvKWkQ+b;X_G{%_`DS}bE0Rl^$dD21D7lrFSgBqH z#k-4@FwN+%BLds~2NKx|dLEk{N_c-zdpl9le+z131KkQfKd2AXW^Ac)xT*3u=soT~ zs`7v#MC{bhkvk9k#I=~a${f`D-puWgUKo29>tMDmr^U}>PudrGC7>%%LO_PvBA()} zvyI&dfgRKO^w$i${ka^*bi)yf0{rhJ)E`LD>g~WL17P`Y8t@;0GY1G&NL`JlLh$DK zzwZyL(4$LJZ#%)nLYXEG8g!=$2RPg+5WB_atVF2tjvPaS` zfc=2U?+0N2LeS=({TBeX8q7m(uxSEY`}ft10JGx90I74Vm9uhJMu;l^2{v^9AA49v za6YLFp9^INb39E9W({KYL7c0$V<)$H1VR9k?^5Ylw%wo=GE|YBe>ImTCiv|16amoY zUOC+j7ZT>y@amy%SZ)y+wm!!05cBT2L1H8NlP;3zpL16NV?_+C-FN(0xhukW;8}SY z!|a~OJ6U=;hnn5d2x4GHGnS|Heg&Xlj})4O^f9a|FzqzD+8@ zWTM-3uU_SbrR!#;nhA3V8krr|piu03jUqo}t(|(7$vd_{`b=eW&Ts4f7AL`0ht6-y zEMWEZh2#)-F2bXn*00sm-BzSkG#>}*p@hR+uIUDE*vqm=?T4Yq$Q)5St+!!2FL6q~ zgM6n;=eQR$wLPgooc7oCvxX& zKcmZMm`MhyayC_v@$jNE&_OMhn$qj9ErCnWrQ7>uuXO7>w&*jG?V;P?YS~rNa8;L< z_0L!9AzxUvQM2UJ$G9-UV(MaNWN@eWr_%437|9SB+-~x`M2tPSjk=)KoYt?d2f35X zi?(|zHyG*qT<{QZ^yWeOO!LJ`xY+uMqSdiePbN0n{}%Z;u3jt^xrbTLH`grovOpL_ zIsE1fdnWm47g&lXu||((X{nRm>q_?%0i)lT2E@JZPu-^O}qz6%J4 z9|O}!R4uzxNa~wFG9aIP|I=!xHrJ|{RPEOLrlw1-M`IEALrOpdCmUt5UJ;|TMd5YL!{3ri=_>T|sng742sG!j6%P~{< z$@7CZ>oB zmfp0iXO&DONThrVRWYTZ1NC_O^2#X1%FgA(%a@1Z*xf)O);O{FiVo5q+);)G~A%4nI^Rx?OvF%Ybm z6liKR^fC1vlPpsc>`J)9_%ZeB9|2waNM${_iNle&498L)8BAsGV2b~Pq5SLi&gp9} z^{tNzo87M5BV9SMFA1t$Z&x6L=ShcVJn^(y&zKSygW|_Jw<6uoLPK)=#CL?)5Kv)K z9wA(QYW|<}%MS$1=Xdvea>?av$;&GfgXd<&##c&|3F7Qe+j=|(0pW4GJlpQ=w1ctI zMLsN=oglV&wujT>3iLJ49TnhornPbKT$}@*61Fzh70$J@oz~;qv)iLrvC}4&VK{k0&C6RJ$1g!YNA1rU$T_6XIsj&YnT5m&sKX2C1%H!!bTb8z@=I|2Ssc4+OTG0tEZC8V*o|x-r@}Ax)Or)68&eqlFWB5Q=ywN^+fSjiIMJP@r`GCLsDs!HRv~G z=KS@OpJ#jlNXD}~1*6{udVzWz5=%;k<+Son#%mbI1+ep)r^Ir$!Vv=%F`2X&VS>$- zwj24a)CDgSG9?Dq2afF~_C4rkWx({Du0h zM{X%{{Y78R0FC65S>Sy=#>`gY3)}2j1^O&DI;(qn7#qk~wt^Ea5JH&uviq*+eu;Fp z`0=s5U=VXni-3>l_k4mg5;lRf@49A;jDEQuiJ-$w2$rk2hDiv8YcDUi)|>wP9MOeV3{i z>?+#C(2`xtpEW_4PI%gc$@H$Zalc{B8wv6qg1>Nw%|;?5J*hxYcD)z70IaYG9)+0c z^V2i4m|{FL&Yt!%v2{3}2pt<|ZHyy_hXt*<4pK*N7c6;G@;eL4otrR6Arxo zE~2W?FO)xP@@v*RcRzfEWkjp)S^asl4`&t&eo`ft0%b8-QwIq(Jc{-|wfXyei|ktk zX9WDNXJpPd3j$HSic`5p`}UWx6tN$WS1ree0P>|`u6^{o^{Nq*HE39W0HZYQTo)2K zznhn^>~^}Wz?p&ycBdAh5hua~S*!oc(5R+E&flYh9=xb+XmfC>eO<^}J#p$wf(8?-^&gnN~gwFV4x4|v)9h^scHz9ut>Y;YQx_NJ(h`I9LQ(-yZJ84NeNmmIgKkdY;%^dbq1MKoJcfdu z*d#Y$_;*;QQke8CL(sW%5waQMi?i+7j=9cA_R*HYx!J9D@Ywvnbcd*-BN76C_H<9< z+nD{T;$vL8EWstnvqa=aQ7LsNtC}QR9D4EITW%6NKN9hvNg!5VEu8Cw2Oo>3-YZDF zDdkRsr`!DsRXa99;I1`nBxak(F(nCyYGy7KU?O0XL*O9>B@^B$WXD+7vo2Go0LH?`qPXF>3P=4>Y zA#i|rz9KEwroXwb#1pQ$ZdUV&_38=Z4r8}o2$7QM!mp0ZS@T(VvjtKkKY$@+z5&;a z@%mytR17QQtk=07&F*s~N{)(wv%ub^5cW8JdEF{wQ-K>Q0S2(O<*=AqUoc?PHH?AK zwW~y1JBbkOHN;!v@=AWW^OC=B&7m>o-Z-njO0wwUtVexdZ(0o6Em*^gC~@fLbqT@> zJa}<4fIkD?$N`LHifrArka%Lw^-b#bwKQxy-xK~LY`c5;K}kjUj4J(i{?|fYkF3GdqEplK31KKNsRpnR0Cv1Cu&x__FKh?l1O@jxBDq( zCYo+3rQOZQB4SV~e_sKLHUZJH{PG%-D+J$qZ}ZSxEHmA}cCv21h+P!2l9|2P2(zQuFn^ZM0wQq&B zY8zWdVBzZL=wsMfQ4F4k*2Vu2o$qfnoona!`Fa3$`%OiEp_{$Qx8;-RhDm*r)NEUD zLh(W`*9_F7avRB((c!8OacO;~o%WsXx+ObBbuO`lHO&1oX%M0c`A>t+CWxuOc-M zQ^FI>%oi7aa(frhk5k1W#!lLw+1q}<)`Nduh;P-Ww5CEcg$D*EtyS+(Pw%jQhzNyA z>YWw2D{S?um~{~U=Dj%=Wb2bI05W^ z#2$t;*A2EDgKEnG6?>G3+|7EU^rjKi@*p{|d(TvQ;|L^UYjr)8(Rz3x!tA79o@~fX1hq92h z@kE4)MoQu&5`q7qSjJT%NMivzCR563d{`9h`3*uFN8Gg#VIjQQBqqY@CD{buWzb{2*6I|$plwxl84@oGaMNsyOj$9nMiI9e zS)nfX$Gm%E@G#)*M~|^dLs_8+h6i^>I0Y55Yf1I;+aRe($Gu)W7`dUB=41YCM?AQ7 z{tM^RKORU@t$cv8+RkO=5$Dn}yLFt~99i6C&}Do*$P2R<*5&cXoP3)+ZKCQ%;Qfn0 zsib}l;(s)){J>BBNAo=~pm({E``B5!jc=6_Xg~U0W*O^COOa1HY8>H2)osrTfYK#HE!8c<67!5ELiyY1Jl;oXQeL(>ZJYyY+0U zb5rHo(aU}znQs;A`cmh`rp{aMF(4lemHQ+?SGuusMUshFN!KU1v735hC0&0sOnP-| zTW_qS>%W@Vl$f`oxJhKdqoPWQX)EzbdaE&sMHe2Htj>LIP#m?flS0gTz`bAv>hlcb zaQ9cjM?U#A^xny;8>XcW6sZ~OEp?w(x9C<)lK;9_hOGu}_KsJWDLNHOS~**TJU zZ(rgt5;3I%O?9KB+|rkFkmJajCz%4tK;n&ki9(ac+<}?+^sQ#esKM}ea;=K@R2A7e z8l2z(W+POyjQegQ2U^vg4M=tB7h(NoX=z8~YPbTPZino=&@hl=wJwv&)v_ztWwO^% zofJcLNVTD1IHw{YSl5N4dWSce+^G3CF(tP5IsFJ=KGy{!W1LoUG;*_YKL;e2ST4m{ z9$Q7@=DDy+Ol8{Ydp{*2SJjPuRf%tOGl%tW$xK|`S5FryVO9TO4qRDl9y1lx-w#>+ zY8Qpa?XqF|%ljjKg4%oSva7At>&TAv$Pc-6a8#LAa`Hgldhr#op=cT}W<{n7 z^WK%LwRw21aIiG}t=`Hp5%GnT?TJcD2V^{Wo%F&Pd&Kc7a(o>*krDPplgmJl#+8pJQN& zom$@HX@1Lfbi~rh>1E19Img{a`aD|7&AwnbxJ=+$Sln+BnoDXTE1Gkr6u_|&88a{k zRo;21#?wVEmVhpS2Vv^LuVmi}Ce9(-wUl^(x{XE2^sNH0DAK!i^l#*HlB1S5RZU+c z&+$@*fhj71K$(GzifzH%u$LF`rI-wO2m2+i<%xUv>AiOH3Y`FHKuSv&X~ode?6_{Hrd z5rjOb)>P*gCJD`0{8Tzng5-f=XcRH^?fxzFCUk#+zV;&A?k&4uC?dY;A+OeeC~WlE zTYKGWz+adlwhkC(rFyAey*B!pdXeUSpHW(?&NrKXN@+OwtabC51O!{3CD%^lXtW#I z?{QU2Hv{BOeBIh054}CSyRG}5tfD+w=uZECdBUr&ppUEITM~-+)edr zUs(Mkss={YERdJ8qP3F)3G909(OFIueQgr=zSe5N!ozBEsSz2kApm$XCQyxPyP%!! zIYo8nT8ucP8;bRhnAjsyx^oF3Cr?+gvT)Er2U&&IsG#7aBjRom-T zyMB2$%ttkVr)DfWAp4})B5b8U*=_3C;G)un>qPH)v8agw#@w#P9pV2r$v}Pe&X|h4 zC(e*;`75x40jx+p(HrX9OY)WTC*+c3T=~;lubg7L+)y<{R3n5JF%`*naS6&2PC8hi2Ql^77bU z)UUoR0`@3M$zfnWT(bWtL`CsS#rCyU|C)K2D@Oev=ELNZOqa65&HlAkE8|)t{#xB?Rx?sV!dpdFGwb z88AOYQea{2)&+0&#U7*%Av(p)_Ln`K$`rUB2hGPa(o;tYn!_=XBNO8rz5eoqdhg>= zR={Iz@Y6iZ3eCfe4=*2BmG=$i8P@O-CFeigy_}+aEm-oe%TvtTSL~(CrBWth{P*>? zN1j5{X1?~nWIij|P8T|M9zSy}YU6H7dMRD_n+*LVhRzByAvqE)U^8nwi;%ZB@fIrJ4rxZVBb?6Gx)Qg{ zD9V6K-tmr<`Q-e+Gx;$hFKtMEd?Vc<1{gmjzt~=EtsC5ze-`=00OKd+S8JL{aq6yB zYZjZ2CbdRvOyWhz+PEgk*IcJ=F`uj4&u=k+Rz6$nmbwj`lS83tV=eK=?XOQBk7J52 zbBmu#alyDL-j*xg`@Z<3{?h#4P5I?&jZkGAqot?Td_<&p4q{_g3#1X+3o@o7&>zWf zN3%Z!L6yZ6<-^Wo&FKlN9&sx7X7Bz!m1xoDM~>|xv8!&~!he7bPzg}b(3l~J;Bynu z+oA~s!ogunOA#(IZPM-_Hko=yw`&(ih{3@I?HQRE z5l!1(ocJwb!R!KSL#$AQ-|igTzLn(D5>+G@N%B|o$)qAwMn-S%7p^>r+iJJ;2nbwI zY^Re6up&qVHYBi~BNBO%RC1D3QY4~pB9(^b{8nNY$~{Yc1)Ge-n|00=fJ+_UY?rLpXm`rr#z>QvUA;h(_Y_GjPTBw6gL_SEYZ zQf#TiLlc7yS_CJ$G1HMcT(ao1%m8C3U0P&kw`CsWDNrPj-}^8ym&`tiC9H9oyHQU_ z%s8$U;fj5FD}xqPQqLgj;c<}Nop~bH#R+YD{R8U!qN!4Qu{(wZ z7f|#0rvHEI?f+j*|Bnq?aC*xT@wmCX*nX6edNSM6zVD|;j?X*>NNvmni2$rG+Xs5rnwprp_ zUq$x^AdDjVOG;Hf<%mhyONuvBbtH9^Q9nr_b@Yg}b_*Z0^xnBcJgeWuq1RPULZCyd zv@nV|E=?b-^&SNlrm}+)qs)kq;$w;q>W>d8|rC+4b0 z&)FqPY zbEF#pDgk83ObIcgG^ISQx?{oTtW-T<-aOu!#qQzguE`;k7w0^&F@ih=uU;dsZ*3Ty zI&`YF@;2r#b!e2eN^s&MC3fYROZaI&?Zl z1F~CV!9Q84Uy??RV(okX*!|Y3G~wiHR`QT#t!m*r^L*;i$OL-1TMN5yB%C^QnhE*3 zuOifPNX`HRDZZ((dosT%<4$@4KUuc~{Ge)qtq?Fq&ehfy3~(R{E(&q#24V zgQP^U0J*kh-a9#^qgc8=pqD~D&tN8l&!>@}&kQxbP)zv8q8-p>ZJ1OloTmmDkwb6iT{gPf(Hnlp`13P8n2F} zI*R+%bFQ$b&c$><>$zZlrBSrMQrof#gobG^GYsBZc7|UNbI!*9Bkf(_qpHrm|0FZO z0Kq*VYP6_nn_6sa8;eI1hw2QOA$!OKqJYv?TaH*xyp{tQzzP@`LbAIZw6#|IwzZtr zT2F6q)B<9a1e6322zXjiYelPe$5D&cB6!RD{jEKdi}qaJ|KE>f)?WAPv!3-_frlSw z@n1du2o@<4x69~EOG7-ib$1j#M}2p`Uf(zDf4mM17FFF zESk^1f90RT`uA`A%lmKDyU!q%)~4}|y_=x$<&R8(9)fkI6Xt$GH1m~)s^vPjvNX89 zi0VBFVa6sBpge*8`Z5?&0TUq+x$8FRQKq5Yp&3R zbxtz7R_B9uK6T zcG%S0)h6T4vaZwBCgzwzMzBwY@!TmB9Fy)&DR)dVL`e7IXv)2{L#NwqUq^w=J7}=3 zBYQHlrGxJxIAnaqjy#IJZy}w?au+dJ(OcOWsAAML`DAQJG*Da0dA`K@zN5+46Z#TL zSesf)RASO=*4Av0khS%8O!**bxV3eZ|C=r4xAV|&r>=_Js^5H^<93?gYHTwraWaXa zLSmFHWMVOz;AgW*mIef|ac8~gg-%_nt8VV1=But?0O4k!T$_3pcWx1U%9T2|=+n7F zU$(o(%mWmyxEYCPTQE0El2c}x-VDL;bf?u}d@3Kj+!SbDmf#UtW zboYyzvcO2`35=~##(IVkR_#T_9wvT5AE#A_FImU z%VtFvcqgMHv{`+Ow_mp_-g?Nav$e7HB$d+^m9zUJ6-va)Oh=~6|>A7#oO1buU<($ zdp@hFL$rZk{Do^F-;I9$mt3?2YwZ9QG#xXMCC@*JQ;mforlll$m|61nF9zFDVWl%dwXo1SHi?yt4$@h^z8FYin; z5Mx-I>!4QBqnMe4SD%LC}dCD*>8z|?d?PN7f}Zz zkjL`&KxVbOGWyhiL+CVx7l^7FL{DG&>H?uHn9e9ra^=i8`yU%9&r1Y@&nfrj3P~}E zHV1gE+ENsz<$pr=O>{ct6Vd#)JgDUO<5qHZ)s+_&{gC%qyrR6Tt^$9(MOYoFJ4@YS zuDa@~3nqiZ zN=aFo6C6kJV%2@)w2e-t0^7WvHo{E{@J2RJ ztmbRYz8Xc%*OpqV@1-TpLK8Uzy4R!R)jwZq4VHD+nr?D|)D>+hDrbCa9w$hCLZTP) zQ10tmGmFq=mf{{IrD)x!u}=mL>|WYzyL)1RKX@-4WPdRft5yASFI`H!*RjWsOfN!z zFKUKoyR)mkqee+jKJb3C7sBr|>6tBOeBiFRj7C64r~0)9dQ@*VUvIj~NP*m%N8;fO}r$z06LBvU|d3%EuHs{XK_oGK1S^o%T0<7)aT|^q z@x=}pqhi$~)5pblOv;(s&Q#>d z6`meN;RHSp>VYNPz4Kr>uDH<1`iwt0`S!u&gT)iIv_&n}#!)T3PfcaMB=Vjz6Cv9Z?2o-sAm)qYN+gFf(gAlPm5k z&eQiZM@LvUXJ|LpvUGT5dKp+&sHGQ;+LH;{#b{FOANVX8`iZRD;8d7Cg->ha0TmxM z5VPbHs}D4v#<1Q7!>&&ZCgW5}JU=$5p_25ILd>qnzaKL< zR8#&bysADkL6xHdYrFN;eU12BudUX)&?mhO3-8URy!*(Q;`K=0i0zIRIIFVf#e()# zJ?|-h;M>}WbWzuEtZ%HC%xSu%Y&b(UOj2sh*IU@4rheEm;_sXLSp4IBG~n%AF+*Kv%1;vbJWXQL9rshtPBry3EZq5*Vgij2DknJJ-$ViWrEv5_Gq|DLv9S ztb=>hgcf5H5AND4`BQ%xm~HLV+0rP#_1AVjUt(yUZ{tF;yYrnA>{0OE_D&D#j4;>s4vl5xNOkg_HNSOwvD zGu5B4-Eq3@-h_$i+t$W|ZM9Op=ZH!nHjib{%#Lv6e$}_^;eH|&?}Xb_nMyxkO4D-6 zF%6Iu&L@4}B;8i#f0C{QFXP9WttOwj4=LTd&W|yVQ@Z>aRiRUW{1E2Yypt$w&Lx4blJQA9=- z+(!-*<6YhX%GR(!hk9zYH-j(gRe2M`o3{?+{A=Yq>Ui_s!vc{vm0eureX75ldE%VN zrzyb}U!#h5L`#dXnNNwzHldXy>Ivjboz*qf%pSVD%PLMOTQq8=>6&IcmAyyPj9fks zB=y0we(RHYuGDk!ac?f4`RAgNHReX9u#tOd76psEt@{{_1jPLEgI|iolC4qMC^F0Y zuAg;QK!$?!NIvpdary@Og!64Tfw!c4v?1J$W*fM3LTS*4T&p)JU-*X zzWq<{+E15)Lnv?YchHk?TV?CriZQRjOG@c_SQhR5m*0(^TIrJOdhH@T0JYzF0B)d+9)QPw zYaW0)MMi>Z@bm9+=-CDoaGQl%sz09&aDNrfqE4h0UMX-islysuVuhV@!q(VnVWI_B ztg%zd@q6k-3FG>7TGe)I)5>l><~t?645uLIC>lA+?AlIA1MTQj(~K2Oac@VuD?@z6 zoMM##(V#>COTd0Fup3H|00J!jx1Al6JatS_?^`eXb|7>HIE>A{{|-*%u0x6ui_8=`qRtnZxS<|Jfj%wXw5Au>=LvlXtz=MK_*eS&jQUJ@J z6%|g~AwM+HY5SueI?HK$(GOMWn6_z&$$F0YkQj=PRe+SX$J6(-Js8y7f^JK6uuhA4 z&j{Zem}Ia=bGz~)pM)2eA@{Kv0Myo<+we0$sOgj#X2+uEL$q z3z=(ER{A7SwV1O>OVWB|#d)ZIL4_I6mxI)%jCR&h9evxoR)=_*_W{L=B0pB4WzVV- z4Zs#V2!PZKl{eGx-$n8Vg0MfVh(%DM{`ZDgx9h_hz$4aMO55>5AaG zTt^sPPVamw#A||1gl+{%uEpJ(D>_V8NCPR?_rE42_X5uFpuCdKfT-F2H&vDO>wp@P zZM41Be`4?a&eTdP9U#xTZ>`pDRZETfPf)%3g z`mW>PL_cRLNiR{VU$H>~gwRsb>*##HuPf6*Q2*s(V9x6ZV6i!dkyK1IBRVTVMM1lrz}kFaFXm6+@2Nfi34YQ~4YGdu^=l<|8p1=hkI?^?2H zTeX^gqJB<;ULBEoDyv&|b9*Q#}Ve%>Y-_7f2A-B=2 zsmNd2dcF7ma-`0s&f^f#A!CPN0c-co`T4a=9L97DatTLJ4w~JKE0mP`OYPUL#0Dy& z;mjd^QtnT6j8UCBM2x_J?Jj^-fw=Ci=3_WE962=8Lw#W}8hCwMtv>=$1D)tWgJZL` z@iwF4=_EFLYd{g)hJ$g`33fLB6D?*F8!8`CGI$Q=4FB*nr*-)T8a<5U_&mR$3kPL( z4`wgCJN`{{z2RuumTyT5J82f!o#*6S%E|zuu=F zgHKlI<=ez$$6qLV^!pDEihs`3kf{D}@4MfFWz2BYg3=(p9B>kk!fWwdBAWz)A?oruS=zKnC2izWF;1$9Xc8g<9TeDCh z6fNOskGb|*)EKT zrf~Ds=!aB$+YB3FMpSon;t*CcUi8-cQE?OHdF%Le*|FIMw&Zk4)|iA>sRu%m+f9F< zNMfYF+D&+VDC#C&^+R#EUJVW?IB`hM>rG|9c){^w=$F?u zrHn$X+(Fy9nxUe4c?xD24Ez;Vb6Vde5CAT)BkwQdP%eKR?;)A4zuJ-K7X4F8RctLw?tPuRH|btnmCS6bqQUfSihN2J^3*cnO;Mp_;APF= zWf@SodgSSy*>4+Q%SD>O3m23wLwNN*r;EyEerl^!9x0kbgZ8F^=!f|}jCD&l zF}FbaTj%!Q(z;>HGR~?%3-6uS<_@M&W;Fo%z1~eflK@a11Z{~2D|%0#RKyybhXv!k z(}9j#PA4SXop@=>?$#kZEMWg1z+T)HRbx>WiR}}9VvXT_eUcXXK~kXEy&<0GFL}g@ z@th$}T0?W`k#77s{34e`7Tw8JkBs8m`^{!5_f+g|LNU0Pl?ScWlPDVb8^i_@tkj>- zX7X-VM$?Ork+|~RB1$hGVb9whZ9j)s&)UwJI~JvAuO%`Q!5<6; z(wpoFe>&OUpZA=oZa2?pxv_YWoxQPGSpaj&(v{DW@w3#}?sGPFYBt3-OUhFySd~l+ zz4d=a7CoX~Xf)>sUhh3m1b6kK@?bo>XjE?Wz{iMq;O{XRY5h+I6s!EB*Y-$ZG_qdM zkTtq^KFj!5{nPygl9KMj+9#|N>H&eSg!9|G_30#ldOuocg3AH&%h7gg)d8aqeX%}S z^x4A?%1_s+?4XzicR34wIotfXMOW#3$1=-x+O|-5=v3Wb=1pk;0p5S zC)Aoo_IYoQH{j%xLh#n7NAY%Uy_XK>#yz5qmxDx+F3SyjL{C;5G|Ox`&?{{@7crch zecY2v;7>m@h?UL_@ZUiHeoCBw&;)Elg)`Gd}UXY@8N6D@|QvDM~D$Ux2O%l(_ku2H;83Wf7FV52W3snNC`YN)|zCb3rQ zb&P{79emW7C!e)eYUp~DHo+GIpxcAri|ci(*nwBvA04KIn+Vd4s?58f8B-}0XLl!1 zx4eW+iEP`;?9x_2n;7%2PO~MjKHUmNFy%5;FNADk!OK&^)9%Q3=`Iw37e5Qhq^fAy#ZYIaiz_-OmBpLi zYbp1L&bR5SkF~|zlVX){UrNvHyR^I^dsDC>yBHyl>q5!QYsG0y;r*^+1Kr5aj}|xo zDyQdSxHuCk?3LRLDwBCM?Bo-n3)_)fbOfyIZzvw;0BU>mUcpK3@~3WHp;|k$Ra+g- zM25dSNn-Bn@ft%6S@Bgsh5-w8=L)*cZS%hpl-2R>mlr8Gy{{7X zhjNPq3FpG%MNC9*@W?i+?dP-t)^h_G*>?O#MweO}uL{&=_qS++QCyOyq@xn|>M zb_AHg7J3I5$WyDzw@l>QJAG`+2OXXa&G#}Mdo>y~C-0tlA2F zo6H=@{KV=%5=bH%czO!~q7F2VLsncO=qUSH8*BSUcjtyHMoJYS+;#qU>2}cC2=O#Z zz89O1$Dl_s6$Sl@KA<8hG*JOnOf*)g9eX^FlYEhErl_Y8@4&b_=F|0;jV?7!3&@upfvCT$*+GwzmQi5Sbvpf#;%lA zf@EgtTq=1ZJ(aaZ{oAm~y*0aaI=ayXo$HdF>-0>CLb!kMQr|Hs-`pL+fT)k)F2*Jc zr&|c-*QEdbp_qZatq}f}B?yJE$x$|8%H5X0lxM1D#vH3v*n1LJvPtKfaMD>+j{bVF z9eLAgyN3j8HWGZ)OfWCfnhj{g|49B4aQZQs&JTq~KaEdwSeom$*9*P|AKo$Q-nw=%q?W zG_$=g{TzdC%wy#SKkuiOy4!MpF-wv=#PVo0gsP*v6?boySWeuiYqX1HkA>56Bf=Vw z>|YFLgdP;y$L^6HBY^`AfsU9vet&Jv_|8S6fR>S63;zs(-?T8WydQdx87JK3NmtWr zyRWd+QRasUddj@b zIKB)Mfn~*L5{~YPITuYxb}=?WOo4iRlk&2RcwPP+#tjRa0Z~O+86dxdRepYo@8VbCM2wNP`LsRVdpY=b7|b zsZ4w_i6{*63iQ`4Wul|Sj`iWpC0# zTu0H1)t>X-KE*sSmufG+#rZ14uO}WylH)cLXBwEx)JH|3!EO#wIuroUJ>I!8vx6N4 zRd7F00vI+54B8BAEsH5(4*oFYw8ME>w}%xiL7Y&t0>QN)ec^4;AAD3lq5CQv`R~ z$tib@uqz-9fTCtuM`?OEChd0N|8iG4RI_5~;*&90b!6(qVA=@f5GuycYJCWS8N-Xy zd=HGJJ``3NWi6?BMChprGuu;}j35tJ0P8%J3muA;I~Cq}ZMk#fM66;};XSv^8jJYL zrl}Z)Gh!@LDC`yN4fqn&g>m`Y6xAiGJf=1ZhlvGYJYljA>AOS1LWH6o%5*XSG15W$^VjI zu6vY>IGQq05uJ1-p8Yb0nUl`h9Cxml{jOu~JuCh+5Fuv8JK~Y2thNa{QJq$sjEZ98 z$cV57fPz>FOuGN4npmyuTx-*0sHIRTI%IbR3hFP`(W+b8Dad_H*Y}CKI3qWfEgTlP zal&Gt%g2aKzwYkn6*=9V2^fZd^J|}f^KGK6jWe-YyT@8Tv(!j7c^CdfXzEd&dUGym zXpXh<8UX#3_|QOT2$`n1yQtJ#3>^)ucpe4`x@8NK>+6rPmOmGB6YY()yjW7{HP7ZE zd7bANYPGAMX+B-TnKrg7Fl_Oj?kO3z_`n4CljHsjlgf1#Ccba-{< zVs#PD(W{Wt%R*~cfuOO*0?uFE4u!@1`g@q2HPLpzeONngW#>`-@Y-Di{f(PbLd64H z-GuU)dS49rY-ae6vY-;v5tsvQ^MU$2ZIheZh(Ki*Ai3O;%KnE=Ld->E{vEdJVZDbC zVXcU4(jHzkA$sJok?Am+7~cQ+1gE{jTK!$^s4Xw`>v*l^TRh5p)yJ%>u4?Bt#@*K^ z9Z7b+6ifxyYqNLN8iAgeb8g&i3sVU1^q@iw5N+>RMYS>12T;tji{P zg7L^U{K|BDqgKA(ccg6{vBk~9oZ3__;M7Ll+Ne|8 z=+@#qeU|Mkip%oNr7`y#6B6!C;F~K#^J9_4CCkse)wQ_GE?osCG{fkBjPR!M;nV?i zZ^Gct)~O|ZJ0gdd9dzrXWc-{m)~BQ>QXBQkm9sV_wrZ8=G8?j_LLUW#pA1m1uIxnO z)B(V6t3(!~vd5`C$C)`9tupaIHSO9(joN%sacE-S86hY&M~@=ze4j99@F4>avC0PF z&5K~#+Mk5{jKm^67>F7T+#KP3a1%WWWNr)=HJ>zO!ral`3refSJB1GxeQ@}AOd>8? zuud-NPvH-ddQOXc+iW6eB`w+k?k-_Pscy>h0^M#0>V)M*^YvMUcX zhuoD~HD4TPq`OiJ8FPxZip`ChC%4@h)~1Fs_ckSTK0n;MXTA(4HJpMetp2#~5GOWT ziF1LbtWiBJ!3>LlyatuWR-;T|UN>C_jEm^|h$8nsux*I^(6#<0fGFTI?$a_d0j>Cr z2DjUGd+Bd!JUg>5Q9S|G#`x2%Seby`^+XIr$$xwopH)8jYfCP}JtY{-6AND#{y3et zsP2I(U7b|6(|hxGx`AZNs~TkFMDrdst~4IZ_-4tJVrwvz(kP<-GmY+lm8UD;x=t9D zopMgopp0OCe!dI%v3o;lymA}5bPNPL9Rcp^cqE1uw5K*}3F6iaT&=r@GcU_h^op;| zzZDc056h9g=@Hxyr(lQ&n0iAXj?vk`GyA>1eJDJgkZ2!e&#MmsBHbHH&8zqL+!)4i z90`1)gnh9?pRIdEuZ)k`ktY{@lKzjQ|FWWjMUPG|NY`>B{c4D$ zz!Sd7hADh>5tHI=qo zlP7bUA*!FRtyoB3C*1A{m{zfxKj2ElN+-OK>wRt3^-+`Tvi0RV#SG@QLA zOWl&VwZ5ANG9Tk{ftw!hmh^RlLTt0|q!Y2XIYbx9u<$<`e_q`kqb_)r#`pyIFs5CM zt`|C9xMRoM%mQm8+5?y)Z~m&7osh_uTyAZQdecSrLX z*iQ&yJwDR`cCs{7lzt;8Cjb)Db$25)5jSQAAfY~&d8{w}bG_fjFgX2&%tJTnn3>3* zJZ1uD3|a+u7eq))IDk?kwa!>>(Ka^7~^K`SLYxidMh1KLifTU;}O*^C8i>VoM~T+-~~ z!Ex~w94_0PTtUHQ<8b&hZLaDfC1}s@n=&`HBUYum0=v)t`6|Ez-(;OS2+LC*it6xJbBfH!bw}z$OMIt143Qb*VG{5j0#P@573uS7cjgtg%X7f3Uy#ZM z_b1)sk`4!)zcxQ3@Q5xeM)R>XIkuz(*X(0Uisxr)uYk@9P}a@@d0GZw(|q~|WT3x! zBp+w<>Zx?K*oM2k8{u?<#FtMx!k6tVff%qP>?{d-SC|CV>nthfUm5=5vkGT2V$_pkDMpI@-lprdW|-ONg5=qi@E=FKIH@n{ zUn*v6i^SLaF-Tqcy7i;+F$cO2jm=Agc+vvPlKnFHFtqk#j3W+~H`jJ2BEDd?{SKVK z+E}8ZO_)4)e#JM)AGGib?+wWo?UQ=@HhCS01F4)jhF0sh$fhneCEO(_B+r-tnf{E( z8;k29%tMjSd=RzT{#kiMvBw;MA=*QyPhz8Qi^c@yLviKalDv6K+$*j^5l zQepoYXQ=uAec_A2K6huH4@i{ebfh%WwWf;~sqsf9`91WzmOInbeBM9m)*C~*^#)aT z_Lh9KR>_fCk5vAHTAx>n&wUu^Z|{&=dt=T*@basXOWz*FBbkONVHK#JhH3GFnW7;@ zWR`w>Zh{%nO@0gcImcAJKPsUipG-yeExE$4M>J5TIzT-TZaa9X)qlW?t&HZDT$pc4 zOEI_|jCN5`s&IOk+-Z>SXC9Jb8c>wK>q+EVu23FfR7hsp>R`$DKcXO z)^NgSi&W4AX<7yj-95G0@$j>Lox#?_VWbM^y*Cf4Pl1&`W^GGJ&bu-&gB6aTEWwegh7Cs#(apVMcr-z2O?q0R|hU=s4NGD%J`)zx+ckY?RHhW@jZ{$)*`xj@Y($fPDhSo7ehz22uy zRhro`tj^H%L9nnN9u79m-!D)4naP9XNqz9xmFS>mZ~<(S0*FIN%$&82V5)#BU$C9a zam$Ca_7NcNq$7z*FFNT*V@Gxbo0-AdV%!y4ZO@QI-cQEdw=yqVO7DC%m^+VLCHR3e zs1c{@x8$-mViD#bIS^3oCLQ8vfBNnDT9iblgqsK^vXjqAM2;@TtYo6YcLT!0PmE=k zj7ai)&%AuJzyS3=bD!A$iIAHx8=-;9Voo~frXN*K@E@cikRAX{&z80)od#nxf3?H7 z!Fud0?8NNMlGu@LBamc`>|^|XZ{Sz*KH4tEx!gAcw4Suua)4MEl!6oU5y6%pEUv>2 zGJ5qWaqD&`}^t3dZoL${a2 zJ229y+SM%r{qE)6qU%hdUv^ibM=NGzcAbRRKZO@7WA=ov?)Z@#a*W)vKwU473R!-2W$;*mdCnG-3i&LNv{E8>?<;y;~+oqg zWb*8ENBnY z&NWsd#naOv#_R&VH_z0)@oDZ2-r5ab%o&-x#sKDTQmysK@jkSrL}0d;n{MFnT%~*% z((fO*(sG|R708G++4?Jpu{s$e?g2K~5OT+VJLZg~6aGEZJWKtUsD6xe8(xKb70g|0 z>XBiyp&fZO-;pPk@;`TEgP(0sM;^B_KOoXoN5ZBf7X|g0J2mq`Fl{c1n^?=^W7$O# zQ#S=Wa={oh>7+YS+Vq)Du)qc{9{H2C>H)3@ltkGmGIjP1iC(kpfyHC^J8a2u-fCLP zjrU%|pnqZe zasYD&eq24OsO#KOMSJ=8cm64?e-q9dRdgo*1O@3e_fzzPbp42xHB}c+ZA_PCZU_dKjLY0mdj7)Fl{bW-{THPJ8;ZAoVTg8F z9-qy39Tf_&*nMyZ7JtvQf4Z?>a6;Kzk|WvYZMfCMj&$ph@(vf*qs;#i1li1o>Wji? z!vvx%Z*Z+2L#%YgO_^^7i&oqK@w-z9X}NbghAJdLaY+nWs^&>CS$GcjbC(*qM9_sY zeIPgB#QPj>qJ_jm@%?Dx$N&1@B+h#MLy7tM%dg)@=pnXS+~6LIxgM5m5j{>JOOlEl zz*nXLgjLWF_D+(QJmB%91Dtr@wIQd?S}l*>1HR=JY}jpCTsn zDg66pKz5f8cK!v@=Ef-?Puqr@2z`Ap`lx>TNF04Mx0pJxA59&<^6M}F+uC|id5S3* z9BqOh2##A@{i2k+fO5RvDJO&{W<5f)k9<=FN^+k_W~XuQ?Y7$H_-Q3#x*SBA#Cqgt z=exnqzF@TD^^&NyajzMnbXYX7FY8Z@km7+}omdzdtE+Kvt`Ffmse{jHa+d_79Aq83 zR&Gjvk6xfYWmg`*M`!f+NWvWSR6XLk0^0=3qX7Ry0RQK$e6NmRT^v|@wYp=>Cw^9a zx}4Sn4S1wzTV?8CCTaiT_l1gzozILal=~;m0r{4ERgw95^D~fo61`+@wl9g&i*YHp zhe9x$AsC{z7jsVUd>sW#r^XPA0-cc>||`!!H`@0l50Fa9j^8M7@Na|ak{(QdT?c^^zL|Yf zS9oyRS){o=Apa)m@9Y|?awa(-pv8mg`y&ZH?0W{?9pT98@eY&y(rP>KCO)XgAX9C% z-9?;^03nl`+U5XvXOO`8I5ZQ95} z0&*S{Wu@z}X})nvDHzfiNhKg zgx73fo9XMDOeXZhi&Y5rBTsfY9yJG6-OEdsVNGJ2X~3yRO`2LiK^n}!Z2=QY_uemb z&leeU>ajApv-vY*F8^OuTTafX92@^ZaCoBkbIkAfbDaLN05-ISDOj%Fu|#9;pIPix z@X5<>nm@sONRn-IH@33o7CH52HJ?hk;VP#I9){jaaqYxhh<8yr+%zq;cPgu?#sBb@ z%0uIi&{ur=w2?dHlpfnmHAT^uzhK4fc^-iY_ZV}ZaC=~s0;C~$l=w1#vCLnBkW0il zhF%Cc7juSssGN?uqPlEwR19etYkda}G(e&;;k{?c+0oT~;z&Zc6kC<8Betpp{lX$Y zM4o7lE<&EMJIDIs)p*xJjsTKe1#S&C;|jscG`ed=h;G(}y$o<6)t<|?O9b%0Y#|Rg z!~lgCN(V;ohtS=Oa8%x(fts_OaPF@DsWO3&uzG}hK)#zRc(L_vL%VB|(-dB}-XSaUkJg5_mdPBcpndyh(@)QaIH+S>gfF zRCY3N#wk`(6q!acb0`K5(+r)Ffy3m?5bPPo;quRvGh;m8!v}!Fh|%573?$5^z%$nk zFMu&paT5rP8i*UMxN_o32ja#ku0n?y)5hB@Ug~kiq1n$If}Kz|k;4zcbyh`n`V4`j zq~3;i@!+9E{$k9-CzHvUaTY9x8!EBHi4B}B9$HF1iLu(tV!U$D6n$N9JOE0yoxM7c zjQrJVvrVmu53G&p_d8z>jXrE`O!WDIHP6u@xc5*Mv1F{wqKzVFj9lSkR-1A9vGHV? z!8bTk=3PAF-Axgm3&w~XB7wYGW1>{W-M@|QNd?}J(*UGjn=jR$(V2IO)7PZ3GZy6P zskK}@jms#IpS&J|qeu5RmsSzTPoCn&DDE5r$N3YgI7@NWxznhu2?j@Y=6l{GjLi)i z`E6W!@SrRIX0@JgByS(6FsCDXIamcW+bHSGL6Ngb%aAQS7YW9sUfQ1~f%BU6_nD|n zh>+;TZ-~NZGG=E7z2QIMVEeXiYkpPHLJd~yF)l)$O6N&DdPl!Js9yK-kHMbNE8pxJ zi7+FTXwG1~NFsa^}cgq&$evH3{-fCg=*KrkKJVe z6d?{{9zf;UKz3f~G%wxY-@oCH(%Vwlz6N??@jB%`pX~e#%-xQLz$21Iz-gkMHA#2l zIvT*>?@?{U1I?$$BtuX$It|x;Q{t4G+8{)y%=U?T2ICCoZ;h)21;RMuw+~rhxbI*ERXtSkky*t-MOrg zL$YIW>V^u3Tum)j)-Iur>A-CPz$}{SI&U#|1V8280=(I%g{I|{zr2yVsC29FVYkb; zJV>}}Bp(4=*ZrOmr$`*a$GMZ3<0KlPWyRdOewmmfm!n`tosDKr@&#k=rGoX|QzW{x z57SaC@V&6v>PMZ#i{2Z;mCV3IyGGNBuI#z75GPKA@t9<^kr_r7vWAm5oPg<+g_1^V z#3f!-0PxGS5YQOsm@yLII@KuO;Z2PP%SIOx@40-#HF%|k@B+ezv1-&}S{y}}w9G_?iCkxb)2M5u;54ySu0igcDNzL2?d+Ii zFO(Mb&bn(rz6knU|9bd%q2a261V5e1-nW4n+Dw;OpVu6moAg38Jn?~2j1+thu{pJj zz>fD_SwQSJj5vyP?6cfTQ7KHiXjT0!se3DPr-?d>eiarLmyYgzly9-o&pDnWY!35% z#K>sOFZf+Sp5ey0wVTlvk%V?_Xv|oGapxLj)e!o)CK#{&WsnXw4@WAGD9k4c=Hnmf zmitAR%Ui%4Fp>Br+s$a;HmlfncK?48ZO(mW=$W)?s%STKlUNh0mppJLS zxrTk1S;r6z=y5amYG7iPz1DoP&6U)lt`X71VXl&*KC3gge{PZ8Yw++C1vlAE^PT!8KX^64tNq}$1h4gj*Au+n4=y0Mzz;4Y zxX_3@VexP{?c|LgYL^ql_~BzLLutI`m+;)sEAPY>BqfhTOVLJ=DM#}WDmUgUk(q?Y zEeM%(mrRuOS-F8UJVY7qSrXEobb!!ANoYR|g3D}9FY_uc@CVu)n*39%buH0YE26c{ zBM9P%zT&Ky`@RTW)AZ*H`g4k?UH{^CsbBE{DZDlIFt&4{mI-jc3E3;xy@)w2|!eu2ztdOJoq&z-K+9ri~92_-8;pP_0N?? ztaLA^SVo_(0drM~ef_&;9zy0>rMxEgpo!HCJNGMzDwM%lRK~w@pAL~R)@}3nU7p^L zuotHdL$vuN@n(EU)k|XbpzX|vdS9zy=?(X`|An2u-v;;{XB&D$G72#DK2Lu93T!X~ ze8THN3pkUtP6PQi?=^Kt#A- z-bt4NPBoVnr6Fj1TlL8H(v+nsCu26D$zC`MS_kj!OEes2-*$}jcfQ6C-Pb<9sc@h9 z^fBWX6&WE=bfh92)gKe{;xIHa+`s4!OS)gK_HMz%I5H5?%s%uO)+!rjeRwVQ&0Lz7 z33|e0{hpGn@RTZvgmYU@i%Lv9>P~CKbYr7CZ5BVXT*Tg-sdKIHsyoR|hBf-N!r#(F z@oC(QBUx@N07|&rm|UUOCc;yjsC6lU=}VQRogyZS0`4kv={jrlLk4stSNq*g?a(wT$Iw(?GM5+KoC9Y(gz zhGd{=x)O z=VF_~=JSO2eycw2^JX0w3H2&{LaeJz*9eWOpUASSI*M8OVz9HR<%DPR#ZDbs45HQ0 zV&n3~^7eH$=8L_&e@JUXJI`o-GPE9Ug+?3uaMF{p6JK~ydJd4wez}2cQktn|fa!7c zvN-13G;sp42a0pRsoi}uZR}nVklBY@$=^4#+ODazGGT_8a5i}Ym=I62k+3{$-Z}|) zZ``^6UK7({GV^)m;fI6wV<(t|b254$)hsHr zS}!L(cU{Y|$(U6mNV@w0lVs9jeuSCYN>M*EpC;y3+l59PYB~1#bg-{0H>~B@1Afvn#jTfxsks0YTLp2=tHLWH4!WGETc)f!3ue%&zrs8*B91~=>BjD8_rMp z%|J>jYw!>wwggSnPhYDUVgRofHp2-w+#_>UeO4yQc+IB#diqlwV$IE>32e&i(qX+{|Oq}MHmdD!9Ij-fx&!xdx6EJ1=PIJeX54^8=MRoqHlf5`;Ah*;Y^iv*u>|ErMAY|kZkmvZe@*i^-7U4IyTK8K+%iY%R~1lIB|O^ScwMi(grsgGTlf=l{V=>f3akkw6H(~1wT2E=oc&_vCJFJ5#@egkUq*WkGB6VuNQ^| zIsp*&L^by`?>+HzGrFbO%g|+#&Tw7It;307MwqMWg!@v$eIKiaajcGQrhmzrb1ewg z6d9zCiOP$$ark6law$b80~vm(tfq=+%r`yPNg0}y5T@#}E8&qyM-7#P@7tBgtc$_2 zAIdBW?W>K=ocy)N3jqtGMzF|x!U31Rxj(g97FA?+sbOB1{9{$wZV&V}U6M$d?@c=A zviHk@(3i}KV-!{G#=)AZP+8d6;olpJE^G0pr^sqO&U8`Zwo~);UT=TT>{-PWhH<=F zW9I04W3m#DCs73dArgx1aq}Ls;}5YIv#7~HchcdZFS;c)t-eo5N4koe0jP{LmYspg z%g&a`VZg<ph!4nRiRARVNX^k(=IAvELD9T_NFT;}tk3mE1ru&|R2Z_^Z?kR|dgH8F1BFU`q|6 zc%}Y4$!Kf@!c@*F`NLem~6Wy8@%UJ#CS&O7q}7) z!^tv=zlRHfH%tIYfXoZ;1>P~5<@@}-FnHnPfT4Vi*w2FY8jMLrpeUB6Oc6UTOLKRtnCo9r8&+x58d zM_^}vRnaaGx$@Pe>b?7YAyh^L{6TY5V=sd}T<%>D!itMOf!r&BiDk5rOiMdFGUM}7PniO#8GH@ z4f5AbRAnC4_=}u1)qEQ$1$T z(>1eSwbshQpVW-?A_dKS^e(O(0Mr7L^#xf*Y%;-DU?IlUujz+vL2?26sFFtP7)-smdE{IcIq5*|U-JDSW|WC>cg>&bln!)ld~j%c;J@Z(=fdP_ zhyBgfp7U$Xo#Ow-BG1LG)Vq(^9gap^}X`ZrDW;%0oVV&^cKRt6PFiL zo4h0W7v-NVlCoLd%sT%^5SmDT$&GPWvNiE<0soeg(&A@m_kV8X$H{c~AKm^>kBK|z ze|Y++ol9YfR1SK%`fuWvW93Uuv^N(_VB6MDyB7`L%s`4T)l|^$;_`SJ7D>!)EJY7* zz&_E_|QRK%)S(}AGSx$4j z=63!sY|Iws)A%$nO86bkBca}CzWRC~O!sIJpx}(mBW@;g!JtSX`X;i9J{58v%t!7v zbJTk-N&fu!?a2zZwm%Jezi1o@smI6qos5>t$!OwX7f^|lsZv}0GyP$H(IEarR5o$l zW66M*a^PA)D-g-x>AZ1Vkqh+hZKb+Y_Or8g33dF`n7w-bM_MkNYPJ4`MnS(%mh?pC z-}s1a9%G_T`0Kqsk>K;&^lZIVG;d0tvjoMEA({g;}Ek@ zvW|LF&i!g3-hRJ&;W4oqI45UN?qH8$~(eeC1 zbC{qs2>l-KH8HX!P3wbIda@PzC%CWr(=m5oyy>6&jl!2Qwa)Y5Zvee7#0TKh+0JMe z)Encc;<_5x`BCqOyf<9-?yU#uICx|e`mK_}x+-4TA#HHPuwoPXStkadR9+ zAbuRPYCj~cFZ*|$uFSdd`iXQe2{|P`EUv`;vpr!^DA4JYAmp-Lx|5OcM%MDV>B?M z>Ef}YRNj8kIMfXH$++`zw=U$Y6h!rA)A@lGEl6i)BMqYhpl}Rpw-VLVUIT#;#P3h)x z-e)9yd7)wXu}FFks73P{NVt0#g9w`7)!37|(#+^#c1l&e=5CXZ_ZEGElQ_}ZG~>$o z4w6cnX3Ux&m@#+06CyYbOB*`b3mmLQZu-V_BSbjA^|kb{hi#gnW2yP{ci3iq#jQ<8 zVy{ID$=>)c!WW4U%N#GyoKb!gONKu=$ErL{oea3ak8Wn zrLeZ~0#ie%<)+ITj140}o2vA2T*1}XU$^j|4exMro;S!_9cKIEU8P0dzkHmk3+rXI zE(aRMYvxrq^N0hB0bV$+Cd%44<0@-oUDNs9i^BQUVor;C8^~{M+{weTvK!4ar#|e? zXlAV=-HQ%Zb{6&t)9W6Fe&L;Y1N+365F41Qx5 z!*vg&+*^bS^vlO3s;|Um15eTP-|g(pW}Q@r%!J{;z*wiE;W#2>-nYNm->&N`bG9C^ zTA}}9f~J&(Mgefx`?mr7Fl{D7h2^o;`1=_4rlPWA>UZ)3@(<8(>dSk9VSRr31%3kF z4Jqet>zz)Dk6Y-k!4C@jI%ZtVy6`!xROWAXsM~6px(tAX=;-*uf-qD=LJSE(3y4soq$2be6vFucq z_0eihG%|(Qg|gjy%}`|gtpp$#k3_>3UJ1Y-8P_n(IOK)_f)m)5+td(@JtR))e4ZLH zL)|noX%8BXlY795_iSFQ0a@#Nlm(-*#;|;#2jxOj#)|K%?96y2*a(?s2X0?SW}rKU zF7pDqC8H6MyjEG$lH3hKQ}9&~`0$kya*Bh(o7Y*0G=vt8GtWew#yR~X<1lF98Vx_) zU2-iM5_6rpCbtI}#~nrirZ~_UNrVaNoW~HnKsK{0=r) zbvqiE>Qnvqqa-BzwzXqAWxGAEZUH{&v8b}Jw{I_M=2%YY;CLRU>+lk)x}qW74{>Lc z&=qSFyn#Ek6kT;jBFwG3R(rYFt!pxS`W!`QuTM6g+!9Nw-AkK@^8Ug}ReyW&9^IFh zGaNMBLEDS_**rqvNe7LQmK*giCeY3k7f;7U?$2nOXWz~+W83q^dOLRE>1(8I4DVL~b9*HDGk z8YVvrv{LO%8`4gRX(y5KoB4pDc{lVo^AfKIc4+3o=?U(A)h7bleCSB6zounsY^5AI zRwmrP2YS4}`Uq%#2tPNaXSexTS}S|Jtrrg-VjJn|kTY9&#BSY?-g3hHa&IB~eaXo-$w^!R=GQB&e#|!m&UKSob7X7N@m5U&2 z?g+*Mhn0EiOuWxQ$+K2JM;&nTtkqH*K-zQ9HJyvm__W$~@a-HIk34T>yG))Jt@ix{ z@CWl_BWh#tATPDhAgEjhhIg$SW<9xTv%xEAD3%?+#(U~Af7DvIHqx?mC^iWnc>(465u zW=}ZKL38i3iUZ9_9l=fPt4Tc6eEj^ruKAJWzg@U@3z0>=;>WqOF?g`syWuN?%bZOD zm1;*Zh99ZYdxumSCIffL7`E+bRKlM$NYWVryn^jvheLoh1gV1jT>?vpRE6P+E-yT! zp>A^1&>en5v((UqLmK)y8Qg{+KudORP;mK^)|NL;4;*tEet`YE<*xev@RtYoJ?&Td zSHH^Vw^HS+top!&%pwDQf1kd;Yx-TGe!sy?n|{an_4_+T{hd3c@-n~jTl~uJR^_)0 zsa$TZ+=koK-<<^GZrXG>9(coPxD6(-`a5Pwm5-5)DR|DW@@!Q(c}SIalY#!erq!p< zIrVk|ai+H|tYe|S%&q-w>O7Y2fDqQa(zfYHoV4`)}#Qax&qyCpz1352eLLT ztEkW-`^oS6$@7uOt8kaQCfiB*Y_j?{#?Ll-Aln%x5Av3M?r<=G5$3?;Cd4C$mW|i~ zxW`Kr#1>%CUhe{pfnkYO>cb8HP7!5P*N9%s4X4Yv;)_wV?^iy0h)DT8>Gz3h@YBKi z^aj~A&sJk$Q-)iUcJ{V)6zum^qz`Y^r2<#CZBPPT*?yfqpMaX882zW%Un_R7I)r%> z`(gp+z59{&-+|5G8gj@#(|};^PpJ#@s?fmq0TG`09gF@wV6T$QD`yigtOtwC$?DwF z_W_V8hHvfGZOtd-2_i$=#BU%F#9*4(E1MeJBGdur1T|Ab3-`{CMRukwy~@{Uot-rz zh#i?~7pL!c5sldAJq|o&QO3EKgi_fx>qu4Xk(35Mv>hMmu-&olD$xvNY72QPLbekt z??+4GZVUnhhV{S18vq;P9nEJAfnQuiA(SWG@tEqC3GrbFj^%=SA0;B)3!kSR&Srdj zuwY0$KcCAg!tM>eVe)a%FpXJqY>BwoH*Bs{0|oe4n=LKg4-aqE z=UabBGmFPq^T?tuf8$V9L6vi|Mqxqp_hPT z?=Y;l%#O0iCRMi#LzC2`aYbePl_+K1NmgIp#W7tWDVk6EjY+zcl~>ml>;1rwDmPI# zm3glJ%~X)(rgHB_^L@uezXqbJye2=&5VB20O7t!^v6{8)Ek5eFRXKb^y*0P2V>;5u zd#~E+TwA%SbJ`TiBgc3;$nQ@kh__BbzR|2oOw>&%PH%X}ogj)(vrr*#3P1}X7az=U zne6k{p}IDCMDsc1U?NRaw#P($oFjs*H=GsSZ(8Q$IuEIF?|0)(jcm%@-eEwTIikI< zk_2DY#6GQ9fw|s4@CSOJMwR#iW(W_M&EpcAaxh^sBk^^a9JC>V7!=6QmDI zzY0^U==@=6Qqy6=(c<%mU8Rpe>_1?sqt=oFub!A#y|Xzi@oq_)^Lv(L&-28aaznha zV3K;juzXm-7BX92vUvkbV$N@#{($s8a*MmYvN)GlrjY@gmsf?GnML?*WB9yoqO~<| zmLBk9(g%nSEU{l-%EkWt0hzWekRX!oja97M|104k@(&3QF~3KXcE$pxoBss~qHcf$ zvE96xbdn%J$iZ;|LYV#z?8ia+=%T&b?iUP?34DJ$QxK0#h1eiXf|PsDI`%;<+te4^ z%D1Qw5bCgB>tP-Y51GH&K&-VjG2GhP5DH+dposwLnTevxZZNTjS}23sLcIN9^))izn{YZs*E9R@M;E`<>8YhB17Wo^-CcOcwbh(O#j`^{obU`dxOoN@9YgSnAj74iDmjq zn#c1uC;>#jfcV$qwD?~S@zqspC;)c0zDhF$Cyj|=-q_W{3h!}1D#d6?RNAh=#cjVV|mE$og0KL;0w z-V|yRyRfQdX{f0A#I69}Oj8t2L2byVzu~wk0A5f;@h*7?bfiEV;j(44oQDZ8g&U$_<&exP^J#^Q!-5`(cFnM1P!9kO&lAU>Myhg$5R zNyaeLB!ogrVxzm=&W`7UD27#7qdH^la$@;Par$?IIT9&%m(3nq_&J*^I7wj{B!GYx zg<>0Sm#B(e+#ZUzM@!lpMMuRgT5oas>HaDxT(a;J_WoD$_H-#)ETGt49B+?NAc+kO z+Wf!Vy?cCA)w%ecWG2ZZ1oohy5l}{r8XIh*pautZHq5{tm`J>EvC5?fMLb%i$qWP~ zkT{93-A={UR@+~#oYRZ;*j9TH5nIUxNVwmsLTweb)jf<>)E2@;=lwow&rAY(`g`Ah z-+Vqhv-jG2-Pd~7bARk?hA-W3(~WsA$$_UV=zg(U?k?MmEuC(?fday^SrH=5CK~eP zJO${*#)U2X#$ZR+K7ZAh>K9-VxH+T+QBLX-PgJ-j#E<6E4FWI+i?N(y2Z%Q^cTWm8 zFA6LObmZKOioy@k1GAdr#3Q;H_`>pa`&M{#Uq>2g08py zN@W~64;wIXk!0<}#k?CM!NkyVl5E!`Mcb${1cU^%H6P-pY=|(mVfaf$%`i-$BlsjX zn^zTrml)#WW~Y67->Yj{KIh!X6aC@|W1P2>`ri6TB_fyPxs=otCVCTKp-mXWFD$eP zK|xWF8>uSgXki#dLvQ9B$DexO#u+fXT0W2+4WDb;2N^yWikF79?g`aLWOtci#RNGs zq>i4n61@lnhO>prglP2(VPs!%n(7%Riq38BkqGe6*~a^$Of4et?f<<)UCE> z_@UaB0``LbUad_T>e4SXyBKh9@2r8h}Ve74oU7U4Xsk!lGwfY7wo>LO^NZh6`^H=aR2sl|h>8#x-< zEFHzoPHk23z{2K@-sws{*$73WmW=grX2FCLQ+#1_ z%4!v%F0&VvB7cqkl8?gJlFzUupRnCtR!nQfYSLuU+zOaZ)FHpxVSoJ^MzinDc-|OT z89NJ>vSdB8XcmaTY_4dC&XhG&XVbAW^RgFlo4U$=j-QkBKAHR8wja&i_u6gFz2v>mxh3q@gFQ@! z{X_b5q)XOpv{Vga@;Z{SaTNKN^uLObn~1+;>}%5PMDTt~uX;=R>BE@;hQZHuC8l}s z$i+IXwwL0mj!5CSYLKi^4`$^_NM7LrFuyxod+cG@5B3|s?Ys>7)62hw(xG%;LbC#L zDJ-Dl>I{6)zkT_5vWm)PvAq-%E0**N{NQ0Bel#7$fuMUNy@`D8PH)sr_va{w<1N_# z*JYSxQ%a^>y`@{gmO=C#Re0=YlxaUnV}fe!C7dZ$y;RYFK$O>cXpq{L_D|tz6HjwB z39QdUIN`D!GY<0^0Vomk`F4KrDvgmm<0OdA^>C~CNV16G!Auc51H@Pw4$wo-Q5KEB zLcy>b_1U=KcJx8OAC7d&l*C3J?j+Pj;lSraXgKt}UyIN%v`bKrTawj)8(|egVGS+g z1A8P1!fB0Nr>$Xc>1&%QpCDuvQ(!staJA1j(O->Jgw?Y-0e40i$vZEmaFj1r)+ce}6a>QXj@!zt$*fZrhcno_)Z7cmHx4hz%Lxq|z*mWFq zG(U5~Xl)NOUUIrG%$#=WM1aObrCNp@f4i`lFfL(s)S)HkCm}dn-c^TQmmGRAxb$*T zTHEo(P_BHpmMD0PNys_&rR3*ks7f!kZ-7c+<-EZU5&)Eq8uPLX{zICoo9h**PDd}J zu;FW;{h$B&pCb+k>Nx1~A6s+*4pEX_e7SZzt1uvovPN*3 zg#vJ^ndCZDlWsjJ+`L1diC*&;oq%NL-@u1NX8yAlR*F1#z-uCO07^Y#HXRC~hRm-m zL*ui5Qp!>Y)v;J_#+hfGY{q6;zP-V*O?9!*FVyP4rsJc6%-i_;a_0UK;Kd|P=S!A` z`gB;(`sPeWE`8+hyAKBapDY^J9jcS9TWfuUdE+4&i4E{+!(t(_&3=hn zcET;s5|D;ol%SV%jDWxDc)+ZI&{Rv6GDn&HIKvums$=W+B4#@jTS|BVytdRaU*L+j zFoz>*6YfXo6Fc+Zv+T?^0eY&pb*b}EmOaFamv|9LxK~QoZ_mB2j#y2H1b)3)|2rJz z#1FWl7dj4ttsRKC#<8eXL6GvHx*O?a#QLV4915(+3>38&+uw7*~&am zhl5qNL|gVsrpzFz`0%)*$hZWllxdPxEPMlcP23dwX-15W+GA(cp;|+o;#5SmeRkMC zLSsa=M{8?PZRi`a#Ert>%a&vR2Zg8trpR|ztwFSDT7j9}YQ|d0$X2NJIg7z*^oj!^ z8P9nWdfVC?8+H7OH%v|pQ4>K^?Y*i^lMYGuw6>vw0cw)2`n!Z3;WG~BaolfUG* zkJ{U|Z8U*Eqgrrmesmyy{o);7T-kh#Q&n86s?VhR+fPWeh1>9bE^^Q4)m*F~w?5PCeZ57WCp0>N8MYkbQ_Jn4#a2XZVDV zQjOGcfvRI3`c&;~tLyU;42QOyu(vJD+ch=%EWjGy~w~&s&1v5lPMVeKaAt9`U9BN7gi<3-y zD*`9HvatMp^uq_d0=7GNs>83n=>$_1Jwg3@q9MaS%NH%$TibW z2Z~D8RI(Ld^&p1ezx7?AUhOkj_1c<4#FaT)&j>A4-a$C*%@(;=5Migt*Kw4TO%_X& zOtO#3&L&G7%uI4voHS?JC02xi*27V%k?J#FJdI1D>=$?Q1s+en!yG|6Ib4-M&F`l0 zweq*YIl0w-(1~oJ`sA0I5<_2R3&^WyaquInoW;6O1;eQG%3RMB)!yaES4D9P`e>%s zCh9^dx42EfX9>mY$|Xp;y?a6>PvV;;bJ$B>X9Xp$*W~c_*)g?hI2|TbJB7VK76FE$ z8VW6z80weynCS6X(3)b^_u@YgvHebXQ1gSX-w78AzTcJhaU2y(drxD_uf2nnAMYqU zk|fAuY9QgycC4K~ZQ3-~<|9e4G@?n^BVD`Zn={y{Ll0s+X#bJia=OozBF??j@aB1n z^Va@kR>@T@9Tz2F(o)i(j24$U159&h7ujT-;+c9&we=Vt9YCk7jJGdj-rk;h>(*Xe z=q3GEne^Je^abAda(K`e;P#5V=q*NvY3m7=*rU#BsW_`XX3pUC;ph`C z#-~3xaumffRqbqwcgD(2eaLtuhTi5>NB}Q;zodZ65OFLWHJX>hZ5uD$y;?Eet`u;T zo8c#s#)A6IWat%#p8aUe=zG14*Srxv8=IZw6D`c?Ni6_DB9Ig@DAY#F{8RgFS|%W1 zZo?&hSVIxY+rr1VOu14H$;=A>9xs#&>!Bb2w>V1NVc&Uq-`mB!ZSm*NpSKXFZrtOX z%&il^`D)I$Vr@l`Bz2|==OnXg)yg{=$2@}g(di|o@n)NBXHeY$i#FNKKOs-&j!uug z-@WK!0aA&fi!x1lb4*`TRKy98%5=B?es}%rgoHrC5wV_>(uk$R*evFJ9-W4(UbP2T ziqQoE&w}t84b0;Jonc}y6L=-;+G~w38>^Qs8mxIs6!Tm27HES@wZU*Dbq_Ct{`SSU zL!I!^;#t-Nw_Ziqu+3>?);;yVW>N=HIiUrpHHfmrKXp)Z2Kq_UT2WFRz8}9 zg`PJ=o4_+86*CD4mx=ML2qp0`X;;Vf%LUmX3D*z0}$O&G=$Fr$n&B483n8R9s*L&d)>9fw$d( z^VGF+Yqr!ugBVuR9T98MT%)C1QiJB~nc%l~7-rK)5fk>KwbIK8s}5(Yxtv=@a1h*R zbUfiX+Yg^DD!HM10XYsd+-JCI@5S2;ohl|^@x*Fy*Pu0f41IXZY}#pt_L?D_J<=ycwPPx|nz|TwbtcP0;{S0^h;7;?27~twjzr7BYP+syF%VZtw#JuDo zxkK+fFZrI_DKzmfa;JoYd*qHL>87|$(@iqN#Qesh2T=O0Akzeu5>ou zd#<+PBbvc>Ka(!e(Sij}OGh6F@S~z;tivBnUb0-uf+L-m93*$*+9N6c#vH|{V>~K) zBzZ{g5SP+_xkD72m;8&|i3)LYkKCOlcRl<=RD;*nT3U5CO%NBNF#cUg9mFR*Q~Nqe z1(`=~)f@P@BBn?*=QZW!U7bh8ixvwz|9+&JGRvuYnR32PkMn5{458d{M;ZoFZoA%M zTU44dM9Y-E%X(PxDTBwypN~7WVfu8#hKi|B8ndys2A19Suk-{K`@^h(uxoSr?f5a5*49lnsa}u2v|3iP*7^b|JpGiXVy*3I zo)jJ!GMk{{7l+JQ?&L2hQS=iZk~-;BNLUwW(Cz4MmO@xTD%o5sh1jQ`>u^@*^L3)G zNNCBrk-`$#Dfp=nUCHU00>|>8S~K=hDM)LrBtf@KDF-Q(Znijg>3DCUwnFSO;zwQ4 z;fT(oXCU9swZk4s1xeAaVFmT2mPqPBHXetV*0zmZWKLU*k4Mqkd{vM~<+xxF5tj;p zHI-Iqaq<%;L6@?%{TZdfr8K%$9SO^7INKav!IqYP%P z^{6ye^?4uAq?V~`-N_9LtF{0oy_KCj=+SM1fmm`By4?0+9Gfq zw#Q1lc~D7SQsgMe__VgT${uo~spI%lWSu12vTtwCzP-5L+dHyv#ehh+rh!G&=Gixw zinG*ypUDZYs_)zdElOJs&~{$QSEmQ(3j|SM9bh zFA>b)rG`p+rH*Zd%`oDrGswO22!{@+i?;F~+@L9Lbz{ihZE)z7wb3QDcEhgiaMBiM zLDA)WY0T@yusS*CU+M6?hnp8(dnQBDAD}5HgVFz^^6ioR=`G>JxQF7$&eB#q=;YR| zhnw@B5y-;%**$S4Ga*7-t2lpRjnD-X1J=YbpbWvFb#2hKtU742O3fyY_~pTx*|YH@ zK{?5%0EU^&*_`PpM_rupG#nTAS3ybijSOXytJ99D)j zPFf;aZ{VG4P8pbxoQGLhYx^Y&lbaMB=##4dui;LQ{>ck^;hKZ1cRDpZ(<${lYkBe< z*mEc4yEBvT59G@<`{x|&8A$zer!>_k&P%o8+~${#l0bq*lC3zvN`NqOTRczE%j(ca5a7zJa)mw+x!3F@jDyRmjkt=`^BD z_5T$}tCMP4lBsDMO>m7QOJAAy^wlW-kW@?a<;FEqP}1ak@JaCEOf@D+xAbu)Ri#8}>i&0*{iH8XS1TC z5HY7gcC2h9f34*%sWrz#E`Xj}EzKke1w0ThLmu{C*qrQ5jj>u5lFs%M)uXLixCgH( zVOM*Yd>EG+^Wf)#i8uus7SUwQ@!l|YUtx4l;=L^H-$)PmM!Fp_R|)nn?_rI-&Mydi z=&j_ZG*Dca5DIR)!VAHev{oT&^)$|tyWPp%d?8(rSoGE*B_f=L4~p9}im}0IV3>wp zm+nciwdSKzlT@l|c$EC=Y+lI?_&=7}3RmWAMhpd7*dUa_Jtx2MsW&&vo13iAUh?D@ zibm4)yuu6NccT=86Qu?Cq=u&lnY7ZTa9U8U zoWfrF$q8ISq^{7`PX!&BbXw4w3h6V+ZJh~sp%Nm{Ckw!?xeVNQ@Y?^P?o{d8)$-%Q z%mMXk8M2)Dx#(E08vcXQybHL##x<5}0#_~946bi*-NhB-+Q_w>%jEhl*OOdNbNz#8rg{!Uux$EA7mxLUZL;d-6xyiA$*^7|OqY}$6q>e9TQ@%se7`?*eVo%>&< zc~iM|a2@6<`tQ=bhq(@OU4bm`O1}U3PfPPQaJ|WOjB7mU(%0Gi26>*(HG*gPHp|8k z{uvPDB>mp7@?Ic5Gz7s5ix1QN_Pl|@D0pNQD;Ns4Z6?f3uV^x`ZHkps9bYcGsg8<7>PglRAQ%y*$FC5Ra%icnhl^MNl(1-pey4eFHD$5tBX(jw)Gi6&=*x3*ptDgRTZV<;t=6F^t`+ zKF^wI@`d6Il10A!Cjv#`KGUTDLsV@xjKD|YN3ZA+VW<7@IK@Q^@GZ|d?*_1xMgOs%qIRZ_GN1kW=eVRW<{e}fYsF9J z{B;XLYo~cO#h=56{ZjFE0 zenvA>CeqrkglcqTosW?ZTS@yK7@jaheTeSdR!8c5!)yc?)EMRhZ+D;^w1>e_%CgGA z1{U?^=>K)6_4Qx;cRGWAvsXCQkd;sVACz&v366o?$g z2qqR2)F$w=XFh}arvZ9%@BO0f;}l?jz>KJzR&Vkp=XGVj*T1^3@AVIz*W+TB7=mB< zyBY=sYw}_x5>Y7$ON(+cg%)RQ4<-;23RO+oZ}-TFK=mGrOS9mh$p z4J#K+=f?BAVG&EMrnuE=U#uy`pXlPEFpin(hc_p$X+C7o4{`r4$?f zS5ZO#Tx}m$!*TPaYCFauxDaR9M451yp+76zPXliev7x2o%STBnCKilA`QR( zU+I(N$J3sX0{-NKgzLRjTk#!6(|7{4=~nlN=S!i>A8y^pZ`idh{WcmFtEIfh6(JY% z9to`m;m70IEHWh)!tB1$ClZ|*SIQo}v6_2qbbLYc{z`iSY3LxE_e12~UlUyE7X?RY zA}HG-5$e8EQq292D%vHjWkWMRf~w779&|;`cZUSMr4S9UXFsKi^L+$F;+DT+(x$6!ckRN-9$_?|u5OOcH)|}wRaT%M<3hg7DffcgZ za!Em7bCqYyl*(U)CZuw$4eqIveMst-Fa7e_?3Zr|oh22Or!J)rKV{;7Dn(7^10n3z z%X^X&0fAHY>1T5^ACeb)dEu-FNxvWJOqN8O*!v_O;-92`Z)o=GMp8z%Cx6V3;!q}k z#NGT=r!j})xHfXV@?2@&_qfjHn$Pp^xE|-q^Ys7AR}Tg1zl;Cw+{;3_E8;2^d3!(C zOQOtceG)XqZ|Kp8d0E7)_t<|%zHV5oje9v4IgQ0})-9rz!A>y@@e^99wZ6_k<1jRe zGvNE9Q<`hOrqt&Y=T8f=?{=EAy|#}qJd_k1ySO}tTzVo~k|H8w7kOgE5%Y?mxriF5 zsK5Im!+N!QqL?JJ8~}j!sPkpCl}bix9ZCn;mjd^TRekownFiC&AFooCJx+7Q1vfm# z)PUxrvtmW*t!-~C!-8t3ZKkg*nO{LInBu1gke63+>2%WqJj%7j_djwUP^y~ag6?xIGh{^^Q z0e@{cUGoMjeBgfgN7V+qK>nssBn8B~%8jwb_3*~tG?eBb%7b4qj-+IQ<{Aj=1x@L& zuLVER%`+nAwW9R7Fk;?;A{I@PDQg6n2EOPqO8L9YIe|m0mjt9bV56|+k6Dn)q#wiC z^j^XxlWK(ta@v65WS0^unL=;n1J$eR0NMvx`= z8{gYM2DYRwRcadKwqCPmA+JmMbVvRxC6X4FH1yV;EH8U$3NC8aOjWK4hlqc|VzWre z{pOozBtK!mR-Tbe@k28o;b^X93VnK2y4L@>78m_?hCAMi=|y^H7$4nun}HiHf&S?p#|Wn1|;JjHRW+kSw4 zpb(j9@yF5>>x6FoQxptpAAyG!l+PLF+C2OWPze+YC9}1Jba@T$7wT(Qtqzs*~2*1MDzS6BeAGFKT=UAXUlRJjMrj= zAdUi5MG90p4KdK@mw}Lx{#BkDX&EVrTnMt{m=R@^vCf3s#r=7czk1Kt- zFVL$HtMDL{jmUm`n92vYo~(dA2-D7n$%Htr%ZmZSt19n4$Ia#6YYMlJq*Sva~`xDI-y zRynXn-G*yOz1m4NNFDE_&Lnk`le&P^h?6Q&VhZcH=L~LHNd;M@tW5v=x8FDV!%h0F z`R1MI=^d4Zgsnp~f`tHL<=6+A`EVnmA>?z1q_N_mj__#-Tq59ujo-QaR@#T&Il-Mi)nYQVI_f3@SX$}%d+HdpB70I#dL`1Gy-9e58-I2oE6_$&+Qg*?MKYNj&Y z+Um(MVyzr_(0R97H6%N|+3qQNTaJzk3Gd_6yp*DPpm|XU9{kWVWMX6j;3$J15b)E* zr#@IK<=T4vKd>m$hq*d~uJ)i`_bd{AQS$D;3QIXxyo1jw)|A7#XMV`{aKQjKmb=EYNg+?0rS(cKUG46K}6v)JePlZdAh@e zhs|)=VmJKw(?pW6IS7$&pZ%8;qQQj|sR8rbHZL27O6P=v`FNSr)^AR4Hs|*n-T?Y~ z$`)50r|zKe9wTsF;~&(BIWG*UI>WVFfR_(IiU8>m;Cxhzdl<~8Mjc!K=NWs9C0CO5)ru+5Q9GF6Pl)2!8S+tA{YQ?s z6dn47f$?+^c`19V7OgBI1MiWEfxm^(ZQyvHWmK6{M@8#y73fINYOWDv-CFqsL#(H7 zVDUL?OY&OH@=Z8B*DL(Qe$VC3{^!(C{8Ve~=r?Lz7Ml98uI6lpbu$;g`xPwl|%A$HM8k1tBcqN^}iQDS?qFaEjK|L6K$lM`iU%H}Z#VM2-9ZsFe34QDt7Narlu9T+9;^$C3*u_P#D;IhMk z%hDkfOT~%L#}WS?E&h&7aU$?}y!Sk9g|JZ3iYp-D)n`774S|b!NkDsSQ#j2up|3Nh)U~wV3;=Ez3(n+H+fjuAY=D@M6Ad$=>=k z(rw@$H3VAIwdNTiErhkBw9M)_vJayKIHesjK;m3sJktppEtou-cm-rGAq@&T=7m-h21a@4VUXG8UB8LCHl&j-i zFJ&~`EBRx0Qmj0EBb?g{xR*I_f0;A^RuAI|19?lmF5@{aH=aYvn~#+&9@X+WT`g-G zp}o?XC|i>lqd2$7{N3s8sp3hAF>6Au!%hYD&xaF@1h`K(1SvRgR0w}JS4p$!K%;8A zJ%xsbn6ijP7 zpl&{NxIwh!dNxBVX(-blm$qt&SGZ4%_&=^UoW?J$(Bq#I^yO)il~sj)#5V7kN#nO zLUF1z*CCqhhK+Q7d}Ds&%iLUnRVSy=tj#CVu6WIH9i&+54b224X zQ9~7r<^0$M%%v(p79xvoAG;HQl>IS;TegJgD{41HgwDwoAsa%$H${qw@TW%j@%!x; z;Zn<)k1F}q*4R_{@j@)Zke>iO6L0?@-h1WZfbj(E_+n4DXe+Py=O$tD?1UQ+n)64N zeF{D(_A2xX4Ct&}HCydEr<&NaYgemI%fYTraA)sk9_Fw5J0-rr^(K+dJb1HZ_T^UYKfv6cXFKaOuthZ8eu>~XYNI6gIOgpf5A zZwq)+COWTRY2aL(t%+#>-uB!HYnS@4Y{f~t%%$WMKQl_mC}X|Do+5~xuq)o9vT*kX zOsU|eUoxZy6>#`#BFh4y?6LQP{aC#T1Ep}x|f;mhbx+?N4Nwl5aCA>j=3);b2XUE1&CN|U^bWCVRO2|*3@d@P|n*0GV^NU z^Ry#m(#=UV_Vi5>!z1Aj->5R)d#2X< zhPtVV`s2M*wASZ&%8kBiF{5Adku&EhfP53 zms=q#ps7cHs3NUhDk}%D2Tufa(Ma3}r$UkhA9n- zh18Bs!V11sCby7xJ@!A}^00x5H@S=QQVS6cog@1IWNEJb^}`sG7N>5JL?@-ESEYoB zp6HH^a4h0(8ZP1Fw%Q|Z5y5h-==uDW#i@%%!?{SED}3>CnT5f%-1(Gi!L8|C6k6oa zkm-$RIsza+(jF*a-N=#1l*r(KK7#i#I-;8-YzYziNNmDeyXLQYYFlZZT(5E+9;b^fdKw2!|BBSi59p#jcT>xphEnRj}tjS---9GwX6Vatdajx-#d3zh!WEc`bV z{AWh|o1$N3k4G==_cd&ErDXM5W?#!8N`D-#p~GO2<20Ajzp>m4{fkdB`=2tC@g?Q? zON-S)s_d$@5O!Se4HLn@zolUme!!5}h0T(9uP=IGytgEJZoGG3^a^2JUmEZAW6#l> z7AE$v*ft%mq5=zv04~ZlRCY;%tZ-ro_9X~B$R%W(m2J;$nf4TXu|1HLoegJ;gjV7> z=Esi?jQZk7OU0l>8gO)2?2RvNz?ar1U4|-NTC~P(_a$e0>ilNbOO_v+ zp)VN)sFFzH^6hsMRrolDs-Pfh{h&$wIg$Nz6jd&cAD`TWaHUKVYVu>mKw{CpW|z!V z(UHc$S3#h4eDc!2&+1COeNqDzy}vt>2oS2cv*E(# znrQ6Y=EnT`*zo4Yf*A3tn`>^D2(0aeN^BT53+QhoVYuNUv24z5u9+VjL56P-OSZA# zZv0<1*EGaR_2#j+BO{Nu7dbg{b&7v6-03UkCT+~e@dZfL0_4ge>i~Fh#7Z*#TKtdn z18Pj*+`_*SLo~Ml zI}7aJ2{H<}kPHns25Ks!Q;?R4BJd#H|Cc5mr$^z$n2D)Ek)O=XK&u7zFR`$Pn>ybS zAS{UZd!vKWT`*JOJNvuqSEoGjt?3kML23`O)!-k<&@T*QAOh0?s4jvL{nm_sHHSWx zF;D?~awFi&jezR@#%%Y0S<%exzZ(Ic8i9xTO8M>y;;&1c{0v7x5$u^E@Y&DHfv6xR zLoii_U{e1fxY`+l2c03nn-s&J+;^*j^FJ{e}rMt=&U%eX>jVXYzqBOaG$RCMs+LS!K;YQh{mmrOl8i zP9^<=e8S-iOj+Cq?+@XOmJhV}Q_@~@M1_$!+pZE?p_K$@PY^Qg*sZba0bNCk66N5FSIay7_4F;&XYM?$rHz z>fcKZZ9Y~RBO*%&Iwr?1juq)5dLKfD`iBf_1X>1)^+*UtT=XzqC#9^qf$C;(p;-O@ z`OnEB|FfB$`>Z?+D3I0XWGaB0LI*oM~cYpM}aZRzA@l<~7Mks2yN{U)m3m``_qhNDIX1`S1hbRWWYAKk{3W!wO*TL17 zl!3XFGEx)~PLZlz!u@$*5m<*3OHxJK8(5_F2#?QMY`MDBvr1PxHD5sVDXTAge#4X9 zohiMuVPg2@EJJSoDwsHW*A68!fa1| zec)du+#~NpBEk)%x+5Af(*Gs;f=vV1v0f+L1N?g*B<9Fc|2%_DcU$qO{dqV28$3CQO zgER7yjyUdd=@D*t%@&5p=ySOppjYeJ+QMK~~jZm!^zE1jJ1pLi>6|{b;d_Shn zw;odo!n@eX;^tB0yF9|>6kDyJb$}qVD~0M1+oF|~+%zwn#dL_SmCz;5A>8_Hm2Ht% z+0+v&LAF!Gx|ksG_7$Bc@aHMCvnbw$ttVIWvsT52sv?>c%Bdp0^si@@^X5Z4qPFRo zZ{A-KH0N<1*<^<8%CRg`;UDs-ZbzA~wDUcI*=OP{p@-YQq76VT4tEDS%b?sc$aYwf(vBn4EFxqRAB~(SBK-1{ux%dt(3DyrkgH*lmJI!u7e?mADV%y3W4yVL(EMt5aIf?|N({ z8p`AC=!1EYo8ZJQy%Xs(R{3q|<*&AJd{Rd2EIa|ULeh@=D&(%V4ljoA7oA0_%mY~I z|7)2DW)QBrc7<_8+19@NPmrnw%aPNn56k9e_StzS;Rz8WhG`}ZtH zK)Yr#gh!`X_}ft5>ciyELDqya|1rPPA}6~H(iimcKJL@Ud**vteY_*65-rBJ#tL+Y zu>FddwU37^J3@#ibJ|npedVEqQEHg?`2@{VJiQql!s4dm5&UL6&Gj7Di(Koux)suH zpI0XM#y(NM^I4%4vUvBZJwTKp@e6}0(&O`2iH6utJ@#Fz_51>;xjcFryrie?+hDht1I+uunY%oKm6m|&tD;^@ck2Xg{dv6UX^w&0 zpNe_0C1X!?yB-sKj?d#w&*n?&-foxp0N|aI`kYFAz1ubPynd;_Q>kxsyMD#G%6bu=8u|3VDu2-q=ce~E&Uv8I5O?A6g_b<0wr6R=~*1z1XY`oYb z(&kUQUBmm{gyDAij4FJ#9CtxAbMWr4AHuYn@eT_^g_4CEaP!)qaFe^o66Q?u3`5*`H$3#=9%<6!Ew_Ug)ar2Ws|l%O}bLI;Q; zd#gPnY|CA56n&{0S#Gm(Bhp^bA(8L~tv`p;o3Bfh5mK#V@eD^^fntILU+p-`CUxWP zWk^rR-zCEKb%*HP79PS{XbXFtJkhgwY(QUYyeH+3BqsNgw&<0V3)lQ2WGvLJ@oteR zpHx2$_9%XYtWw%gs!Sx2Wh0>%1Xo;-Ay1Cpg$9Xl{we|;;EI%p9(&-y`J;TDwEws@p_YU{uf?kP)J?RZwpd*iqg^i+CaDb^p|$e^Plv zC7QWDoSaXzg6(c=2pCYiw(gUWxlkavGO`kG#mwkmjP!GKd&^O=4?$RthnQd2BR@_HHZkzwXkU)JFUi3tN2d?OAq;#LsV^w{0PPH; z8WC%=gmhwD1`zE8H=`7t*R{CU-!VKp3v%l98-FE+#RL52=v?8d+!EAYIm<{~UXEl> zyx}FTF5`}Q(btWkDCFM+Mk?5SEa5)QnAZc|a4DL2m*T+bfX5inVYmp#?uoy>T=#E{ zp4Y^zj90U=hgn&=$)R5Qk5|OMwZRwCUKvbP%{6&V2o4QkYda+b{kvm3cwc{j7fUxl zu;(?sqOGYbz;nF9!}^ue@s4LeXICa~(CWZT{qok$Mxw63(89X}R=2e;YZ15&3Uq2y zsVMq5M}ipHq+WCAImYKC{s-!PNIQp38<>Y)NaB*0ZW;)Bv7cSUc!cM%+_xI8jghJz zMaMhw=si`t1)plid7$7^8m^zh@h&&Q{?htwsnf^D$9+F9RyMxdEv|d=CYa+^W!9w9 zJb-$Tb5}xb=xZ zg{vHGr6Pb#6%}`q$H>+E_V{dcsx_f`J_lDL%1h(G7w74pV?n0t)Co^93EON z>~Yc0A~3s^Vqq>BoVY6=EF={xO5Ej&|6{0iT>0OVBehuX7QsT=f>fBqqJ;g;Mm=Y2 zb*yk~qZ`J4yj>jmO1gi4y`6IN|6E}_%ne(A5|?IAvA7r}O!-JNtIbBYxxf=nOofU1 zC-t3u2|BHOfkF?g?pkYuwbz~uQB0CL)Lj`J4@N6zs>;Hgsk-a1p`B%w``>?k9TjLE z@9^30QzQ{Ofx&z2H{@Pas`@LVE~24M5l}mowO}6NCra{$QEGweOO6@nd;vccG-Y5U z;igS`IZor-dvlA4A`tZDqc>{mvU&K+mbXDDK86M%ZU^1pZSO^1EG75PEZ;lu@#Ogv z))xdk5_hGT!Q^#w@Xys{mF~BHK+z1?nfRZ zXpW9cD%8SuEi$C{0g)ym)G1cT4Rhp)zu${vYkBl3=VO8>x8(~xT=Y;*zUd=ne*C@yq~1uuPz5=z60XW~;t#Tha=MB3 z*&u^Vy`aDwRY5RV#RvaNdBBanIL{O(tp>l=Z?@4ZQDP796tv!x=;JlqDpj06REV#~ zp!L!d{NRnmdgQ0v*za`+eVCZ(i@)0*6@*Dg=K)*|)cS>dyQcjFRA{^ZuT7_~efz#4 zzdrI0@nyNCBRSHw+l4kht$}d2Udv*P_8sU}OB@4f7ZHlljLM%+z-w{Ro1ZTU+V@*4 z#M#;}py$%sW33gMd?^|#-)pV#azFa8^`_!4vD4tK1ne;vP^7y1p(^|)pd z6J_l(Z%Dq%dhE)t2%_nHJp#Ln`0@PMV4`xZreGy(wO`|a$bK=bqVN7XB!=1a&U5?j z&!F}YJZSikPG=>sI67@mtM+|EvEJy4A1}}zo+_IZ0$;{h;;qZDi`k>hg!s0V`4N*x zHE*gje=VmHrqdeHd1mPpAJ9}*Q&yV8$eo*to_(uC@xD|sv%tny2w*U9QNBmlv*CW{PU|lReyIc3j zK2)`SPEFy2A<~n|+RL0rIaeF&oM7p$i*o=8O039bXLpM-PRvZQsU z6zQ}7j>wep9DtnD6YomL_N83P9+4vZjEQA<w!v&H7UHDwMrwsn=F2yPMlJtx;yAfbh z@?Zwo1nD=GV?4vDt+l-+14^?NiY(}EAc=LcFsSNe&`R3&SY2w&WRU3kTxsXbNP_4m zuD?mU32#sS9RE$Xu4ABN5lY;kF%R1JzlJ+9Ymn93k@nj6@BpufBfA{;=`xb&U%rjS z2zuN0qj*iGzgKWn#5Z~3$6ZT*8)SRc$k!61VvKyN)G=tK&;AZ_YzAWhTpd{w=&7hd znJJ?_SI!7JLZ?K9u}-#WK=x77cJ@)6SQ8xfY5`$y#AMVs>&9j_w6?&+nflH6J)B=f17UZ-R@w6R8+^3Xm>cwyD>uT_-nbt}JBy#GYbbM0{{NB26_S=w%D&zVZYP5G*R{$Z-_7VzZ}|5)75{q ze-&245ogR3>K>0CVVQ<%|5^2?i$d#b_Cx@`!fRq9%_{+!YIv}Nb;aK;He53po~?U( zJ*ZlCWI%9cAJ0*I>Fll+IIrNTlEvj@7sf{$>L8Q*i*it%xmc5_= z#2kow_D2S_>UQsv{&oj&K|o(F$sm%U~{>$@&X1cO!xuD@`le?w22}33G26F1ETpXqZGhS z6zvp(#sXx)CYKdL@d?n&aOoFFXBG-nX$<;b(-OV39BNKm`4Kn%OSQ!NGBaSXVL6?M z$3Ab9HDXI7F$RN`vVb*?pHW+owSL2Ye9@>{t3$}Y9rkv#T17wrX81o+&RY#$Yp=Yx zi5Gate5?Kt5kWk`#H8Y|b)84H4@6sZL=JunOCfPXz9*khbkK3_>DY(eAxdJkgw$fu zt>UUpX;AiM6E$xLR}rvJ%f-mD62q$y6u5+rAF*9>V1yMEm2%eJc6;8-9*i=b&*1-Q zgWXlUk5pmGqM`LJK#)U9^nSCTTOf`o2i@9_J+JnISB@zKnK2a*aH0r|t;$~UD3+J^ zsNLxB{}K(1$D3e$OD}iilU5fP4U1Lu{WxtrIs(Zh$<&#(0-@P{>g5$O^|rjW-fTO( ze4T~jhtgqE(n=0_X{lf(N~dFE>b>0h&Ft4Ky`_*6`FJinhUEa2F6#?KalhRHvMUp{ zoS{-UnS2Lm+-Vnsn+26k*ZiRMnhDuH)f0cOI1IoGXlr&jag8FbSM|NU>zc{U9=y8G z9w6V^a%A`U9ii5OXu*I^eRr?EGCx*=n!l58_pz7<29?SvJ9T@8tw^78G;tr!g4vfx z;YVeG@Vs{Py*5K|4}lw17O1su+U&ugc=Om&ZG36`sHgrc_?u$u(3%$;ija{i;~l-c zXh^cLN?-}D6$ngN;x!Vcwcz~Dbt3%Rd+f-b^E)#*EoX^gbp-wSiiJoF4%7;Ted~e? zR;=1A(mitb>^&x#a^syr0v+WRwF4Pso8yx0*K%xKxU67lRS<`!AeU?R*8T_57y@pJ z7k*d9{Xc&yvZ1M3$>MZ9={jN<-d`IZ;AGPZ%SI8^fdTIziEVHu&Q-pg0i)PL5 zPvCslw@mqkSe}xtZ$4GdXJYe>TXc-T;eT8}?5*gTpq$7`6D!KVT2e!~@gS7I{ywon zY#36mFsNRQk(lXbbKkfM=SNgwPon~BN||dT59Wjsc1WHFWFE`yE7WUu=Gkjs$g@do zL(bB~ExvfWFMgoioNy@KosRuFy$Llx?ScOkN^7Ku5Tk=Kb-$#V#DI6dByF-PuS-6Uxnr+Dd1SLDFXG=?%_s#ZMGy4=5KJoEzY7cgyZU z7O3`{aA`!HC$nDq&PRc#qubMh!DJexn(Ew4xi8amC}vE+wxYy%ad!V|=Zo8iwed2-Os z!A~-vSgDoiGX#G%YH`9Lh&STJgZdg+`Uo}0VRM4ZoCn`y&kF>vBpUGNyFWx(l<}?3 ztS=0zLam2m!=bKYm>{ip5o1wXKcyhBCO=fwgXv5PC*$iU6yRA}TR#B4AE}|s4$~Jm z=h$tltkR&rV`){C<=4r=Psjd|nu?Hw0b4SFa0*Q~1n3DFWH7*L@OZQ;22Y0N68me=ERdWMrbQgW6r{U_6>h{o zgciD*U6na1q=Sy#WQ}f)tB@gdR9#uUnZ?UE=HM5Hny|@b`9ZTeVH6^X>scsgLC`Xe zzj2_CEfS@VMI=-QI2!?sk=1u(UuOJZ(p2402EMWMQdFlsx@)t4|1!c*%K8J?A4m-& z(p1dj|Gq${hN#-Z62C#>{Q5hZN;{5@jK6&%p%-+KDjvLbe`nJ`y`y&| z2aQ#7;w zl&9rbJHJgATb=QD2t<6X$U4e7F&avgL6WO8HRL5E5qX?6<2!gNN{knnEz0I~rcnO>5&=kZJ8pPS>H+~BE+&J4@)2?v znQl`Dmo5CMEL<4PCw)wp12?J@Rqz-#wT;bQB+**YOcCpPgyRez^NWKg;Bp%OT&rBr33*23uW0i8sblb6oIq>K}d(^^eNU0 zK3X8n4VNhp`XPtE6cMQqxl!VA&#hqoxV3hU<~m@v*ai)YIF0c08{-;`!^Ns(k0 z9&M#`&u34UJbVl8G^0#cSdfkSq)IEn#&ej0_DsYCyDk)AnlTEfINxn@tY)Q z>vz2*7J~M<-+{9-cGBH~ItO$uGU;wZyoFG)>@SdMMptKGo@btDu)6=fb03xTKX5-9 z4e!}i{kP{JSfgeP#um;exC|^JwC2j$poB;xhpG+;h#W6>w zZ$;*W-Ygn(La+)%_I(I>PNgpgPqXy0Lb><*AC)!AbeAa0mhFndv+BsM|5__A;_uK}|4cU2>h!UJ>SzjO zIk-kjKC8kI-rxx%_8n^()ng}DM?ccX8r4k$xm`LqA~x@xsr@`G8!Y&0+!zrMtQsBH z81VY%lFOt308 zh7BQ`i6g&IqFch^_^W*XsbLMr8JgDmE-!=DJ$yf(@9(M(R?QoO>u>q`Z_(F7);2U@ zggof6-)G-aTC*yR4JO4#Uodb4l&OO-;W>SI=e5%I2cL^rN1P`12DRW(>)vW>&KSMw zo@%{n_897Ng9rQt%^T!%$R2d)?E9$;sP`hc?Zc|ZCJbW&s5-P#DYB32%3p{t4y0jk5=?b7lI2n;`>Pk-_PJb@H6&+AbOQ*8!C-+!S`5N zLKm|&>jeD3&=hV*e8Ym=wD#fa3Vt9J2OG#p85-?#kb@&-s1_;1X>xCgV%S!@=fFtp1&2G2M+w?!6gGDh9PT)-wTWHd;XK@JDjRFdYt0-Y^7?7D34^e-edCGq3c-wU z$PlW!86g)ZpN!M5(RV6WYuNF@7YlImqLbWyQn(eV?Af{&3HnJ;3g0PU~#4F*x z+oK5aq^EbPf_ADXG0(A3`I2g7-OiM{6$?H#Dr`-|NE7}DA%&N*4sY<-pOp!|y^X#> zI>Fb1>9*b8hXXy`IwOozAlVK$l~H1#+p=^Mk8?%L*GxBALq1u1X#bYwMawMD;SO)C zFuvKVtQZ2a9RAjS!$jC~K2bd{SB}vfvy}zP@7Y1|5H9FdSO(yzt^dXYxH#VcKU+=e z=)?F|EXU_jZ9!JeQk?5CzJbK_fPu;zG7Vj0!~q7iJEQ=wzt6n`Wp)%4##c>Krh%NA-Z zGel+1>IhYJg_+BU>y04zZN!9NX`m) z4JYQ5EBf59rq~hdmP6qx^gBY{+N!sLK+2AzMd6O)MfzcPQGTq*3Bozi8ubYgCB|Ek zPux|JPIs_sRHwC@>8lp7e4Fy3Mm4PW@Vu?TmGjsbBeqzjJvEf1MVf7hNoJ1lfHJrCk0e)9} z0EapisgS+_|CQPUH42LVzT$c5oj_?>psdK&inXMOEeYBTlR#DP_1S+Z6sWt?Zbd#- zo45{L^4ltWwTX$9a0SW*G}~WcwaW&XNlRCgpYw4TUoOagIg>99zHGGf_)^xgvO3C0 zjubuN*m%p*MJ!o=XHEyAU8UTNX)$q3E{#~PcvSboQQMHxI31&qpw>(ih$j$ZB! z``^^!V)&fnUt5z$5HAu6pfeDE8^S%<0WBEzzgGVqi@Wtz0jba$f(4?Jy|~y&K$WMe zWrHNZ+SOWTf#_&JC55njl% zMA=7%f9ImJF?j4X64&?Y8RTu*0I~b9wiy1`7rz@ZOT?EzN1)cfqaKaBPmM%Fxp)fg z_(xGV4TC6NmR%&aeV}$3{T7}1c)$|grZ38#pWiih)q`oL!JMfuV z1SO4Tbb`mAbsdY@IsXl7NOuryaCuR>9apu7fUw_8_lW#vL^o`{>yg%{v9aKraP?AH zk2tDoj~(>C8og3Pc4gf-h=+F)E3_umqzs7PYP`zuq}QabvaYWQR`pcfSi@coR<+xM ze|#dHI+yaK>|oUtR_W#xYSklYj(U3CUiK93KPJ?~uXFp%iNM880r5nswTYUTC`ib_ z%ESajdqng=4DA0eym{2@2nFjlzU4D`A{@}SH(Up+p<(L-tQ7_Q5jyQFJ zEG&m|krieAvOo@}p!NF#Db2bb97&w@K@#z3{<5N(pCB{6N**1H3<#9g18OZOiH?Z+ z0d;k<4Ge)H0fBrqhEwU#$%D}fd;DUeATEzkB;R!Sb+p6O!yKlYR;!(+mL5{74YX7F? zgRFajV!c6J7*rifY1UmleXiPeNUu5)tooP!NA!B~;B*eOUc-*WZj4LYZNX#3%%z!{ z`u6KoP}!Yro0k`YzoyRc?^vo;?GQDZc~7d=r&xop+S7S(ZNw9Wg9{&z^#~mE(Nbx9 z+m$RA7Kjv_Gna9uF1>|0b?h4i|x21AhmKtkK z>8;Wjh7x+a;74qni$vu__xCJ4Lzqji+BcGDO)YcvxTbnI3IE+mUX5Ib(5o0KOFd*H#&&qmjcYG7ToD68%DN(_+)d{ zZBHz`5O@uD(%kLXiahv37)^kwtad{+R7 z);dAm?@$HG7U#1Hb1{5+v}ZV|5eM^A$yK9^8k$bDEai$eXcg{2dlGkYI5cY!o zW>N%!sJ_S{FCqZ8n$rO3vJ}H)Zc&3I)}mUgL_~G&W~;lSq=mSPSTo8a(f~1J_=bLX zyw@X2vJNEU6a$YC#fV?4-JlSP@ou`UTVF5B48rcCE)7wlt6=x>svh0-b&uWg14hVJ zm0O#3_g3w5r3A}W5c6ISoo;?vfGL9_qUiYN0Zm1(iGS`}TDSXi*FSLN^7r=Sw|OT+ zp|$O%@|y2%=Q(y}e5%)D-pk5iGAIcwV(y&Tw{+Efcc&`w=X?s6t%9EAC7E zFjfL^2~#{`Khex zpj^I|!Engw%rIm(Gr!nNSYeRsQVdFT|K_EGt;uef{sK6P*2?glVz5GdY9D7jWZ>KF z#C#1_ZHC|79<1VynA7b)5XO1O=q<3#M|Z;5?|{?ZL3(bNXXy94Madm`g(Bi3P)4Hg zd6`HetR%8+AxF-mc7Wg%5N^RCh}OR5D~<$OMA26Aj5~HlyvJ>h_xeXR zl%cBPwYG{TI94mW3GUfdX^4aBwdNeo<>g*h%d%@Ci8-G1)>X9@0@Ds$9X5_s@WcSW z0j7*CU8=F+x}hK3c-OJ>m%K+YBKJ1L0C}^3M_}X^6^T#jpE@YBN(L$t(-LMJir^C% zFECcvSQ*`DL7MLsoyvH3rAS)dJGBbM837h&6wfkqC_!m-51aBVK&p5Cs<`iXcfiYe z28%IJDdgaXxv`flnf7J*o1&2}?33#&g-!C--jmrRmF8j}jFD=4lkBNw=kI|B^UBmho;{HJZNFss3eEUa ze*HUQQwU`%NLM}C&^U6=4_KIJZB*rnytDYoK7N*ZWs*BRx_?Xk+era_ddp@ZO(X2u zps6JS}Ad+ivNv-LBnsw{~p_;;ts3B!E1x3O-b{cD-@b zVq4`wWd85ZxpyWB+Sfk3{=8mf&OP_s^L)PN`}`dR_Xv4m466$`wxBc2q0G--!xj!8 z#J=Xn-vY~Mnzlmj1^id`{EtEOu5alqzOsi^n; z4)?7+K8M3Ee?XJ3@}>}tMbfhi({gQY8rg+#GJ1K zotD({IB}4_$7%?YJgYX7PmkAUZ<)`WOQ$Uf#?PYk>4*y`axq2F==yEjA@w$ca|k9# zqzF)LA?r}%5kI)<^g)gJ(Kt(d*6RU0UZjH^0zfm<(|b_moXaqQ#a9Rx&nVX+ZxVyH zZ^n2UlX_bG+?aEk;SU&9nDT8Tr43;8#v=pC*yn|jyr+QrN4xpg)4`J{YW-=da1LW*#9Ymb!jF9?@c{_T6FU%~)z#KhDvbQ|&!daOw)1 zazir;dp2H9}M;!aR_?xte66C?UG=E&P1wD znEptPaqm~zEKLxC!uJPR2ER7KY2mB~P5wQGLnao&)ju>W1Wg0`2mxr0{PXs&e|}zw z_GvZ?HdgURYJEV%qwe2r_W%g4D|-^B!#ZcD%LgAXb>W(0;Gb3hY1sLM0zpDBQ1Q%h zvqBQ~Pm#m>^X$$ei{L&l$DVc7B5od7n;fu0XH#{d9q2)dFEb4uu z6OYEmnaZrLV{|r}oCaEch?LaIJ>Qtkbhmhe?9@=u>uxD()m^)dN1h5=wM`)F;WbBb z{kAp!Tr9b?q#(ZQyBJb@7v?RzTkA>i#l(Nu?>Cee#c6{`)(%C?w^;KP9HkA9*ky{5#G3Ti6(!+PTgv6jLGXMHRB;=D)Lt zr8Ok?AR4d2Af|(>n1?EL1;V0#0$YC0*<3MbAkL?FZgQ9-fFD3SHowV<&W~kb zIOgFaWUOJVADdP`KVEKZ42G;AvxNt$^xufui8;I7*C7t&osgKc0KD|Q%6Cq4|LX6J zYWv{IOW@8ysw<&-D#o=}zK((N@1CTrLI3KYXmu>H8S9}+4rTpS`9rx*jo4V1x&{w? zS3Mp5nB*}7jqFT2`C$}9XI3t{H4s4lmR?!Ac00h$U*3^vgnbXL&$S$;d2Lg8It2B770cNRhaN`Ms zz?@u)4qt{CPhA>L%`R~le)sP~NUS@f5rMRK;btA)FD0`XW%@01W>o06B6+N6MTs+Gf*vMFS~uT5 z{DQUq+PkD_CI*K)jkda8jF0PBaaRH7#raML8P3eg!v|6`;f@;gqV6y>Cln=uCZRsQ zFjME7^K9ZV&h>PH@mv~37X$V$+Ds9gEkt2sHl?ROO`Qb|PSY8|Na%od&nMXd!0bhk zA@`0Wty2v%{O}8CaZk*ITx+%qwT)wL=V<0Lc6wD6OUmB)VjJC?|sXb72s_w z`A%?4!!jxko`G&@a!W9ut)*w{&p#NI~?$Y|x3hPw)In0e1Xk%dOg)75?Z zj!3y44+813Z$(41YTCy1HPqeA>qiO)*6^bp*V62~CKa1`p$}KKs-+0@e>k*j#pfHG ztIi0{PES1p6}WI{R{3(2CAZnxXPcepGMCy=O}p&s;_7YIFMFG-pU3C?Q9Dqa?_y?L zqMX_aDVNWqSaaw<+rJ|b=RD#5Eln3Ji(br~({8S|`MTP4TPk8>eovf?@4=m`aqNZB z^smIciKgz*YM>Ad3@2qG24B-Mii-UP+u1P1|7b4bg#r zCC7O{U`S%8&?~m}gI;bk8+DesJl;KyrB6q*(3XMi6Z<7)pH-59#m;`%eE5JpaeH-d zsG)?fHgQW!uN`^Xc6Soy^j$rP5E^3eRX70K-Ck}(vZ|bhI6e@5JYKtM)*|DbiKAOd z5jA&;8w0-K59rKC3NxQ}e}TpqAN?sa+P#A>qRED6d30KPl&G!XG^tw`Ufh#fhT_-B z_;2nAoHYMK_!-=MihrAQr$$r1TFdacG2t;{UWOYl!YQQgxJ$+dcZ8jH@V(Gs3e@3< z@s6dfpGURsppqs*dQL!G9NTPPW_e>N^h7UgQKKK+HuO>QeR;~3wkB_~|F;wK$B`d7G53}a zJu!PQtTrbGFK+j2$PD)X5a7aeZLD=yZc@X zSMRs?9jx9Ru7+=nmAAV6;G_Duj@s4}#mR#K`2aAxSlEKXE_SWqsDamCr_WBE6qsI^ zxF8A|&_PYHB`4)XAso;4C;WD9p+2|cvBeoGtZY*<}CB@s&D=|*Q)21&~mt%wWhg}Tyx?~tr`v5{Tr{iX{}MMg@=DpZrX!AMjLsapPdhwwV_xbsuP4O|fM+V;UpRN23T36AMSjwkx<&Q2pB+fRmKAL;n zp8`urJmUVqOKfl-B;kxfwbf}{6n3tTgGOo?SkT$~ju8|rQpKOSm7=t-9m=1uy6Y>g z?wNQ+pIOqH-P#)HZ$*E#74`;yLcQiAo|<~quBj(=mU}6U;gdy|RT*$2QpKOSm6=DU z-55?(^fl(@q4TK@x^Uz5H{c5to*ho=VA;&AG#XQIg|go;3fv53$6~+2(C`M@5UMD3T}-ns$^x2WkVEso%LkjG&GguX`wMp zH>__-&r8_AQlXKHghS5PxYdr0Y0W-=e?~5tJE_@eE=fQPKWpapIyQ*?eq?-!CO84D z+q}VTgyw7}94B4D-NfxZdgXo=RXg*xibT_b8^c7+tBN6k=zWzw^;+E}cDf-;kHIyX zYg!}Kuh2K9@P=Au_NbMX0O>wF?ma@0KcRfJA?CakO-1_A!fD3wW!JMz-hE*QH)$3( z)(Vbt4+1FEeOO7xx&QF+Z@o_Pj?T7~R~I&HG<`tm*6Nof{CDd9Kg=h0{39jh-%QJywek(O-?Jaf73N9X$eX7S=v!VD~j(=@+ z-?zixT0*te+6(raT_LJgOVA@%t_lr-BE@(W%_H`z`_Zc3C_Yw=UFE@p?XhtQ+8{rrLt*3uk4kY3hTfLce)=KWIAzH zdM z9)20JH$3rW=Vg210ok})-S~~)14?N>(ZNu|p%<-hnRqJFSP0;dXXbc`hOyuchxS{m zjcS6^4}Ubi60L>!nB+hpeiO=0)@rFwc+NVe&8$kCqs@prQ%MWEs(9t}Rd2CF^(EFl zXQ|+{FH|KyX<%D@WkSU&tuCBc4=MI1x+4|Q`042x*}#_EB^e3KED2BCkpXsWN6X~S z5%e7ayu@I=+z6pn>og3jc{^E=5ZV!2V%C$-!-yf0+21{^I`@4bZPa5N>tDhyeR5aw z)sfsKI1!9i?}-JjoQHkzskUS4K{xf6n<3=`3i`NoOeFMos{QT};jW^@)%kBvsP%og zirl)?jyR?WE#Lju5oeWY5S#{DUENT#gAFl@D^3w0<#mr~C0uf`mKYM^HsQ!dG>4E* z0ukby;C9>DgUSG)5IeZVXwJ%VO{xGBd+do=UiT!vWIegfeyoE|no;3Rhn^jwp`|nO zJ==VDh~cSc_=DW*&qU8)x9sFby)0lByuNv5H4EXA(L?wHo~2_xgZn@16zTpy!@#d_ zs9-s?y67GM{^!hc08jP5h%T_h3>C^Rmjn*HYy}L56`Bk{8s4S(BwAN@3S^Ff;by7sX-n zxn1M~SwKKx1_=Qb=5~;+Y#3iFJ;v8V`Ygxz(h|48a;Y2Sbq#?}KL4!_LSF9qQX<9C zS%Cfj5GftHYs`5w6g+e{gxzf z@M1iF*mt(f-lmD3S;EIsZr z1K{EWIfQ=K6o?(=&BNWF^y=GWXnw<3(I=wXBOX|+bsWuv#{YRKSKbUS#(1}DfQ7Q% znX^zht<$iGpDJ$XO7}8uSSZWS32PnR*njusMB0H2-I8jDMPoYY^J#`Jn)U|*BIy&F zu;(6^GR)Ck6v1(<^Io|6Sfu)p3E&E9VSVcxf^V`|2)%9HbF&`4KdFPZ!bFk3_e!1( zTM*uNIP~=0XFJczXIu4dAeh_P25Wds;K;rY@wb8ACiDqzC`V=c$(Yy^4rNvZ_kEDD zFlXY$%lkgCv(H2({vPmhPAKCEi@>X>s2WTP`75;rj%1(CSRE^1b&iTA8*7hmX@mm_ zZuVf0n6+ygmtlVId{f;^Ev($qcvpeKM_0d$bZ^0S*qUpjp(|?I&IcpDnIeyX`NLJz zM9&lK$}tq74G?0Z2yLW%&m+)VF~NP1=EK%6SHSh_v5m153Ky_3Ph=`#q%R)&7S7$_ zSNyj&p<+OdQBg+UL_Qqk^RpL?sUv|+ON(u8m%vdIfBlVU>WbQndj@U+r{hNgL>;eZ zqRGeB(pSW#TN7s)R#}cWW-fljlCaanK*I(8G`qHKbf2Ar72pOPd?|0msTQEKc_LXk zm;@d0aUtVMA2h`jLLn0^gIp3cbbU%xzn_(gj(4_cOP|MO?sq8% z!0CKVbc_2MN6twq52g)@H?xGZjoOk_&x&Y(1jQy7l!Bj(BkD41gZz-p}F4eFI zeq$vwQR{9*2NnK7*D7jDE~~rQS}nq>X~6?(iL#B>llMHJ&q;j$0aXjL=u98eLdth+ zq?PXE3k>&rmoKx^xSL!c68dK zI)8DPp4;8*9}KJShODW;F+~`7>I_b6ZVI^`e4D`3qpHzJxDlj?7vW9vUoKdEgeFyDSUC_)D ziITK^jGwa2)CUxV*6N90{20CEjJK4d4n4laDY8=q(LP*nvZ<^H4A+liTqSc>3nFf?b1l_HdiZ-;!7 zc*e)CFoVGNEFRr*s58WtQ9S!q8y$^g%L$W(k-BZ;3M_uH-KpM?l}?(Y`6Cu4F~o*b1)@_sTwP> z_Z$nSzEEZ3tt!x;nlp9JQHc)%n^Lo=YfhQ>)uvQKWuVuYRRK$^VLU3OSO|p)f=D^^ zVGH4K2DYi<)U3(K+fXtO^rB9y!jo{Hax~DJ@;(JT)7w0*numXb{QUnry;Le__VM)6 zY+m8W{p08*&z89fe%eRqr8D_zkX|y?e;mE^NA1ZxS@k+k|2uk#sNmi8E&Gmzb`R1^ zhEUpv4%drIFEy_r`|kcL?{7_Y9^nbGR1qPwQtX03s#JCI@giR!d>GP zDmdm1UO76|v7!4LJvtlWIe;3@0XDa@7o=a@sEIFBZvxK}Q>vjt5}19N;>g53a3rPZ zy7re;Lq{4~Aez(vkB2E+VKc=L6YgFf45wSNPVeI|6cFeKn3N{#$$opoN`2!{tEL%e zjLhmbO*Qf?^-BCs+%m#0D`}0S9FxT>%@+PoG;9ZI-wR^cBag^|LUOX#5aqDh{cxKGFLs!0qeV(tf-5 z4V)=96q8ZfFD0}^JdO09!uYo)3RSrD2&&+)H}OnHaURKy6!>ZRMXcT&>R)1UZLLfP zSC?xp`r9YuJ2LPuQW~KGS;8-ra@iu|+wafDL_Vl<3;qrtH9o2GKB}$@Hm7edBXJAz zq4jqlzUVFM{e4NPYxn*aovnwlzy8eL-<6m=(`WVPh*yNq>EWRmuFxrp0>P#-eMXjy zfHj`TaX-Thij0EN{S1u?OZV$_ftL!sGh{A5#Sl=a9BYT(S~57p<>aF9343JuS=BGw zf!~IHC>*Ell#QALt-(8ppUu#-Tg>1i&VQNl+maNV%1tCLV5QE{QtsR2Q&pa}oJ=+R zJJO4{=jkx{yt4TeP2U+r^z?{n2JKDhs2#<&FW=?uZaYm|>z5FFaYmL2C`DKwCy?ri z^7h;Sw!5=U_Zmu^ow2~KXsCZN1fUttV3EnDNP7vEX{G{ZXvRpE zPeTQ$Fh2O*pYcax?|B<(%G+i`92(N>e)%fFwHm8F4=LO7C8|_zVwRLp^ODh|zENiS ztd-KsQr3^=lsttdpDx|<@X*HAP~o0;?9h8l&P8F;#xC=WJ#Podcv}H*clroJ=+Kb< zUBxGK?sjIdz}_IfB4(~>TpPO z3|5r$CtP0G+WT5bYw7M*yhp{)@VEbV_sxHndmlb;;tW(_`1GK$JPtdrp)7#E3tVS_ z*ECfVqOCF8RK3eIZQ5&s=Vq;6h(ocZg)^-6%Zo6}?I|MqUA(Z64PK=FL}P)Y%#3z1 z=i`kM-Uf>}qTa;SWm^fwA;6{r9B>qARid!;5c**oH1^OR7FXo^dO3ZCy`p`E&XNJ- zp?8*qki%T+?~K#)Wyh+lS15C4IQ07^aQY4}8Ijyp1XFoiA;VNPklbB5;u|%^cnIv; zqq?_514sM{KN$^S=Gn&G)K~pSbOzicg7<>NsL-2<5#i9W_+;;k z@k74=+b$ufyY}$l9$X{^VzZ&Gdpf9!v9>RhTAc5&9UUM;w5pkvCxR=-1ui4 zD?Qk8C{l_)iQPm_gl=H!@gvodT_1B@Du8+FfF& zhwB!IUzq67xn3A0N)L`$3R*C z#v2Cy;W}C1B*u}ecY`l}LuUw2BzT-4?`e-3mCT zTXnS2rsZH;>l;t_S1-w|pL8qcvA?bLF{q!X0ivI@dtV1Szp5;5?R*-C&n8V*xP24Q zG<)0&=*z$u)|QzeW3THf<3ko53c?ON@0L(ER1bld2i_o8NCi%gto3u$Jwl*dQ)8`P zHqx6Wrcd|;#S#EOy7pO<`*MhdOBVmFUji#y@ zsWN?;eOke^*L<5Es4wca-?qBqC)J~Yc0f91m)ss(0L`>H!uR?#`68c^1@e>)SAPgD zb%NqB0$+&)UTIF3t;*@sG2wNA=5#D*t-m4=O)nn75S!C=Y#o+3zyszj+DEC_abroh zYoL>wHKgTKpBsKN3fN3Rm?hBop{mMx7e>KxR=XmRVng`VG2yut+ub@Vv z2~=whY!frRBqew9>Z?yzjM9Wwm+wH#K-_Rw_3L8=Q zXq_i{^tSZSv!?SloPUCW!Xac^#zn9Ds|L>Pem2!up+J@R`jUXH8moFlKdRSgoN`oh zx^`ZD@^2_q&|`|(<;h*3P-xW+Ak-Wyu7q(PET@|4(dJN}x=?G?ADQwZ7UI*5`)OJD z>~L%70L@PnkgdU6R8#d9=1Z4#S;6plOrJ2Wou5+ed9!b3#BTzPk2lme{lou(w8>5U zm(KeFVn@DC%x4=F3OFaLFXR}Z)b#D$Y7ax{=}p~k)S^*? zwz{t_$!^+{amPz39gU`GaFeaoB9WV&-yBkx5rtfh6nv-qk6n1=qB5rU3Vo-%&O7sY zpNlzH*8=R%yDwaOUg9*iCrpTR-NETMEh!GKB@h-irJIUm=J^U=hSz@Dz3Q&x*@3Ne z6$38%;$CI?a5Ws$#GK!Jmmf1ed8Y8j zw_M|!u$^6JhM2yl(7g)g;1H~7PX&!PVB!Oem{CKRdJtaJqV@bY{vU7z%s3D%GA@)GfBJy9h?>n9j=|2k5|Dt z{u(C$LswWgvkP@zN1f33P6S^`WnFvc5%B=Avb`(N?3Vl8sZP5H17Ui=2Ga(vmt&49aj zt~;;QtaYL^x1vOE2nSkVO5p#rPp+jp}qbxb4-6m_pQ+j{nI{YtL3@IxrY5;)1Hr^5j^jE!YyeE)$xss zmVW8>d{YUzy-$xzyhHdyz`<$;LI-Y|vb8fL=P1$CEL=^`8pHq7TT`>nSswAq&-KgC z^~!&yHMy*!u6@*Fb@YsK6_0&ju-sYYi-SCt^ZJ}GFCO*Sm%Z2Lc%3)*O1{5n{@^;y zzgw@L>3b%1@F|EUW7znW+rRX6?gDQN>}z9SyF_K39RkR;?mw`p znxKBthhQnX>{NU7tu_jSd>9UoPz=?2rQd+F> zNZ`LBp*INZcs~yV@9}2}uH}vKEyqe)ib(y~BBEZ?n7gr8&;E{16&}R>{`K%tx?&}L z>3yxp{g3v+zWkIogc2_2R{e5h%G)0P;7#*C01)`XeTVUQ15I3Nb8((fI>Fc)fn13#q68<- zpFJ(Ge+yZAG6X0!WXpXc_Tr|KE)+$_R~r8@9d88w5l>~c?V(AkEqQ?|AyLzoKA zYT^I9)U5d)^^}_R<+hpL3^ zy!+^G{Fwg7+rI%jZD{`!r#GdOqTNJqq{m%Hjc(*GRQJ*OxT>k4&SF z&i%)AFNY82?2~%rr zBDWvFH*fRfUwQW=+E^Y$YX8z#^BaSGUZ=ZJ{M~d*P}||&MP~b(?BAQyvdcZ26T~~D zqq~_hw=Dm-SC6;faXj0ad|a=J+Ro9Pm{k6T67#juknreyaAFz%?>xiiBY>z1H9gNZ;;x}P!}Yr2z|o38i`RcguHfp6q`nLx4f?^Oz3=BK^$tO5&> z_M0vT+#5(D%Ef~2dJMtv8S;t>bTdv>>>=y`c+iV{H+?|q|8T#2W#P>Oe|^Kp-Y<1T z<}+7}xhxN`JD>VpX@UEEwYgqq3FTm)2<0&OPkQ-Nq zDJL;-T>1XhV!7jVY^$z#RB)t zmp9DL$s0aZ-7^wlQ$UFJ%g6K!KB6MtM2pV4U0c2Z`khM`E70I zkIEa4OaG^f`=7hp$Q#&B!{iNjNV0H?CvOnP-0)S2eSpwJY!=#=6an#t`Xdf&=^;{e zNG9OM=EV(sRq7538_Z)~)L!1K2;#Un zcS$BL-|$@^Y^FlF3-h^E8)^m61N%9`z3gNE-rNEJ0V<8=o=VN)>|**gcs}xND`DE# z`jjK{FfQUeE}pb)#%^31zkTr&P0-8s6FtyRnR4YUd?IRc9wA5G3|e4;c^xv`hjD<3 z7M!C2`*ygW5G)K{o@YSF)LDe%l_E&&3UmW*lhHBiSjHj1>r`lUzZrV3{Y&YJN74whWWKXg zn-b*gii82x^K{Q_R30E|o?bl5H3ImX2VWpnjH|Vw?;gv)OO5n!7Z`P`DG^RDJRV8k z_AkT?ji{X^Uo+My+ub+7p}0F}CUH%^iMD(-G?Dmx^?T`x1oK*82cAvW6W*b3F$}=g z)X2*tOEUOzn7n(3QA1r$q-zDggWc{N@WtvM9Ztlpma;?ZSZTDDk2JMp-#1g zi_8U_-T3vkuiP5J-C_=@*1VXo_g76?lspz}FV9g-wXns%2%^`NUainOLOa-E+uh5) zW=4v4n;v~DwhWMA(S}M*pp*8>5*kMfRF(R+JQ4vZZ{hx%daAYl3q-p`xs4+nE`3uN zd}TO<(KF6DX1GRjb1n5LSVKYVu^iso+h;7ea{Rz(+AhW+rL{(O5Y&iZ0quy_U^K(I zx4x;Mt>h3VWKT2%=lGqd)%YgGJYID2wZoVyS*yjup`tOSBDs{{lacIl3W84ej-kG$ z>fX}b#ODa~G=+NZhHcUtJM0c(&f!wT%~qF~?0j38z7FNT^=I0MI>VBF+JK~75*D#Z zf{@*W=T+dj4J?lZ2&PhG;#1iIlQV<)tH(=msrXr;?Tg0~Fr^r|E&qGy;U>%^4~W~- zJ2+1`rU`^g-+-UH2YPx(B=nxOY8L`EVHWd^#~$sRD&y&c1q!ErQ^DdGd1*NHALF%9 zsehcHwHCh5-pXx(Vc_JMF#CMGE`8$#!k3_yH#sRS{S+wtA8E}a*snQ{se$IetMnVK zNaC(8ftfyFgw*RczJ@Zux27S>Y$q|`Z5Pnxml%|eL znldW4J#4Q+Rdo`= zsP7)M_1#A?#Hfc4vZ@?pA_=UolZ2s^KwKW?H+X-Fa`5~M`dHg&)8B!iSlceQ=^kNi z5kwU?^1Jv1U?Bo9Fvua>)mk3_$UB4kj?wL}9uoFVo-U2C2u_g}4Oj z;^G|qL-PcA>h*vR*8;N6~@_SEmH)-kv|35{Cnveh2_`mvt{~~8BT7CI$fzh`3L=wV_t!b<#k{5y}#eZ z?D`A)-Ox89*|+tmq~wSiB6H@Fqx>W%1d2{R8dCNk%bfblquKfM)t3JG_z1QHpd$;7 zW=-1mPYyS09!cNjj!orG&fH?|!{be8=CXuMAWNnFLimx2)}Lr{_L}t;-B3jaW=8AJ z;)3-vp?AqZuj9=ROZTIav5s+);preneN~a1c9K!GdYU6R`qs^*>@2jbs(p2gU2bwM z2hjI3<9I42q5~>L1XM|_pvL|WP96^7u>6DtAn-6>{Ka_==CerujAI<5;xg2Jm(J9g zJ4}DB8_B(1s@{8~kT=Ev+vz;Xm2(u4J+gE^0KQb;@e|R{NOJq$#^P4V{U~hbib`YXl!p@&O zg^@w{)>vq*KgU}CbxC`JxeC3S1DVbb3kpsZxXX3?rEjX^uMFwU5QJY(&#$xT$Gp!87Z2PX|_ zlo`^?LxyyCwYdz!>01k>95*i1eG<@rjshllNN3phb`?zm_6zeH*qemt$8Th7b*nL; z6{8PY3wn=TEMAW^O!P1*ZkQ`RCuhj$h*Ap&C7(}c zDO@C&Aqzhy#q32AIpxd~c|g3=O(6@FbB9wyALh9wJKc72oknRhTK5bv+Ui%Np!pBO zHsVgVnNqg%+v-=cn-BM)i=2%w(%IO+2OfVEL9o^R2jV=JZ|oowas+G$ZDAx5fqlp7 zyRND&OXN=XPWObaGUsV$hhM^c^U-3@Q!Lvjf@oc)#Xh{nG(1?#23`YfE-`Sp`+3jl zv$F{!C9hqSkQ=+gwPksA#+~l!e2w@I(41wTGHZ^q&B@Ci3H{z$bv}r*FP4USGRH>r z6P_A}i%UFwS9gUMKix+q;eLOV0a!>M04Aa=rJ`i+UvcY%J_e+kw`3GP7>n6!`SY>e zeWsIT@{~?5!9{NI6JX^-9mI;r54wZJ~ zFciz<^y2^;b;5#d&t<0c1@xH05asBLj7HKr7I(hcP3C3W+l1J`dj>i=PA`&H^WfnQ z27mDIbGFJ~!dFhRfA^!lf^Ad|POj*R;duH_I=sn6tw`G2U>IChVP~KzkZB6J0zAcB z>iLP?<+k$yvXo-m%&4NPX#diw2C$9I;N$Hl%zbT;cJz0lxJKqT)Gl`_pZC5KfGTf% z&w0n(O;4F7)05uQUDg!%T~p|wZWV>82mhyhIK84!^+QckJx$!|@p;W1(f}a=RLc>L zm;@XWuic?GnQ);@aV5EPry&qg%z0ih5 z{(;4nghjJfEB>M8Lwg)L4ju(Gs2DVrn(4$#XXlmz9?sDg1yvGyVXZ^jJGDf*Zv*`7wmt0NX;FD%C_w>zI3v|z6Fx-@W zNH3!4AF7U~^bgIPclLSfF^h@3Uh_8_O9agyI3P2tNg=p#S-5noM>Wl2<}^=RxtM0= z(h$7IOGWL?I!-B*n(3!d;|#rPHSBcW4Q*R8$()jrtVF3uz|ve|w3n#v4QxpeOSgwv zRjBa@egv7;Av20B(@tIT(aga)PZfQ{~9i^lv67@XI@lB<^`MHr4@8e~^dAZ9y zI>|`;ZUQZbhgK7He!h-+5YE_E>_q7CgFGxBX@qzghG#5bqYHL96>G)7pL`?dz9)gk z5q_1nXTS3ZrFlNZN$NYP6Q`DOJDGZoDxVk$Y(SsQ&wld#S?1s_idxCH7NIV6;fb+$ z=zIzfIft5@e>U@R@#}=s7E9WB*WSQ2V$7DN;!0;eWU+@II6&UkMPI!oQ4D@`Ff*p} zXgg1J)_O)0K7?jod8~SO0_r!po9~HQ7cEGfzp?es+rBFH^o{l8(f!jlRyH;^xU+fO z66rCDUqKRu$Y8ca`cc2zvT^AxH@9oV4|uvb9PS?L!QLs^uB~gEw}u^V-SCk}S2l4$ z%vmk$PHIA*AS|xF*}b|a6?qD)^0kqEJ+OtmeA%d%;tM`RoU8i1hxtPv=A|OfsMfW2_s|%z2&$wouZ%N)qO@*1SsM|FEo6g4%(e76gZSlmYI`U{C^Rs-P?j7DI ztLq0Nn0BvUR@Z$z_Pq~k*44>cYKdPR>3ThJt}$+EO5>eg@)a0ixmK;!--j(}|2yBXHp|8n z$C?y`Yp!tlu)^Pk)m3ghRl}m>%wZ*emMiHM zVwy~$^M@7cqL7n3uD`QNl5P=8yd+5M-Z9)UH}p8Y$^OD83i#CSAdXLj$MMtdekL)d z^YQtruOLtmFDl*Q^c%2|+!~zr_-*7{Vc5gT{z@$DwQa31+64HdByRe)x@nIa0f`mH zam6(sV^2+{XQG!116zr`7f5a`Ow9rp z-|qf;3NH>%TUNVbN|W=-p#LlghPq~_0&Y|HmBc;no>}Im&VfGKVq;^?ZCny+uU-B^ z*m=BwB{#B}51An}rhhD$g`&(cemJ7*$W0}l!JXLa@zJ?KBub5^i&QgVe_k~lgdL*I4n(O>)j{6sS|OdQ)qlmttRU zg(_-AqMi7X2ezgeuoa)9Z_F;)oA`9=vi@f9C0X_!u|Aq{9N3&tkX-5T~T&7PyPPW2xt;z>~ecK0{Xqv z{66HW02t17w+hL6=m?KSR}R(DZoLbqx)1W>e$KqVcOB_y`k@ZfYPU+G?ba>zXSe?< z)$l{V#KVG6K!#MeRCL{+>t*_(4PLJMeN&cE@m|Uc{7A1MT-z<6Lg)nNp&k9YDJVu>LQHSZx7O8euG%)wIJPa656;k*n=BRu&LG*Aia$T$Cc zd5?BxrKdO(cE%$2CE(O}TslBA*`9#MO6G!i1MkE$fexqxnH6Bub!}Xl{$`Sy8msFc z$+OniM$;{3c9^Nr5IZA$9-zoc4A+b@+8;?4c`{)%3hD#WD?lXx`leq3=pGy&^@UKK zXkg@Teux1y21>ZP0VfIvo`;cX#B+`oIRYAsH=B6htzyw-~kPgdAZINu8c~Ih-O$9R&un zKaPIS=_QGGdgzWz@hL^WygmESN0|y6!nv8Lte};Z% zM2>mA04ywZFtpuAn3GiJ2{Dv0(lCA{CPyOUJnz2!36Xp9iWMo>mAfO`GCorQvvdsZ z$DXH*dn?#NChq{~qz(zmLFJ-s7ajgT3xG2NT#_k zh6Q0BzQwYA4IR@zQ;>MS84b&u@Iw;64sbH(tQh`4sPlxt;ru~-R6q^*qZ1r0k`X3} zTC-UIfs#?+?Q&cEqIB@dKuVvr zKOt&xp2n(Fm?+EiO;r(N>9AcIc#fBYn~9WR&k5*wsw>Vd$gVL&x)Vg<04`eH~B+mjjTZpu)&qExzK8+yboh|Ce9Ox()(gldUi?Fd9Nvb4eC@M8vV5^5qDxLt78N^ zPg3frEOtvdTr6-YCg7a1J$7mi7P{ER?(o`hHunV|WdP7=wm0Sh^^2Xq&rjEh&GCoRt%~=`6rhj$F;Fy1GPJN0sY)bv; z2+tcEn(7xB05PTl7Ul2;)N@=PQ0z{>_4K+;;Pj zH;FOc_u6M%5*OyndAu{f1}OytS}5d|ra|e1wj__0SgU?cwqrU$A>*q;VE_!{7<*ig zqmga_hu`V`?d9CQrmkgtq?}4y2=Y#=d%ru*O9EMrxVO}qY{zxK@p)N)d{Edv`f-hM zz>qZrd_$aYF?C2;pb!l{5o%IeP6z)*cp$?2;`A*?df!IjY^QsDy{RqTa>T8S<$7?G zV(AJ~8eSpAQV(ge-OFjv>!VaiQ@_-#d;Ix%+ST*5gAL{LMf9J&FWu4kZ+^@-F=vc| z3blk&_o_w?O`)~^RCbK*T}%f2PC7(?{qIQsE?Gs-`k(5b=2WL$cM}f+&4bODIqOra)#+5sRlg2fy)k@ zf3|N}sk_KCRmb$5y&SqKHV#K@ntPPqc|MoZa z<@+W2tHf;39qEdIyQ9&t*ZN-bbmMM!bV5 zds|cIw5Dz>vYuQc1_C~t;a%8=58?5qv5ZU&cUWe*_2j)K^T{=Jyu+jYllSV&K<}_( z6*QoOlFv*vA_W?_h_y{uT#2EtKV8hmR20tHqV<2xZ(Wh~#LV%%uNK>>Xqojy{h9Qp z8ovv5UR1qI69CA=Ok<%1nLr|3!wl9SWzRS^Bs&KYTx&YRK;Mj6%eru41Q6Ai`O zM-lF$+eJ&)DCz*`|HiQSHE8v|z@2(oFu_R6hNjwwZ!NRVu81I&yW=1%YNNtGg zk+k@BHcOLFBdMxmQH+YV(cP9_PEFrPhRifJa%XBH^7G=IN9}uKBatIAI^XJ`ymwq| zIabiA(zy|fLmZn8{BnL4Uuez_5Qf~YNj>~Fp*|#ekY`g)#g*=dpW-S(V0e!y5amQ+ zNy}R2?5vTAZ>o$eoE7n~})2y%D0Z|ov#OXhMd*Gx@W-P(q;KoV&A` zM`2EZ;LKj?-hQC+sT|lE z{P2WklvryzmB%Mc>1Fby5I_Gi8N9~NxopN2u{ntn+n57oZn(_8D$-1Nf+tw18*}UTeI7_c!M&z`g*W+_1lS&23}+;5Pl>qq!#fJNY@i1JYy+FR4WenzkRxx zrOihXs{42jc+@F$qJa4#rzIHLwz$~v5jLNlw-Gh#BN<8wj<-BY-&k_hH92>2Jn-9t zmG6VTz9ASIItF3qZFj_F26H$F&Qn(R=+2`8Q_HQ+fkJ*c zd7=JRYxV%QZc&Ud35l0X9GM-_wAY-vPPeK|f4PA=n=CO4aU@dsWcJ=X`IJwyhPuO2(}+m)y4?Pv9wvy*^} zy({o+0ewP7ICSXF;FK3LrzpcRC4Nh6EIR1-)pRtRo`vjuSG144NMA4@Y$(hlX#N(Cq98#mU9gvN@(-lF0y%;k`&{(*`+!O5-JJ|cK>`aZN)DIQ?h@s?c| zcn4*4HP#>~SZ6?8>R|z)XzD(}zoyi~f=nQOLXoMVeG@LofPa3sy?fYn9_FN(a3-2D zxEFfehU2iKz@KgWDrNiDj;EHkCkK|$k(l$c)%~IPr??)_N6!+xEZRqdns7oCX+ykD z1Sh?FOz+fFJ^X?Pe-r=rhslR$gZNHmm~D{{;$EXO1EU^xvLM2IxgUCInkM}SKw-W% z?Zb4)>R#>LxYoT7^4OWxUbODjIRXp<&*pn;h>JJvJ8v4&a|+$cE7kEs(+F~(XhLCv z#ZnVzPBkEp`V*HB8{iBU(0ZaUuzBgZp}v)8qk@&~C6@SGt*QUevZ%`6XhkyTZqWQN zfca79InBko76ZNJgRkg~&QFWT%z3&&g!!2mD#P&=(?6d-`q(b^lg-53!q1y znn~!Wa}ROkVKBRMIF!z#^Et$h8{q2NSZSKvUx860Jt9!?oBftVavO5BX!h?IN>8%Ho>yWP(h^ zxZ#!lG+$}_Up<>M)=d0?;R^@8Qdkhb@Uqqg@pydVWybf@gv+EK6CZckXBXWWkE5r_ zq{saWXno%r4M)YzH`eNXJT|3GF2mu{z2_%fy8k4|?DabtcJ9^4Vaz5**=f6EKstqp zw?+A*+&+4PP}_lP$uvMqoK`;dK&y8Z1l>z#Gi9kYE+siQjNMu-MwauCYNlOzy4g25 z*QT|)l$Xz-}PKC!D51BH{Ur~V{|CQP7Edx8*J;EYd z`qsQeX-&~aSO9RB4w?rcXS>{|np7WlLBo3Ww|txWtok^xh9vMI$DaU#%Ves?oz*PH z1cXAAyD8OB#W5PnmGJN1mrnV*0Gr-!h{L zRxm1vB`}7 z;2`|=lqij*;Ze@Mm6XO)*!jZLY>#tCZ8-FtmHZb?7c$rx=?Pb2SzSa#Wn;uMlX<$X z92$RS1%K+z$PQ=`$bkiX(6D$g&YgLhMySL%G)?(A-B&s#dB$M!%y4NhIcMohFL}0~ zbhZ=OrU6|cW@5?MaP?*z<}s(MCW}9&-o@{-x;9oF>g=kUym>O9yF~L@E(kDQlTf)i zHG{cB^nT6M%qt%8?%!ua;MvKW(7701iUU^-1Q zG@xDhLS~d5aS}-M?R4QW6x80Rt#_lg-i_YYYaFumqMCp9Uru-=zrSD1?Z4%d%AIQ`<6JlS z0lV(UR7MPlsd)Z$uC3+BSY9w@#3nQ33K83&oIIWBj0T=(!!b=WJ(&a#x!I}D%})I| zqPRC~ceL-kd8E|o{?yfL&&sx^A*C1>F1A*F;kFQ$KoNvVH&plHjWESa`9C| z;2dR1>6nJ+s*Kl^6?J_Dz{`<&6yVhf!-kHH=kfB-G#5 z4c?<((rNyBRFDpV;P3yoe~lm4zrXz-^{sfYM^EQ^q`}DCcqX$#XUt&olc=fVFcc0> z)5$Z20}07`rt~O22D<{bRV=y(vWY+BYx0h~8L#lQ8oX3O9z@xC+Iy3YEj*sj z7hfV2G}@H<0=#Q3X1p3>?@(i|M0u|yuhRVv+;*wfaq~%vI3l%dvNsxWm4>>5{r_uz zZ{1t^f1Y16tFd(bNKJ(qziz&qJ=D9*gYQ=JKCW=)8t+;7AckVX1_0s5vg72<`Veuk zU3%2~J<{xKB2kJv&YkYh`G|@CSh@SvHPGg;hyzBh|{MWq_mnqI0tVOCs?Wqa>S z6=AA`p(y4Ui9g9<+D>)9#xt|ha=QY+=#JwF&-xVlz z5!6dw?Ma+RnqP6gU&kVoVZemQT+{4a4J-9UMZ#sIVdv$rvm*z8@EQ$IyDrEbu0f0d zSo4dUWE^B*bD9^vwj7TUk}I*hp)V*-AUG6UTSJczV&;Qd{odZxUr)!WeJ%n={BrcV zu+&q<5DDxu!1p%%q8Np&3aOwpmH00E_ryO9t{&)dq=XU_CVQ4wMZg<&OC zqP?a1u!nz`>5#IK6~V?~t9+O!XUO;kPin&Ho3o65l4gM!ppURaG-TZe;5|o{EVP~d z(nJT~RK)_^`%ytfCh2K^Uj9b|cAoKjhHZ!Xqm@~G7x%ju8CtmvXr=n&KbqzoZxl?F zwYmbtTH@47#ZJBkQRgU#MY_y<`-|4&V|)LX{`oC2U7=^Jq;Mo+9jIHl3mxV2lhE8A z)}&@bhj`$llh!tq>2Y3;Io}}q?0z$rkDVoL32(Z!-S_xY6t*JUgjqgS6nd^LrAi3q z?9WSfTR6ldBrssyW;pz~YmeVx_OG{s{&YkGEZ6^LLQd)m7@W70;?>%b=fW7S-VXXZ z(^@~3OPfP3ExUK)#D5K5k|D-W@N%pBkYraFmjBvtBs>0n(mH0aApQl;OBuQpk< zLAeIDr3gETpaFcNq=09qF3((Gr&d-;$JI_PnVdmTvr8H7Ps|ZmGMP6cZD)3sof;!S zz3~YR02m4z27wu=L3m@BtY}k7ld7c&gViZ-J7Uv1VG0XExP2ZCnE5{_q>xR zH6W+OmJqV8_7{^nG>jt8q%LZ(XTcs6XW^bmQL4&2#nzeub}5FfvGkR~qwg^v#?mv{ zr@NymP8rY-5-7*og!4|+T`V`Hwt(kt#Be>Bx1Wd|X3xAT3-0o!>Vuy1iKc3|2~Sr< zlr(Jers|{7bOo6FRg=c&?HOldpW0W{$nuPZnYsyd#TYGmw;aJs%Fd9*9q6eM%Z2tY zS)t7GS?P)k`6zf^%sD2|Wgyq+Qc)dp!6G=2z5;M{pzTt-^QZw=7eW6dF3^cxgxQYJ zp9#)=0$B_eKy{x7wovQpk7BTQJ}L_O%rfRxIt~y=bX-vaLcg_E)dL4IrH0?14kA8s z^%j(@Y*Ky_#phhhDnz=r#?OOKKPJ1`pYw128Za-PnHo+X}mkTOZ?7s@FF@maGO9^u5@O# zHeMdTt0W>YE9>_!xsh(;!39702dw%7gZgo}$exZKcQowGuCrN;FUhCNOgfX@h6y8c zx7(mEL+}^k7aDzDPyaJsioGrB{QXd*(d=fbSo{(u0r~Qb;Y{!Ch2GnDoNKVaLoVXl zbcvYC6P?+$bSl}#V4MTS$SQSHRcf}OD&!apMN|(5nqjn=`esb#!vgO`4xc*-{~=!Y zoj`Fg*ISV89|%2fnF$D|gP)J27eT`x3a3|Q(-X$thx3&5+%Zi7seacNavY1A3Fl!h zo}NgmVY1vivnQtbYHjlu7IPdxg9$Dbjb5buN45x=z(o~| zqQKI!(oeHwq+jut#u;5=G~_S>FS!&&1+2u#C%=o zPI=`6vHeRa4V;XuO+_nBSLjrgWU5tYrvPK&ZoUMmlD}hf{8prt_Zx4JPHG)pal1b0 z>x0QXAZlTR+p2230gX8=8nDO<5e#(Svdo-ivBSYrr-$j59g>Id8YjGmcnp{>=uozRSQdE2vDA;jCf379sabn(MS#THv&1U1L5G^s-IoSJ<;moWl#OCGJiC{;1} z!UsezWt$iXJ?KrsgTK;;012!le1dkJs>eGgr-Wwc%pcX7bkf*q*p-LT6=|q+fBg3% z(5=;L7%ZT_E}2E$^)4Q8(JS%TPWRMtNHkoPSzxlyj-|^&`05p@JgbmD4f6D*|Fe7^ zQm=3`y~R*UH(7({i%==g!bK_H#D(RwR=>&ACy&zbt0dC)kzNn{u5kNE zRv$HnbXX?G5S6nuVdvfEz@LaOi+7IcX-Yt=wxg+bj3^pJxhZP9Dw4kTguN#NGIlb) zQBNGtUKqombo4fgZd^K;658AhdZa92&)lH7SIy~)`dBhkn1Jx!8b5=#fs;N)&1S}| zbPyD=FBT%OBly^o)3!8J7E016nJ35F5cyIF+v!gGgtr9(W_ef}EsWM=h}U=ji=p_J zF;?_F(Tl}2C<&E+f22&n7OAbA^*2b+zH)|Os`w+SX$a5G_%rsrT^V?Y1^9vgkF>Xe zkE*&8{*%mv3?y<#3>uZnsHw&d+SE`@99-v;88Rai2_hJ)RxCD)t7{Qvc&WT3P9nKI zj^f&G^=Z4cYoDiX+bwo&1+j$;APFE4pjFVSfL8Aq->oEoGXL-I+?gbx-F^O_htDU> zz2~0y^E#q$*iFF#XYGW?z1HlH!4aI3~i4)jKUPp<@N{kK7 zQl13fno9@r+F7IHtI{D@i6)d|!dJ|eC7f&j8lVc{?-59Njg|c@9Qe6e?7L==-@hy6 z{(TvVAgg;PlVGCfVO|H@L963@=K=yX~OQ$+X|3#9#pK_Xv8@J~V z>>}rpC(jtMbATgRNiNtK{#Wmr{`Zof0eLUW8;1|hXj_bXckqUY_yX#n!ChGOa)vbP z*b??{z4{GhAl~mA-$R_fPTh{MiQVa~^WreP zxU3-Ifza~y^&#CFr0);~Y9X(&=5FR4(c2AP!gUCa(TEZP31wy|bq#JxsD|WbrA=QG zdzP*`P)lBz84)Zdy8($Vd@qqHdd+99q8E+;vk*dWY$|dfdE^$;Xh>s`QACiX!14J9 z1d^S?s(bPlP+SxTGhL0Q*V#Zr{afPn?{2S9Y4mUR`+~xCe1B25V*P;WLnt+^&^}l9 zum|&pFYaMBenlh7Z*F)q*Xdpgy(8rL3I2zt5B7K?3`u8!+)MY`{C#?;!h_Lsy6mCL zhz?JbWy_*C^g`>ds?i?6~bo{bfr}M*Hm<|-Cm_PN7o{j;dkX4L{EnB`yXMD^sw z3Hr)|6IR)}W&+RRH8C0Csa8_)sI|OWizSXeIyGcXspiXNom0+J4-e1-}^7bjR9|!I504L}~+P(Wc0+9;15lXUA4FF@2BL4Hm=6r)Y zcUOPdkzIT#tae>svU|lv5`804sTW-(BXxv!clYFa0mcQCmuLuO-fcuUMS^;C#IUhz`^SxTS9Rv3_ zsy_Iun0hs=b_&JT!O}hB;lD7R!@EL(54j&5S?)W;rGZOUuSK&P`z}OYu8e= zh@7XTG)<~5Wcqtt`!S6~17P|Q{r1FC-z*Fx;9rXfr@-8E!0g{Ig5|@#{uep><(BU? zy(AlJwzuqkJ9OSg?cwbi5q9l_!0;@+0-1S~n19sNzaOFd*1SBGW@(d_DM=Mlj0#N8 zY0>N^Z43AcWW@5D5m+s|;-rpJf;H%BG56Z*3g{O07JJ{$^?oZ|2zy+v{Ze5c;-oLg z>SQtf`?GlVeS&+zgX=YiBZ0c1M3{6zM*y?7v>m=mLwi*2i_-?1?7Sr&b<`BBlmQef z2voh$$m6Dnd5gr&xf=asEY zdo1W1kVpZixmCFN%_| z1>D%W?A(F`B>N7#3T=h-Cvge#J>l5sY)IX&Memr#kp<4em))xd`pWe2-B-Lp09yuB zEwgq8go987LDd~YMBXajcoha9H}R{Q{!m&llfNbWVPaKOgyCr+Kk~1juw~Ulr2jAe zE@a&Dw}>;H{F6AgXLDyn7;#h>%Dk z;73UZF@4l=e)g=`?7EJM{T zo1{sCw4(Kms<%(j#{!=*wKt^tr4N^$)Q6D&13^_g;f|yUOmJW~_S&YW2$Z3Fa{$Tt za`baWxgM#VAcN5PUEzEQwNvM3Ltd5~@GLLY9M|4V*mHFuU5>cGE-xDoE)?dvOF+o` zxxVL+^hqPiukp$8a82O-8wlDm;hH^Rbp**13;XnJ`1z;jj_BlO4pK((yO>`h;{`{f z5A}8CbOeEY#>!8bdkHQH=jYrzpDO#ktVhJPJqnqxZR8@BW3+6lqtJy7GOn88+q3i zv{(c;MaChnUisLmd75lkQhu)G_rH_(U^q4*tk955uT_LNx}iFZ{zRD^_8G2a78snc z%6R$;2!uk-i$Ql{uW>ar;$#O5u?iz&8hZ1rP2txv4rrzKP-9-gw3t4oPS6JzFWk9^SLVJO@{`O z`;z3l3k?ps7hxMGe}>zd{1O{Bf2)&3I@ZtGt;r)`@2H5AQ)Aa$`8Q&jf6x0|DPXfL zd(i(HhI2^T2OBq5jwh#7CLPdPFemhOP9QP4NVJCgB!g@4sn`)xNSJs>RmRsrwHX?O z_U)XWnem`@hKL1km$C90QgkcY9-F628IPMTb0W!IP#9_R0=!D5vTH1@bk~`*yO`D#L?jArI@fkgd z4uvT-hpxTWszco?@XmXj;d;cFgC62}P~Ui>J}R&sZLqk@W51nQCuIU@Bl%k%upls2 zzs4$#m&I85ZzP5M`tszeFbcmAM6OS~Bq0cXahMs9h|DdkW^ODkc#gmGHNn zr3EVe|Nl?QMZ1_G4Vf5%_wd}_w)p)+LJoSbA*5d(NUnCE19^^|s zW+@19dGLsu@gnq`E|Bt~iJ(ZG5h{B9WL;LGbx$Ug!EVVtdP{?^kn_dDya5X{ZMUac zT~7|jh&7*s<$`%PATE}=vvN1Op(h0StK#jy%!k(;A5*tV%(V9-@5iiVFPen3w3ciopx}#2=d4q*LnX`x9l`2bw&bZ&5tWTAQuB!gP=FY{l$;*YQKDr z&~hKtEn8!B+yPrH-`7R>BGTaXeB|=rh!x%ts{3bhM9Bf+6h3A`Rx53SHzJ$fZ6}U0 z(r9XVVcM?9ZZ$hctYaS#NA6<+k$0BpUr%R4Ay!5ocQ#1KxMRZUbT+W|;bWZ*?!AX_ z8xw!|18&ko{*9dth?qOC7mKLQ1}qS|I;VN)k$#2N4X+7xHjF~?j@R*;#$#H@gEZW^ zzC6`bVZVXUn{L18bo&8VQ=L&t<}>SA5bhIMo&7t>FWy+;T~3i16p^Y^$j_k4ovnKsalx6v8+xO1TB{#WKsy)MQukz^BI6q68xI$Msvs9W$8!IKos_ELJ!l#kJm)z(|9{NRyqFnkTt^g$VlUUN(0G_TN(b;fB)eAUwHXP;M-Pu5ZoBC{L1F>%Ek9RhF zrs_Y{Uxjx3w6h_rX8g^bG$Ob6jSjgaOU)RNRXhFIAn3Rxwf<8zbs*4_s8y&UkQH+K ze3V#FUp-V((082__=EzoirwKg!g*yx?wfy3^Q>lY$5|Ne>lzBakkbJHJNA#SM>{FF z$LM%e^3{J@7w%4MmO6h%oeaoT|LGI1_?X;zg6yxFIPwHz{6ueSx#@mWMJO;}-2Yn+ zYZV5fmu=8}^qMOj8B1hz4@(()j(W;;v+ja>a2z;H3Lkm9;4Ot+oO_)3hgIp zux*Y9Q0M!z@}aLRrtCgfOyR7!Yy))w*E88W+wF2h+4!r;<47Kr3?Y856aLliKT9^} zE_?M6XQERjoTUl%zfmE6?*Vav28!$u;b67Ib9nGR#w+=eR_l-uyUA}KJLQCo&i6E7 zM250d7(-bc`EX2q!-K#sreICP_1>{Vh$QRqA>RnVCzp755-apZd|67@5_TddK}NDR zqe$O0`7eCs&Bdu`JkY^QR86g*uK4b#D1+nM9?AAZ9x*nEQJb*=1d>>5s%yO>?4MeZ zJW!Oluu&QoJ&johBj0Z7CnAfAJSCc3f-bfF>pT+tl`aq$A}_>-I;pM^MasB{^^Am~ zGMPZDEvTOgt+o&keSyOp-EktkdM5{sQ`;n0UsbpMEokL(j5Z1Sw~sO6aE5 zR>`Azc(S)B?u)9)h=tp{r0`hFV};}c8g9&NmTZO>3br`IP^nW414xNVi$0#EMbjs( zNr024=VC`gs0u9eOf5?|2j@h<$Z4@C}Ed-za-P1**#tRbK#OV=h zG3pSPybEoX)BkDR;o#fw{TowT1qNbbrX@jln%E#qFO8(`osAYkf)b-UOE6+$FXQN-O*G^q;;k` z)qd{HV_B(!^_|ImJv!a)di@wP9WGTjmzc?}t5jn)x#=o3)0I5fl|0mCH9lx25Ac&s zzTRccRMt$Fbu)2M!kAbr8J%i_L0y4Bc_8g}#bV|A? z?KeKy$9)BjbBTG7Jnl-Ik{WkoD0L6o@3%hf^CXYE6Ry;x6=1#*D$RdZ_+k3`L+tz5 zP{xBlVq)mBetwW=9AV5Y=2=CE$gLaPTCZeUb^R~F4j=&R-xs!)c=Geq`Bync8h^?O znuG%~R=;Tf8Hr|cSrQhokwr7TL}aJZT-TZ7)yW7Vxm1VDKSp1xqo{>vv$|`#!`d>` z%wAVH*9s@)+?9Y0GN7v)RpVl9Y5F)RD!ei_=jFyZFLIW0w4KNGna889O(yR5kyP-r zdgJMGPiIq6XOpY5$(^vt-ssw9O61F(eJwH@w?@^?i%maw@~zHB=Jazh2zAG&M(4m9 z1~GPOrx5{MSP+SsZXeoTf;0kJkOU%VykPG>Iibr*h`9Q7JDXMbVbkhZr91mWp2S<* z><-Uf5WoFf-QlEE4=}TQDw_I<%!HcxptMx`h7c=>Uo@tc&FwoUxTdi0<@_u8Dfun( z=8CjJa2LeO!)gjg6j6FkXKnglvOfWI4J{*+7NtVzM z7U*Ere!?t z1Aed)k<=cjWT}iw=4E)Q{2N8mj2kv8tD(VT)MYc(55w9FQ<)J`Q4k+V+7M(EF z8ww~n){N9l5=6c!hcnl-y5O~y&Wrc5ym^U1L&iYwa$d?*Qc8gjY(ToVI5%RTZ-gYu4L5}J5kg1l7o8xm8ipcq*B#3;`ffnB**F4bLyrnOq1JjtN^ z$j6Xs2A1W)&k?dEWc?_@rzxrOR~TeLG=C0pNsIehoOE0fKgPq$N3E^kE7s4h-q@UE zt*#8)93{0!F=XvOz}cnCMCa_0Vo?my{XG$DMl}HyqjNBI-5P-pN@~**|F#G!G_Kc8 zA4TB1k=wqm($?=YAP$cf8TY4TzF$NnyPVT**KmInmRH(NMLk%*SxXBC0uM{~m%ix? z+`1>&UGJbrM|Q$iEV2L{blHOGJ{+p#yz$k^@1b zLrhw9U5XP!PhilEp3=W<_Yv2&z&4{@8*l5t)OsbCj>skjN}Tq^utpjevA6s>uOTbw z){Qu?dO>B?l2hSgvH$>iWo3PN*h02{|1N}dNezIW<)=GPlN|6aFV*4LE!{R)0v1Dn zPi{KYz=+6RHcJGJncjw=pwkZ)ixfuo>5ZG@V?iG`-1hxNPTB!?!d@% zA{dj}?=RQ3qn8UM6hy4leY1X4O<#Z$!C!#b)_zt#48wu$~o0{2z!X&T0g` zd`i3>Ro4cifop4*O@Oe3$1A%Q;KdN_>cXgXb+Be@#EM|-0i2HH$s4uAq@rq5H1$0h zp%(qvcl@P91b{hyCvUH=DMfU)&_d~BBh}jwh#fC4De8auu%>y7;^(!!o@M^Hw2}Xp zm#!^f#QsfcU*8#tvCn2@Vn;jQv|ik3+~>O6yH>~m*X^EwZ8X}1_lJ)8z-atH>?xn7 zL~PDOLO)N{qbQ$-40(B7-5MWBiLW8AxL4!B4d0s#Vl!PmfgOpnji>LOA~i1w0d>24T=RBOU$rKrXFO6ND+S)I$Fj!}d_CyV+y>F{`RYCYs&AhVhS z45}Z6i)9j-rA;Fd>mgbD9P_X#XTJjh3S(AkR>n`YUjpdW3}0cBM@_9PL{CJ`Lk#Un z{Anb$<;^T^p`RIz+oBkZwmOn z(h&D|L)jUzO{OtzZzzDT zzT4PFeZ!0B8E@DiBK(dEmzTXd$XHT z^^jU9b2nMve?aQ8oZNj}T_W7d$;|f`!26(S3-+(3;IYTE5kN-1U_QfDQImj}GWS&_oFZZ$zH-3+V)U8eGsJgq^ z^nV&s(d&q{8S+P)C4QLy?&~l^Gt*hlrv2&TtZg?&GX7qwnq&t0scj-jA&gL~jcc|9 z%yJ|38gs-aF=M)>I{-g&{|+Z5aSq3i(B3%OQm{(B0Kw$5zYbt$#OVP`q>i1EHGO=% zsXpaCO`2`{YXRfat+qWUh&ALt0BNNu{T*S~8>WA&nSAqj;nYec6U9|oTTIts1*-zl zy1fuGxovF5mX8@9F>J)`SAZR8Ph9S}_z^T<-hlQ`4Q_&-L#; zEG6`eZxqm}b!D)1T3mv4ubB!L$_kpPNp1|iWEojghj(ik>Ox4p#R?8i?gToasaU6e zEm)Ds{zXW=P5MMrPgNd9{5$9iVP7{hIB5VbP|R`i!F#}0^guv)Fb+y>h_ZUlB=DW% zQ<{g`_eJUBx7o@l`qdVy_K6uFqxW~gqx0w=2*FB7@o?bH#91)q*c-xqCbh)@@j&qH z%-jyF20l!j7WV%Q-2#yyR&N0!GIF&K;on48IM4K>pu!%^;p3l`2{ip(A*^F7Whpg< z5#qApPFm`CcgZ-s_qj$YtI|3PHFouLH-_{5(f-fWQD=RMSs&MD0<7Ak$5{QG>H0{{ zBUyX_^PMylcKtPgZT=UnQx&vX)6KzI8&XU{g8iYWhE1&eJRbhZkYiQ z0M5hs@p!249$%<%LFEb4n!`|HrsjmAkE-8_m`_aP9ujXLh3S|MD(e3bUlzkuS|XV3 z0i$ve0C?kpAJIuU|Er^^<{~kItc|2DetF#A#OHEqk!WDKZK<>c^TPROKscr0tfz97 zDVY1|-S$&^&|O4GswZiSv1Y57NQ_u?S!B*u_5IY^*TppA&)GwvPERD;^*{cf-33}6 z(UD!zF18?$K)K^KM+dd6`aTstz+WeS_wu)tzlHqG;}5VN{C5&P1Kp{P`h{fVUtl^c z#C~Jik~04ij}aLN)Fp}oce~>i$t6`d3E5q!#UtJIKBlF>3Rnx=fd%6hj0@aTvFr?Z zB1s+WS55}6DS{lo z2)weJZY<;Aol)-JxO)K0P*<1EKxVjf46a71spB5SBT_!&t&#t(*>gg2ZW_v6hS6EB z_WB9A+V$6=TH)@gSZZ~8QC~S!AB-MabqC;>Lx$loriu7t_cDCar(?FT2b#^FCZ>uH z*{tgFn_kO=aOnd6EwdRhOI2nLd>N}0oC$BlsxApKnHi&9E?p4&D%|f5cemxq2kfTkeuu0&&S#Sk@8%re;vY3Q~WJP`=^lweJW=~X&8;?^}JVB@nS777v3WAd` zcOePtxdmM86Vr#AKIUAy$F2I)Z;s?k$UoIX_~_HvA*Yc`I4n9utvl>X$*HjQy3q@x zj27cpRCgAJS7b}SHB#!`m9Mmftem0IWH$=j-|L>=KL>yl2WhBAIxT?GEYsK&Q60iJ zh(%bfFb@}~AIPYoN5{of%Hbe7gjY~0;XK&$!J8x51NxUGKsau+OLSsK1~0o8o+_dq z)sjkO*?PjL+y3aQGL9d9pofFLI4csjAMWFoNVwo=YmI!em6LwJ$wsQ=uoF5}uD_Cu z^3nd5lf*2N#4T9YI`1?u?>>97Q<3g~PO7%Qs*|LPmcAnF3kc}o%o)&C5;Z_ybUGKY zmucnY>K|~?sWYyZ0FRnIAuG|NrRs@Z(KK|~qGjz7Lp!76b*8Mv_)hU1cS!WZ#$JTI z2eg85*T=?+@BuqXL@S+n(vu1CQ?dUGfHYH6iZZ{Vq}1>;eo<4RUwBpqf#D>W_v9h<8T)Ay2oru}X|6maxl9rz$d?#M52U)ik;zmu5eU^+ zK+<-+2Vv0X#?4ID$R7K(+~{N=dxd6bn27EZ%*z#gpbNP`(5Xj+T+kp*UfFd%``74q zrB*x~h<79v|A5kBOY`$wtnv}`?k?#aH~!H>4uTccxOKh>r@UeUjPgI&JpyTrc?^SH z`;Q2llIi0943eonZZX=hYwfI=GiSQC_Gd(Ow<~RrclEYdv$(Zp?1fZoe=k@1{M#em z0#8Z7+Q)Amc|}|LLPS_n$!N7v7qMo!`$icXrobC<_n=JKk!jA9MROJKHRyHjBjjse z?yEodwV002_VVFS?!%a2ALe#!C*YwI3(y;eGcxk|1h zlHrZ`89LjkWZP`4o`OBnhMkZ0AL(ZbE@I_Ebt@(=ywSmT@XLgx5as|VcSljcOPNMj z*JKsi;<4N)WOXepOsvSQ8mcDOk)9}5NvRB1fvjmvPFv1fHXRB~n>hbh%*tP`(UTdz z^ss&8V*0{7IVnJf{g$Li2#q@GV5JEf$3t?t2bW2Ss*zkQPvdxs)h*|aAkn4d;MZs` zmgF1^AOAE5!%4w1GSUlm)>&xJ94P;blLJpJrsF^^lf-+(q_s5@J)C~c=s^0zYoxF> zGlTcU0?d4iCQN(cwZ!chtJCvI^gOR0fmR85T!e_dA~Y&1o@7TxB>MWUbTXbz#uGDK zNQPnwt*oSjY}zY|k2jVUBn%Asc>Y+PUFOrcmEGKn71+Ko&cUO*!~5pkepjM9{1+E= zn^;_P;bzUANa~bVZ^8Gm?q>|Tw+|RVjz%#)QeyJ7kXf^bGU6{s)~6)vXq^=_72@X6 zIHtYz!HD>>t4=b>X);^(kaI)izdTIs46L&XDe^#W;UIA{DF2UUt3@ zK?Qc$tGo1WF_T@DX1_hOW!Mzg!Uc~?ZuF&(jsP8g9lvgFX?;e*v{5e1cT>eKe-> zUsdw`qWD>OWF{`rypCgJf*>&2N(cMSbl%;4UgyEpmoq~tG&aEO85^#vtTm7xUSd70 znbJcetQnImwTiOc^;&PoMIqKy==iC6LFqL@_~dp-g}iGgC(e1I*QLF}-FB|I@zPw6G#8|~^!!6%TsZ<;7Mu#4 zh9r-%=B7>9%Mvq58W!>jz2+H0apG05W)stb{eq6jRBb9-#}i8CR2pu4Yutm~E-$^CB(~ z4)Lv@MGsAPnvi#F30+w*s&L9YDJ8vX2E3}xZ(_2lfr*4GH|7GjpT^cw%2WHG4i-YQa zI@yw4GKf@p558v-s~~mCT}@?@kXH3K4c3&J1O#ete!W;K+lt39$n)$(73 z1o@bO&)Z172KJ+@m(}3y3l1&GEcz!&7ssrBl!=d5GU;)yG#{Gq$MuLBytxtKepXB1k? z=t~JpxzW_BugW||vbk2IYvlYtxdwJRc|1DLguWHI(y6gO$YuD?;Tfv?zB$;%AK&bB z@qQ;mnE7U)U5Qcb#KnR}`!0n7N|{eS@ml=cl=&1tr?zJ5h5k7ck%dokczN*3LkSNa z9yIHz?|3{J+Vk7*`QR)(56&t>A8)MRM3soeHtGU| zR;!ZIAy@kIWfL6L;u#1w(oo}yS))6^WQ-&3!Vm>C`b{jwzB!1Ez?awS`5>-^*r6Hv zR;S#2ygO_@#xh2sGQM~|UZkgD`s&QbfAA*rLEMGG37Pl*Fd@+p@|`cddxCfIu1)|IYfN%(*Au|$>>gZogmLT8D4T^ zvcQWlC3$%HM7s8O;bje9hvvuPZPI@a9CZ$GbO(*~yK>M`^KuS8>hsf)zRrPR*xY*nE+L(9O=)+ZnZU?iPXr(#cts$@iIU)TAR~8v=k?jnnDk|_ zQOkpoUuzw^>_a)N_Qy|0ABk1@BwxI2(#SY+&rPj?g2cNdalYNx>G|_CAh;RjjV$=3X64^&+>L`0kEhG;vXnU|W zO_)+^4kPl4b%Qn(n=U>>x%FRKNo0bpQ8f^@JnAKOwhVolik9)SFse{;?~W;$PDo-@ z+S?+kya!J;mhD_8+z*S_E+Z|d?<~Xq@7hAXV%N;#y(c7KU`E-3Q|dd%;WJAB&lzR& z*J8)}r6>ZXKv%rDehV%UAwfXtS4OIJ<)tRkF{E5-w+IfXsilxy@-*^s^w73BJ2ojlz5h9l3e0k z1Xd)nVLh^YFJ))3dOw^}CLM9TKtJc7>h$ySd_NQCfiq80(|`+Zi>&OSTRh2ox4VZC zz}%xz)}n6~NhlFGa!l{UjC0SkgYt`;Zo!HQDSkoUK?;Z&)!;w9|6-zg46%$S+_a_z z#vrPjXJb~l3})mIl-N=zP-0w1)PkxIuKO|d8(}A6)<4g-zxEYPz+Ge}Hy?>|-*T|_ ziuefaS`Sw_RkWt|&X17!4_M)*%zUuOVV4g%QBJ?U7Pdi1y{o1nr+M=tO-PQ~@H-MS zMI%K_2kSZZD|~EJ-I0{4^%WK9^`tT<7Q}1Rh+IiNz|V~m;x_8Be+`nercA^K64X@E zJ!N8$8ruk3S8!^<{81ZZQZoNe$&k86go#a@$r`c|Bt}4=KE4x`s;Sz39bve{eo@Ps z#3tZw$|OsD^aYGDPY~xY1^cE!vUAxrjHW`5CNUnbB;3r7j+cI36Qq;X_LZwV1k9Y>4GDIE_rLdQm#@$Xm$DmXQZZJ5zZ9 z?WJ7v{>4 zZ?I5g&I}()rqL3B{!}h;7A+N8uPfxR!hUq1IC*fqo=;*#KqA4uB~>U{YjS)DUm@+b zSnHo;Gxd!yOS`Z{qZ(mc?YJ;&U7c;y4x*K;<3%5KB7@ zKzrFwNx)rAL0SdVDWQv8*95a6kKDmaE!y^n*qZ-szSaX!0*fygt6avq1Lw>?#aL&bW4UsD zWkj>Q*w{+|u6iWOog!s5R&S$eY51af%%kbUMCAEIO#>mYCrJm__wZQ)qU=3X-~N5w zx%d}XpRM;~4j})~$PoPT33QPJGGV`cvr=QAnTK7iM!Q7zaCX__ z^SkWJXmD{InNrqPDyA2id9){<6sfTfQkOLK@%g%`#k#472Airqv8i`4AsF1y?~2go za~OXeXN)v8x?i*f1qp2Nrc|s8B9De?o5F3c|K>F`d92sj(w+9r~8; zkkRpHKGG?0jUduYf&$Jg`~MJEo z{Gxi!I~mUeq{yOR9y%69{+OpNY<1vRHfl}r>E0#2L|36Ktb06}pRubptfg(DMX{#} zAi+5DjCPB3L8IuYX4@CP#!<>~n@5{>@o|v0lLv|Kqd5rN>)PJw)k7)1>h?j$moA<1 zhe}a6BEk--qY_7P>?u&Cjp`t*cPLeViaiT)mz=wwkvpaqRgvQ~J#Ra0KaQ}e1%<-- z#gK1I5f$)jVFY`O-0>PfNyL>Jk8Yma`B_uO4b_ea)%^9e|eN@0nG_9(| z`mLOTxn}-A29ft}W;F-f7(>Z>oHj6~7kW3>#u)qgS3cLq5^3XacCHOLiw4?wQrbvf z_&$8#5l(Zsuu73jZmu0G6P6n5rg@QePZ}>X6Ca}Z zZp?i+Uw=sWYQKrhZb}LFL3CDt_GN@JbSwvNrAvMHOLruKVYTDnDMz`EBEo&O@98Ub z&Xy?JaP*WxJ0<1q3n`hI2F0Mw4#t*;geE6G+Jl-Z-uj^v>Gu*cU_~!!xlfu6i>M0w zGO|c}xmz=H1?PcHa{Uwiu-a>{e~X6RbS#S;uo8aZ1TG=xvzddezqaIUOYqsec|}c@ z=#H?AL^1-jJ`!+JZ^>R_DdR8?j|uZINcZ{}hu!xjeGW_#l!1wd(SALU8G(P$;=-#1 zOp{x`PA6Q5p!sObJ(!v_c@dY$EtLL zC-Y&IeHv?lIcPHw;B)UB?v^TvN#-eA+;>YeNI^@ z$L9qxSuh?zh2~cDGTT4hpI_NRXJL(wn{{;>ezD}mpu+y{zlnZx1}Nh>8MytwfN*CQ zeT}@y(xS{o{0RL=TFoR{l!M}7DOIfkc#O~Vg{^-2Fa({JB(aA?vK-_BL?Tc?sS77kd$ zDj8!Je6Et;NF^6hi2y{RQrgqw0Hx)Qbg;rj05DjgulN}uo5Z@MQTsKgpWsBtCt55} zho9_(t(728x${kJj&XHF%nHIGM?5oTK{Y+1r;Ph$r(-^Y!nU#rCp}dA7_F9d2fZ9P z1)1l8N%nvk{mqM{+AD={GuIagE(FRDeqo4@kWHj>O&~h%ITIVw2VTH-1@}iX)3pz{ zn?SZh&dcH%`pJtE(6Hv+d=OP4wj+^UjBkdV#SxVEaFRskBQdDe-LzB9-$ZkR@IM^1 zHA2_ONq2Rs{1T4Ju>U#xx(&{;Mr?MWMT2}5S4xaH#j|h1got`A68LP{BxAk%@>puZ z<+u+eaKWPuPACYHiG7c0`(W73nn|OeN+~z#6r;V3U$iDjQrvh3cFv3_FB7I%$UpoI%2ogcqz(pm9;iUeL;{_POc#W@rqQUZi| z$WIG@sO+NWLV1Z+jpzdr%UMJOLjam2>LQ3(G4;Tc2Q0T^Shha5e37$WcvtD6Gg+y7 z3T3vkX<3y}=foN_d3+Rd@zioxNKBM7H;I{S^7tvvYUwns_6-@KqnWGt7*l_R@wq(a zhj7~2h!FLLM@xpLAnJcdhTf>&5nF^{O*T_X8N7A`rUWwkMoY&cs=cy@H*hj;x2t%P z?kygQHtRr{)@6(7^gL&AI1aY&0Z^Rk*fg>gh*t0H75N{1Q`=CKPrTyupjfd=VOAAxLwB1PMzM2Vj`LTWAezwi)P|>L7{W{kQ6=LKB{>vLi_vg zjqsxbRO*Vl8+<;d$F6&W`Zi_0C4eXmknWZAbDi|7Nhe8gw$uJdCtdUbdPtdSo(`9n z6^y3(3;4U3zXDhOU!luYlz$%jJ@Na{`e^ySsBpYmoj%;fjvHLp%H-qeRC73*S|#+X zpf9v=xDMC^EfkK+=y;2shSbU)KFfhVPjA)KEEv$0VxXdlUbq%9ezE_!8)y;mvGg}g zcshh8RS!C)%cBVLdTYA4_CyvJzLzUeU>UQUYTf?C0KeLiB!bqY#8Fs$2c$aGD(ffB z<(X$er1sS`Dc7jbYRBQkm9pLv_o~PK+P{|2xzRWb%gDmkUFef{nbyKG^+V}Ra^np9 z5)3RvA4D8kJwA~_YfHU5C1~pB;-xaJ8k{G9rNsvwAi>mqzf3P=4!c?KL@=VB(J-xc z$!QR=tzCk`l*|JoYx=ljTbKe9&5K#}y7g0~mCS%Nc%6XkZ2X@(wB$fOXP>+JzTI6oq%$hxkU|G#}3~>oR*UuQ6+(kIPxBv(E+YsGUzpMk(1u zso28mTzrUJ;s1SN;eS1;aBMz7#%2VinR|538BMyG1ws1`-gU)Kbut)wMg32S@uf5o zWL|XV!Y9^$*@^Z4O7hSD6H_U5NGoF{e@e;1Gow!Gi}o#O8l1KSaA`;2VBw{?HV*FK zFvjMZ(I=S6S$Z~~Cy{CJW}g$bEbuESF@Gm5Y1=GX`V|>ON6g>^0Klr%v?yN%k7~vK z3HUMxH|Qg^j{Az_lIDW=MDaxUYU>pR@vjV;<@MM>4};)b%!Bu4}%?f6ohh`=k>k}~7^F5~*Ga-?F>i}wih5&v^< zm;EYdR|I=0dO1_B)^O`BC5eT|~c1oXxNv|0}}+kw$L3(SxwbC zNCsj&5rNwmydpfaCi zwVrEQH%u)f&ZOW2>LhRGgbl6ZI|R~3>4g!pxlvN&RYiTU!muVeV? z)nCDYpZi+Q*D>+&lpP~qwNjyfzY{2ZD6_F)M!EECOpGycPmCm|99LPWLyl#+)IK~osnCB6#UtbM3Vs2}aEdt&0C*fk)rZ`1g)NrQ&zA}x24K<% zq`(Ieg*o4z1OzZ?+BR3f=RY@VHr&U&`-LdB0N=$P<*KXqEad=sK@jK-RKW6$=o>3Y z5N&N=ncUwVvA*kZu%g)7$)pJ6HOZvq+yI14<4~@$e<7z0tCu9GP#zF-zcL;l?xCoM zup3l2xMS)lx85?jAJ%Nuo`o>3ViiN+^RvzVOxU_6@2Dqad6PbvOzZR%^Gi;!@h*Gq zb6TY(E&xpcOiU(ec0_$fw5$m-Yt8E8h|;dah&oFp3hoH$pvCFc&C+-btaD;OPsz| zti3$zKHrKb_Q0X(E3O1!yI4?f$eH^OyS@WqbAub za!(}5fVXE|r%#5C4JqO|EOGer@dy0X*YZc+JF4whH$oC)o=UeqNL;2vAA*fd8%(fjl{!21*gAHQ_wj`?Tm0CEjo1Ktv*18ARoCO~1p0b$5 zt(Euq`Yyww6u_<7V|UZts1ut1QySoUJ-6;^>XeIx#O|*5z;UnOs!L`dAZP{9IAtR} z6?q6?sHcvT1zaPe8oq^4?rsgMed!E41}wWL;Z99176{;cmdTjg`6BG+vCc3 zxa`KsiR)V8y|s6@mb9Av2h(pGw{J9vW5YL{HY~~2BiGt=YygF(4|>f~YyfhzF8B=N zbG$s+*Y;gVF;B#54*w%Cv)?ZGCI0JVlU*RPAuR5&V%jbis6qSu$A>=Szf6s6*^u{$3qL@rrd|58YjZ?m7)P#xc6B;n1Hu4|5pk2zPT- z*rNm)%0VqirvY5kz#-Al%pW+Wp$ci9ggLhwyqJvh1HvEf5PQ=3nya}^6AukA4@7#! zS~ilpJswlf5u69f8n`9fs|9$MuboNH`zGPYs&4W4_aQ0d`@)iE<)_aLMt)UF5(QkC zOz@uT47;?wq@eH?9li9f3hSG`K^lW~lzo3f?*`BRod2sYl4^_VE_{eycCk-z8}w&Y zw^=PsLSH49`}8egJMHt>Ao`ZD8-dQ$H5IltA?3J0YMeNuZc6o{y^b|$wKQDoG^_`d z>(XE%mUvZ>zb=S!gUiOYci{Wl97?<3frW@+-Rbz zr@KJ@*+0i5S@(Xnpy?NW3LMwZ<66yT4$--M{Ba1&U~z}(Z6!OCPs2Eb47vbP7K{|$P}C$sBaj(0_5ORl4tFFHSdPG9#{xV^s(hPLooNsqa*g-=QSM8EPMj>AoD*YN-W)2B7~hz=7ajSNSk zaOnVOC-4N)zILVdsp<1{q>+(!QaoZ!tALVaKcpUX zCUzRyxCf;p>@5r~w?wQ5on?H`8O0Fn2>q&|Ku;Ivqf(O7uOwq&mr=i~P)SAT%?gu} z=06fYOU6|MjfQhBL&Fk9=y1I=IKYOzJ^y^>N9!EN;KB70_a6qSTP-_A~)(rDqG9kR~PY!*riaZVSV*7`_@e+maa zF&?~)Lov#&qjR4hWxX`N+$M%#?3ZI0uOx%UwK5N=1_wj+;03L7imlJ%u0 zwI)t>sWOzuu~!a=h@-Z%T<*d3qfK~apKB*-&R}P}vXDy&qaXzTMr-L$9>bX3W%|1q z9@Lb(@@mVy5pI-j0;3)Ypy!bpkdZ$)TDAmcYwS7HtewcV*wD{vLKsFQ2F= zC0Wo#7rLAHrt?u-lg_N%h0<5HAK~yEr$y7xL4Xy$skU=hYhcd;4Ab3}GOri{?nXjI z+WfznscW)&VfG&A=#HPF*SBV1x82d57^oSbZ0=*W=lt$K=qHaM6_ zh3u~U=fvxJa`b!%&~)@_jLJ3^RgfiuWqPOL$M5Vyyg~;F8qE zM|XUTEcD8!F2md=_2uXF&&99kpW@^EL>^K1cl_z=Jh*mb52|{PwEYqLCtF{Z?SV5@ z$0L}*BgjWyM_lCAgWSC8YCYnKBPFV@>Ml5irH+X=%uzk?smM&-uu_DDC$Q&2qr1?_ zFvpkKPlj&sRLA*VH>2{+h>eXpPGdBMNKIns!5pvc@FG9ekz$2k>OZK`1b?$#1SWDL zXhVE?hM8+WReY%o$-2Xrk?Whx!)c$B=Qf26QSeDEc{h(t|Dqt$73nEk%qed2p-N=^6yk4 z*SW__y9*!|3Nml!BPPs$*415rNF-lE%rtZf5r^jIi|K+X zE4*4SkS-yDi`)!f^mj{mhL;e({#=QE9>1s!ogJn->q2CzFQECDocYy7SRud=bc4_I z45$JD!u$S>EwmQ4F`M~W?n8G0i=J=ndp!PMOaYMWl!)K-MO`~-__ADjF!4*iIQI!d zmk#UPiOc1>U)e(HHjy%D=RF~7gpv`-gAZ~B@uME7UQ&%&`nC@?;=nKKal%|#^)Y>S zdv~F>|M;;}UN!}k`JFXvJQ4LcvqxfqGhOqUGv~;iD^D_oPV+6RsxK`o_#uCfOe`zd z#@_&c7XWP!^H)xNKj5#Mza#wl`F1nuf8>&}^;!n!~pf zldIY25ZFOBofyqEAwovxNJYVM)nZ8{1hRFzFH(1Vb;4kt+D|9Hb$bxjsG7vuL@9|Y zbRsdrRWzvW&N#bMQ^sd!K)X5$i<=|X+zOdnYi?Obb_wC3>Z|%+v*wkh8rbnAi)Kp# z8lva0QB%A2z6oIsQz3WwkX|>pEP|5BuFw;qH5t^k9ps!CZ$HKG*TQIVp3-H9MI0K3 zUCH=}kbg)h^-jquv(>kEEe>#6Y@QphmIp^5I*|ul!QHY|qPF}Ryo5Q9i!&H3I=^69 z|Gu-g;yna$0DllsS669VGo5bnDnjJ^T2vw7<8+rh#IKVegWAcUm9B6$V` zzA99|W9gxkIEeFJOPsN4*jJmy+(J~yAY{|KZDeKCRq{XljHH_k@0Tew3n zq~0UTd_rCCVnFzc94OqKF(C)4jP~D23&clhkpC{xp=`cOTdebUzKW%I`hAz#?XDDT znB4Rkk_w-h+aF|-ucS%_!4(-(cT&h$ISxfQHCK2V+F(pnGwDUSvFU~6Yz4K z&T2mk29MGqk3NGlY+2<@f)r>T){boEjQD0tyEISKZd&KPK$dFn`~LlzXXWcLpEDyC z1^(WQ_+&=9(aG)V?y zQD**J3QDB8J@lk80GXG#A}X|(To9?a@q5qs#-0XH@1b2R+*sjD)!L6BDj_@m}4giWui2it`2MVp>lfXyt zG^i{bQNYf-OZ37v$6WpSWpkmV|ARKR^S|JKPj}e7h~l{x65jkwI$Nx)5}TmZ*v*?i zhR$F=-_- z^e&Ko^4Mqx9+q%S{XKXXt>NLz*{guQ9@!oqT&|KwzGSR?oKm=6B@c{G4)FSYUQ-Vh z2|PHK=W1He)tkM(T0j^D7ufd#vS`?4RPSwKRO$CeCpUd$f?~@AV)?9r$&L*N znEzuF+Pdtt1(%%2Kk2N)%TLUe*SY7vD)3huWi#VI9jo*k2vQ*7r=I4yfY=J6jE-% zNGlHto~8SVGm=LOjeGa-s>hMK8aY&1XCEBh)>Y2PwxMCL$~w(tS2ppk$&tkB(+abH zCq2;9{`rPv;_tnmb5iQSGyncd5xY1`wY!ltulOCZ0fTL6VIl;Ppi0bHKqAy6a#Z^5 zVo9z_9vUA>wQB?v%`1K7{vUyrc3rQWBRqETBbeNVR?2}*n1RWLnJ1^i;v5=LPH!9# z`yqw(-r7bllE)pki+#uk z^p%diivYJAm-bmSrg3geU9P@Ee09M>U4CGOsdn- zfBJ88b~gw!2Gf|!J&D|3)GG$l$Y6$sctYb}+{X`&=wW8cq4#8TvZqfvOw*+4g>9^3 z4dY+V)w)wpKL@PeD4bTtv}b-yUA$+0%CFQVy>{d#nL9~Z^&Q;U+Um**-sA6~0KCAY zvVzlb; zzsSj<*QwwObV(=9kB(TmU+D1>%A9Lj1*$NKRAZoUQ7N|QFbH~vl7SHk;BG3L|3&*d z3yMYPM#3t@^oEL(J(<@??FRqfgOp!ZWoUh)>A( z81Y_+FQjg#sY~%t_MsHL#`l42&hYJx!+6S=C0u{yTmt;{Ib>= zIil#ebW4uwkV6rl|3CEpey8{6?~;1RTVNJ8VhONK4o9ZvOw)ffH$&K~HG+YinSnfV z=z&eN`u{dNUoZ*KX5j*%%`#pR*BM6g^MSZdl8O1kL67pnjGuKX|=r{{Nw0 zCyZN@NQI4@BzoKoSv8gs@Ga&?WjHk$3w*f105e435n`^7c%46BCYKTSqWxJq38C51 z!EY=uHKP5%fO&Q^+{PI>Mq`8q&tg>{@u%73H%8T;VxoV9KNiLYyF_6sXrU>Fc4DNy zU_rxky}+}scf3>Q?)d4tPRUi@bV9WVE@kg$Ky4|~Kmq~!9h{7#>iSbz+jUFa=u{=}OKM+C{2pZcyV<2A!E=k< zc_sf3^8Y%F#6RT!WvGsQ6&D9LLAZXw|7-ZK=(RWq-;Uf0JGk1hr`nG={u&3>PJ%v~ z(H#`UEM0b`uO@4_ctoYYgKj$<-qxAL-qwbZDE*b_v8iSMe#7XeAEEd|aS&(GZQZ!5 zh6q`@aT72nEb={U8;5nzp}Ub5-^5LSarv8sB%Zj7yAUpWT-co*4QT$4b8a40zCK3q zYs07ZjUh&Grc#o4jh$oS%vd0#tZHz)yUl##TLo-!6ZMeuC?Ruo&w!5}=idb}N%l*-C^~>=s1G1(S$3cm{I^;?dYV7CT!_O4CtY zs{3wPFVk~^zJm>!T2Y=`3B&=*3n=G_tz!*;V2BRj&MYV%%_hkNeWcii1Hu>N$0r<1 z+@&r+(yESL^|3&Gta3MxC=N|7+4;~x&lo0|{}3BhCF36mQonl^{y5Kw_8tunh%Umh z2+9`uM@f5;bG~R!lqf=DyapG7NI1?FZAP(uZUxHi8C7DX`oLD5QrTo+e^keR6d)vI zRrd=eEUnb&tV23f)#4s1ELU9-7bEKy`AxsU;hpS>0vJ!jviD<^s4|w?q4BC%pgso7 z7^xTzcJe5f&tqlyNI*FTF|IeH0@)?ZeS3icc6C~dP&!}b0IgYcp5)4E6@P7*BJd8z z2R|pDcxiu>%WA)k63`)4zfYRZYNAofs3sQMO+?P3`iN`kr_$khU$xlC*I*+NiQXhP zEiwy-&tw)n%z}C=lsPGj_8vnDjW0-fJ2O>snUowNc`{Q!;q4FBOig5_ghQ38MIFI{ zi~vL6BBqrqitJ=_IVe2fPO_v-#S|j^q~17wF4)mg7!n6g;V7;r(0^E2)t1Pbqx_T_-r-M zg2zycfRL%GBIU}k13l1f<`sb3YCz0gP@#Cm{1IiPVB&m~Fx_J|Wwa}ipcnlKc1P)1 z#*4mXJwo%OOR~zX<;^yc1+{E_zKVO5wg@H^-dy$=rRru*Tc8q$p|m%4bfkbkl|K&K znnYC9S6egtK0a6Ty6E!6uUuHg8BQ-J0_jCh6)_0j%G)2pzp1f*xFW*x{<%{m}0#g?k- zVoRm^jB3_y*fgb@b($zwft=>M3`_1C)#)Rx`lIkq#$)mOY5gfiH0A>%CQYOisn9a0 zFz`W*_Rr?>^%osrRQR(Uf(pO|DmC_?lumFE*P@Rx&1ST0pwFul z)xTA*$~u3_Fi{H~Xm&3FLwo7+7X@DCAUJtFt_B3m>?w<>p2aS+V3;*+G7Rg!$#1CX zAQoP^nh5`yM4Nb;rL;?kSF!sr@jGUnkLj>K64qS-j{!J@mQs zpPq*rDr~ax*FJ@>?Go(gfd4#X4bHkjk4J^M6*0V9$i)(?`UcV@A0B0!Ih!=*rK4)9 zr25u~434*2{!nI1W&*l@Qbz=2wH{>>ETuW_?tLXRY0MvIUC3Qi9B6Kf6nU;0wa8`o z{FOfMoLc+u=wwH1{y5M4in&F`He=(?y%)*BGm&rj#-bQh<>$ljuos0qcU1W$E4EN*Uo_Gqsn%DX|4GHmSmoMMLzkTU#bhUdFU_RE?84=7Q(pHl){> zI;co7oN(q5ZI4C>?OEkF9|XrQ7tJkg*^_*SpA5gzTMZ?1`dSAlT=V=>`+iK&WQ<@) z9p#0pXsvgWcDdkBWMp)~C64egVpVlid8tZN0Kur71d3IrDx%%Hl4Mv<70{IsBxAH? zU*%Jys!{huo5-8P%GqMJFjT2~nB+}r^ckQb`nRp6ImxQVrAcXR&P_sB(50Qq8Cgz6 z{p;}Ab!;P#uWSABWdb4Nx<=T~2JkM=(V91i`pBF*UVDC=*Q$8#Gt?x0yRtjm?)cWcuVI<~uW+>#oA(By zD^Jzfx#ga!nRC>hQctZdZH;Aerl&KQFQPi2o@=c!djrO&9Zve-=w8BxU`4{QRVeP@ zighCgL9`|7LjKt78bN0iA=Ss0xpJFSYc7dOwW51(2e zdQ9B37q|LK_)`}1HD=CNiu6{{9~y6>Vufh!a~A3F2l4rN`gT)y_Ubn6udHf_41f)c zO={4=CouKyV)#;=R8JUW36|+42I9-o#3S@(W;^V)-_^09+TU$L5{pNwkJI4*smOV~Q z=t^Q?;&pATIx|xu?Fgjn)N0rXI2U{j&R)e@9Eezn6)4EHt1_%0-f$45*gwMy>hG9zKqZ>qw zYxk5>U4zImwLechGuavKrN7g_LE$MH(J5K_3&gExPBc+O&P%%fm?-CYxgPxMEu5G{ zUm|48aI1TL965;F&tkuE2C>?;`;LO`LO&$7do`*B=y<|OLcbS(N0QU}#E^-BD7O;e zAlcsDTTq(Qn#;{v?*Jag=g3pOJgGF46I#bRCCw>MdGeGiPx(gs_THv_IXqug&^jK& z@O40}ZOP97Ai4~9pUZZcld^|`iNc*fO$D57P`gd7R}Zjd9U^1ErYQ)gI*NoF1RDaZ{FM z2d}|>h!dvt!{nBhH*x=i$lf|w>4vRldW0$s>mCJI|&(e?v@W0Unesy zI;Suf-Lg>Vio=+Z7c_dRjgK)d#rBMO*=iOuJiK+}u~8?tRLAemVfx;cySj>M=cgej z`avxpEZHckchr<>Le>kCi6+{Ub7-R|;CW>MrpUx-$5S^Ab}S>%&|Ccf*!=yvKO+3zfQfwEdI zfq}jYW!oHW^-cVr#guFq1-Y(n1jd7Q{3!gAx1Z{rJ!bc_58GtfJO;!WO4!?dQ? zyfr)F6(UZYaTSlR8CxmVA&)!x;(+-_9$#1>*0I|R(|lIm&cN%gDz;MI zzWa6FUg7%(cyq4zwZG$XcB~Z-yXBqe&YKHJmW_X`?4WE)seZTjs>8ers*)N!f7uLl zF}g5{emWBa4H!~9u5j(H@JXgyD6z6YAcnjcX&O7sR#CEzzNA|YQ1m_kwd!LhEV|aN zk27PlLL*E=Ww)V16;rUWUQpK04%D~)on|r1P}L9IrJ1bmzD&i3Z&w}FTHFXO`(*YR z&kn0t7#O6+BTqy)f1cg<#8Djt=qI+ycz`53aM8VXeZ``}R8nnViGb+4%ly@u>btS) zRd2`k>yUju%f6qj)uWeRLS<~My9rul95lMac^9`O8rO=@%zU6WpLu8t*XrmztRY2h z``l0~Hp_BcheIbi!2(@g`m`)iUck=fr7P_hy1d*H!I4wJ^9nL}WKZn`;Y-X{)jpa3 zEbeJn!Qo5D23h3k6_3Qu63j60nE0?2cdw4K9FB|Ao*ArJNv-d*>r|;X!Xtz||B{Q7 zi;PBI;xiafNB$KQkbl59OA4hMF9}1!Y0LXGj4K=VR2MpIV2DROnwHC<4xz zT?7^a@5koD3x^9>Zx4F%9UGZRMu7NQp{(pX4qQ>hQIazkT$wI9lcKG+$f^)+I)N7- z);i3;T18yc7NE!qB#&PkWQkJ&Z-H*#VS_I-m031?MQ~g%D{QM-L}b5cZ=M#|g;c+Q zf#y*G^0rz>_b)J4&g!FQomMBw|6N(;XGY;pCe;M;wf1>fHQuRieoITd^ceE;?JbZ_oSl{^u? z$y-hi-=53UUytK!f$#g{EckX^`Wf&Q`JrGiWM(%EX^Eit+6sQaUUMUj30itZ-x5gq zLK3&eVN7;mU_jU!<#1*)$d3QaiKqeiiVf6iW4;pZgt+TQIh@l`41I_65lFXVURlO} zC$RTcd`mw~7DHI6I8^GgJ)Wmz6EnrjQH`v%fVdjjEygT&vF7e_hvIit1Un`a7ts44 z4n=~|#l@~U`9Whq!WlF+*2gOJ4&O}4r8HD*{!G`L0i6755`@S0)kuEqt_J?Id;GRZ z75lC5E3BEb2e781ub@WrYfCwkTbf?U!l0vBj1X8*N?$;GK5sJ7lj}YHtB$Mi$*#!z zi970}S2`m3A!BRev=EUw$sZpbH`x*SSGtR*Nf&XCfE&si+~(?hIWI>pu`g~atBNCK zgg71*`64NuG*?+w5;@&pIlDCCCS{jOK?Qn_@W41A-Ae*egF0SA^wi|7T6(I&7?6L! z%C91y19hn~@H2PcER)@AjVq=keQSj^Hrui@zycI(I?cK=j?c2fACYr$VP{+Sr0CpXkb$KC0Od_vubNyV?z z?bK%uWjAJE#0VXQH-7W&(GCX!#BU&gaXBKx%tNxh8l8Bbs3eC$!;UO)J0ho>yR95` z@H0nQneMd$3G@3mWr3855V?-5qf7hEy9m?D1ld_QzgDvcn$VLn$ADCb%9k2T)HvMEktZI#B2qFatY2|BE?7?3TfqG zoB6K_^&pihiGv+4@87le!j1A-JpYOl+j~x`w%a>2M%BK>{Hg3v(q7BwYEK>3jgOQ* z7tP$tv81XvNF>lXnhF_!;oBB-{C7T1uHcxU$d$MmSl|Y%5G;m&R=xNwnV_q0hNy3D zsNhzi!W?XUHNkfCwwQ4*)?ITjOqozo9~+y4rKq5w8=CIlnym82zV^S@zuTtBYFGZG@T3*=pmdBj+wPDyeg{FUF-0b> zVC0;D#LM0k9%sjK2hqjtR*HUM!{Ml}%!#nX+H-@^HvYetlh{O(ZHBFl-;#rAU?r*x^&M*?faW#-k~KG!T2~7UWnwpTvC)x13U2&-P5Zr`>iBZ&M%&Ot|&7O zon;Z}`YdXs@Ov~)q7r9Aza#&Uy9-=ZMCV&*Kd?TQllVG|L!1i2h*z`xSUVw zW6s2-{1w?gw$oMa$p9V+k%If0D?UHm)1wiPzx!JNJ79zb@;&l$c({Uch90T&S4EGn z6n>?NsG#^>(v3aX7^$N!-Uv8))Y?7)%jh73SiUM7TdgX($} z)iv_($l=gB<|RGWBIe)$V;|OcYO#LQq*x2MyC?Z1I=|GR#UBzr&iIq)4;n4K@>|q4 zWT*q}$**wy8Jh!RQ6a?EmV=<}Gl9v!y1~5q64~9g=If{+WZVr)v$&R;{nDA}VlR)C z@<_jGg>5F35aeWPJwG}TTWW&1G(f3G4y(GkzwYBC!G*Zg8?mMBG?->d{Egg2#}`+m zN(uuf>EFfzfWoNpjM#Cc&@SAh3X`pK=~C;`wJIsPXQ)yLIY)iiCub#g1ahl*10&X+ zkIMy*_I&#bjwAxlbJx8f@AaN_k?-o!B^G_T5)n?jZanOgK^cU5>n`CIHo8~ywVN)0 zG!`Hs(E(B%KG>7CVaq*2^w0!epJWj1oj6P+FI!cJ#F)sKkt_+4wWWC|a003k-MI0Jr zXn{PX$={Qg4@MK(F+S8syV9C)hKT$N)QQ0D`Xf0w4jx(x~g@Xu{c(xY( zh$Exb10#Pu<#2A`u@=9LdlI3-ns3gS==8GuCs$a@|6Dp2GTt@L{trHsAtwfV&R)#3 z*78HDwX|ymUVe4sMvRIi{aU)uLBDYB0hQF2d1Vnc%Vh%;vW`?f)S5ZBNC__JwU&!1 zVIKR4xP1ihQ?4j|Jth|<-J_k`{hs%hd|jpWd~cM2e}>V{F2CpCk}ncQfsZZQHPr(} zdqH9p6OMOpr%K;;Tz4D~cuehn$ulO5+TQE;9MJCnwPe01`oZ18+Zb0Ds~ao7$6Rs| zrMSGJm})_dQI5JNwjh`P+YkFa-AnFQHPe);T%uS}Ibz7f67zfpm0dkCE>qRJCu#?3e=vopoT?R*aNK80O_`N|2`Qf9cS-> z{=&n_bu!oIiDn*liGEnn8oAzFs3sx*iL(h2o12$Weu`Xlv=L!~Bn+@E5)0?G-Y71INv`*phf} zibYyu)0Y!uc?B)p5(_*g4aEX0@ly1(9-q>Lm!nnYw{SYWLix4ZWp6^KHjv-dUl_BT1*MywkZNpk2DmFErX!nZqD!OyM1R%jM0R)kDODo5I7a z9$qg!ED-OYd@X{ah5tH$JuEEdx6<-u5owStEZ6q)kekA)oe^E)f?PZZ5N*G@+suJf zmE6e4=4?%z2RnlBNf1bE^NmgTVo^=lba#F-$B`JwkiBvOXz=xP2%QRFB)G+0J%pd` zXwUVEXvDYlT?yi;@G6VUCGr&}iX)Fkv4+IHoZs$y(FroIcDo!ed(NKW8tRDLqbTse zo(Zt8j*{?fBVQ-kBGE|ZioU{IOl=F0<7(Zw)fMu*9YJ~jR=1+fh9c$=)(Rv4G$|{r z2ZK`E^7<5+e)>X-OfSS(FJ!!J?MyPU3~*6bD0aRdD?fj1-r$WBi<#Wl*}l&M1*41E zn}(tZk$2uynI9pV zx-q!Z$Qx9dKec+OV=-zlMU#0j&+#GtzPyUZWaJ_}e)b@qgtPdLT;0Trc7Ah^!#s0> z$Oqy@=g0?fl%_aQB?>^pzlA6q?eDA^{y-SeVmZ&2z($KpYWwVf;y+69%7r}0^d5=; zTJu&qryPiEP`y;TEtcVf8K@GFh6`5Zbib@J?{DG{ncP5Lpz^fl`$A+qwkDsy|M8xckW5z|EOR)&;Oaa!iRU!s2j^pmD zX5)B^hxjUM-n#0omD{kH0zlubeRbB;{FP`GDu|eswa!-X&)V#hHSnU8?d<{y}VP89(K*SoZs{3eNE0}!_XSk zQPs0$&3bfwF|nW`Pszw>T{Ufq1v!10|GEQRQ}aXh+pT`zR=KPCLf(Y`Mi66_atcM$qGAfih=?gerE8+o7m;xt#D#uxKi z_yRMws2Omk48`#?ZCqDkega`6uS^$~LjGN-ms7H*8*x36!;j>0*Nl5)HY%>1 z5w3rq)1(qb065ej#MzF*FQE6L$NW zj%wkrCfo35jC%HlWQWiBiRaTfzoD=aBQZAUjNnq4k}e66T)#?7yq$$GO5V_~zk!Q) zjClhKX5|*LTl!fw2D>y_T&VHOf!VnMf5>4R)S>U{_FcAv7B_1XHv`q}O^1`=i+s2* zOST2*)mzE+KIdW2n{zf&2H=TwkzRoxh^VAjCF@ru6Yr*bq~xP+9V>5j_<>piUKA-p ztiv|hUVO%;o%^>R3B+rXs8}^t>vad?_Z&mL=9pf`dJ&EFj+SKOxmU*rpF{tA#t`3_ zE~B%(dz84f-t26zjt7tVuw1#AbIUQ1RnW|Mg#bi>$1GZ>eNJpoE0Vz;&vl!HxVrB)kmm2BIRKdJjq2M!5=#?dj zHGe?oRmUp&bnHDk#zc0?04{+KK?Ed1tV@(cOFD)&2g}XsR*iIPs?1}pm{-oUI+$L4 zvL4dcpt9j*x~s(VmiX2zP~7kVxdW2XV_~hWMl|8aGh-S5;gPl|k>hpXPN6vq!NH1< zG0hb+h6M@0RlYg+Vrtn25h}B4A>Qpt7Hx+t+Mp9X=^f$A)SBm*3}3P{XlyofaCacG zeZ3r?|LU`T3te4v{D|#-Qald=KNt>>(($|{_A}HI$6@x2*iq;d{?g$+N~tI4*3(@h zV1{mVR2x^hs>|DhJ*JQq9TgUOs5_CC?wmWfx}2-Yj$luBaIHm#el@6HDe5R+7i3*k z2g?Ut9nV8kRC*4P>{FZ6yWI@2>p0h8PONKHok34$NULgR;Dm&r*CjK$Ye4|@B(l!B zhY@d{$*DKJ6xBnTeu{LMjU%L>$Z~|jT<0?XL}(Hb`DO@bs2oA^7JGczWOJBV!!!%k z6#oFgPUN`Rswk>GcC9jTTVFuID4xCaHEBqAy5`}4c<{A)`#z`6QB(HW3)vjbXN$cX zo%c@jb)_%>3*Q#L07b>~_2}Nc-0kmvhjEc1^oj+MUWe1UIJ6=aI%K`gL~x5?HmBEUrXXB7S}Ye8;#rEm%L!tB@j z*7B7@H?3R`;ugaE@L$LwxWNXuUN`siBEYV&P}G9F{i0As{V04%<4DNUHg6oO z)vLGfb*5Rdb)#Y6jq$Kz>*lhtcd3gFkmJbt^SD~*5=knk*1dGj(WJRtjC#!PtKTN| zdyo1J%P;>#=PWP7URd!=?&nrOMa4iZU}C$%wp0)Moj>p;RD+(q7rqFlXB2I-5?C>? zk!Wm72hU{7bbH3fZh79V3S1-MSL5^C zzCT;2rFh_c^L4R`mXp9&M7sJu!U;%yt+SE9L`S&Hx95vo0ce3W}FQfrW=(e|M2yz6txWqdW(;6gYxuf_0jy|{aPVGAQpxbiyd3yP7hCMA9ABD9bY_V5q@o>D_V!nBhDT>W-CFalN z*vRNnRK*{Qiw0)j0A=VOBCvFaoYOxSn%04sZ zoBv6`M~NsUjv!;-Ai5B1CcR#;HV?2~rcgn3v3c7^vN$9`hEK3N;hF^m+y-Z#h>dlI zf2ljO0{ou*Uw#4<258T1<`~55cX$n-&qG8W&f#I9JdEIBnv@(!$@YC%NT5!sBH!F0pRK<*jjL7mYEdQCDcX7x{m?&JMMQh%Jc=M} z$0Z1`?+TkwqouRi*r%~bFi@O^b~x;HncN}dScx0FiDiST_rGnP?& zE%1GLs0H6ug`WXmPLL<+hssQfe&{b~Oi&4ur?^IxmQJM~Dw`J?p)AOW_=)nBAnE%& znxSd_+1$~C^(R}n=$d8ZPwKqTmzI0w%0I1NrjTy)*Q}|z`mZuIRFcszdl4X{6os73 z2o!dU`Cn?OfO-!PQYn@oNvP-NYwu>ey*J-Dp}omj?L8=nE$xj@wRc|s_7GTyN)aON z@NGxpu}QnH6VL}xDvB3h- zBb^L^@pfPAx??`$+GE(I_@aAz`EB1@q`t(4T)h=auan}xx&6Id>1U2ZhHwR!Vc40k z3k9Rqwb1e9gN!^%g-yvmNLEPUA389N-!J z5Qoo4f}W4&!M47#;crkmXjPT|4Xp^7>dBb@=YCi!lC15U;XAWlTbP&qbiu~euPR* zByeeX-`kY)+wbOssvQ5UPV3R> zpVcK#)!3C4jQIdDrvMX1ea&x-H)i@~b)JEjjh^mV+vIQik-_$zs>-c$4u8^lkjz(3 zp7{hutUcY-aTk3!;oIwf?C?8xNYy9HjtzfODn5DE6FuFT>Z)SY^uhsLCANGrUrt*E zo`c3lZSp#(7VpW#K)(m8+QZu9Bgh>|*(51DaEqW#-aNZ&w9j~N_NLKm7Ipb&%}$Q) zc~90vd+%`cb5I7ry{yXV`4Dedn2hBcN7|Faxzj~Ypx4Uj_80c7bpZeNBg0h*>(+Tp z+fom6l7r|5(@KBg0r>av@w^SBv4##7a$4pF5ZlB}wn;e98GY8^qel>+!Ijdmd6L$+P*c~e_{o08yz zxH?w=76!L?RoYf_`Gxtor+L|IR)1Brs9IsCXA0mNW+}G!R zM-ky_a%)c{y?v=}^0TR~5L%1sa$Gh(%~0T=aWq4LUtV-M<{VeW^X{WeHC$c!YkK+d zQ29nM4LY2npZ?e-x&9a$YnK!RVwYq{@w<@Tm5fVBvG^DFBd(KoA<6O=l5D*`r2Yy# zm7gA9Tix<^?Y`xFlcLA|S-ly8yvruYX(H{MWm=T^lSp9zF`JNPbw_(!X@y#UzFC_r z>THwg%<_~=2tktZ&f%+6QNQzuEaJX&T5bf&vWn~xV!gR<8TB=U{=bFL(_mkMEH#v* zYjD1I5^A6BO3dzx^y9=@%Eo8%=|tZGRwrV^|GTGqtq}U`fl3GXG(eCHA^wndB)=Wl z{BY4VKOc}K2Kha^0|pG$*ymcWR2Nqpw+) z>s$JFp#ltwWIygj+YhrXKqS}}I&I=VdmA|?+c5ZOGg+?+y(&A&uEBK}8%F!SJbOpQ zsXOj_3O8}tg>ctjxYwfd{=#?tVxQbbIt3UI$M~wD=ws4JL&=vLC1!JNd@&JJ~c&v7!8)Jf`U+AF|u5?!Tive=LCw8uDro zsNcq7Z#9`2wdOi!`0q}+>0JMN)$7eC*>=X~3}4-MHyi#uu2k7|zU>G`H?Zy8R_d+x ze5@^BBr3mP@7UC~GgfQ4i8St|%n`WV*Ns=qBK3Exna^KwRTxLh3V(_f7>bU?P*k`5 zDJoHB_ug|qd;dW%~b&mW+8 zYClMm{{NppKLvk&{p|?V+-^o{6zA0ur!->O|XPEIk#f<-n z#rA&@GcNH+)t;WBiX~dhbv84eJjY_jd(_|0X2y3?Mu<+@AQp0(Kw0P-!96E@{${6oPGun{Kn^Bmc+jAG!KYi49*q z%yY*6@smu>e@Tw$NSITz%0D5gmi=Q1PNoKjjEQb8`VfsyE)mN|OS-yEMB{Q}f#u_% zvr`kPi`7lFu{R`v#c;%0-K4F4_%Wu=Xc5NQDC+&|5bT(+Lx4UT z%C)*D|9#RT0|^H67D~s7Qcr$ID&bi)k`u!``FlvvT8i`KBs3z($_b%HgO@$em``ve zXZ*g2x+MzZ_r0abDU4+MN|;Y)gbN9iT7 zpxpUxaJI#VJGeabax6nW+botI+&2+OSI!)IC?09!x{yb&pNlQHuSQD|d-hqfiSMH5 zO3}Aa`bITyLYGia;c zG=)Ltt7oEqjja34VCB^EP}lM>lfG`~ea}xjv>lC?_d!hz9i~R@b`tFso~~ zLm#{h^%cLk@<)3~`cb2_=l^{_#aL*~yP1xL-cip=n=;+g@>EZ$&kKjNp^ck$<*$HK z8jAH8D2-NT_-9(43LXW8)%zgpeHrg&{Zj+c&viuxt!3IB=3LS=w^O?yuo6{Q!UmhZ zkMrcJW{^_vFs~yY{UcEyMTNp0J?@B<#BX37ZZV%2neQNktLW1EJw00VWv0G+KHxI1 z-H#T7GNj?`3Xkeb?&yA&+{$<>ZE7vQ;MtQO+5>)Kx_arI;3pSCYtY_LTF)*@~-`R0v(sXRY_nsz=1T@{-%jG6fRywQCpwTLf#E0AnzrD zy!n(<9~{fcwre2#PkYL&VSBg2-5ZrfgJo?B?utc2YbgF*gwP6gjU%c3!NQPdSz1{b za6D*WZ$s*kdAKW7JXvpV?5+b8K@>C{ zb6?@z{Ph!kFn29!eKB|0N7~xb!8V(P=T>t!cZwe)>0 z@40_4XQjTc@9-9jWJ)g)sx?5yJVcbuvum->OZW#C1u@$wTVHei6!j0^E)pH)fTahi zSNdF9bSX$LUW;nXCQw9A;$x1>$yg(r5QVzuaAX)d+v*vIn9^^bJMkrN^Cw|+q|wH3 z>YlNY(+PZ?7!r!%*+vo?-NgPtCp(DN3t_XH<`=VE4*@UbpH8QKoBF#zlV_i+`)Aak6XH068xx5KgnHv3@ub6_ruics zm=dUtQaUEFdFi~*6&WBN#S=qSC7zrJ(aMJ4y(Y%@v0Ob?Lpj|gt)AH8HS`k=6Y7r* zl0T_7#OLT$u3$`hMH|<+B1It@4#sNS-JF5xFRgp7ajRqkm67}pLGTzF={$>R-RBtW zYN?41V+1oq4fQJeAuXr-A(L{lv7$vvvcO5k?oOcnI7E+)=ktFzT5)n9z>`0x9_;`b ztw2k%{y?x zQ(05u(;jR~&}n&kpiSIe=j#TlZo1)h%SYiIU@OU5v+z>Yp2EmQN-tQ{f-S{*l#p@3 zTw^|>#4u15=f)}*xU;_dM||NEpoIqn@d%N)CTI*)Fg#n$UeKC0&x)+K@S#MxED=>~ zq`g1MoEKSzR7Uup(lcH2gYBALsh7;Xuy3C%{>Ip9=JxMXg4H4Y10&blY9l9Vc`5y_ zDd-Yq-Fs$Paokech~o>Tle*v1=L^Ly2*qYej2vA1d=Gv@kD(Pa(aTu{9KRF6)Do|9 z6E(3++(b<*!+CKT1#0aAQz=ku70^`yT@{GWfK7VBa(5XkC$2bnw8a!&fkF6Vx0lB5 z42w)wcwH3cW@5tCphqz!$2#u3`sfw7i>fv@hy$ec;s6PEQ4?^0q&zZA*3H#l#K8lR z1!Z29RZ4yIGQJ2Je*;L$82x7D;0QdNTxPaXx@Tgk!_kIjt(euBU)n5~EY6JXc#Wsn zM7KH2O0rxV++d{^o1bn{1+CPsJ#dV>%x)`ma28Z3hVhPYo)}{;y&Y#lSHhIv$qKu(n6a0L9yaT$?`_hp)7Pu@LM}+jkcY`;lP_G+~Er;-r$ zvk)rqipXKA+HjZ;F}*?$`D|MEe`Y?DmLNT;paJyCoF&H$V910soB`pwloRQ}*;*%yG;O*FClyAltjiT(|86Xbhi}rJV<5eU>i>aLSK> zP#;jm=0PR2@G!MsjWl;n$c7J_p3)n$J$KCLUQ2cwNNPRxF@;jj;mlv7Dx+9K(Fh-4 zKKzXW4!TTE99qq04v_|;>^1hYZ1p*^w`Z9~sWwifk4c;*Na0%e1BdDD+tvlN^|Cl% zh40vzI z)+ZX-LaAbZ2)jhF7JiPUA2f;uf5y^z%Y6rYKqD(fH)>o> z_dw-Gt_W3rt7IZ?EqjbUXY&#+=5qn?7A`( zyVQFq&dH0NPBf`ylw(D{pdcbMUSrNc#ZKl9tJp693uWq=JtkJ{N%h|#hYS$<43%zh zA#rG03^IR7_!X>N+@izz^JkQ5_gUgoZtD1>qR4!xX#tr1W{RE*S*N%VckI_};?7$3 z3Ut#8S~|*@I1gC1rqQ)c43zJ%_l>IuSy7mR?g}?r?b{eJdrUS)tR0A|CCv*zTBVq! z$his)9g5rf2F8(=JTsFR{y0%WVV5c}O!rKMBUZUyl@ta$K*t%4k>zZ;b@^1E&sOJA_{O;ds^Jh5Ed5;|xXKI@4PqDc&U2k2Flt?e@yq3Mguf)qi}lHW zIVzwWf+`g}Jp8(F$4RKoGOrB426XPl0_dtT!+pVx4Ql;KmO0UtUV~#5fQHKPhxx4# zOSshLvtFf$r9wJIVPP5!GXF3QA+#e{R#xO5g?C5TxI-S!TsSX_j54oR;&Mm?UGC83 zWG8f2!Lu59V)G(kCGb$ANAEszopovhB}S(XV4B)5QQ5c1&&Ohm=S^G~Owp>d$PdZE zWT@<7KpLLbVt*l3R!W;9slxi5OM~Jp#~boM4kF8}4iO#>b~9_5)u?PczcST1M58j1 zP^6Erzlabp(&FwT2=0NCg|Nd@_?k%zf2_=d6BqG;g|t?Gy{f-R@KjM7c};l%pf$R2 znt<4=&IcC%uN#Zq325B}>rlZN<8Y!VXf)y`Zll&B>LyJ~VCivg5aA>`gTv4Oy|O_a zRU2K2)AY(Qa!mEeF?9h)vD5X+izDaDCvsfbk{GF0$2NtcMXZNTdrV>A%|VsobKFSQ z>}JA)g|my@?CusVOq7Y;P#5*>P@Dhbd;9ovNX~wVJLP<*8w0SW4tXZHg-hO*_=2<_ zG^W~Jrh76zF|n4vA^6MmDC9+shZ9_SWrZ9MIbo3|1vw;pUE1miT$rrZi+!!$;?}E+ zn-&)%p4tL-OBJ3*m)0yCv3(wDS|Vq2JiwtqutjTGsTP6ACA5}}YCw}XSs^;O-a5oj za&xc1Fj;k&`x!ZEqyQ2p(~u&ak*P))2Zv)_^^;^zu|V7<5SQcrNSzQCEJAf=(^@1* zysD~L+zfKKYigv&DhzAtErMMn-Q2zru8oc`lC9=Xq2N*pdW*%3pw(AwU3qX&HnvJZ zb1x;j#p!|?!4zu*h1LKtlNY^fX^bWI86)7hFC&1u%81l)pK;#A=Q4&ub-2Xv$m+Ea zZD7Jc&a}D-P3y&TC>7MWw3hp!!3l4=h!G&jlNW-493%}w9W6P_OFu>F}BcykgSlW zJrWQ)#xi88PB`x{ijn3}x|2EOPzKg&qavSKdk3^Ge5KI26nzk45Hva!CyJYG=8mIO zijKc{nH*H$5rkP1DiHMSj=W;mNyJXDrT?xZq^U$1DXaZhS%_JC)477$>Ah)$LUi_K zdv6LsM3sCYGBT*Ry=uIQ%9h0GYoH}~IB`qTn*XS9x2jBYv#V){&E2d!ZHVrU&W9Ho z5AKwG_Ez=RN}wjJk1!>7%5h)z=Ii7u;BZx0bg|nZ>eJpuHR8!5WDLMw0m3*o=rKWC z<4$m&Hmn+O(d#lVYg4@O8M0~dU3vzDWntS|TJMIHTB66kg4p$MQb=vi5Ogcw+Ux8W z^g}oiAmhpG+JGmsV{<;u?ARa(!Wj>&vQxg`NbqpmddnXg&W3(nS}R-N()U-YLFS+J zTl>r_fGqJXj0uLby0F!DFbY%Nq; zX8xh9z>&}>P+~Q1-is@%Q02UtL>@HmZ=w!mbiYqzYvp31fvLKfcIdO)Zj-~J?33oR zL}H^0W%b(kCUSFFwE9`>QH)3BYn+j5)7lPcw{FyK?y3)Ji@TCH&XjNNQQv6I_bO>8 z?@Y5+W=)iGCNB6CuWm?=Xgdc~h`uPbIlw)9{VCMKv(T4%xT0A4lAxZL+of+4vhAOB zqcS81+}DM1<2Ky<0oR1WhP?1g%VeFCo*4IbVQ8E)=WNsv)X7PfPY4TBAzbXm)*@nP zKe`oh>kr%diCejUxZy??fnb?#dl|}RWa>qbfHbNy4#k<`c2sSFMnuPc$%XrD?|QUgi$;=p0zRa9e3h(!*(1v?#iU^Or<|c`XH6g_R(hk!A{p&7O-EX z(}gIlOlQ@S6}_@dYq^mJPH}nZa^`|`A&-@3wW;c!kSt9t&uQf$@=oQQ zpU!(%CM!Of{g^yeXJI;Tiq)CU0jt??EeXR3`8FblyBGuOyTA zqjcUhD-V};slF_cJhiVggNjGe9%{2G6a0>{r-z-$fAp6&`B7>P$l5rH2t&kbI4ta7 znaJ{I3U)v%#ws~Fb6jAKw%T?@LZZq*mQ2`B4-0LNR4NZoMWcRMC<>kk<@bCF9>Z&c z_T1HUnrFTv?*+U^hNu!k&vgncuORU4Y$zz$0tHa3RRR;a~Cd%)kjjhG1Q#u%vE0Jpnu|a zZXmbW@^vi`s_7@*csYG+r?6&7&DP`HmH?l&wNI2g@N!_flEKzz?k)G-=FQZkV_Z2+s%+T|F_ja8_S|~CuG8!)!Mxqrt2PD^7Xxpw z=0JRYQhV;Gb7AQ{V*lwOL$6Du_<80+_r`R?(&%s7Ew7bL4Mo)0hME7(meqvs6BJMJdkl|8Z7IbIM3)beWUwAf(fF0D2;hT=EoVBfpiU4=^lI)t4mp#(KRkppyEhbw3##m8Cec%0I1S-3Ok{IvW~ za)Sp?2MZrjBbHk4I>*8SW$cAT1;`%H`N zG=GUeI2rkpk$>0khsfeeoMq(yhyCalU-7VETTM3&R1;5@eNwPJXuKqGxYPo$1?2cC zZPT%C>LOb=mX|ikUr536_toAhD?O!q(r*LxP7#Wr$L}a@m$Qr%6h!1Y+b}~$U`e&H z&j;JUKO_IK2|@vw7dW6xStg-)bpiO5H0R-!N3Ow3WbGJJxaSCbh?j^Y1@07#_fqO8 zi3p5@Zo~sU@=(FU?ef6MBQQ@MO3YVg+OTC&289^s_tUbrz z>o%D;j}o+&3k}QVCD>PI2wbcwGysYK1H*9qJiD! zJy_7{Ig7O9dTR0PUidfVqoX5*9U0WH`e$Bt1gAxTJL&5ZA5LNdu?UlxS8C*c`d>pF zu^g(Tex^*u-@_3I)RMt+`Vq!V#w(cBCV!W{w30t!2r_-WnvC2CqM~X%&3ltCpdIWm ztATU(S~hTrw%YtW583s9mHKHeyBgV^aW;~YH!Dd8>IJ&-K9`~m;t+qj$$z-{9pNj) ziKD$AFaJquKmL`#BNi})Tp&g5G-Gedh8&OsK;&$tn`q*%J(vAh1|lnnjj>?{m*4c= zWPA3$lir?xJW{4oZO=QFsqLBTswoE&FEGDs#MP!b?L*moryKyK_ew&2M_{kZwK1@t z|9^LxgE8sy8v)M0Qw~Tr!}IcgEdMKv>FB7+rJuMUcgW?ROJEiQV^YP< z?*f(?@hv>&7dWunsv}<7weE-e-anUt5G*U@G6o_l!mX)FqWB(O;>Wx}MhQ`HRKy-7 zlT?9AkYcM?ARFsr#i<)pQEVcP)mW4=XfiQeS6%kg0hBp>(Q#f;=7$u2!`6xeJ> zQn2>zi9bvdWZ+7N1X@Z(7norybjW#mt2yOI^wSde=^}Qj5w3G;dQ@p}z8o_Cs+3_Y z&w&lWj;fV1#$aq3((c*CFr~RqrI}J(9d@UDUF{CWCOvIDWDyuhcBkMaYcEB@6<@#= zD#Ak;;a+@Z&!E2W%Je{+;77k!#%f9z*MApEgEh~aDO8Cg;F z9Z|V2U_KI4EfyL2g9ara-ZM;onJ6YL%fkm{u(PY6sz*_>_YA$9-im&gmq zYne{uRrvaDRXsdqJcVJ7kCRP*P=kmpfokwo6A*%by(`tLndx3VLQ5+M>{aT+vLd@z zti$W*)jd`phjNaPie5(%xqtI#^$qy&5HLwtQNWU)s#O%i{+lh_^N&0>TIG0o8s>Pj zy(x3NTa=rn^m;B)7sN5e6`)ID$58p2FaX9=E7i={VN@z-W`$94s{;4SysGn%nN09S z{3*e!lPSi$fBaAq3``LKD_T&MrBB0ImN+-|K~2jOniZm@%pCNn9IdbGTX@66k|-xqVx4e9AfZ^w%*nqw0zaW{F_j+E z2pdOWkR-d|(?b#zM9zu2phn5tOciImY@vv{zpjm_S0qKmNb(C_+aYY0e3;xwFINz~ z@I1QVxEy+nTH(cSBpTAlJ!xtRxi5O?B*<+(Ac@y!Ave$X+JpXYF=x{yqc_@{8$nm4 zN=XliQdBhj@j?fZ!}z2|^DtBcmmEzrts%J&O{_5xs*3vHLc$D9$C|X?x`Cjo%kcMFKWK;HEWq zN@UD<(bUHTc1?d)XpG=h#mlU2GfRF=o33m7rEMPuIV|HOwaX<8)U9Y9nY*=M($$wDK$kN2=+scI(kaWkT6V zTK%-Z3{A55lyveGw}leQKl4`eI%dS^1&|D^owAE0??vF@Tq{=T`qme&+?6nR^ zZ>{WmHL>YW#HO!|1%3`wyec+*MQnOgZ2Hr&>5lOd zi(XN@X@A7Z+N6xcFp!fWOLWpQ-{3Lb0?>nJ;%%=_VELPI#yL>IZ- zAdx!V)R=4kLdOy6$~ftN%RLg;L9{*ZQUM;SIU(VzIPh3XtnjoFD!2fKt=oZB9n!7*ig@KUaxf$fmv3 z9KKJ>v(>y%#XtMhzsVF|;yARnI zRkG8@D2YNv#x1Fgf>g#xD`P<_NoNi{bUH@+#TJU*ftJo?)(otlTG~k%w+czW=;0rgMh$E4& zzE|B3!{*ViS|7?HE>F?#$c_xQ8$&w1XrTc5Qu^}m0sOw$ET3fWxJw|E+FEawmlS{} z$%_K8N0sR`tA?il{3NxhS=U^SYzF}>&I;Jtk?WomSTCFbQEs(#RiY{ zCGnx^Jp~~BKoXreMHp{;VhEMft?Nq{GUeKRJJ>pG{Z5*UO=(u1T7N+*$Fp`YqdnkU z7p!Z8!CqzLEhA>!x$9}ZIZO%Tps@#mMJ!Okf9@;;UjAckviS1&HA&`iyU)2puUlsf zUKXpaz;oi_!Ke#x8)W3&9}8UKBQ^nDTSQ_`Dse2cy3iM|N_sjMRmQK$=~v0P{*`!7 zR*7Fq6>$fYZc9%Ulhkx$>_by7w$x1g#!lm?Py8Q%peg(`t~!pNgmc?{oDYU+t8<+P zwAJI2erK1qdXw`o=jZ4;E9%f|2ziN%GUeATZxGdt{bx#Z_(Gt(vF8w8WA?dt4E(z1 zP@(;d8v=Pj#=I&v_)!$40&C8bsZPYYbUNxCJ?eSvs8JQ~Et;E2~OK?G1PZ&ah!md|2f3}rR)1vP32 zP9tMd99i_wE9hCt!qcqKb!bKV(25?35s}L{`w6~C6p9+4L&ic8HSglhzZ z+-`c>7Z0xYY2Ry?pU%V}`LkYrHXqX7*~I_0gW9d_=A5@>!~Jrb#R_m@7X<;o$Ozz( z?t7Yw&0%%92wNlNik6#a=Va4GIWoQdn21hN$BpjY5>=4NvDhj?auCBBUvuUYKY>(o zx%_tr71+0KH85Dn;Tf(`uxv9YtIqJM=0nw?wurNZKFPU3Yj*M| zRIT|4H44#Fp?6aPE{_T&tlhtjl++~Mzm6A!lW+Um907JIinohZ z+3Al}cll$}|FSW#7el)#o#uC*vX2g&8n7A_W)|OXugG?|2^NhduTnS)bHYG2!q#fu zmmJ_|rcY-;_6b})(-E#p9iZhz8?UAJ<}2e05aN9gv$V9{W5~)<>W{kdNRtd9UUZ-p zdBqJgIgT-}g^$|v+C4zLb^xs}(3tdJG0;;uY#wo|ac5>xV)l!7CtSyzQ} z{CY_~6`S%4^-bFe2h`i>e0mqXMqX08=oRv!cG0h>GM(n9gHyZc)X!?lbBd;hWH)tO zppj}SAup<_H{=P<`+;;*AAEpolm|Z@K;W0S`dy}em#W_d>Nlc(?^M6D)Nh^oovwaw zRKM4#-%08>pnk7Zzm@8DjQYJu{hqIWzo354QokeAucm$n^1H&qi@SNWr|LyeL%8w- zX63_NWsEWRACnIMRsFuEe!JA~X7&4$`u(%|T_eB7qKBB7HuH_gMFBJ}vb5xgKOY)M zWCA0A@Eo&Vw-SdVK@xFP-8+Yp1`@@%2<${KJoIHtFuV&1pVFrlNgr3u{E@p}TSBbv zOXS|swr?};0=bm@)N^p24>Z8EZC!Y*E_c}SZ;9^NK5vl(zPUtQCv7o*_$~+w7tNjH zf?^l(5v|LQF>Up+yt&rxLe{NAH0hdqy6!p7$NvR;wI!sD?=W9~8wmY@N+N#{=t-a{ zs!}$|g6Ui?WZj~OuY==XD{`1;KaBD%?rv_{J;ae34*m`?ja5cX%HBb=aV5qMa?7~b zOkzHb-8rX(aA_I(bRv!tcC&=J0?9bPxXk> zc+E@xuIwY#oe%iEij^t~bb@&p{|UeMm>&g#_nDHkqH!=q0Uk`lTp{BdfU73&sMGySO5EV;uH;ka-wA%c$J11wJ+eWMz-IBN_0Nd5G zPn8iSjIaanm-tqn3|9oRNz&|2tE3Nx+PS@Fzxs@F5)-p<6Fl2y|Lpe3{M|Bp`v@uI zcdqmG>{TV!`Ek)0V?#zECcV5<{!F1)%0ExY7%HB5p;-rMdzU=B0>)K?c~&la;d~Fn z{I>7Q_sw4KpBNwY227&#UHUDBtxT)y5)Q#du|B0ZH>A4LCe=uh4u5=HGF?$RI}jT` zSg#{UxG?~prgbnbvs+WW02I?y!#?MhOxx+ytPV(ix=KLPp8k@io!hc9rM-}GdcYX( zf)f@>>9%Go{e{(5YG$nAs$Tpr_TC1*uA*8SPn!b`^}tCX(x^qM9yLhOXd_e;G^ahM zJ%JM_l0uNS^xA^`-&U=f)au(ppef|I8^9|Heiig`y;V@^eX&->lC-r=`RJDlg+f~p zVTYi%6l@DZ^FGg-nZ0M9kL2W|aQ*$SKTFP@z4y%QnYGre^~^If3wB;EeFE18&6}fR zy37->iP#6}@YAMBU5WI01MQE|Z&G)Fw2sy}FLaDMA*4H<{he@dFx(s17o&aEkP+P< z&qY6ybFpOFIS4ICwTEiK8n~dntOXE(Ga8cOX^ho9Z0{dU;HCL*wG^2a!#nN-cunJd+b`5fjH|il4 z9k|Kz)OZ8jHfZBaS!%FAfjQNuo?}j|_z$_q8@XF-MkLb^9B-^%$SvA(ii=VH>tUwDiK32gN{-V_6BsK4u>VBiciMS<8{p&r6xf` z7H&KCiZU`a_mUFz#o*t;F@uu^H$>r<7;27bADyR$nq2+>`$xLwG3h0oL~qoFz4T^w zk=0;y;4K+3Z8e-K1V26C4~Xr|9BNF#$3&6NQ-^?Rd$y4A3^sX_ZBV!!i*MMT$9|(` zpeaKyVS`@nDdFOk_=3G3h~Xbxo7jTh4=mXHFWEzmW$ooL>ltHZJ2>2kE5LlV_?dVQ z!1#lXIs@y4&MWn5u%PSXIfELNYLy!pN7T@!-^>xzU{I@vlqSG2phG=b9m<7J4vOQI zhbV0^C88ryyvGEacCk3N1u^G?Q{*u`!l08OB?|Ym;Un9pwAWm7_^DzX&Zi&2h*M^& zfIzORjDCpq&9ifUvr6szoAsMHzFD{JWR9%H54Ordwxr#U$6ZP(*@F)R!nxUgIEP?O zDk$Hh<7|X;>In(wDudx%*xEN_K=R0e_DvH<7uPC!mu&p~k^4q+^b zSKKib)Y1B@Yt>h0Y2`7H*^Gvcs~9z4Doq;%O3xXd48?|)Xu-{AKefCf(Epz*vO(!N zPaS!dG3XAXv|@zyRYVW;a4g z8zZ%4nda8u9ZNBZ=8Tr%1}FDGWO;55q4iiuVr$h+fY#wljgnsD02C{JptBo%O`NAU zs`F`hUvkw628Mc&Y1_TD^hKe%x#wd=cd^qzy$!dS83w%0pMI980ATP@3XxD5;KX7$ zbS6>fio^u=sH=D0f|?Q(muBpWE!Z#$a}~JkE|zR}0`_09QR>)b>VwJ&7`|Y;kmE{O z=VI?}4BOxn8`ApC_5rktw!x@_G3Wx=dcvwBP@vaZR!a?~na1FAV$MZ!VxZE;A+=6O zT4%)YHqID>oB8d7hC%bNl~nuSSQ?7YF=!xPj>-_)50@B?(83va=nRELd=%@bFKH4H zG9qP*5@p|#CevW~+e_prR&p%btHjg0E&$h?18e-JX~ zMamdvoPjYx4V9R2BFxi6`~V#2jVyWX6_9_^bC$vK(|GE|+zV0EC>Sh&(}hWzmut{s z>1>t7!Zcn4Dqd2E0krc=EZ8;5w}JqYM-@Ma|ERCf#*iBhqSl=C0Ll?=GcBQd2XL&m z*)WOB`sot84T?81!G%rlAdl`Mj0&u%oCgkx5y{b6&_**41h;k-QN7}gOjMd7S?Q0K ztq?J}m|leWTlA=9Urqm-LCATLy@^i7NkVIJtSj|`Y{p^gS42LhU#SoU4MZ6qX-1+z zzXGXM`Id{!;)gg5%78!_$I05rHl)eSCM+VXIbfwp`63&_N)AVm1{S6GG z!`97Xl5?l&NkD4w@b+{HJza-$eN)BRnyhq;3PMFtjt%66+6yV7+Ikx6YjX}w_N$LU zNrt+i^!u1#m5qOqtKW+sl#0{0>r`eek4_tbPZn<#)HGey6%>FB`<4l%G1bz!)e=Z=s6^S>mfK3JSr&g%sQ{z>E*3HKbN+Hqppoe7Y(hnqc^G! zj|jl&^rQ@};(>*OvgL?EY;};qL0c%)ofURD7Eo-}*ifJhm_ag$Ew#uUfh_o9kkS8n z^gmXXZ~XSZbZ0jL4R6rml@2sy%-ZRiAq#<~vF#b3i0{K!?(7bJq2y!>xn!k=tbD_t zpNAU#^5!9fAVL)EmO4s?J^a^HP$^7PTbZpf8SRxd9%3{UzdCa~9C$nB83R3Y;D4jC z26?{`pJ&W~6Bze$WK~#m$#8;ROjotB-7u!;(Pa^aF6}s|;U#N)fotfzh(?0z;4xrw zglhH}GvKD{&yWtVt#y3m@)>_zQ+s*-N@f^HF4_z+bY;tH1U&9Y6MOkWi#SO*^ zy2P{&Xfx#{PkaV*l{-Gm`+@lITwiFX0isdiiRa3w)`IMGkED@Tt;IgIa}!&S=|b?J z{34XSho;Eb!QhDzZJXzBxcEiGs_Ge!m@0IT_sr5Pp*ZoaJG#BMaNjv0-n8p|}Dkv=7LKn%S`(}9I< zufY6}nLBqlvSY>0K{gt637kizOArJ~Uk8ew5-;wMc^T?atkWGCL!61yEK!geZI!fu zKAo(&S589!MPW}sDsu>(m8UIpUZ$SRX<}rynnJoLfmAxJ`j*6rxA&dO{aLXT?NNMkz!7^7v&TSV*^>4u8*XVFF{yg(5&CagT^AOc60S(K7;V-cZ${K_(<9kSPNV^V~+fW7{B; ziBv5JGBGQqO=4xyMd_wC`rK+PUWA|8;AZrXZ*P^)i1IM=!B7h|$3_1GaUnf&5kfB` z={5?XwP#qm1f&5XL#olGCmfldVNA#VkiJoHU;dsjtrrZGhteT*<uf)fu`1-S&8F8IV@4UNSfid%RDzF%{(q;g_HXjW%o0$k3mR z_@LH`4+QCsVRrxm@zDx1mot#4|?r@

    VOz?neW%n398%I+O_a^>8s#;H#7mus!?WD4KkeoGvXpK!`-v{7% zTHP0D33NTe9MLyrcm;wg*z=5K4k7*LM^S-RP?P%|>jL7CcT%NbD{BC=j9H~2DX|ol5jMSu=9emzY~U?9?&^pAkt zQR1}G%aS{h9XqcKhtQJoI9R#UH^0 z<1qR!rt+B{oF#75OKnL8;Kq75K^DYl+~fTD7UaNSv=p4cquvfm%q+DC_-_LUXl&6i zrYOU0^CzYI5L(Kho&mG6RIr1Zb`rebgH$@qLHGju}P~Ys3njdds(<&A8d~t#M(Z_Iz_^>b=k;`ZiXCO2Q`P{w?ScW zf)ZJeL1J2a=+dgg2rwuVGO6_$L<5LoVEusN!{=K+pgnL#;4;0TTrHWjwK4vPCQEp8 zu9(&H*P&#wD(wkt51Ae$Goq036XN+s%vT3i+vxBl2i6)4nz7=TQX?pe7sqh!FXfzs zIK>Zd)#Rz_3F!vLZq__CRPZfu#Su!HnQF|rbE%C5l*mj!PC4Qv^?W#N-Xyhe@74ZB zx%nl9*)Fd~3!Q5?X6%yenf`1-j-Hb?jnwC~G|r0bdw$K}{dwm1gUe1Rl|IHb1VHCl z@l14-gvps>JinjGX3iQ<^TwOm{7kDI2P%kuJ7!Z)`i~2Je>JG!giigIJO+Fx8-UJc zN)%!r-^lsjpponwJT4U5$+DGDD-S`*#&pEP*1Qw75Qo^E8nWQ56TO9V833YkMBIcM z3Ys%OcznEATVr^U;2B;W1!mgcARiQN#{m7ufr`FAVc2%em=m57WG?(uou&K>LlyFx zHfKML$rv(*(mg_&fDS1Zv~rv(wcDh7C(9mXuhxnF?OrX3@Mv#YH7&cm3z&clxk{qo0?H;9jPELjv1 zp|ZQgV)-6L&<3K%R5L3lGpAaSKxJe6g9RP4KxqUvQcIxFst9k!B~PE}{(6(=PX{tq zdA_^n(0c(AJOeuPdR8!V&YG^6%MAWb5NhKax2sp+Y7c=!WFMozkbU);o!HNgh9&9Fm zeud387~nt|?u@W!5CV|T9mp}x7HYRWCzyaa!YFUVO=GatQI)^$sNnuTX8ftVc5oOV zHL-;mvoKb+lm;J38ZeqR!ot3QAPkvAW4A=WIUImA*kGE8hH}l1+xPNKj^`TSGv(!t z=2ry?hZ%i2U`t`oRUbQxAyTN()*;VRLP)$ZJ&Q$w22jo;CA%+Y&k_^Eq7bH?@0Gyi z!>}P$w>T8)S~Dz!O+naGd<(UM%K!QkgP31?qg{!7Ly097F}RP~GvWS`HuJ&@`11=H zjjH%i*)!QOAmutr_uUhw0HT)y)AUb*{t8|(aeRjTdE@7Qf{uH@Ok36nifCGg@I?@) z%ICNmn+#_#5D-}T4spZ+*bSA|t5Op~X8x(+H3P#N>|mAQwDmP}3*%-}!g57H-dO5$ z2W#e^R~XUYv8w- zN3HP8z5!Vllsk)_-^dLFv4u~&j zH$B0HVc_Ej8>EC9IRw(25fy2Nj0Lvbd`XZcT71!bet#iot$~-c0Gh_um!?d8X}3`y z;;AtXggqXm)0fX6|LNi~cf`l2US$CWRH-nao|}|Q@xtzQNk>(+;q!PAhdwS@1;+-X z#*fKOd*+?dzSh_K`%&V!Rn)=TkJ9Y7s7}Vpn8yVsryv)>?li;N zaL)mMwUfP<`h{2#)dD)YWUS@(fj;MD|whw9I;_L5W6Z^Y< z`qQ5tek$f*J^S}MpQn*jTY~P8JH|df|d> zXBj8}ulJj=4I$_k92a2+hcv@!K&2d$n}e7w%iI=6`Z@@7L7WS6JAsaSkscrl&rdXS zm>Kb4HCvdm#ZHEPJdY{Dc&yZ zm70r`5nc)jDvH-LeRPVqsSaHH0FXD7UNJS)E_9bRUb*yz=P$8iy44o%ufk}(=*GuD|_S z-puMCHmD{KUO-QmwZYw&w(V#SPh(G2D$fdGz*hOSlPA7lJ2&`VTP4CMyMTtT0!JP( zUf7AlvT)*&xcxl3WI*NosTs!OvkpV>`8WZ4s?O(9rz1Gn zcl1b#`%+U%Fhr>3!UseY9PBWrg+)hN6bd!)7CLBPuXbsoj9J*hiHGVuAL28;*FCZ? zc?k5L2!~Q$38!LVkvL#2Xh{ao$3!?_oR7V5geVIYA`nm`X?3nf!rX~38UwHw%7OPJ zU|7usVj%@7ptc2A$wDj#PR+=r*nNve-=-pHi;k6WaKN$7XM^R)G8!-#v>U$BDAZmk zbE-fpT~=wi-h9Ii3O zNHy_O_J(l;24_qHnm>?%CTKze*2OX``E1qTMjBSu3^iRGYG9E4p=S652Ikrxe??|I zO@*WwbB_Hsgk7B}H2LJk-_uf!H$&BAmPexIRR&r+ocf}M+l;Nb zhWO3)AejwZdyypDQz1+FCxOasmO-g6)l})g7`db{2kMJ`IZ%_^%f1+JptQdvgQWUx zssM@he{#~q9ySd;VEE11{uDqsQAp!ZDFK)6JHQEdI#j9R(IVmyZ+r4x`i4%oj8)39 zf=FkIIg#v4F~>M+x;qg6`Q2TxV`P~wVv3&9=ZjSbw2VLn2c^bf`_&ti2AY1#^c;qm zt@0pz?{a_?gn(dM=9)9d$6m0_*qENs1>vSx&~|$cp$Z(-IPZ_{-uwZu7tL?@Gy=<4 zlf4@;i!WP0yd7IbJo*lgRG{W0+3o_cTPtZx9BYN%xM=1 z5M9_jVyV0i$U)ukcno*)^*ozObd6)y<{eCmazL)cM3omK3qj3#z@~n5S+lgV6vdw$ z?JHi&tKTr<@NWuNaT}y9P{lo69Cm@H^?-502oxl+%Dg^nI)Gho^ZDO{QE_V+%VXCD zlPm3-GM7PEK`FXVWYB{yFpr$8WNbx8MZMn1J}9+4oO2LU@xQ_X6bdk~LCkyx`2Y*M zj7z4j?0YZ;>U(Jv{CdJLU+%YtW_7vj~421TjJVY~dnifdm zv9J*%jpmD2>$MjmI3qZk)$Q4cT*gF&czyW`#y*_l{?{qgK-)UBl*raK-{B4M5a0=1 z9CEk5mDgr;Mh_Y;)Ec<~Gh$S{h0Ht8CAdfmutsmo(0o+N$fQb^xw9lo!&u>pFzt85 ztzn5}z_XVt*90~}VG;v%O){{3`tKf6>+8qh z{CCTrun`n*N~*7TC1`OBa)R37JAF3MAaw($Qgh9zr?LKr4hn!V+QQK>fBPw`NBGhT zB>S*jF+EA^;V^^zSmQ!a;_ccEGCKq?zNH9GQplKK0U0!Cuq`svHDCSLn*qh7Z{BGP zAb<$PsB zC(_3G{2gVF(9SwMg3W#-O_F6dprzgt5noFOWsVFg-hzQK$I=Z0qR@=y+r}eklrG9} z06eP8U^OcflNpMmmmia{a~-fv3VMFtG|1q-*oI?ZodRRe;Bxe^aCS0GkKO0EG`36M z#m9&#lS|K(X^0Z$2~-c6)qvY$zMFBE7lic-)MWZcCjNrk^5NrYdvdL387p@zKgI0l z`H2#F#ZqfDngMU#B{%Vw`XU$vKNkD_aWqI-X71-q_O>I{w$T`>ouha&b6?@G`)f%z z=+Q8*HxOW$@tgM%h~YBKp^f$AvtJ$&)c925JOSU~LK(q#YBaucxsC4(+KIZz_W**v z`w&f*8M~$fX$a} z0CW=!kOP+$wuOQ<^+u~f8ZZOtG1Rg>EeX-Y!BWtVy6MHt^ty<8V2&EDfSP2nEtm%> zYtskG@;WZtFlHl3$|ckK#uYEl*0{4P*4bU|JRa+OzT9~QtlH6u6?>XboY=uA3Q-Uq z+t}G%>TDE|?TAJ00VifB{_HH?FmYGx@JkrRaUAAGo*mr9r=XhhROeGApw&6s1$mbj z*wOl>iM#MLZr4WEZjmyOA&`a#rBM8qeM5^okv(&JONYIJ#IFAXaR;k{SOs3oW_ztv>_Z`AG%=iw!{^0vN zTRYwIIGZ0I@mPCJ?bP>fZHt1gJ#vn9|22UQP%p^Mc_2&{A;;4$3=m{UQg zWOTtn(*=>W>hNdwKnzun+_PQv2zv`Xa4@q6a@K#rkx|ZL{D`5{zxWNVzb*f^{1l`D zB0oC|l%JiZSJ28EhNuTt`*+5j2QuU*(O&kkzU7A<4RMIv^QaQyJo3ZGf&zp${HkZk z59Cd2^4bUSt|$3@$xn9uTMDkf14(_KXS-ZK%d_rdDH44Z&sBdto-H^MSN=q-^Qq$swn4eZgxuzI7{`P>`g@6P z|C9c?+TXK3|04B=NBTd#{}fw zN}V4}LfXV$XGJakuGmvQ7fWy+k0kfS)2ZmBcy(7iy)>Fire~~4IWNW{sm^4&en)y{ zbY42Kx_Wn{{pFL3iV`b2A~*KnM>2hHbT_i8cOFfp?~Lxi&nfLypG>9ij&|X9h@#M_EnWx;I*hAH~3M z&$ur-9zRoaJL)?3kE}m)OS&mql`7tlN-x`8$BHDtLhL%fJv1s+-I0t;do;OXSJNqV zhj-VueJt5tH=?dRRFbUT(0m}}{ET_R*(g1C$Dc-{F(NmPDK08%zqq%3a_@?cSbJS> zB)J9S^_Jvq_3dTX$DA$jT2tv69lRcQef#7QDKt%Obr;&nJQhOoNas;2t*$+MJzDXO z#ERa?jXxP#R8$8}NBdWL>(1O*?;NN<^Ck4lZFOfpm`XRVOQIK+)H{E!b9Uc6*$Iu0 zql{@z&HLKV>rKa_jmtNTj8z|qQpVq?c};5 z{4bJ3cQ!<$)d!Pvx3YsPBB@7WPRPL%)01;I#GJC_PKeLXOgi!C5CCu;B_pvC zf3KUk3%?qYxHX^uS(K>W*?dBx`e>we1sX3={V1=tMOweYri?{OXB5SpT~63>&)Q@X z;*p9Dry-hjQqib;s+Syd9zjYa?smCFR_Zo9J0VhW#O>K=a)>$GkysI_IN(0wB_2#f z8oQ9gbmXuD7ni}ieH6XfxSjvm#@jpH|MVVLc{H#x?l-(tmd>n^Pow)aFB!!nbtY0P z+<9KAs&SOnxR8mg0KWOMEmo22~F8ojB^erZw9adHD) z))iSBk1k5hh3=xxb2|2qED4Q`Rc~K*B0F|bveO-35+92-&xzZTy<1XF^SZj_o3L5! zj1FgKU3G6{5;^+E(1BB!@d zx}1%h6L(N^f6c36C`Da+&GPmsP@PD!v;F)LR0#;(bZSdjY0t*$ovC#Fex^jP$Kkjs zsMEaY5~V!QOejj?w)QC_t9Rhm#63)pI~zH&)H3_<^>GL4Qr}U(VprtG=T3yOhJMM? zW4+sxx8dD&G+&K9$45@DEt+C0BG%Eh;0)jZ>U) z_a^7=h*!S?wfIKD8Fven!GSiXw!~3tG`QGFzV%c)My+Pb+N2`8LRIMJ0UDhzdM zLc$5PIHBwD;vBRuvW~-$I-zenRX0K#*EpfJiBP_Hv;zO;QNf`|spz6u^%Kn}#HmQ< zhVTK^`*`(ir1e9*aypzpz=4lBT~|due}q9>`Ad;!dm$E|-~Un~^6WDQBeRb}>SjOd z&gd*EqPRS_IFg7|ynIlJ-7pVKxvm9?KuS%?!>R{2O~4Lu)5G|Sn-3A##fMI%=sgX0^4Cn%-O{H zqMEySy_>)Gppe;*@IQOq1NWYBIAzo4l$T|Nld!WA39?}wccJ?Fg z-`9Je4*BX)d7&cD_nd_5=Xt%673)F8Fe*KyD)u*%6Km#L+5K2&_Xj0je^BqEZy)J7 zh1oo=3P8eMWd8?;9niSLdC>iwe(@po;zN9H6K-C%O}+RO6FQmjEMDa8Mrw#y=*HKP zHKYJ(Y>dWN*g8iRH!>B*mKQL#fN`szXgV3H*mPp+R%e4T&hul{ha;`aVPWa3qp|9jo36GWZ|eC1`*F+S2G(eq*zzrseZ2Y~O(#R;gV`^NSO2*Qd1Yq} zd(iYAJL`o#Wx1Z?$Xe@-0*Kd}qVq8Xj85DU>v%R4A6+%3ErfH8^gsYJc?W){J_a{o z8Tf{A7$l4j9s7?jiI2e$F=JiQ+45`nDMjh>bR&-7+>l(}J)-$wqV-Uubs}cwCU&Ho zOOT6;e+TgI2>ulzo0&*LyuTT(lb-QHJY5e@W!B5-Sx4gOD_@J_nRt3xDBji-9bZ!# zxh{+nlI`*6_*8l!&dW?ET9WPc_y?WG1vZtG{BL&O3RlLdKf+0`odC9>J+C@5UW>zr zqQ=rFCSb@YVK7L_C~kIZ?^DXO1sVW}r|wgmV8c#Er_2=nqy0Jx`?UqRQ&2jb86nYF zYCxBG{mgZ%Wpie46a9Mnw@SZWu?!B)jMgt$8&%pi=+`Swb4b*y{xv0MQ(kP{6KQ=3 z&5N4AU2Nw8H@Mc$A_mN#pH*V0{=u%I%xanj7QghOXkw+R1Co;03X_ui;1{vW3zU-Al$5++OUZUiN=n>4&;(0LT&MmucZ*5OAtfbB z5<Q z6Fq0)#kb<=cUwy(=x!Ln7u?+@Ek}22#eXeVcWZ+IQLwuET=WHc z>^<(6&@-a_?EkXc-Ounkbi4HYCC^E3UuYgd_bx~G_IwC$zD+;>5$pM@c=KdD^@FGJ z;{<0cdi&k54Czs^j%_2w`o~(Ht&FuCg?9g?!0vwP?i}46>ZiMF&{l)!?w1Se?!AaR z2B6*W%i&_xhwSct)Y5L(eH|9e((V$c{$;n@q?Ka;pq~jR#*6`4gJI{rF<=Moy~;5_ zYd%E5>h73B3;tfW6&*ue*2?ZS@meW5`u?iFpxf%*E3Ai*dNX>s=N!DjUZ;t0KM{Cq z5$}(s?EH8?ex1m?xAF4*P=AP03UOs^a`_f)r#54EUGHYPPf1$*#*~BjFXhzlPXWiN zt*<^9Svln(Vo}7Q3G5AnaFbCe94*Ao%{!`Rt&Xf*{$g)0#%+ZI;fKP8@WY@*6$U@5 zFo;rxf|>A)0iG%p6vb@rfD|&9HTauy6n2$z6rPoI6vUNu>PwRoA94?m3Kb=<-LxN% za&5{Lm(TL1v_RHfMuy2&FrTo$+J)0OAB; zQ?2GBY^<4v*mh(=Y;}=oe1m(cpn$fg;Qaw; zt8-r0SlfBMXoKG?ARyIV<$-O@Ym&Et+@ioXxVaXvmJ$qZBr&*2)tK=AlLy0r^iIgF zLm;=$(b05%K&&s(ekqFFETCB3nP8W^RCnf!NyO#T>(1PoOgFE_OSjcKuS8Cd7Zm~h znne6fVQ({my)lZPm#9Xx2xdoWgMe?S^}`A0L-Fcez}SGqU5`7vra94T5&M5)ibCU3 z02k6RfMR&RLg8-LB56552;yzGA$bl;`#63R4DxZeMuFV;pCyUv7YGo*1&{GVs{f|p zf{Bzw=TGhhzkrEsh@z;6A>|$JCwPs}&UplvUG9g}?Fr5{B5Uu$l|;X|I^dq79<4w$ z)Yyfm@qLdlGWr9(VjE0*o}+F~rK50h3M&UKWqm<^;?p@qzI5f|sqSU-3-j#$N(2 z!`>$CRL;TZR&4QH8YcB#W{dGcRwFzh83Iu?Vc;IC>C(%~5RHsTn z%yFmYzv52S*Kr9Wmsn#!Gh8nes7z3C!OH}AzJ(%ByevVy?0Q@|n1=3h&;L1o3CbnX zS%XU=wv^Q__k(ivCx|XZbG%#;{-JE1%ojCqqZNRdO|}Ab|4d3)i1(z3$9N5l*eJkO zb$`BAfZyPfHF%JP{0tXn%E17~xdneF%l3iee6R$dc)$`j)6%jI6hB}S=mie0m5J(? zBds^!ri~vg?OCEUWfs-WhnXkt5@>=5a{&2RLTKW{xwC(^X@Z?~Q_pGo>l8+jSs!8) zlRT9pM6pO9irZ=dQPlbng(x26@-})1fGAQ5q7Vq%hbUGXh~lcNyzwT8R@4%$SdK*v z6M@J!Cy`?X{#D{1;e}e{jw!7Q@a_bzsGk7H0>3lFZ~1>p+jf3y3@oe+r`HH0hbC%NnH;uT~CA^jxxr?`qc&2gu`Mgn2DYnzkl zWxz+4VN6!Qz!?~=oEf$5)$(Sgycu^F;YyrC`2E|Q8Ix=`b?~Ixq1{SLUmD7) zp?99RUBk;w4N*bltkN zWEAJ6O-?gsM{-WFH32hYMP0{&9T$3;FX(!!aCVA!9)4OLARQI#9rWi0^Bj}Rb3&uS zvx?vYz9$OpcB2vf=H7S7Hj4n`NR{RGAeu7q*8&)gzQ3~@_TtQ)Kocak` zS4yBO5KpBm?-gB1x}TDlI6Vl>a^twlrz=UN5Aj^OQsL>537R6U|5rp$bftv4(ses@ zr4q%~&)u%tS}6#{5Z!!J2$#bpi|A(LC-ScKPicmdYfo&DXbWTa_oT{7&Ew7}ua?I^ zq0?hCtJl9a=T;WzUH4s|WlhGnAB5J-UAY^|%WTS-?ym3(30_ngQAN6{CO2>s}?bg;Yga;focian2e; zsM8odFbv-04ST2PgEJQX(-$vP_$)k7k(2ta)D%o7mtL7@FKCVS` zKSa~jhWkl0zcZu4{f@kn6v?b|9bDy;Ol_Ru$arX%=j3Rk4yiSg*;EeaX1}uyZq6w8 zmhS_RTIxQ0DgHDg0$?o!%)c*$VCK=w;+T}2lS*H?rae^a0b!d!Gpln@m&ATWF$-A~vn>28 zlW#`+>)g-YqwudNyrXQQ*(O6Y+oXtQy8}csfLsdU!ee!S$Urm$X4O*NTF5#B zwCRMd#Z?z>f_#?fVBz>Z0e`QZxD~&^IRi^ZLVw|$3HEg@L?BW92(d44&c2K*F&K!l zcOkxvyX$^nQW&2@e=3n2b${q33+HTtAOb7>M1)j#5El5VmxR#_ZwupWo|h=l6*9CL zXTndgL9&l}kE=WsWW zs9BPz82}PRD4Vf6S-oscWaZ7k&EgJp47P0^?cMx1CIV_<3)kR5x2L$CZ_HXp?%DVL z&F7w3@xJ1pQL~|=;Asi-3=}j+;5Cnewh3b7QP7}Qih>5VT77$sLDZIEki18aD;z?$$*>U5mNGN-=^%6snRs@V&ThcO zvzKpG^%zFt+1#YFLUYeAtL>M62C684-gej+8p<5}vq)<-Sn5XU%Z>vM!TL_0B%*r}TT&1_9oaQo9m&#a1b~gn||TKx+yV zq-UVnS%TCbm+6Xc4oZ*;Bsh*>?u84ICO8JTOds|IsnmVfzuAH$^v08P(xr;YRAkR+ zlqz8fX9W8;y)j5_`JC$C67>5d_s;uOhoFDPy0`Lz#5H#J1HR0Fk9MC3M=1T3l5VJS zk-N};4|iwtii}8k^Je`f9`5-pN;wNz*XXQ`*i4Z3MI!mWmwV6I;90rbOn&C^-&v2B zxYs}uNsfa&yA!vtXf03{Wcc<11*$lmL!kO&%$|fcP(wyRTu5V?3S>*I!8GLn1WL1| z0*u))zCayucidzPR0+9Kztc&%1WH?e$TOtRq2Di2{hmIjXEw4xo@X$dB0HOx?lYnW!qofteCT#O z|3UJnZng9Jx)h`snHNC5G`+4E7AYsaj&q5H3}x4?$RRM{eulCqZyc1s6iA-EhPfAR zfi!tG%vX+RkntV9z#MRIhmmDSt%kBvQfF7{q+COp=2F@OYi}si)+xxPyhM}h-v3+n zg%Xzrj22^g9pA@c3cXo}4#Y?{GVoByJ@^}Wh#iZEqN>Z&Rr`7tD3SRf#;y|gA@!8b zYCW%nqsejY07ZzyA6`0JM!MOmV4df5UdhuCzEdc+py+V~!{sK9Z=rpp=nFB#mI6h93sO#7U8t8weAuvrGgN=);BrP)r}e1dpaFm7cZQMkhB4I{62n zljRDXECxCWcHSS!&U?3E=lOhzc-y-I{5(TWAx*F2y9%b<4+~<$lxT-dsO(1ak*aRM zJ{*EmHg^eQ=>}O4+dwj&!XxFe5Ryj%|FIGYjMq7@0eZxuSgg7wLoe3*Aeeb|XKoN8 zQJn)P8y(QVn}{o!ifO21U(NgG$yJA2blvPLy$;x zkOD4I^M~Tqj{~Db(jQ3F14-{XlJo#k63dJOh9Lz>FO0p;=jXK`btXz9Kkp9w_W60T zE_RXT=RKtPd2vW4mc(j)-r2YU^DpM?bnoK0+z^cmG)bKAyG-yodXBoUIeN=*g=PbY zNcisy>e1-}0V0FE9KES3lLoxUa@@1ki;ae&^geYToIT;_ja9cRoJUy73Ajq3ij!0^ zBojgO^YZfoG$q1~DU$Q1B_=*Yy4@z9pLdR89i7F@eAW@3Q%hmXJ&K<9j!^WTL4)Ho zO(2bECB3K>6ultWI2K?dV>5E}nmY(K3O%n2I3u{inxAJNMrtkye6Uu~-eo(;nF34i zqTU1`XBad>iY=t*ZAdtsDd_to3tEH(ah3N*EM2`3t6LSUm};+4Y9O%UvI?abdSz?# zc%>^K>fL~t@eTtknpA4RE0F505-^%gr% z&_t|KN3DPg-Y-a^K!cFuTLCA2n^KzxPP{|l#4^B%H8+xzR|z=rdi)BME_b5351RnC-w`*;OHIlv z$8Qf+&&|e@MS?*#-aal8+#96I0i+?}41H(gCz_2{0R$(wNN}lIB)CH@67+R~OuU!4 zNbpcFdq6Y)2rd#dS#v#MV3A-3G-IAK1U#isk+n-T0k5UD<2exUYRnozgUqz_iOh7= zIhzET@yC-ae5SUwH`4m0;}t$L9l~6Rf5N`QUn(u|nM%x|ZXrHXUj<-h5Za3{AsC_iL{a_y(R&x<}EKAlk`$Dfa-b=swN>>;WPLVGk^GR*Uic>1S_h zn!e&e^6w^Paf&ecyc^I*IU<44?ink{mq3Z`{paG>5AjRVpPG#;#Nb8l*fa49R=H@J zlX@8xB#-KKj+v-l&~;WHOfPv%5xvx7F>YsP6TQ#@n-}aj3-Cqfg06GaMo*c~OiRaK zF6jZ$3vI>@3*a2w`Js@0`TjL*QN?7bbyr=-E9fWCfLixvUXd7Sy2M4790+vDba#Qg zVknWbaHYCLD3P@`fG}M(dnyA!uqlxiTL4|+dR_AD)oAcL+4Ku1;TI+hRF_m>WBBm9HYeen_Y#n+j> z`n~vt!qFGu=$oY-iF7Dh+p!%i8d$2@mgm5t=>?Fyq`>Wd}3 zS_b}OO7{i$kIki#DX(x1u`*Sa?#1%TbWx=mH-W2seNpL|BhOTMEE=sd7QYL9QQ~aZ zrfM(y0@Sf0chfoerC5eAVb3<=3Xyb?Tf@HK09Zfw5%2@xxmw0*i>9ddW32F4f5vJ{ z|HdlxNAAElsc!iufEe)X;Ty(eQdotv&EpZ$f~}25l#}?QL!69;D@gjhIEc7tU|35h zkK(`^zH z_xRx|_%^%X6z=iERm`g^!i@=6HQ`3W)w@pB;p&g@gW)Qdwk5%^;Zj@#X(no&+CG83 zUzEA7tbni;?ruTko6h|seX5Pe#6eUmWSlw@Z?0S&B;O#s{e#)xDc<(BKs+mao5PL@ zWItG(707Nxy%gaF9(;gsqXJo3Rb~-usu;*B!VOZfDnnBS!tm|u72&3HWRP%!umYSL z5N<%bk&T`tq~%UeJMd0N%y|XW8#|uukA8!W1;++Ktcqc=?UP5v$xpbUhY#aewp=3O z4BicxI1HpQn)E}xxd!s!Q*XYAE3qU8(I-PJf%Gyiltq{_#69x`M)YGi6(kzQ| zQ+0!hjeW`uV`GnU<7*XE14^iS`#hDfl)=(%h)(ps&(nW2t41ko zpQmko?ep|$W`#Bx7P`%e%xw7RHtXTlGP^?QHnMXc_jy{OUwq@}HrYrH@hkW`Hj?9S z_w?Fe=r)4s9L~aY@^1X}T%VYZsf@vN_6tY~x{U#KK(~1g8$V@%I{ngZHvc+=50~}I z2G2=1h7INBg#;m;yWb*^4j4OmDK`S?T!{?^|05^m26UTrb2x60oqcedG=eZMH?ng; zke$(=M>I50%FRc=r1b6BP;MUmqEf+vHu=F?odD;?EYw-8ovE@YSvM~)Ql3y*)TiC- z*J%yW9CV2syc=&fsBGR1(bd*pqmzL&&8wUHI?fHe#%Wj;a__!_bBL=#;ybMmyWf}V z^NJAbG5p684t3ugY6{fuX?TTOV>iph{FV*c*1=F4udR;d*AcKFkeKSn&&3hu`vb zsRKU4VKsiDtD!OsyN}(@YOUufulz<9(d z9TfY*pk%&4cF>=ph6T^fL*@hYAS3hNv}C^2Ekc$IC$!89L+FLiskEFjuP5OPqzIwM zBCWrK=%Du?Jy$?j!tQ-aSfuMN3AsNLX~Kz7SByaKUQQ8$)L+WpS5kkfdmb;2=N$^l z((kgXDVU2zLh+x)CEd@X6q5%tIMvU9FO3puTJOonId&yV+zP3Ll6B^5aF)1ps{0Vj zW9gi^hcLUpl?sSdJNSSXu+AwxRVmM^u=^x0A(^Zdv+B86y%%yMR1oXM{2 zrbM7u*ln*nWk=oJOb8uC0uAQZrKgoOETbiNmoP<%Hx2MlZpCGMJqWR9LuBx$YJK;U z$e%CQtCuBj%3sK>W{Ms#Q20WxaLWB`DS4I3=Im~8sA;#Spe(2{P zWCAJx=vG{j7@*sjK(`MRD8+Sia!7H1#Hl-B(Feh_E08!fmAMZq34J%x^nwBDoSV~)t}dUw3Y<$8PEK2b@VSk6=3 z`@dy+wgI;87rZi~@X?U_)GfR|N_l}eR2}6oAL@RYl6?rC(8`q^(%CikLH4nm@44NQWXvEZJGC{=DMhpLO?MMxYfy!cDvKEVY5Mpxd zzcxctyq1CD1swdPzX}e1jP_qMt5gle%dAq>$h1>0RIe}mMlf?C;@F36CKs#9{%bkc zr#|pS1DFql-?auCt_AsBUF3J|2dzs^KzI~C3{Z}PjBFEDhn4clwpkq5xZ ze2N#gVbc^ZESTe_RJkc$T#A}S@zRGLfZz3Hl+r)HYaP(Oe`JzQ)QcX!YpS|$_+96y+nV2X2Cn{x@w;{ph~I@{ z3pBs0BR{`u8Fq(i-qBM`CB!~$nItbW-y(Q+OOc0Xdz>%9v+KFQnr9h6AB6Tr`Hw1n z5Ip-z;d=Q?NPVss4>8E*dR<@VV5`CU4#BfOj*Y3XaP(WW8RUBXA9B6c@$3ShPXoT! zuk!M}cxplQD~9iNi@kg_2cCV0;(M*c!38%Nz898{-hiFgex>nj&?Ob$i+Hx#fsJVu z_$S8}Eb_Nui{r=$&G(XH3jk;Pe6LM&L=6nz>zBNIRPVyJTHTwkm{{M%m8gL1!nTt4 zf_$&syRgkwnanf0uwATPoM0%9Q`G%An&Mc+%SY8FY!&!DaK2ZrP2s`!LK`eE3ZjID zY!$11t#H1VYzp7oA2w*Rj#u}M4Vvc+HmDTLUx^34SI!OB`sRDB136cqL0>*|;e)d4 z+S_odGWLjHHXSluiGMjLUux5}Am!`IxT1V51LaF^y7mhU?}bo{{^e41u}AruGMiV1 z^7T<%#hqn}^EJCy|K#>x<5BubGD}*Y+hGpbR*+LTy;nCBK3j zv&p6~C9&eI+%=4QsKsyqytiK%g7l79@kS=N_=&yB(tskSI1SHcp6`qI0U~!Y15m(_ ziR?lqr@wAM4os9RkOE5Bv*AQ~>H2WbDW>M1{@c-Bvc%BJwVA8oeo$anF20OiVOU~I zW~z==Y?y!L)iR$Y){FxNuEcT==|e6!b7o9;6Y`2-iJgNhnWxS{+|!H~n3iQzf?7~aN;#Y_2LL6VtC)_VhLK?QL1{3BX(``HWqhy*BzcI`W zbELkj*8k3}km zfthBa?RsIRop4uxnHJm=s&>XDml}dvQLhlxiin#z$9?)UCf=Up{H_r~Gx3nKVh;YU z=r!jJ0!Hz7JBOpdZC{@9qV1*8`PiAb`bebxKg)Hry$U~)>F-C6AR9Sv@b2gV{G8H0 z?tW6z2n6tyz#a1UzGw&jB6@C(u2DZ$nvKtIkrN29j6-7U7IpW|=pyywZgT?Rz2*eM z`{V>d>`)cu0fX(K7LTH~Mb=woA2|3(p7mC>Z678-?Y#ET2y_16bd)MIwdq$P9tY3m zlw!o=m)hqKZU%0k&L3>eIDfEJVsVS5CXa=XJkoi@thPcLHmzwz;GxbRybC=9N?NS_ z3j6#)kCrAexST(DoW!#g! zRF=-HQInbOKR#uutQcu?kUGKri1@iogO-uZ)3SPCdV zi5CmGSss>`niB}WmGro1jcPyjEnKVxO@>l(`=@Dg@Sx}mf_JC=LN3v2;66`br8-;W z@IhC&YOO*;1DkWd(yzMq5R?RA`!sd-ph*q4PV8XR9(V9Z4))tGJ3pmQfue>4^JDye zjfvl9`ti|ZXWWk&zk`qVLyM1AtN3VDzfl^p!Q-UG)taq2teM2{I4Ypa=cF-)N4)NF z(r^SB*KFN@<%|D`n$3d-NesWxzCl7*=_E5i!v@w~{kYg|gAAWcwMMI`}BsSX#q6Ch!_&Rv;UVKu|xY4p!>y2Fyk~ zT(9aejBK<^V7N0*9o*M6CTl$*7g1gd8$nwLT^An^ByBEHz;eRgrlqZ0{UZvO_IyrF zDSir`c;L)ItR@_T#fO>O`s>AnnHdAv%Sk-Te9nMNU50oz&#Welbvy&&Sv1#b!s*!O zsW#_6Pl7HTM~~t3TKsFJY4rAc0{<-CSZXL}-HFy`BCQXds30c7OQrZ%j(_9vuL3h% zbC86Xd6OJNSca8_e+bOvJUKpUf6C=GnsqgGrh|usO_F`q^&r!%?EHYBi{$< zdCDuYR`btvNA;nE74E|G%$4xa%CQN%+i21Nr;N|o{;5JiCgZF{cOG}4T-_`47kWWw zBduRYHv{@Qi7xKZ?MoAP*44bew z>@9VFp;Gpi;x4Z1TOxO?0k;-;&j7vO5Bg)#^iMT999iwuPSxts*+amea_-C75oXE z>Xo{xbZUC(Ir5)yH};$?of&Oav(n2-Ly*O9JBuNujp!-FAuvP{Xgo< z^)u^B-S?=J_59RBr9HLy0@kc}k7~Sli@abOZ*SQB$TF3}EI0+PK5LvxT~!JT6s3Z7 zbXW&9HW#Q!hbHGxq_Tb#>5IuhDN?jBMLLDK7ph23b5!Y3ndlCdMT+Xg5my=2sdPUK zYoV@0b-2WSadzQlKTyHVAddeRwgSn5qbF#e0|v%D`9TsnA|tk`(t@_0~}#2}!?${_t<| zY8*Y!r=Uxn%_1O>Ly*hxkAF*JV0`jF(5Cs+;<^729vsCC1)Y>p(9thT7DvNUy%P6t zay=FDuH_BozCE+t6I24rHD#%i!IUGr0~&l4TjPh4nY0Fl99+4ZRB@}MHE1%fRtbCM zo6tNzmrnxt$4`X1u2P@4D)SRpmCDM~CPxPCP8x%i+ov8*snOf&bwHL*--;y9y;Tok+0Qp9q1^^|}jRyg%# z?ky%Q#~7x^si>uh-WaCGHz=vCh~L(V_+AltSVoQyTIS#WMRt)3C{diTkKr8!ZmIqm(p>aFMZh&X@Q+D0?wblkjhSEPXa4iAotl zBpr=)JOpwZoSj(9Ga$FUhIPp|Bg`vAJ{Eo~hkU^Q>~n+5EimumiAJvHfUVvk0G+1Y8isXQ!u@CY^oibKNhf&k=1Qe^IVON43nKAYVJx`}$W@gYxUuC(GA^ zw0IowNEm~K;_FyF(x&p$<}TzeQRN*KwFifBzFZqCBpviE)rrzUZ1EL-nO=)`w;x5l z$-sOL8TcPoqCYI;ZdV1ZmxAzN_sg~Zu#nrLx>em>?|xAU1v|6*ast-47NwV! zh-#W?)<-E3+P^Gy!^qhhBrBczaqf{%>a-lXS?c+a-r{vnH}wDty*0WC*Co=5-Cc}- zS>&#~2>vB$=Nuuf`JA*R9h|v`A$xEc7fKRb#-wvJS&Z(ai*>ZbZBXe)m4jEd)?Kdp zZY{KUF&flwOM7rh>{;k5lqj0#6hPqEjnGnXWCg<)mu5H7iQunomBI}1R zYiK#Q&#F}MbYho6Npm+b9#|OW8mAg;u5ZSuYD%j6b8K$Ew>1fX<@ol&znx@M7o03D8 zbvX*>i|*s1zE&n%mGwFbByb+r>u)XtB#852H<77W3;Ttm0h+O(z1~fw@j!j`(~*_` z@d7rVgPm2U!(w+joDRD*+OQs74Q|twJA}lz9|xENTUFpaei%5v!T|gg2J*+GiJAnc zP%{H~*vu8+h*-`ZFdI%MFqa+po5GQ>oNnMQbO-P^>8M!=EX|$7<@|sAhD@4pE`-#? zD`x8>Vuhcm&xb8l^Cjx_<33Pl=1b-{KS(0W#Kc}_#dQ2wv8R6S?xgHLw~qk&A~`{0 zCbl$4&lsO_y7i1nIp!x8f)hx7;?l65G5Ionke|r9V*k1C@o?Dv_$}N-b*e3AO!#Sr zo45wQW!B^l^<$+>mLTO8-AHGAKe~vw0M*xmh}dDzhxq%?mDbtZ#7FbYhs4`H7Fe&3 z#bUL{8$(9vX|*ZEPmCa{5PqURB?3Oy7Sva5L5Gbisn6sn)))U>*42}yD9QE3f5Hq& zbyo_Non&uFCwDPRQeXUg9viC<&p?LQmrm~06+aBjcb)7_w}Rc6Yj3*g_TF?|!i~b_ zbQb>-(-&F$)6LQQ)6ECY%KofC2YQnz*pY66y(3-Hn?&*Ut;5>ouLH_$RFfyyd3)61 zfLJ8YLy_F1ZXJI6o7ByOthC@?TcY}5y+s{GOK(y4w@B+`TQDtmir{+Yk@!X9vZ2_($$czxU#vq}w##f+? z^~JAainEexP$kJuXI=5%t9N3OqyncM2XzkGCcD{jQ_v;eT}y%Loo?vR4q-dCjmp7x z>;l_yj*a(WzU1eeFVUyZCV5(hsx5YtxhKGPyj9PY%=6|-fNGh!65%?AzMVv4Ey3}# zH#s%f*RJM9OeW%tS@hBl9B}hv##UpW1Rae*3%Itx^w0`_-0aK8TZrjka8= zUYuZdx0|8v!=lLUc2jw&cendEe)pp*muBb+51R!V&F$^NKERwDR~M z6CopAk<;_x&jR-}BZdOSu^BVdKD`mYrz8J)NCKHk?P`aEWM|X@f5!ilz@JmVpQmH( zbAz|5-3UmMj>hI;zabnUi{l3Hj~kH!c*b!9lkoQr_v#O#Uo~kb>CX8muNq{_C!BxD ztL6sm5+$4X#^Ddus{Nu!bM#JKOXJ(fkb953jBV_&%(B6KE3W8<%Ss;X#*(ywDW9X` z`P|-yQTjkYiy{XY7l*DjoeXDplv{s3b{Vd854{FX;2Dxq{Z6F3)2;e5QpT!h-CG~R z1*|9-FH&tbTmV=6J3B<78GW|TCqB%NQ!KQkTU*5|MFCB^AK?{u{nI;|kvF)^Y!j_o zrO`c6UNPLy-idv*N~4NI8Z4B+YZafOW+D;c*qK(j^pj|VsN3;(eD-P5Dt|u}DJQ$L zpFoP@<85<0HwzyxxU{m+mS~ceAO*^)Pr7I0L)b3t?4(=4E1st+r}8mILrZ{<_adPa z)e^OCvAkmFU4Q>bA1$F}z@|`oEum!xtz@-CktZK##iS)RAM#qFXRNeD)swm<@T@y+ z3#o3~Gxt_2v@PbppI_gg+u{TG6tm}G(jCVuvPm1XuC$;n+BDTowZ$a&ury|)G+*59 z##LTj(LE1+$kr7tF=!{NEn2X-n$ndKacPU69`@Q|U%9kJ$zI(Sc-DOoZIN6K5<*#B z@9!0DjOLenoy~!dP(dwPf*pJ+Q`Mh?Lvi;J#T~2loCypgGvQbuW>QW?^{m~ImA^l% zxnttkM-T?Jz$8f+bhG-=D%>fCL2Hn}Fo-b&!yxVv#`6UC<8RVYp$2U69EL#;w@Mgv z0JjhZ^>d!!4uBQOYhU2Wx=H7_x7S$lP#ZExkU+-Ttk_dG_XrLYL=b?Lb1EK^ecS>B zvfU~ilI2?KPSxSiJ@~=>%_>kv$^mWb?&x^_M1)k1zw!2(YZwkOY)cgPa$7T2U7{g= z9)7Hp@Q=(8iHO(;`0;&d75uoh&B#$h~ z3dyO0pofi8`*sVD?Cr8|cMFVQQ9PSJ)`BW9UOKn*lPX>sui_j0jl>)V7whON45i#-1no|f>*@cbOLVK?2a`HAWy2!;>`ZCSAuZGxWN7O#F4J1xBr zX^Gwjukea;lUOz+j5L>%PcWyV3WyP1lmu*Df8A`HQFx)JtGz)-%LZCbktIf9G6ZarF?rcoLJk=^*X59HRw53BRW$j}mO8OlO zhdSK`w~s5r=Jb?6g)lK9=Lv#I7L1T2h>`OI$v2ZI3Ci(}z5*mJ?9CvP0oJ$4Wb>gv z9n?+)qI!cfi%g~?By9eTy0>^-vJb*1_PAv4!o@(iWH)_4%^MWJC7aMMmuxaKJLX)n zC(ck+E`Uq6NVsH+@^i^iea#B5TYDDLbZ=RF5l#0p>%c(J$Vw6A+fjQ<)|T`p+bkB@ z(qPzbp5q`|Ypgy3mU(id?C3;WfJBxM;}2`t24{DY3EpuigpS@z;$slJ&kzn7Hk;4G zA4@lu84B66LLuAt7DXXzM9!1&4{lk4v*jj)_b6lt;p=NNLU=^*@it8%n+LDRn@{Z{ zf=|5*V@!RLv50?QV5*<_)UUi(sZ@a!vZSVvH54|v_crEU=zKdS_ZrmXUW)UMIDe+u zO)onjvS()a{)+ZjjuU}~4@Ausosb!|gd0vZX_(=|lCQu4f;rFzZ-y@$ZGfgWjYDwl zB8(pG&Ia7j{UnNaqlluq|A1deC$r3Tzl30_yAvruHt$zcvTMWcYZuC_*;?#wXC}T% z-RD%|QB2Ay;#L_au6C-_Rb`yen4eDKTZ)9Ro%Kny0T~!8WrYehebv_*aLWJ*{ z({c!3O+Ui->bnOee5t~O@B7Ss0K%72!dC;iD^D*QACx=KVRvRUy8i`DQ&K2$HwnO) zyUL{Hkh>gsjwg57cn*3Hdm#GqRqlSKn(~DzU@jSbx0aK_W$rj5G>{H8ne--;bKLc0^hU>T~XUxfFZy711j{CEE_6B|3zBAjN0P}}RkO9I+0~?bRpp?29WGFU zmz|PBf*bmg;N9c21V^sF3+<9Y_xh=O5K-C(AG^W{2pwEK}f z)F|UU#S2rgJ?|Kpg2k1BHDCZcl3pgdDcpNv?=P_RG&O3H`{LWpmFQL@@Ot-2la@ob zazM|XZe>HyXb*9mj)>!Q<+;$ST`1l?|9Lo0UHGLPrz7rH--3H5iF+$Ij;gPn<=y+fy%GkElaHT{#7%I7D4X;wHa&|j3NTlNHO>?7)5JT z$}Iwv@uO9sazg0@mzfLk<`kfFV$ft15tHV*mV~Jdlz!dk1WG459`nz&%+Du! zJZjo1P_dkcv)|4bKdI*B77Y!2AD~PZWI<_(Yt2fjaqoqW@%q z&nLP~-Pe4guj9(+6D?Jb_RlA}SY_hziKeI*=NLZGM0J0j<`YHLZOtb-6;~ee{r_`5 zk?e@J4nQ~|ZYr`6i3A1*lL*_I0e{Kb6Yb5W5Lxp}|BU>hZ`1AKVL9q_%o}*=^M{u3 zQuBuv;I2NrRER4dUC(I@xT0`Ab*Ge zB*4gQ{*aA7zDX3K>e1+0k3w`Brki{UQG{28Q;7DL@?}FI+J!4Ruft6tdVUf}5S8xo zXF!5b6ry!l*Z~UB4>uvjP>44D0vE$UA^Ha#9G^n;dW2VoLiFFf>W@P7fV^TTMEBt; zZ>!{hoIK)8Hslnb5Jf*AWRZs-!)GfB(a3+`=gID#`|-z6i1w}?0)^?}*45OR#3*F$5d6;Gv(9T!;TmU+u1Z>P76nHF07u2>{#QF}etU z&;1qufYOiw zJHD~bxx6$HshF|@|2e+{|G9Wgqyjtj)H#2?V&g;p|7tHrD~?Y(BjU~jXug=UBj#*H z8(}>>29Bij7W}RQ7vV!)ky|^G%Qua`+D5?PC5JUgS6HRHcjvStJy zzCvgZm4`aRO(4%q1O4`j5~tKjmb$k{?#0MGsdB&mPcn#(YME5~rT2QzP9M*QKb!UN zYI#^^IK7+?P0oDihMNNqg`E=jof*$8UgVdAOv3K#C-9^FYAwFde_))GEO(#CeBgur z1E}jb_qUl3ocNKBB$zgpsy)yy{sp?B;PyMyD~Ii;>R9Ujt|VCB$o2dDW&{z+v=E!o zypzs)hbW%^EL+n&J1g_q8&(FMMWdQWKa%n2;wuAL0<2}Tmb#-epF3AQcVS7~sU7D` zFL&pI(gQR~OM#@1cczbXr>pcn8?@l|v>K3ue5;qqzetf=Gv&8Sx7`bYeRv>s;TyVqwu9B4sh1^y-Tp&PytXgkr*nv92R z4Hx}ps-)s>hXcuKXyLg@_kJH&O=D9O6pR)xrUdo;IPIF~fV4zX8&HlxX;UdCan(+DP-uly7Nt~*Ia06i8CQd48$>a^dc{cN95eiD zAo}0N&y*?4{u=uSHA;TqkNtogwAhRN)B!->FaRh7wsHU90tc<%Vsg$MlxXR_198xp zJUGFO{sbhh##w_CT$)Tks%m@&6@4m#Ed3hb{Uhsl3j9QOc_uxz9{GX&{qRdkEQo2< z7ZU$66@Xk}3?AqlP~e(}Qqzc~#W;IVqNVo??EU8=OA4x`fR7B6xfrIzrw~W96z{7I zF5v6Iw+q~3rF>Bc=f3&EtbEZ*T;L^NQ%1|Tt(^E@FgO@%9&Upvf=svK{eR6JV9M^^1atxuZ3_Xg_qjK&Jvdhq8h{|$N z8F;fwldl!?Azy7pAodG!!6U48^+Wn`zwY_*;%vvis=E99O4KN>#h;EPp=Ogfg+Ywm&F^Y>0)t7o5M)OUQ1IN9F{+$t5A+;@L z=p9WxIMmjj*W@90|Kq&oy?wZal6SD{olQODubBkjfk}plB<1sC6inoe9jWOx;nX${R=^xL#@2P)2Z||yqK5rR}@%~wC z_|27eURy#Y0f4q)QBF25=pI99Hy<+x+e{w@bOVt-RX^d^cc}WSc>3MA4+5rN??8Ai z0!c-Hr69|%srqiC0;)zNVkR?(3gyi7ugh@`a+niUUxYVuan!3~(3EBS#+Y|I>+{75%7wh!+>+hKBqBvm9rj!XL*o{(ze3>r||;|fowt8 z?dIYZhw{8uoXPQFD~X0ZIC+KOL_15!XDig84z+nv(ta1m7;=0 zNR@H(S*wGNxP+iUqA8%o+yU)~GhByGF9NL|f+J4m=T7r8FCwX03lhBtDhHF7L=Xd7 zBrZUqJv5K4`vk;-+$UA^(vu|-_e2%NRRpE(pkxH4J^_BxO%v<{p4@W{fyH)IlfWNfhObob(+pQAFRwK;wy-sn5nbl-N0+(c<6h#B`~l<~ z)1fy$>Lo8-(WNKj-j}RE{R1Vc;PQe05Y6Msyjr9wY?asip0uhN4=*(!z)>E(B#T|I zOk&U?T$Hclh60Q?UQ59#mKatC70pqN=dSTMg3@1<=*$H3R0wpuh2^0a+c;(faBgB} zdEPFfWuiUEslfge*(fS-Gl-kcdHx1N;eg#sjzGw6z|N-Q{Gr4 zNnOG#$~RVx3up=O z$_+TcEbwn$Kz}u$@9NG8m3J&Av zaA_-ZKvo|3PdH~pCtnOg!s#|Is2?oPdn=F!!t{B${wi8CNfFE(>BoX~&|zYTNIFK2 zQ8`w4oh3LSAqHlTv=;-Hgnk8}-{TDL{$}XE=L|mzaASr82z;2aBA(qpX?GjPCUer7 zr}!{1=vKM(Za`{Hv;ke?;{KBSm8(6_9rME2uknrRv#SMn3GfC*LUOmTmA1q zOoDlb{n2Vn!F_mEGiR(nS_8Hn<|hH%_7jXM?g8gf{d&bId1FmN-k2|MT;Rm)J5*ZO zS$z$UQS+7+sAoY6uwFcjrqMDu_#@sZ&o_^QKXSq44&VYCBp!?D{IC=mDQLG^TKH!5 zElA?R1ymasxlSSB7!<+`BN@yxvRTo$Sbha7Lc%K_W{WR@EA+6F&RpSiA;-fK{Qxg& zLSEmr$Q<`c7Eq+)!FV)7dR5xf^!DjZhvmAr6A4FR$X*}eJNEU_<8@Fus6gaYxcck(9dthIZ4 z%<_ipRU#E9MQKVzWy@skDU1_Kyd5R_B$O(NrlMd8=VtM9v&o~I4i8IdaxPv$GAlp= zw7=Td_;8$tbeY2i*eO6xrGjq~*F#}0~jXCn0?8E$owpWh2sm1I7jG(4AA{rJ>K z7BKM$@1HvMXH2b{(!9NFHH(IvhP$@}jpxx<@^>I3{v7N4s@l*lKbVFJak<$c&|Yh>Yh zk#gS_=m2=>QvHCkzefR!w*N@!q@AJC(n)RMk(jewUYqlpe_VinTAz2-8KslD!WUW* zP5lw8Pea%~{FsK+!6&+8TO*@2 z`H<140!NZ?7o#9I+$ZovuoGA@NCSW;IP*?qDN=zus*N!f%3yTah4mhL=Ym3*@}mBp zwbc9dyDQ4|!{F%kkAi#zdFwk_)ivg3drh`}0zgj~QRk@y4qK^un_urNEr=N>hr+fX zQrcxyr^YCofesGiEk^2dyGZ;<*VKkL@Y+{HEOdq+!$fulY__WJ$C7HSKT68>F~t?q zM@8R$z5}*2Qykbalh;f`d2;<3_&>z~=2~9!TaLGQiF1krp`kfbXj2_3m_ntx+)#!v ze>95{Brdzbdp6OLzoVPftXzME75)J4O!gEZQ>os`V2}|ZL+vrfWV#$Z7a-;vN{IEs zQ2x|6*Yp_7zIzUcwtLJrVh>7gpbGaJY8bW_Ie&tjBypWh-B`7EUgKfL8nHhe&$!kx#V2W z8^<$1$Z&Vt&?dNmEAsGCwh1slAm4!d5rDNHA*@dxUTzqlAK|ox;XArvFT|FFZB9L0 zgBg|zVl6#DONZDmDAf-J^?k?os?jN{Q3GBT59KJm%~I$bfO!P2-%B*B1zoTu0Wa8G ztY@t$Xv0;M;Xf(bXFmCUaY6vpI9t)*P@Cc&r6ALP z^6xLGf5?F`N5~j|fqM;CIfSio2z6Ak8|wrvZLkX96_x*J3Euy430eQ+60-ltCE!$9 z4266-93VyeOlT@vOZPWGwC{i1mXpZ=;n3)7AL<`b2uHDkwU62ZT9C!@M2HwpHPInA z^nm%~3XlzqaWA={RPP9YdA8(Z;0rYZ=*3AKc(U>4AFCyhXb*3~J*lDds;J)p&Xz~7 zb$%Jr9zM2LZyK<{0Di^RQR=SpNXcX1UY-a-7<)#!a6Ato`a!MF85(EIJ;&wP z{253K1X2G%+`@w8WnKSVy{!dH?&L_iaTU^iA&yKI_Jd4~s*Y9t1UWTcE5w$PM5)nH z+eT%YRr;evmEuMs@<fO5W5V=`4Qf!?>I1^^T_eu;kFr#~%*NdK_ljdj{f%;gB5sbW3327TB1ATe;4 z(TWM-KH(WP1^bLUE^#?H?07*b!stHiIn@fs$iOOCXlKYFq&`p@!HhuTz>>xa2PlvE}C)TYEeX>@=S~ zJv{gwO(2pEf(~XNecTY^dh_5h*@a;CY6H z=b;hA=$~OqviBpPcL;B>5lBqEj}SD>LO!{)Pj59vJv7n;5%zBcPUkB+^gAC32(^du?ADC~ zr3a)uAoJnTfZ6i1fn_zaMX`)GA&9W!+AH}A6~o~nVv3s{>Yj5;3;yb#c>99TI8~oD z&mXycfpM2bXtIaID0}86GgFgP$^Am?3Y{b{=HWhFy`Z5tQ~ z$?e$O!JvjO;<5vU@OE(M#v%*9?}9K~F|gS9l*lurn!(76f@0Re+>FR@jb7l7j31bm zEsPH($}Bu#raGhHeYxQ>3_l*^jmxbibBMfjO9FGyTgu;+RL()FO@&Jmm*^lqLq7(U zxjF1}A2rLXwO^ne-PxG~x2^U9bSi}3FIojv$F!040F4H#=PI=3` zA&`z6yl4f+&iL78(U4mTcZ4ggjNy^`wA_eouLVl5h8b1e{6waC^-W^A0#VUlH7?2m ztJ8NXbXlPY4cD>83_)>j#erz7u6f4q{vtXt!t4ZkAlA`$vy$s*r!mg%5;{QIoZ7E` zkblYgR77&GzYb!bn8(R^6iZt^sp~jxMG@q3sv{BkHX|cg_^{+a$-l>FM*wEez9C6U z+hP1v5^xm{ZV0h*LM3u5Th3+wBN~?ie7F?g!=*r%cs5=yxg=7O8y@uq_P|=b z0j3J#N+oes=oAMq=N5iisJW#UEdhK;c0*@?P!)m80fL5y4v7)q7SBRt2JM5Q@(-L6 zpsb;p{qNyovf{=7Y~sy03gpU0fAWDuD6AyU!)>J(SqYiKf_-RXjq0pMnhxVti%^eM z^G=1gkx;V|G#aCvtQiO$|6Bi13s?VoK{|`&qCK2#Qf=h3Z16!Gf4dx{``wAl7ldH8 zI%{5J`2xd*xy{~5`ie!upn&ZtH`^fswH4sW&m)+_BRF7&V+4sj2I%=)iANZqU&0}X zI`h^690>Ip>kz6>A8Y*AlbDk2iNYq?f1C+wL^kprtv357=mWHK+>i&Ok|gTT%5k~R zv73IDwtSHzJgVXS<>P>ozsj%)`cTwqE^9Ot@o~p*ZVT7SBcwDSGVfV{J*2Hz;0TQY zVV;Mkw3aNuFgT1;<_L#=&+#lG4Oa^n=2qXV>l`M)5)6pRzw0G6dNp+-c_sN$Q{GX% zt?*M2cU2PO3*tWB=W#gA(RHrK4ob)J{vJ{>$mn;UNm9d4W2#TE*Js&``;$d({~CFQ zRR$waK{^-05{(&Owjx_WcP(wF*u*AQCwn^(A--h(1CIdyz~X}UVNL>D7{FE5RxdgU zX6kRZaL(Vm7_x0T1hJ4Sa(U#oMJiR(>(LtRvyoqv z+R5iIf3!jZrD%J22#L-pZ>A%NeHm##M+Wu^AQZ+6lZbzu4wxM(0YWegH0Tpc4fFW0 zCuCt2)^zmTPi_I51SdI1(hFieG@aejg>DjNMaJ7Vv*8EPXt{nYq69XmT4%x^nU~vI zbcw^q;hDD>-Z7CHh`#e~!4F%f!|=#P{UazIwM1}M@lrTAPveu}AZdvgD8c|Gp4VDJ zn+`{O92{g%<7dDDLg_D3u@V-_;FB!uQQ7)Py__yI; zG>YVg_Yh#^P_$F0!e?O`!=?)+T|c;uaOhJ>8-~G(Af5rezJEf_`JTI6N4g1{MXD3T?)86cazo-{^~v#(19bP!_;*gOg*5$iGd1>{>F$Y>`LN z{}|7i!me-SVz7mpZP~w9Iri3BvGb`38q!s_lTQf9TaU=7EwTC>W%EY(v2!OXPd9!T zNOQzJ#xK=02zIrUvg+~c`V^FE5=Z`HKAR%!sKhm;#x^4>G7D3 z@%wAi*h6sU0D(IgnGam+Fn)oi5&s3xZew8uv9QvfjLI!76ELd79~$QH;&&!~?>son z(TiUKzy0|A3BSMNcOK##nP2(mOo?%2N-4ffH$9%rv}9O1UEU0n4y3LJ7E_F6Au=(X zu11zuM3(ynxhDPJ2hLHAtjLZC!I<+ZpZyrLK$2RF)fIE7Lc_!;g@>2}=hl@uEztF* zQXuTWL5l4OW6q1QPh-(Aqxjo^JfO~nv%|n)&jhd%je@4e zR@tOh1~*m>ydb~N7%4`l3p=PxS-4mBHzQ-NIFFY-K%Qz3%W9G}6dl%Qjj21q$r19_ zoe(SKn!9fCEHGzKU!k1Zf# z=MyU?s8auOy^F-t9aT=*@}OM5liM0$9F7$ugYlT4)E%!!N!4e7o_{h7oFB|v1OY$y zB9yPaGNDCmmkAfg4_7IwO+90b3S)&^mVi&*h#|YTWxIDa})F(d_fgfASUi~g_-REW= zoa{xO>Mp;&B&!sQYGY|K&vrldd>^_>B$(gr*YC(y>Q0)uMvK6O2mSh8BTFHLHGT$q zC~8vjUhx+i@-! z4_-<49%ByLjP*r7YLvmH@6J1FC~)K*1zJ3q%`~TBD_;@AOuf~WR#Dv1)n`NPKNI^_ zR=jb#6?qVmTZuG?#-`Msywl7A@@Bh@k1sUG_P;~{cyV}U7Hmh%c;kQ-`KXA*Rjf0! z`y;oA$j~agADrJ{=u@y z(xwgkatFi5y$#b2aE@ZjB6wBnC)%9a^!9|Z|J{JzhJ!sZ9PEjqs9W2N zt8wdD0n7mmH6oGuzK961R+u94u+Ti76RHsBgo^Ng4tU`ZFQG&;M$JbvaL#zjLVPj( z$j^$SMB|&YU?2i~UYip`*j6%C#yM9&74dtK2r&l(ky1x!0h)q~&5)*`mq(6xZs?XeY@dtM{o)z`_%SA+`ZX!W-nP-F;D^K@ryd#*NB9px9Kf1D8gfGU zJx8)sH%jxm6@3@R$QsTzZh$Yq$nSp}+-71Ytb7)iMMsjKb{MNKqd?M!LBomwOAr0v zIss>-G+w+MaaxNPjAWmh*c1L6FWy_cnQUyq`~K+SQ#u5oBHC%!$eZ4*lAk{)Z|cx` zYK>px!bN#g+h%92qZT$Oopnu)T8HD<;ie;UqPg%$_2fLfMYy{h*B5OM!1_!7lXL`k z8QA*`!oZ{}pm(VIkCcyZhO}0uXSG&E#?Im{=HbK+(E_|{v7~_wTA(z&>s1OrsP>~w z(#vfe5M}=XfWr4fljm-&@<+y2u=Kx>U6_Y~5OR2` z)qVerv*goIj?I)E+RBl}DGj3z(A4*s@H8F)6bjw|H*gv6X)->=y^ydyi>`JyPD|8% zCXnNACeI3j4O4A0u54%Hxn?pe&C$VW2G_4`X(QPen&fb%s%`0_7h00&s2-@DjJ4%l z6FQ9g(;yC?^2!fUF4ot-f>aIrRt?ql&5%!w9pi!E9+P-S*Rw>+x_cP1jfh67p26S?ZuZ_23emM6b36 z@vhMM@=h;#%5Bki<{%F ze~Ibq*;d%0x*hJ2ce1D2{aa5wTiMLnL3@Bnc)Dg*)6uLA87#ZVI zfkAlsX+8xFMu%}X7A`Lb603S-5y~O*!ORp0t7v-?LjR$^)qu9Z4%PoA?D&j7{0ZG?gOrJr z2zh@{=34N)79}!s&K=5u3Ff%l+&RZNeSui+o=m*oD9qqaR;opTkSYd zcTwRxtPrd%FcdYin2)Wb1$I(@;fqCfIlWfoXggB-JbPK@=Fy;<@{`6A=Kst}@^Qdw zG#NJSR2q`aC6YdQR3!VvO18^Rrk#>tXYjdq_2_tRbn2<6u^EyGpMxnKIs>8ivFL6q z&tu6vD|0GcD;f2<6?I=q)I5_+WTu;NxxJFvMeP#-puuLleF$yzV^VyhXq_+aNd@wP%b=7?XQY_8`QDjbrX_-K>3 z#E0Pvu*K7q%|3)HE<_JMouGq$7tQo+gjFb{XfGT&G_xaZy$b#@OvA-WoVlt z&FM;$-1c8u|DUJd`K2z;x-*dfHvA^DkN7RXZybKJ@DpXHJJVf~JDqVSWM~&!t7K3MD}(t#(?Wew`mlJGAwVQxGQ8&T-R^Vnh^Y=Mo7!O0`wOxRO-1av6= zjY7wg@(_VeO?MH>^F!|ULtzCwM{^{Bz-j9lEqt)oJ7V@cvA=PM0L=$) zid7HVego=X%-T+j{n?4O&5l|u#YI&aC1n`Xn$I#E#*>8{cN#?@TTsV==KWYjeTEKt zOn@)ul&_(!E3y(X=iSy~<*#7=*;54NOpdP)FFGF;W=kkC*lYdml| zao9An=6Vd-55e-9chLmu%HCpA0O-nO7U*SWS(%y<2~ngH_q&NqJi#cmWlvkV<|T7M zS7e-NWfK+>cm=TTII}HV9UVDQI#724Vv}R_lDZQNT;<`GY5INV3ZNApTb)&Se5G6J ziw`S2w$fYpA>2pfE~zc*o+#~@!W`jT4m)hZuz^$+dGRBG3{ZqtMYeq++%Qz+OuQMg z$fz;6J&hcZiow_g{{+iFfqv^RNxy`=1BL1#dDFFJ0%`(TKCEi!3KwVzNnXQw+}rF9 zjg&W)kOo67<0*&5bPr|v-ew;J%;>0F5MaDJfw;@@FS40V?1J?+yF!<$Q7Vguj{1~j z>rP}ec7lrleK`&E1*VLnN>Bjl-u#JJ7`M2PLfQNfC<5@G!E4D!dqyLBRb+*VD+4<| z$#6j1@ke}GB_@=Im$(tWpW(x&k3`%-;Vj94_sU3#e=|p&Q^ll%gIbABRrF+F9`()F9d%la~S>|4`U*2?6nesA6t(=z=K-8l|Usc-hR=5xbr4_FG zrYgNHt`LYh41fhN*u$;pA>c8#s&vR(fXDP>gvV|Ou{W0)4}MD!g(b}H2&an<#P5`| z)8y$guTez(&zJT*_ucpu`@Lmteu|uxW$|zB95BU_->1D(VcSGhb0WWAn=p zva9^#4~m@D>cUl)xW^HN^3jqdlrQYZz#dG_uG{R!NMuLa@X_lWnA-C2;wuq;km1A2 zpc#r7!dZ;xtg`F+%-}m=$zL3b6tC=o-@%nu-c-EGoWxZMsL#l{JG>{}h0zc8?P0Jn zyk`+Crs`wMGwRB`6ldb;NRWWCe}gNOrj>c!akqAd_p=R7m|T^4oh|U38nA#9|HqJB z^a&JHm6-%8^RUk`&jG`_?s zZ!E-jdJ*+3jO|093m)N+Y=`0(Z7OCG(^+CU3%}nN&cG-Q^B1;-MpDPt?9)!A%lD51 zTiWw1T8#avFw9l3b=!HZi%SV+6!ut~g{LbRy=uXSK=G!(d8QVQygIy4Y&;?HwR?DG z(@I;JLA{M`z3C9ZCkWs%x zBEe7XHiq=4py2fT{+JK1T5EF&^eZ{mf?{$%$l9O>2IRJErKn9L@)?J*D{pSl zhhQI}Y!)%-Xiqw~cd;>xL?Vw(d->)25jR+-0MTc2Ucf|zfqMn88eHq6%@)_%P=pzz z>c4wIeEzUme100^hx*}iy^pqr)vwPtvAmV`?)Fl4)ZDxq0W7nYB%sZ#_=;;K*od;z1LeBU5493wlO9+aT`@pp_$Y` zA5io}o=(jb)VlLOf<9`TWq+>f>zNG8x~h*nVLXSjc&xGT)XI1Iql_OR80DHNg=UU? zKrIvNwnh)}2T_u7mzlO3ZnS}#sL*uLhQQ!9oFnx0>zTx^|I&f=TT#YnvrKwXCN*K9 zK;AR#4+@1z%5G&pj;8j4i&_OmfKZj$CB89cK#!Q0ZGQ#9XtC)PYcS^}c{vhd4uH83 zaT~ucOVWiwUDphZS5Li#6chcUs;2@7_k(38;rMJ|=JN9#$PzG^kU?1{Nl;#?Cq2YjmB?$~6{({OR8K>{9&`Sl~W_fK|Le z!yFIBgK;qP`~-OvP~qt62~b=y<;p(+!d4pNK12s2PtuDIqs=yq-;O2>t%iWTelr5K z`Q8u6i_9>SGYG7}{BbFXz16THUQd&ACOls>b$zAf9Sv{Yd~f1qoFR=o$wc@t(k=im z;YCDk-@c$op> zGTO&P_?VIFi`W990XTk37j# zNR!VGJMutEM}R3A)it6U<5IgZXOh=A+iWxQnJA01??l-N2v~KY*hANYwG!f2(0wn_a9jf!^c2wn+onl-qe)B#U#rIM8CZJ zJ5U76zlr5Xt@6u7V5R45mLI!dK=~U7mtVW35mejDyA!(fw(wA64OmMYvJ}nWzn;+u zFgslkt7|gWo=Vgm&%O`~|Dyw~zo4(f`jAIVxj?V`E0`U~6k~&W9oe6#yEY)jU{s?S zoiUlUV{zfOB4s=>&)}$sU?;|Axm~tH5)P#h)~z@p z3|8jpBaoechMv`~@JdTZDZNcnNTw}P)bkrgX@~;tssm)PA6AP`)7xH&+hzBsxHa2d zccSdN>qg0IaMA@EXG5Y{MNNlY{=##9rc}1ZtZXEE@rCz%cM)v$jxPz_b9a0uO1(go%3zlI zE0l`B9?=ZuVc-wUz#Ng1MaIXmfF+AVm*9KP{Aw7RAD@5w;_47|r^JzQX5Ui4G|wF8 zQE2T*yOFrv#}p@VGZ7pB52_2Dj_*x3R@#_&3@t$$;=?xs7LNFte0w13nP^b+0ApEe z$cYd{^&(RyvUsn7=FNlkA>_pJ75%tSe_%KMbz{Xrp+>w4jEzbr2@??4Z_x6un&TgO zmra4T6ZPT_IqF>^XcRWD*|cx0UephH9+w>nqnUw56_}~!LETdQaJg2I_k*@L2CRPKm!vLzrYUO991B1T;axd1%&9oc_B6XrK8C2 z66OmCF})HaO{Yi5*J-wVoo+jD-64rcCNrAOA(j(2so_oncFhMXiXffB&;#(F zj8e?vP2l5B0!Msj|AJ!OPY4;+hXH|%`tggFj9Q1mz$+y0O8jK(25v~ZqX;)a<&*T}YI)owdMmsUW%)|?rn9Juu zW9|WgO~4%F)eoprhcOAYSGD@bPMrj4yTuz1aMJ?9DCFcIE!03u9LDdkI9T2An_03vOYXG|~LlJRr8cNBXrgwJg<30!Ys+Wl}5`pt@x z_SU6{SOUbDOY`MQFeS}+=J=jA{@ZJ_C;09I>(B%?r5QIxdp>v^+`;9D~8BQPlu$s`pJ3vX^QPdldsU{FMa4H5SDi(Ju-o@X%+%&IFrHLUh5 ztJ-J8)JL_avD)Y0Tav+QMR!H%1FmFd`Dm?YEy_SW?H1RCE>(JbEVt!svpcf~lzZJ* zmCNz~xoZKr87wzPWV@#wW$$CzCdh70g6#MIjyi6$>i7V}Re(&i{X_V^w(W#b|9J6i zEYxz_F#Zuu*m?{Aqy^BP#~}gOz{QvCB@SdY>{~vxU|-|IQLZA?oM|V#OOJwXmAwhR z@TqaumITs6`t|(u`TqUdpuUsm@FEp6rs112H1kYcnbGH6s+c?Ts&*oMSt0JVbg2x@ zFhhel&(5vffYct4_8Oyl-I&2ab0>H6F-%4700Y=GN4FMaa(3EuhU*1R3~n~^*eDzLy=RN)E3ID(-&Ye zV6)3nd;GGnE71(|r~5|Lw}*z8*2lto;+b_3JHau{c7?u&^6&k#NjH6@o3$vyn0tXq z$3WV6uG9=v5s1{c+o_WgmzxnjG}EGoR*uo480zr!4r3x{BX%C`6?d)KQIN3OUJ9wn z>uU*-LE3-f%k`G_<&ZwY-0;>{c)=V?E8G$;X6`gjnEO3Llams9vld}OJOlf=oz^D# zA4RIrA$@ihwev;#!jTegF~zQfU$1sc3!&kg;Wg7@_f6c2?AHs8pNed9J%J<4e`lmv z71x?&eh1QpTxTYotk1^MGJ_VzR=Xyf5#vz+ z3aK6|eU5mLNvqwo=RQLuv3F;%DaH#HlJN(OHi^TlezSyhg!*q{*Q4C|>)!@XI$XV84y z@))sCZrFtX(c*NiFGF7QQ@F9?bxk22=Xy-hAE{lieV8L4btT>gOYl8Zp+@SM4ZDh- z`v-dUf!?(Py+0i2{n`P7MBs2;* z{0DvI8=*@%dYFX;aaMSM&RpT_P+QYcvcouze+)kCV)=s>dU>Ogy#d?kyO0P>gEHK& zXDGFO-tff9E}$ftpZL(pX>!9eaBXH&u@KAk0s-d70y<2i@Nk98QS8F-t1z1Vpat1+ z8{!Hi6-5ws@r=o7;YGsglI!>#LEKKL?-h2q8;d1*V!?u?*obser`|Vj5kDYk~o`zp>auBb;J)K-wQj>{L&dI*=qKZipPS{Hp(#ph8~N}B{>k+p zu+2h$jp^ZovSRBT#UBvcmR!xCu%2MF91`2mAl)6tx9-PUwT%Y6QurKslU4)QL~SMh zucF~#_F>FSBs)3=R0OD9M9;_f!CHFT1fKJ21Wh#5)$;`0R>9x; zx`MB_3jX`)XqK3>^~GrA?IJsig?U4=vZsTHnku6F)282%8ujK3MCBnWnYu1feyutm z2gP5kKoljcxJk+tCEtbjKd*!L4x|rOFjiUs@9eq+)b}BHKVf1&U|t@e_h0XZ z_o}+Y>>1b6yYwD-FJR(1--q{f3{U)Y;bqCWH^b}Y^A7i5y7g*As%+?}VW7n26zB&8 z=H8Id%!!@)q)t@e|9=sk$k_3AR-Z7NCJ!gqKP)1cQOtqPTF$)=jThD`SC@RIgkj{vBXiE%^8gQ0}0M%zf`=Gzk;#+|Qmdcoix5ESO;HYz@TuZ@b~ zSvDHhK(5;04h@;p}rW5%RPMv2eC< z7D661YcX;5I71plh=sGqFyKAaBE-Vk@LYu4Zif&b*Aqi$nz>Azts`Df5g``NzI;1E z@HH z$X*d5P#E(S2;TFul?zym`(!Y(J5LssZA}LF$y~6On$h4RStq*&Q zt*gWq8L2xqeDEKpuTV8;jc`KQln*a7$C_@&;39tQ-%KZ-NNAf3t^ATqoQ{=L`T3pk zEdIxZOX&=$-Byo;m}szbmFw$)W4+>}31-MLcu-IS;)wn2UFjyj1CMPp(=+7kA zcLJ?Va_I&N;bw0_M_;d^q#Z8MPJhk>oSZUhs)5&x*6Js{RbiLNYA3#=pPeMmPF^qVCY?wcAd@ zQ4}7AXOtl!!*ax!^eOIr*|rEZp>1XXAsmKARYdz|iv;F8gz_LPkAY;JQ_`r>J4t&G z|Ch==uOa6o1j`La;IgnVG~2K1EEL-;uFzBq`6j3Fab5ucQ90Pwn3`xduKqSg>kEL* z2a@3Kkx)K$e)@s9j~-n3z{>;0qA!aC2|G*>`p*i?fv;Z9ujWH{DMXxxss#S)>xp{k zS^{i;5LE*X|-1>C<$U(_+EpIrwupf`_1qW5Y?7HkC9cD=XxvhdivLucMfyh zhu=p0j^cMw7wq-%OJN61e(+C(HP%Du%z3bai=wT(HO(3BV*&^#iVzllCXz40h534q zs-GUzC2C`%t8s|;X0P#mh`(xLcNq34NJ0Tcti^(Y-G;kw+C#U)Lf*E2Lw*5G?5{H) z3&G{OD0W~rR(>(_o{!Ch)boC*TX5%yQOc(%8-w%ZC*TWcX$SkXt}GPCq06MkaF z8tovbNx7Bq`nD-=0caRbh^j(PJ(o!MAdZ6(R+eOnEkuEv(@<6_kov*D>wiT)&2{De zKa)@MzEVET`^V%{6SZ7eWML^?*Cb@STcMA}(ZDW%n&5i~mzCS(2j1?Fg_qRT7GFs> zjW#nJ0)WW1#q@%A5Z+&#-hNS#`5|43$qZ6k29^~1#K{{6Em)(Rr@`n_-A~K0VC7cuX?h}lk30FMaUlSB4M_M zISu*e21FRk@vpbU>y_*OfWn}WDe;*GFP+AoOvqa$UaS*~psU1?RlYzK8HxJ?tG%JKQKHV} z7MTy?qp$y?RrHI%W)=-SPG~wA1;TZsPRlh|e{h0ADzgY>o{dt12nXCN#Yd~KQr$RKw7S-8oMATZucC3?_|JlNoM|==_z;3U z$odUd_)F(OSbd1(f>WQ(_aQ}ILGMIiXSV7*j2}3oPFykJQ6*vCX8an};f)Q`5Um@; z;2Dz`#6+3GQn8@dBm*7WZ(!ui#|Vr?1Ra`ttJYVVG8%GL40^HRlxnb1WxF{uVnu`c$d~SA{=ZQNT)AHZk+V!=ctWvkIpLMiG-R%R*V894i^;F>%z@KP6ufnLCXR;JB!= z0U8uQB0L&)nL$0SNk`#ac3{O)0O_SG< zdICJL^Mv^OSodJ@_c_L6J^5fLBsyM8`$a+b->f9NnB+1f(S__xfj0C#=6#V7qmp?g zTZELVuVwTjjP6AtRz6Cl6B)6B5p3`mL{FGYb{MxX`lbG8xqde00Xj#00_ax+AANle z{zH#|C*HKRaB}6C2mim2UNr`DuITN7uK)-bo9tbZ8Q=+K`T1ttF^m5JEtbv@8VoV7 z{wi<%&sC#~ah2a5WBP8l4du`*3#bt5rdq%bO%XetEE+_k1K!r53gDpsbP1!t6$H2zW%$;jhQ4 zHwzOH`8$nOFxSDJd#I?lbRxGDkOmEsm_0p%|cB+wdpXrK4XIC zTDM_1iX1rqs$t{wTd33+fq^mY7wmYS9e+CGfk}hnvmK!eEhHK`?=6{I!<_CPLqEl#IH{mR7*BPFl>44kr1@0#gh4^sD@;6HRvU(}+C z^*Q}52#reCEduSj|AKu(74}df5EHH707kLy6&97sq7tV}(Hsn^8a?|@ZN!7)s$6== zaIF25SpGVLqUt=DVHx+`-?sWiM;TCoUTi zEqh8k?pd0tG@gd5juI{LOO+kc&8ogrds|kUj=S;tp>|jf;HfjbdU=u3IQ?^cFUI$j zvZEw17xy&&5?4{;>X&eazj5Rlf;-ybK4TJ8bo1L1F*tp2VE#hMJJMCZFLVb|!9B<2 zglBf+oHLxl$EYIsT*4>8cPV_5@VVhT6OY??5CUtkCXW{L1nN$-pu;OS#D}Aa@hn`* z8&B6_I9nxZM!gtqLJSi)o0NGBH*-hDex*~Xa|;6qV6wQd=2`vB(dT&2+! z&$HqZJFOD*?J0%eB@<}V-7uqb!Ne)ig8AkNk5>v0hVhWXfu-Z1f6PFc$`03M@hmnw z-Sp-2){ixK8683>yGbYoFy8?;A3>H24m0US!~h!|;-etW77#I;O=;D0@xLW!b2mCv zPBR2(0AK+R$i4pxkF5HEwerR@OY8B9EG0auNLMMfpB05`l-ln*9f4?>Gjz9Ke(4MV z5LSeE6AN!1T@f1ppH~F+?IJ&LLRRFLDxA;;pMC z)G05cg6dq@62LO*yg*@B_1MOs8|x<(v}Wv*x8txNxJ3l=l`fG*zW+u-W=f3N3oX*O zXNTYIgB=`3iZrMjaa`=5-wTCx^d~ulKtR74P+SPbC$G`|%WW-2!yB-i5&U2i(-Uws z1S=v%)jgjzCc!0^9lefHmwCxK&t#e^3s8h>)rnh3<(39;Q&Gq-^vpazS$uE0z;z!c z;bk9k-#XH=<1|5eln12-PKXcK9U__9~U?k#$&z#d1 zeYEXik{eS3?rRD6WZS~mZx$_%=63YtweYP@KRT{0#GRl`)-eAHwncpFD3 zcI|>X29ue+E~}k1KAdlg9WZIJ&TrOE&h~}QtX-My^x+a=P(B4e7%s{y-@)tkKyIjc z&^vAsWCZ4S!FEwibeoQzBGiB@(Smxr)|b9)ES#XxoHQ_UEZ6ZaXiSM#_<90Zv6BST zvd1d|#s(g+FqYdq^IsPhM=-Z;cw>25;MiX5<8ZQ=hSJ6lVWWl!SlJPkal=*`&cg0+ zTnbY{Zgq4TAwhmDrujR2fNm6RQ!Up_vRk`+I4IQKFb+NhyaiCNH3y}g<$4qBGl46C zy+)vLZ&04rgrz8SF(4N>hOL2=^L&{9G@QiyR<1@h5r}3vp}|?gwXkdiOpS+o@pxXW zTY|wcUW|P{6I3`->`nIGTrX1T9gbRy8#KX1-K1Qs*0p!9L=TOGPv>?)en z8oq!oh*w!-;BYC8WwyK6sWfIXyvIOJ%)wkFsO9M*fClF28*85sZWo=uFoT^vF{G6@ z9z|GjLVpdbQPza2yaV#4X59C<2d3E1*KR=4DhX!UQU^@4^tPrRoFZvD?xi&jVb45# zj9aut6u{if`D^B6G5?L+#ZG2f_pE4Frr8dWb>}x!4Er%YpBG5%ksDqkr#c_nL;~?< zd~G0t%_0!R`opfe{=49L4B!FOW$ht2kdx5HWyzgY{=A(Ez=7_ef#@sY{Dpop1t7&i zLf*_OJjB~b$cr2t4Uv5?bl5jyrH6x|lj3to(w*s};Xd6n~K z)_YNIdBb0!wigb(5eiEQ0g(Wc;FaJYR(0;{i$&w*1Q3lA&gM5!{d5ohm87Be4)&?A zGrR}^5@rmJrSDYns58U-mhP-KCk-Tvao&rT7VCKAN`zy#_K?pRS765V#0s*R@jvEA0s^QG|A5}Bk)nCtG zNT$>yrqe&!9dS3Y=+kVs)guYwgg21rq_K6r+^~;Y)laZh!RhuMzCu_9JFndEUnFi1 zV86{=MySXW%gE2scd?B82oCI$%k@z>I3zbBv7mq$6OupkJOWyEt+T4|wQwd}E-o1H z8CAG_b11yE|3Sor+;R=$1Qpg>tMa%Qm}KrZi2nka`@&+-$QMmryi@oGJ=i4_joF2- zXbhHkHUPHYkk8r#%*Ppb2;zttRo2VZeh^EQ=q)|0)@Z%z3jTGtMcs7XB-Xt7lN#Z9a z$cUbLluojB2GZ3&C4gwIxi&!WVF5(Tfra$X)mnlUhXnF~xXQ2lAD5}fso-kv= zf)OT=z#S0TukFKEw36nHJ->!l%*1VOatTbPB^4X~5TZ)uO^=O$j*zGY92ziQr>Yci z?8RtNaRScTkw_OVU_+|IJ2veTe9^QT0aq62|gw9H|!GE@AE$R`d z{VxCxD_%j~Qr@(I6@&1?%;1E;Xp}np6omBY3E(D%r$sOjh1^tngNSK3Te8Y4l?sTanUt*98TXL@VKl8V zO0qs!Rm3_6=r_9pu;F^D=QUJF$amsP$eRt=DWIOhZw>}?N0@J?Safti?#aO}&jpzt(=%IpMK(bjt z668!k@<{}zK$7cID*U7*{Fq_uHP?I-{7OyuF(Kf`Oaguq;1|vMA-u3a8L|^F#AO*n zcH&<{6Y(w}dJXG%kQ z&=9~gez*D54NjuYPpN&~p!%Eweyk5`s$=Ww)r7}4*T=-{I5br4tnO(ln6beIyC*8z z)Z|S9E$04;(5~?0SuZvq>UsWzN6{vG!36EK^l&n}%1PU+gy-tc@55)C_in(D>#rd4956F-DT$w5V%$n1ZHG^u!xSFuu zSK>DXqh;u=vlN}CNdVhWF75elFF_NOnzioqtwhzlu5!`a&_%2d@Y@N}-E>O}lI%}X7kuxl(KIsqk!y11G7I&43da|3=)Ksr#a z?=1$;HF7!|8}iJDgA$VSZxH>}+)6i%P?Pj(-QpIv>Zutn#pI7Rejm zM6qZEDwevi%LGg7-q5#k*#v4&a52N+xbX2-wJPXsJdIx(T0nUW5}-AoYIG8J>1$M= zhi?yW7cEDJvfcPM!sUwfP}evan6nUHXk6v`JK(UU=H05UctI{y7yeb^uGo#0;G%F5 zOnCxLGJE@5(Oa5{_$QQ|3d{ZpHzmRu6VCiXf3+i$Xb)Q_H7XD^i=CobZQ`W#_`h*6m;4%0wKVJhvi2@;R#w&j|G*45!sr?BhGseGpo3^)SfQZJ z8P3QVoDsuNyih7i7Uqo^@rDiz=p2t@nwI)4i^>Yi)XKb9Gk}1gfH2MArM#8x<7BBN z;*I&gKWp#jIp+-8@Avz^zP?^EXYXh4wbx#^z4qESwv^X%zuJ}6qbPG}8K?Z;029&X z0#9%7c)z8(cEZIUw0sI|K5QA4nsE8{mXShim)Z$OiD0#XV6{dt-R}fiuMKS{emQjr zsiE!ZA^a?BPnYqhv^|YrP9@w7)>8+yry=H=mRl7N(R`q8geW>x6fHw|6?jH{v~5La zUK)s6_EqTL=oCytW-6Uw#w z{Gg4L84y1V`j#+VD~oik)WWo;Y|rIn3j`U!joIfo0owLrDX`J$!KE0h<&S898@mw) zZyp2)015J=yh95BVi`QZzQzboAj&de2|TW54`{=H9ccC^fFof3(YD}ucsrt;e`E+w zEoWs@f&16NNbjoEG-7np9VhiSmg+FWRr3L!?%4f*!1ZL$FK*%Kx^f5yYWjxabJn!W zzvWoMT5++XY#O46d^HXl+&)#anKWw~Wz&=~sNJR&QAP!6L~mWo-5nKo(0EC5HF8&8 zRwaq*J2Ta>?`f>wa6X!rr^Nn+wbe2G!={c}u=IfcFI#$|Wx1LdTwXe=iGE9HcU*_B z<;qKYxK_f`kiBn>My{-_nAB$<(zu%)W8vk->`Rl%=MUkCOv?x<`*cPSo0c^2gXv7A zUZv%{Dwkj|jrk@b*!nKM!b^0t^<9=s_NN$DH_65Bi}&QWEg;uYlS{&b`qGswTI z!CrHj_Bw82s(as;dT&6f_w%LR6BfSI2XU$3F?{F&eV{Y!OJbDh*Lb0I3}{9D+HbLV z9QvogT-1}-<7%oh-1nrnG5b{ThtwUc^mIkj>CS&a;fa=~V_2YYtl(+$0w~1t%mmzK_64l5y z5S~cX;{c1_gt!`TS;n6rt61Ch8pFT*<0b+q-{jQ}E*^NIKKsn*PD-}DRH3(B(zCa9 zlqsNE(m1dlwVzQK*dyC{qnmyN4lF>FgZyIPI#AwArF<^Ncb z&S6`U?Xx&CIumqPrsI=|9Blz zD7xR7WcSMGH>|H*$$VQ+7DGlr=yHrkU3K8>wOPi;;-6Ex#+2t!f^Z zpN(AI7{C`uPF|jIgT6?)iSXbfq}dQC_sT5;&nz^yLR``eS~f&7+2_vHoKM9UVH z{-*4+(>lsdIId&&8?E+-z%_r9y6<6sx3|{~h4!_BxXeO-2Xmc8NXzgmEmue1&CajP zJqiR_!6m=(C^q5=Oh=x;6wk-wcq^X@{CBO7w>h3vn7-Y+FE}i6U-(n#zHI3`E06Mx z0p;f7{dh>_ZQ%PsdtJHkDQ&NlA13_%pYXpw*_s@w9wkR6TN^3|C%1lmL=vCGyGOeO z_h@ZHrlEWV9#VWx*fJvi)t)GiC?$7gi#aMO<4KY={41*~xq#$sg?+wC2$=XrV)1XG zMl$>UoC5pBDtMi)!Z-=~@dC~oG5Z?AbuL-u_r{@+_D`#-k;k-Q&SDnAlWByu8mlkQdqQmxZS z&k0avL9lg&F6C(}CY81vs69EKh7isBHtF^HR5X4Jszc$*gQ@<90SKEc!+ske!l%kC zF{5o=|Ke@djXa;FndnqcZYDhb=#E~v@2J?Ve(@8RrFn$tk^|)o7RXOt-A^+`bR`b7@vuoe<}_n`dupI$8{V> z^jZ8%wNKaLInG<#Yh}SeY)3gi#7K}|LiB;D-7_jy*s{FBA{vW6&^fRVav$vBhyGyS zLVtpN)1)yF|M~w4SPbZqYIKyHrmoDTD|HPWyU$cVzDz%Sz$=QU2+`X1%M}f;?QgGR zSbu=WlNJxbcV!}I4o`m?P)NszaW zX%K#Q9kWg*b#?TMp-P>^Dh}Y?ijImu(-SsiAf;us11RV%lC&h19mI7whSOQ1Vx7$=0Y>dc?IEDkw;!C;Si%-Pris*kC2F|2Mva<$MeTiX zFchjQ4eg2YzCGXH5i)>}gRC_@MfkI;+eSHU`JU4t$FDtmNWi$KG%--6uTH8%~ zQ(Cr5TlH}_W-+bF+JzikE57Tz@@2K$9bcuiuaWg#`A^UHwjK=?G_G-jGTAC;?7I= zOFS^8@{qD+AGYif4yvd)n`Ahta{Q+`s$j)SO3o;0J~`Y9;di*Rf6x6H_(npU=y`ZG1M2L9`ATO#Q6Y?pbH?h+C$pW|(y-R87CYIJEi$iG5c#;GlTo7G3a z`NW$AaEwBi{Wl67QWc|L(pu8|iLFyA%RU0?-?*qOA|&@-4CvWj1TDi?*gx>=!_dw5 zyOyiVqkdGmTA=m_ly+x;ei5=)MpYV?f{_fHFsNvyI#p|DlDh(Rg z;--D__zcQ4Vg4sxBrSN2nvwol=5^ETZV=2Ih4$`M;H7}-9>yU*F3 zF5XLCA@}R7NoS^+H&x3jgHDYrD_prV@KeVg|M@OQ!lpdM)@0Tx-cjPHkQjWcSIdJ# zdY_QqN9p)K#d0cVXwNJ=$E&cEmE&J$M%|cwbJ?K8l4B89-FS5je`V=v?f6*Y!C&io zc=Om34?g@Bzq7;i0!n#fW>Phlb6Z2#zXm5CLt#qTDnBzd_SIzD-v_0}{@sV#7ZtWz7DP0+&7xdQwQuhJKcr_3c4rA^COs%0&@vov+oGcEh2 zj@r_)Peb+wg{!nVduKkc0F!;o>)ZF~OEqM_YtSF)YFM7A_J?zQ)YlrsBC@ z(?0vrg}rtG;&g+sqV6Z;5w1UKZOgFKQEOU;q}qq|eVXYLAeVz!;@(y44tlaw=`Qfl zzMw?=FoaeOYX_GEn1*dezOLoYT%DRb@*eGAPAp#N$?8ZLSue8m8^T4=;Kppu$1gqY z%0P;4KQNQk@UEB36Ax~jlN$asZKO-dc%_`wGfEAa!`C^(pN7;!+21p#o+BNfo0FQj zspYVy>hWY%1D7*_Hc&Se*TVZM9B3_y?6jHP=#dGdl;K&2CV6 zc3Tn?NN3C796K)gc#Y&NmAH2!pu1RgioVyeb0kgPiiWPfa?vcsWUhz#X=Ozf-#oB)C_Eh^x{UW{gE0ic7A`B*epb z(0X0VQ2t%pTnd(SNd)7<(dC0v$)BOZEhgClfLT{y6@|-KP@W#?j4HGx9 zOE8X?+H72X9^0i^ew%CkdZ%_ZcWoPmrr@Db{^BhnBL@a*^9KfMbzq=e2L@^j4h&%B zw46c!=^3WLZ8~6&Jz$k(-)bhy{c947yI>tZxW!1vC6~}rw3Ly`ZnmY2L0ZbtV##tl zg*bL&SS!(058#2%srASK>mx%R!G>ZuSkPG8@=R`79&BR(8?BHCE|SaoNa-fUKo;;j zj(_Cgf827(+Lq_~n&QP5kFgd@v}_{KegT#FRgLBsd3YbQUb433dCD9IZ71hxJ9#&S zE3(iG@=g}pBN9jFFNZvOVtg8WSpmP96`X zq0*%9yKLa(L79qbK904-V1^PN1180favpWpPO+rtz#0|Y+R59c$}MY}%~LX}*1x&{D^=;U>4}>YZAXx9WNT~8FM4SLT$io5MS9Q3 z!TXBrPHCFBxiQhyn?!|>?XGQ1n6WoZv?gx8c&%OXndX88W}<{T8^^9q+cBCAwiQ^* z^PE)SMURGe2JSy$PNvwFLZFIapIRlIB)7aC-Xr+zkN8R-oLI%h`IQ zE^U4n(Et}lUgE-yV>hJ;3Qyd~$(>&9vp9p{;_wVv>D;p**zu5Kh zN>f0$i?cr--PJnvQ_ZHUv`+oB(oj@?qpO}F6Vy>Qf`eEW=VW4tYc~=b<9ORUx7&Fm z-EE`uY}^&YwLqLys!cw;^qN5>?$#gLs|h11U+Z4G)h@DSp_l8ijg|H*7#ZoiuKhv3 zF*Ehqr{|=O%(NnYmwW+>f4hFsZ9;5U9hA=AuGtro!PVLM#TK?hlmATjg*!v+6edhSBXnQuJjV0NC{!whhEvw4j zywdP&-r4OBm9nmHoO}2OdT~JceFtQ-_Wgf0s`UGxocL)qJ(y;=Cdkq<~6GQ$Xe6LEy}e+OA?OLXO%CScDw4LXLok9R1|si#F*- z_@b%B3AWb9^TBODxVEwotLvRgKL8$aCn;oCgEMPkxg(#+?T z`aCUs{<5Iim6x@P`xBXw48eixi6uiwV2QrhN(BaspNMz-{iSHdlu~wqfs{PLD zRv4LTzq@)Ne|hev2?ybZSNY8yoYGGq-Cx~GTE1TLkNU-kST;sSG3L}~F5F(R{D&rb1y4vTVG9()V6{WW@Me~ z^d*L7e<|t9Zg3lJv~lv7fIJtfA4(1>30Jl^;Os{EO!dVwg}f^z6Ty42uNn#kq5O%8 zgj(bZO6V(3YMkX8OGl0U$#s4!-`Jlh*ebZc^qJO}GDQscT{3Cx7Aw-oB%`YD;Lw1C zU(H)?D9q zvEvBV6v}pzI=lxA^kk33gPxa+xs%bC19H1io@>>_Og~wlyd8dWu>*6-#;iTRYYH-l znQB*1hdC)+Z7J5A`qI_R+B)-c%~Vz{nmMoxp~uC*c1=9s>GA&#h{?cl{Si_IM-&+d z=i_nd8xsVbK26p>n>=5yvm=0+2$4*LT+Ln>Z?TIW2yD5Ys0%q@CFEzPY+T?SnqO$Hq|G`Av zIuT&G)qDux)tBR_Z5qmE68dsiAw19M`u!nWy6iXmxwK@o8Q5>_ zlFFFb_SZLW?c!caxyrg)F0n{co!DG2SM~$U%EhFcg+tp*@A&&SGv)}g%$*v$G0EPI zwrxY_AIKuiRi6%qJ)K>}TW1!JVKY^2Y2BvtMi~zO1me4ZDz1C5>T;W)4GPrtN77Pe z;N$x2N@9OH_1~j@YOHpiTf?7JWnv{Zc%x8k3%sOs(|JR+ji=>b+Gq;FxVFloMvAcL zS)iG`(r33p|EATCR2M&}IBnvAn{?CK*5zd_H4A@a9*?E+5=-Im(-97s4z$d3nD{$6DC&-uy}ZlhB;EWxx8log?OM8qv2W zKW5C`G^1~qdhcR>eUq8BRA!;%g=cXWN`~}TLZ+7XzIcy0nVWRLj6XVp#vh$y)3ptL zKDSW#aX}JuTPpD6?&(O%Xm>HmCl`n_7YM5dW9hnF}tDSXEa|bSyJ{|Mt4kO-J4& zv1>UvCx?vLoE2}b5S+c|4XI#JeRS*P)#dZb;#&2%^;X<-X1=3DTDXdbp~aP!brbz@5V zC^d%IpO*86RlgsRLB)77qI7%R7=263+l>XjL`aPabkLXG=N*6uE{qo<>X?r{kU10D z0b&gMrRtf-kJ0a~->7b{W7yTD|AQ|cm0ymS$_9_j8ITS!tr@T$G2mOr9=lzovl36Z z-`;P_4C1!}@_YJ)P##X!t5ydtV4>p7-!NQs8caeA`}%8%2es(?vHG6Oe@{H(cFovI z>c9!Uk2mS6t!Eq#h#phq85)U~J>(Og(}-e@h2?enPAfMunqb=>>eX6D!^OIV<;NAn zXL~4>t05qXZggniD}%z zL%eJG{5O&r`?A7{$}ZGr?IEOmJX)U76PsV-Dz=vr+)flBfpjdhG>%@ z_0(sqqK70eH-hv)0ff>3K{pi)W z)ZV`n7ie99tB#fvI(nh&--)a1-e@Aq_-f@Q=i{k!<_@{X>1XV{!0~P;_h^ly_u0qn@#s?ZkaxhDm|7DkJ7yOdt5Eki~Izs9_ zLorEh^%+8^`iP;kK+`dKkd9=re`M^l>HZbzr~9}*sUb0icj=zPWu?D5wWe5PC$}X* z*TIbwS6tj@QAV9-=&MDq6H5+(tih_t*t#D>fWV^ zPhb41PDE648p0nZV)a+|SSQD>AiuICyT%T>D9~>^Sf42DN?lPm)D{zhr{`6Bdj%3| zj&nD%BQ&R0+0AOLzMxh|_02YWRE%>uaE1y_vS9t!qYt$@In~3?{HgD@r)6H=YfrO} zeCqqYkq?Ty#vOZgyNy%V>|9T2%MkTxFnufNmLDNZ-o_zBBNO)yf`p^Z>_YcgzhqDS zeN{4z!Tv_Wi`|EIMZu+;JLCIk147>s48ro{SpVOfyLWZRzC$2$r~R_Of7Qb4`BK(b z+4`_Nv+|1%^*MtVW^5#Dl_^7thcC33LrIpb@Gjuh3^BT->>Por1XLu45kfZhwm!TV zuqDmAv>Cj?b~x0>%6BNwdy2NUpxZ_hiyx$#?Pa=$AByG=$qr6t@6bOm9Y&APx@=t~g$5K5P8IsT6XQ$rfX;y> z{P>Qy(f0E2mg+pCTeydKk3V8V+%N88I`_cMx~iKp&7-r+-`R4&@`)RpM@oO+*?7Rl zD5vEuEk>J5K;=iMEKlTexEOISytlgWA9nFycF3FwVNq>ywQi9c|D5h4d=q}9I*uCz z*4+BiK5BetPW}Rx3Rye5?fq%sK`Jc6#AY+YIJHrz)vyO!DRB)eyho$j_==l1$_fBz$rNXzD_>cL#vmf}XY*Bz8OiruNztaf9z zI~iNL*e)|c4ghjDPQq8iVq_JP$@$xLJdj3+?X|PT|H;f|f)hX4ocPIO2ARJ;8DD$y zn5}cG+b4TpJAPhkgFUacA-~t>I2KIxcm#9BnTUz5FZcIVa`~e5x8TlMzki2bH|Zv4 zMx1x8*N@Xb6liqodpu#qGH!Knu6X^o1Rxw3Zr5Vq#5WS((mZj=)~j~5bE7{YAt~8q ztKBEhD|k04XZ#b%hs>|e>Y8<3dppjpy#!{KFxer;z22ecGF&=yttM%JjItzvePe2FjewgYp9BWad@%?GCbn-m%A5aXp&Hy7qf?@Wl?K z54h}^GAEjQvcXMWhT6EJ^>5*S(&vMu&-=@IeNwYP%>Zl5+oqOR4VVJT6i_~~ScBVu zJAFNUdG)?&HuUA*RK0qiSbUvIX21Q0RXDwR-1z6zR)u?8bjbWr`PTWTQke(!n1p-s z1`%i@1hP8ZNhyW7q(!>_l=}hV-giXS-Wgf=Eu&N`WbC|Z?`VH7amVpI!!)QpwGZJ0 zo^M?^jWr~}q;-*Ug2bg(>#1p(mVq~77xb@CU#c34#6}U|#DjHJ58G6~pG)Gp;K=;T z5PXSZW%9tSrV=T(9<^w2d%sy-+R)d?I~-MQ#`SVSMf;EMWDPd& zKeCZ$9PyaJbLujUCEFDsc^$z3f9p$;x zch$?b$1L7ol30ALlG?_Q&OTPX6u?@ks!H*+*^MOXm%M(}&UV&(hLy8NBG$1`68wo| z>y@M69vp4?4=^=PC{0{@Af!z${7}?S=y6+<#tB*ntEnIV*JSn|0{i)N_MIEk*&;a3It zI|Kg^;P?H2?ZyfvtZ{o>Qf90>2O6i}`Ac42)7hPbd(6K)`(o^K*MWWZR)b#Jlg^YK z1%0`XmY39wW^3I1^FXP8Wx8#3dHuw{UHQwTl$dZr((AmamfH)@4!j<_7{{*E|9<15 zhz)M^kKxXCVto{OIG??%vj0wYtP>KBVto*F^x;MRv@dd&xK0CTtPjomOMgBodpRnZ zEx}L@&Mdl*5{!GbW$lZ!&CM5%?4@pDl)bDviH)T8m{?Qx-Fk)ry`kZ?N4)g$(Lsr8 zCs}#hPKuebJuRBvr`tAQ=kZjCFHG9Iq-Coe&yp2PwjOzCV)6belijT7(ofHna3>Zg z$kJl)2@0s5VdszS&7S_%fH=lLu(G3ga=+^f&?y+xhV{^yJD(y;qv6;SD%anBXJ645HZ(|kGs|^C+r9-pf zk}5s=a|tjQ%f!`sJB{pWfUiP!XGwOa(3*{y$J5%vrt*?nHVkywa6nsqoq&7tLagDm zAHiu7{~{sSUkvHhA$^$A#s8VTyGt0uuTdulQ#Ynq^SxM!|G zKW1MeK*_cn)GOY2cyUNWhNF@IEqw#M7!}z^_PaZbtOg{0ZsVu?6?RWkY8`tp%hTB@ zZh#VMBt1e5$P5LO#9|rMboOKyso%D9u~&N~A7Yb*5OxoNP&#ugSMYT({O{JagajGO29$#Kk1=9V7JNrQ~IIFArw7lG56o1Nf+`+pFx|%G7%Jvai z+*1wweF+V$9!hhx2MJgJx@r$<&G)suX?0)vfyTD*p3oV{!#LTp{8bXhNa^!erJtut zKWBsq2qQ#GgVb~I_BE4+&;P7`mh$sc^AAe4URt)-{3`wonK*xM{tTToe`G_pL?fdO zEQ^+bmgbOSPJ>(f{d9`8p@Tm->9F~XQdw}=oXcPh5WWCyBMR97JL;32ywHQpR6>96E8i zy=Q*o`QFq`k(ebarJbldei<(&gNwp!bE&z$tIYI@?tLw2^bXIwtS&V1AgAeVQMpWLk+q z$!?+DbY>>>zVyY$%o$s>793Vx*C|kyJwqAPw2?sF)^Mt^9RIwhcnoy}7AX zAla|7H)MXll+Ve`9m0jj8DK_Qn{R57jB(5)Zm@HkZI5$ObM~M}e;Z~mvCd?hUQEy3 zHld-^fEXFpgL8JqmX5kX+7o*1uShm90yOlmu4|oiB({6WrmJVvkKd}DWcAL_y^@w& zCzLeLm-1V@kinvL(x{S_cQSkRogbl^d`u#ONFRHioEeURuXO+ZA2c(&GIuMVfMtAIb-^tB~;yeXA{<$Tal8I?6Gdpof2w{h{ z9KqzapoY?3*SSb`WQwYDk%P4}Id>+T=bm{uOU5Ff(GAWx< z!~f$bjX`^kU`BQZ!neW=_O&WkamQWT7fY_HO7rmy7Aqy`+3 zt`TxVj->1}^{jymcC;>f21DX3qA-2E7SQp@{Fr8vWMh)Xvy&LmP&sxKd&8u2ET(CD z!wu6kIi{v*JMjZen_z7E_Bj0k@e}gH+4O~S?ML2v`6;U-ch>4;J2;jLZ2=5;|tGMXQ#YDBbm}v`xRx02Tm?`-+R5k zzkTv3yhRXi;aJTToT|B^vTu@nmanJ@ZMbHDjWAjZIrVKMNcB}U;-4~fN#sVHC6U{S z@xM)#bY63U|6E&-Be+jS6pgt3Gi`XQE~mlk(F$-SUM)wDIrIQ?2MW)%xKW#pF2%Tl1Gh&8y0J zDp65F;J;?|oW%K0{5$dL6K^HH(#3}t6E)rZ;s2S>CTdpjlPgaS+cLARPLm5Cza{YDKF(KzXitRJVoWF=WkBb&`Hpxhv0b1GyJ4y)B+umgvHRdmFE^w z4Ex_`_Wy*+6YVA)UKG(Nl5RVSV@)rbhxI1!Y2pkZ=#s`Z9vQg)_oUOAa|wuCx&@#6 z_IKVV?#yKLkYsiciR>DFkK;VUnyk|uhO=2;y#wx&i`IBk{!3a(X3MI%h$KCGO=ITn z>W9d2*-#D@lMQ8V&XoOpGC$kdH?J}CShYO+#F)oywrZ@q5c0eadDxLvvjIk(vdatS zGVu_L6Q>M$j^A%34$(V8?l8bKTJtT(3+!H`8yMUZ20l^afi^NPRwG8e3mcgj3o*U@ z{f7O0th!Tw7p@eYI6ZPYuS_Jy++V$v^W*%zQb26a6$RVtHoJWSu=n0_$L&e<64v(J~2eM zA>ZAlg7ZNA1o@6g&;D}tA-rqJwa#O{Tz!T!n=)*Bu?Ih2;pm-{9H1-Z*}72za~z8J)NDv5T3Y~o80d0 zDqWtwEn9JIwyVpHdMlkcc%yz1iA73J*{F;y%3u>=Coc^gwpKYW5|GqiN0BZ3ufH!Q zuF)OBYPX!fsg8Prt4}p`e6<|Bs#Dp@;`KWrHC#Jp(C_+*Tujs0$)&;rap^3;1u2-h zk4;PP?4`0JSN_54)I)|@GW_E38TgA#T!gGB$vTXZ- zkj!f0&=_(=i`#w<(UFzC5v}_1&o$w1cfHEB$lPi5cJ?)KGP`ReStdA$mlrKRrx1_+ z|I5)X$WMKC_v)sOY30cdu5zY5$;-}@J1R>Um>V`nF`YaY>1xpf>+ESU0|t zo;NJln>n}jul2IhRUX=rz@R6QZ2d2YXDlVjFgOG;8D1bJ|LY=BU&`i%t^Zw2G6_a( z7EoVjMRr$0JCfBRAt_B&AJN~{$e$CEr8yZqnI@SiGfxwF?KN@z$?r?P?l)Tm1dZ5O zHU9P1uOYjuJLOjS3m8TopJ>Pobq%Ct&6Aez&4~muQR8iMGP8Sirslpux!pK0{n^f9 z10H#3S~D^3)Y};_6GoWGwuuK&ilLmn>3VTj&O+{*DrMl~7OnWl(B#5bbj)U~?%!&% z@YvYSh4!*Ta_sVjFKKrTN7^_vnHs)@nyykX^@DvO4|FCT*p$q2$?RJl?#jCa zr5ocG`E5M=0(N#qtMW5N>f3=Q~a(eTD6(N@midUDi`uGq!mXD@A`DC_>R{*2F$lilDz2V^i z(83DP1IRI$)5&ygbU#EG-c{F8;Za{p>-f}TpWr0<@GkR9YG<67?l`a7;f9Q&DV~Yi zf8Vf%SpQ;rcKuB4dqh@n0-sIKo z6_LhwkpGhGxPn{PX0#{AZfeZjX@icO4^8xOIU1>;@lT$HhWo~jN%j0GX)N6)r@5o- zJ4$uE%w1%gm_wy+15~U0noAi%Q>=YFaaDzGBY$TLo;1%0G6~@0xf3@m7lR)W~gz{C>6!%=*`+$Vm4k^6}dg5}clr-FHx3_6Rsxo@wdKG(DNhu;o0J znYD$Do7HvMRLKYR*$Y3&)IT;kn;OL5Zt2CjDQ3Kfq%tjQ`gYB`jzyrI%Q!(9A+U4eh8CnNQCa^Oh*l>T zZdXVrQ7P&XEt%GFG`y}`2R;=xA@Vl&D0 ziyqsK6qc^-e<_t+u#{!*Y|Cx++QNO#ovflJv)yho{%pGAxH8MNoFCmS7p`R)xm;+q zK9tLnOHM^TXJ=|o?U*!{hc$6Z>$9r`?rbYIjWyo&A!qQfRB;-2k&$B!ykQNjClhFv z^BHooE%yO!E}-&t_uK*6{p2)sGzmV}7abSs|G<~4$hYylNA8;vT)Ng!`XT*Dm%a~< z@}Qf3VMrD9`jEZxqt^d{dvpdthh3$zLyS!!)fi~6+?lkic@YzT1j z?EO1A66G2rY@VId0>FUzH~>PVkK?7fJq2Ie~on^2{oxd2WtU_tY~yf{Yijs{*a0k81PjR=T=0Wl1WtjoQ=bU{~}Vhp2BO(e%lBs(zj zre)ZVOtvJ6-n1CC%pB}Y6B5MHOe zcpA$8#T&F`WC3DB?i@VL9hmrx^&u9E|GCpJ4O(E$-Wsq7jVz-AO0j9{eN3&=r0b1%Fr8{AT8I2PP#QrYWr7!?V81gFHtzP$J=v2gnUiS^)h+4#zHIk~aUc*?U z@=7HiLX|(7PAn#Ea69|b1^xS)Zv;j@8PJ(Qj-)&iaW%%Z3;@s4eC{BQ#(wM&b{EZi z`b9dklXWi0J*sJP@RldDCqTCw4_r}E+8=u*>+`4vsX8y9YIt_LKU-Vz5cUVOZ~zre zmaYkK@X$=0WRBhh$&7A*i)_LfEp?QNPb zxxaqjD_P{*6%JirGuU|v>~@cX%#K6Xy@qk&&~+#^2gqW#Yxf%Gfa-mh zJP9r56`$irf1||HKF5>LauVc#`&{Af&3O~VD=_Du0!tIXpjh_E1hVvpx^{05;m>OW^b-f)} z5%Ca)BH}$p=>h@#l~0!Eo?w6w1^jRxMCe-vI+oT}k_7|_h4!)D6)NRzcMK%RfyEu! z%O?vw$t3`x1G#^1wQ=fB!=wHd7WCaPYqkCsNw?B#F(lbu7Px-R${3mDEY7A<*;(J` zV|{jo`vu=UgI1{cIv_(dh|le)xEMX|cF-dS;zv32snYk^>L zXGv#g;Bquo0N~h6^H^Z5ax1KucN$XJCLGBP*%^20%g*!;03bZAj4U@s0Q{tpB;|}# ztK3Tl_)ae}^xuFjcc=4F=7jRH%7I=o$rpohU!#|dq2d;zG1o+6nedoFl)%FTAQX%MX89=b z0zQNv%Dzg2!J=hDt=REH()n(9Dx+GonJuqrz_&5|NPh6yh<*` zhP#tJ9!phTG|R59%Un6P%zcr3qv7$`#MN$`fsEM=%zLbtBKGn0`$=-nql_2}KS^Ch zD+SzTBOuZu=6;7B(wayry>D?pIbRo^G9Q>hFU=$cb7x zEpEkxTHG zpB(hMSEcC-?gj#C!~`1?+3TJr(+}O2+++Y_X;+Cq`Zgdk<3_JrN`=S>$rX}e>y;fs zqVES^I)?p`?m+oo_a#qLWx=^8m8IdJXtXc|VP@o-sh_Ll5J;F+7Q`1%@ucuQ?RE!) zRNiYaUve+9yyRL^@=-{vZnq~no?j+FfA>8HD=WXnCo6J`-uU=g?QRtEis{2)z3w94 zYDDti&^IAr64mQ|LbA{eHZC1wRYH{5a-R1&5s)TpWm*K}7?OovoJMugajP!|rK6l% zfFol=>wX&1>jo9WdJF3VLSa}coc-IZc08ZG%0>OV$=8oilYG#2Zth#A`0>;q_alxO z{*$*ZJdvVFT_ZqtoHcyjKo`y$?x$uUxr{LhkAd%|<@_qf$#=Zleb47Wu_)&mdLl`O zyJ6NK`6y6VM_YavkLRv`vMeEF0wR3@M4(l%?yu!r0kH4+nvrd~o@DM%_zIEp8;3={ zZHNZvx7W3i97vd6_etYIo-n=cdz_K*gz>Y1UN?p&#Hk=?`}ibmie#bPvoa=0uUkc# zLOC)adI`t{a5jrBHDn0*~Q)vLA{64-lSLyKlDjx6Uo%kR4$B* zp!)I0oR-@lNujeo3kaB%*jfK17Q&qMvX{*rOQbUM%K5)Seso3O;S74npP1n;rax4T z{qD0!=lyP#IKfJMl*|2H`!Xx|(waAHcE3^6@mkHXnbXI{B;V}LG2o%R_~1(EsT?Aa zw7~a14=51bn^bPlyixQR;CnA4)2L#8w^$^Pb}&uwTk2@mw8y;xtRia~``!oAcy4)C z7})9;R2{HRlA?{EsX^v{Z2c>6zcmPU7`nlzb-VT8AYlYM8(~c+zwWz)eWv4P{lNF89H|-08Ykjl*^iqkS`f|Be&kd!VS)NF{O6@aS=eQlal$L`m?g zd~G>GlpIMaEXKhaG7k66WA>Gr2O!ua8%4Ls6LisoOpOfISIOK_f)g1*A&zFdzfmw2 zxgPg`m9cedPk+T61n`^I$NHtdtYr=JZGh!U?}_wq|5wy0{Ky_R(+pD+0yb$sKT%Zf zZ$fUaoUKFyhJllekNII>Ps$oEK73AP&%wvExXsrzr2!b!b8n%SWJi?T4G_^x3WroJ zz6cbY)2Kuj6=VSl5dQ-uuoILZe2?4R>JH z$kqjd&Z0e;yO2Bv+yW@#a?B!ooQBs3j?!brnvkIqOi^H?f~X<+aQRgmi!yd_MMHp3n{Ta-pp0Tt#}i|egul;8-hC@ zQUnlciqsGJtTqIs$DK)|q&%;?-Sh~DAmQEa1P?#L;Y@1hK5W&j6PI9}8_^Sw3rH@R z*o?12UN?b)yum3_OG0)w9A-tEM#4z?%3@Fbko>D5BgdP-nhDxl5KZg}1%6BUzB3sZ z)xyt6s0E3CkGqW&=0S5z#E9;acR#h&>%6TPY&jJuqEtrhK}FLabE8%WNaP|K-WO3J z9?&C;Q$c4misj*6M@5=eZ`GiByqBjeyo_xB5+h|a&>K^GT&EQ)GNXS6m<*Z*4iqR9 zywwUuUYlC@DfXhkZ6ix+r^x1`w3IvfYEU=7?YwSHeF>>5xOq0iu@7!~<<}h`8W;kJ zPXOrg9o0~EMT6o)J?z+lJRj7Ow1!QUb z=o75fDWMt3B{AC`S8l|il{`^r&|@{^8T{ZPp%J&Uj3j-MZ=rE4;P!2D#hH-&tr%IS z#JXf5YC`lfeV0-`1m=~zjPmkfrAeMmz2uNk6EN*E0Labvv{e}W3%`Q@BehRP%kPZEeIv8i|wX|M+ z7Wh6({-9-DU=2)?iU%A2D++mV5ob^?cyf}V6!K&pqhu|9IhF&S?VY05Rm1c&& zV&LL%`e9%b$ADivZP+qnnANtyt9GQs#@O8?Qj9B>>lIjy#vM|E;d!7P$>q$op zmqmQ=_R;$F6RTRV_8y9514xQOCIgwKW)v}kDn*g>D~%Sy&!8TSArXE7*k?%cGj}bI z^TC#Acn*bYsq4km>JFmtfWYu}vM2!})`f)eqJF8yWf&H?co!HKbZo8F5won$qdpmd zc(Q;z=9a`@&MF4eM!k<%XgDu`v$4P$IGB1LN1db6>WE}ort;eo-zo8sPWa3F46Z9-{9q++jsQm!*-oo}-FZJz9c+}!e zBnK=qus&Q2;hP4bXb3vh1BJjgy_jefG%3+c$Lu3$LF)X{LXX>OEn8N3?w|iC5RQ1I zQYQ{|Hb+Vx(Q6ZQ>e3m3XJrR1{ zm8Qon(Nc>^YOkA94B~6l2}Z_Se1r5Q4>&@kjwFKm%@Y0tjBT`JwZ%4C9_ytDtzm4i z%73M_OiW0Qrhvw4l5~b;=6EG?IA3xDFKSN zOYKdTC8r^VtPg?I$LZ6qd=o7ZX%*dYxo2fSVk5odXKrtNm>sRnChJygscxojEKEj? zh2+G7)a`z3UHXV^?niop&;_e@s?juXj`6~%?&km)387g|1$u;Y;`OrI9SdwPlE%2b zsPhrFrX+xpYz9!jCo4~!;)RVjjkNJlv7GMYZt$@fFDS8Yt)?UzS*TlQ3xyqY>v(cw zlJvT7`HnC=MY`2=S=14e;^PBDf)szzCnJrhqHvMlE&cn1FXK&AudA?Rfq@|&*YWA+zz2K9G?vo*Bfq~b4dV*Wp?h-Fx{+6=2Y0aWSL0Clg z>vm5B>7tU?k&FlN$S{uvt|yck?>Ur#O;}=2s2+DjAXES{+9&-u-sAQRT{J9v+&idu z?jr4FHlKXU8jJlBOJ#J(jAyxoSn3hQvD6e0^c^Jp&Vg0#aI)f9>MFOtk{18;;Px$A zdeQm|P}$6s+or8wGvala*Pyq240TU?6h!~xb(l5e6x4sn?=3D|2097y03%)o+LI3Y z_}^-&>N(4pYz$Zm8dreA*Q`llBq4A!N#bzxTk#%g*sG;}l%!q(FYB_K;|tymRIbj}F3ujeNH~T-1*KTNI00lqbZ@_W(X8c*=9==5 zV$EVA)tQM|JWyEOCkO=#6|3A2qMW9o-ZN!)(NnJ7(5k2F{eOuzt*>jOhtsiZ8+!(O0QWc)=tRF=`DsneoD1zHEP#~{6#IP<5D(>SOj!V(F zm{3Y~Zkhm?&YewDOnK#QSgL0qLQipZp4lCUJUroo()?$(A*eW}yO-B|oaepT{VD|jwd2v^SREv?hiDekf zh@s6g4DkRedQFYCR_;r^+;{!nnnDY4gy%|ZA^vkQ7|2>Zx59Wnz&aEz6gL=lc>{H% zAus-V0t9&~JZR`Qm|5U&S0N!Of4lSlB;~UMM(UJ?;S&wv zLMc!B61Rj-O8@S;z_+JfTAKDurgOXbT|fh75ckkS;T9a~3#@w44B~XMghCi27EnP} zJf4x;3}P=Z@p@wJ?F8dRJcAhHlM#qvz7fR9s~xusgo*t|3bG&+jYn@%uvn!2_(x;H zlDl8fGQzZq+y;IGJ%O3v=$`jPvC+}8*1O998%9U?YT>zh1s~5eyi7|-{e+5nB_ZRi z^J5($bvDR&VNrDWB%hLokeWbA8ydC!^%I6;^Z(7leXCKTeyN5;E!aF~7qnVXPItfuw|jBxXcyoeo0Y zhFF0npNy&>W9Y8V-Tu#5E)^*a%2OMf4#`2_IWYc3mZz{OQi2La+Gf+syJ#egN;2MS ztxi7v<&$Wefp`*X<)-_6k^^RizvdIr^NwV%J08#j9ZBTd8jK?@mr*aTDVo!Lfi*l4 z#X3fLPzbuBuVZ}D4=25D7=?G36%O%bJXhE+X#f>s4^e|&_lj@BbEemIlLQGcQzwdN zg zeeN5caY1fQqP&-zXg-)C$KzxW_VB%l6hV@_UJ00DZFvMz3uqW3vIge3^4#*jY23|gi{aTp;ew7|MKT_Dqq*?jG$El4 zeLs~l#eJ{wO~6fqxp!zWlpp4kQT4uacMy*r_v+Up>Y3K{S~B*;)X$Z^1Y*BZ$)5tn zcRNyC(bF@)K-}+>VnA+|k5+r0$J+XB->qmgnoR=(wDknC3bgf1DyZXVffy=Q^Gr^L7BI%jn z`_F!_uNCya*WChvAV*YviBG}=t9}W|+}}9Jv7-}ug>NV#%Ot?Y7K6IP^T>%YAwEWV zEtJF_L$p5eGHn!?u~MJ(2z9&v7!++ZSkJN-aG`~}mooHfZa%Q~x~C!77!Chmoh+~$ z-R_r`6{NGZhCC+L;hQ|Qk>@Ckc{MrGp+M~uVoa=jk|gpH8L=Sr z@2i=3^C;{Lm0uxW>^F()c4Y=jDjkPY-ZXSHyE3^N?9nmKQK^V?uXBoN2-2c+!dqL z7l7jBII;4_;w&l5a+hp5akfA z4vK7kyz%{Z>q>B^dfjy-V>$6Qzt@cpWC<2(4rRR1`VRHFBYbO~vXn1uyw~kXlB&5& z;=sjUe{04@Ap-0-VVGmW8n+u3&(DdV5|Sb6_b@r$keFNg2p#MDtTsi-xpBiu zMqZ9ahAgE?!@-KNN?$?Rq8NDa)y&LJ0}*Mb$Koitz%=E)Y>mXb2U_TVgavCQ0#rvs zpnZU)(i zy?E^B)9T2Dg*;|Ir0;8pwxSh1ZoBVlQJi%jbwhF14enpO@Z)!Y{0Y>@;s&@qwN0V@4J0Ul}W84#e$OJg=+d4Y7eNz^?TeuzoLR4$Bo?gP6fKfIe&Mry2u_B zh^{@|-Gvro3#69PAm|#nZwF|ktA2ySwdBM^;JyeD=^Ibiv_058YdH96k*c2>szYh( zdACcGWBbpgc4BB~XqZb3EwqzAI;)&lVWakxhNgZ_`MwEap!+^QWeZi_Gf#6!i?O>m z?3-Vx7nBQ0+ZL!I2kINvTD&Xg3g1+D?r$8`_spoV_n5SStQL&5fy~FxPOzfJ2V`_4 z(6y76&!`d^gUAR-lPaZ|KBU!~ZB)a3$ZO2nq% z0|weSL23;|mcILM|KppLo#xx!1q?WY*OtTp776X_^0-d*VjiR{~hlh z1^LGvVOS|rfL;ce6WKw1`IT)o!lJ6soG4h0805u6pe(b)3D$;9}LuiV|?lb>nljeT^J52J}}jyp(@bnl0j6IZxVJ}EQj zmkQmUpsrgGf{*?+!$ik7MS3azX7|cT#&)?N`01P7X3{#u$qrOl`a51tf=<#Vn=Qyx zo1cC+#iSXu3w75Uts`9`L-Y`Zc*a%!ueFgkI23r^H@mD(TO+`@0uhq`OLm@3U!Zld zN$!znm2BSK>gypCq}pJ9M;i;q(56ECWJ&st0wr)N{mi2wC&*45VO12WcD<0-(~?PIk6R{C1?O&U)wV*%1+=v7 zE(5GeV*n{USB-c($#b1z)iruStg^1x!yA6(1Ph@BKTOksg)$?IL{j6{g)3R2F zG*|G4z=WS20t0Y4D*_;|D@j(lf6@SX8VW%94XZfdAXuO8u(}U4kh&IF*S zL7;>N4;13j8NEWw`#Med9{L?ByO72=ovZ!)v3XuYrq}Z)0VzVv0SS#iA-dUX4N9Z^ zvEG#`v%mEv+*M#XtsYKPs|z5xS<{5TIZ>DwfYL(MfB8gx@h8DTJ6|*awq&gmtpEr! zx6koZk_bmOJefdwcUB-2zXKJ#lr1~sJLv#L!V)-5dZG z?{=g)mHVVGrEdKWsDd!|WwVeGMZv*$s#`wE})JTUj9=_4rWMz%Qs+PSyezkE*f%qyLo7Nl z;TD0eXKlF8Kqm{Dz^9O)-EQ3p>eb5J)1MPd2E_CJ0t}-p2m?0Ye5t2um>*a-&dFy9 zQ}yg+081{QM40EDL5`=M6*v=I5FWrt5sk#_0VC>>q%%NKM|LI?68YPZDtK}a`b-LY zr0f`c8QsJNSJ!ZmfC`YS2I1&-B{bmeh)j)gcBMak7tkX+$_o?0jJD`M!ghE-kBq>* zFVb=$wUAH4ITpV^Pyl8|VtqBnfMi603rW%qu!DHaNWGDom$ta(&f?sh7AXJf+;W3&GS zh`@Mz#9TH+(tV7-^hw(y@$h8#%UqZBM&qnmzfE+#?>wU!!=pwzg=fA_1S1Look7B?-9$BUpZ>#Ck;kp45Wg{wh>Za| z&xjNsH?p!#Dyu^+6B`f!bMt2WK$M@QeVRwuJX1h22f%!Kqr?5~#KPWjpE@n+z`sok z`_6~PT24b6JjK34X?}_9p!Ed`M^M3loVOc2t%4xGO493M!2p-UYbK1lTYDN?$E=;1zwY_x&Ji=g`*HT|RmUaoRmf$ftr-0tr_Sr9$^ zDat8v7QHQccqhH}k{~tsu1~2lsdiG)KBv>aZ(D2@&*0L8kJ;yRE}y)V9A<_8`)iV0@bNBCq^{jIdHJ0~BkeligDVaiFhf(3h4RMIpRFT}h{x9oN!*T?SD zo>a8WaFr`pPm15MSgI zrT3(qarQ$V<-?}_7tYQNsEDxI_jj7Q8(%*v^=VMfM@=pw{)$*?^*&lvSjTt_OA6>& zz?JJLB~74P(TsJzWohJEDL6ARQMm`D^#iwuoNug=Mi_&?D#Auf%F)pI9>5BuWFlpX zrDSK{S_I@hS_3`Q%A};vCnG6&@>nk=>K9!K7(PI*x|G|Z1x;^FZ4n;q*FrAw0eGaY zxB9kun8<r2_=}xs01?I8at;Uv!q+x(^o`VDL#QC)mrEnblmbXCz zcJf|Eu84T6h*o zX#$r=^HI`ee2OHelSasi4D29lA-2zN0Y1+wlXnzR9SJah?fVr~|FKUZNG7W{lN_)O zjr(!~DFTEGELq?Uv;QxKV$#_}vUrd<4YUf7X!OZQnvW*w2Z^xxEFL5d;7jh0U-V>< zu8KB>>CSxdgt6p%;?F=O`wn*wVJ6!> z>Dh#QU+ozZROzCaJyNXMJ|z&OBp-R^kWn4Cug`ntnK+nb%jhJL;8}h{;*HsF+S;$ooVgIhs69|eEeZ2eaVeIM)>%ENxUVi z#nao18s|lQ(v!2-o$QmIoV_khGEWTc*4i`QA0>D4$*B4^@CV(fdX8jnrazxzV@xa= z{{ry>$>^kDK6EFIxQCnqvG^n9i^bwsp7iv?#NsO7awHZP_@qaK_>ZqXm%?FyKfk#8 z7p;8E7-4V-Sy0)Zc^>Ft97gp5{7WbsOSY-kUuui+?}tvs_`e<#((wO7(kK_c{BAFY)rmP(T z7Kc(Vra-s*C;C5N15#fgLD=x~fzk6LHXz+h8-4-;CA!`HRxREY{8OJqL7;25dmzvN zlW&~tc6X8^6$yht3+2625XS+|vMdcc24bEE@y!zcqf*g!tdom@)lf5+;$#v=ZNMhW zLn*2Lhi12bME}W>2uJ;=n-YOM=C65LM<5=hJRL#14b8iKGOGT23Kz}1_Bfm^GN_S_0ES7V~o=TQD3pNy*CB?A^OFAYkwI!1xOA?WE9ywBgK+V}Y1XAsGn3+Elmu0%;3;Fej;I z{)Ok)_D^{({gPiQ502{sBauJLCUf~s(Wt=NU+GRGNA=5dyHM5l z^ug=no}y8nmGN5Kvrxt3YSD}DP4uA@xE8{i8FC7kd>zQ=cfUN(N4jS6sji(Ksv}yV z`c!hPvs!YaAw^zP^0Njuc1lk)G~(Sa)kZ<755c%7Qu+d!QQ+Z~tU1g7cZW%jrJ@)R zot*i+0L{?lS9X~6Ad<3PpgFfplbXQPAA+J}h@_wDbi2DDFELkbK+5fA_XwQhW6CXe z1{PgM2~SU(3>|kAO=*(;Sr87REu2G{;syO0ico{TLYN-cU`^yBRNVgr9@3)f|Bt*k zkFTmo9=;FUkc7<>1zB7GH3%9JG>S`9xNxuDXi!{mN8CUZRFqXk1p&GUyyQ{0JtE;N_ zJ|b!VyJI4eW3sxTe>NCk(oEcPr|{MQ$*9GwjE$6C8>uk|>3$1Ba77#X^C>TV9ND&~ zUZf%sN2|5CS88FG@y#UqvR|wG|LaNgLcx$XiGD_z-pNXTPjdbw`sjRKS_2TgdIady zjNizHvnIwlySV*+qLMPpxOP#goTO;hwAe3|s5FxYI?>W5Z8Q_N5o@DA8_kGT5qXbO zWo@=;=la6{#~H+qrf}a^)6$POZKZ=qm$ZW5h&8B4(=!IgLQ3>Wo%II4jA%6IF*6_T zH$psG-&^7r2~6G@gH1|1cE(^438o8>@%4NYlkp0%xkphv>Hu!MP4t%6u_iu(((d16 zEk0U?7p*7=KH-9$k*X|x`>T~~dY;-H@68h>nMdX2p;?iKDK+0*%d;yYy1SUt7E8~Q znu}3%1X$arVYbMqnFj&-(y-ESLicQe)~Ix9{z*i!V+_ph7xtI@rpHs)Aw=WRb!_+$ zQlJULSee+=VghoFVKCYkJaSsz{nt9kVU;kC$Dz+)0l^O;mg@4iy*Y9|G>! zNspTWpx@B);{4=f$9I@MzhyWe9B_%L7{7 z^gOW_soHOpDb#U;TFk9PwH&89ekCQ<0lq#HkEQ2p2AaVO0`?1}<&E4iYX8-8jmk(E z2QMklniM;P@t>m_4M*zQzYJnT*1ltEtbIGmFr5;i+=*UKRF6{1*L?MW=1>@s#==c7 zl(~SR%ms{ME|j4RkEsWrXkD$1F7*Fyo z$LwJ=Hyn#@I9$dtdZ0)~8;gjFn$g5|lV<_^$IktCFtv*YGIvuTtgRrZCa%L6^+F?I zBRWzqBV+a(&4Ho|fU{~Q#ir6^;VD)V(X4HoXO|sHC;& zI)LMSG9|j1YBaU!`+$@KT?N6>ykKl+p}IH8&Utk2Wt$<6jLm-fW`6(-(}reVwb`Gh z4Q;1od{2aEe3KHh<~<`VVo%{{%Kw;@5Xs)K$mm=8F@+aFM_(xj&n#^A7a1@{31*7Q zeRS}M##7J?UO5k~97niniNcVblJE4zkQQVIlQ^ge$#O$bb4`R~4 zkw+It_BN#-7TsWCw&<%SW{W;gEO=CiYlnK<&C;rRSp?sRmPd2tztIpzP1UVldq~c? z8@D~26mt|q0WJb@!;w*k`V_h7M%2gjHSu}&eu6mSeMmChOmwDFlJ^9Ws0fvl=z+>d z^bqQ|hH98wOm0xWO4Q9PL+8HVLn|3+;!Jq|nyA%x<8J7$Ae1u!h5D{6^jqPSezww! zjzUZ^)zE`Zw)^@((X0+m5H3`xv zp}ujj#u2KX*^_!MAxVXbt;SDvy`qR^;;j{3t3s9~2#x;9kPUPHPHx=uD$LE6HQPO3 zL)7@(+&6Z(e`CZ&^MuQXok)o<2ygVy0()eY8~wD276)ndx+BdpXtc&~pmG|y%WtWl z`k2)>#+_ocz_8>XqdnFM`cQ{U+fRyvnGXVSFmlFtu0I#>oDRsKoA)?0ZRg4BSklGn zaNJm(K>k{>N4#AiyybUT>f$>@l0zt(@=PSW=!iu(3P+t^z3&n=C)i`BU(eUd$r|KJ zZH0RO1yjnXbiFV78{G9y&Kz_G?>LkUtD;6<11rfbqJFHx+w zWJL;aFUw4~#)KjjIt^xnwg*tF{C&c6R8pa*t~4?0sVhtjv5Cv?LoCn9|EN^MqMw|b`;q6Wnv&5^3#ddCU4|ZKe zMo_rFSVd^nRwag#6H~+eAeX;A=aLfj0!BZKFv4x6-3$vd<`a2uIZ*i%jwHI)L`5DF z-6pNE{|7quvFFMBRix2?dZJ#Yku^QxL6*fPOw#du3B%v)O~u)p+R4G5$*==?FR<9yDSM+#4c7R76SiAYcT0ad6-3Vej$v z#Be&X>qWjxl$=fz!Y3|I6>_-6qtF^!*Z&GDGSgc*VEUojRQ?wWT546qGQ#r_L#e*3EKnXXAFfiD9?7o9?XFcC z&gV<$IH`mc$-gK?G#o)cVWQyx`hJbt9U%52RGfAdpYI`=Xb5~7QKTY0q+J8^k0XhA z+<$eYGQsc%b+{0_cOWWzs39Is6S_yNX$Mk5l%*0J&*Jgg55}(>d>J)ic-^25I_m7q z8*@9q*BM?nxD8`9t#6kPCyVtq_x+g9Y;CYGaiwrPRmtXGH+Wp}HFMqIK{(3qO!p;4 z6v}pyyO}6$p%rdaK0+O|X8p!~rihKc2~5sui4X&rBva5z^nZX4Chbd&be!g0FCAqw z2YJyNJ;?iO5E>_>BcMNkEq9Rj>iA??G;<};vg`^mV%I3?+@}E8?}vH}+rC6a|L8(7 z30uu63X_{7Z}fkK9AJ`0!MB-9G#mZ@04B|pOKB9a{DYl*&!9(4J{$cPO(}7iW}3|R z5H!hl_#6Fyf+a4&js9b%87QNp@zDmOup*<)D=E&;;O{peN&CV}w4FPaq9P1iv=2q? znADaoqjXFl#{r+~@C5z$-ShbWA)ojsCMrS@;GaZ8cxFx-`k8U+LkH~oY5@~SbG0Dl zz2iTmm~^qgu9!UyvW9WAaC5f{Ho%q)T*B3mjs7-j5+CH&`>%i!#zM`z7<~K=wRt~N zv2eV-2T^AA(#RmSx8pYYZIvx?7*SFe@C488CE(#yT(5^Yq=%iE2%xqb!jR7Fv1`@2 z$n~&e<;*M^$2|eL9(EcFZu-G?u`l`A&i}o#6)w?>OYtA0W)0(QyD^qQTh0Bj)ljgF zhlgFOC7aw2TVeQ@P8hL*?0k?318OCF-ml*80+#&yVTGEa%Wz@8DST|lYQv6G2D{qd1Xr;u1dB~Hgngc9aAsGer!HdjH8JraawEQ-u36~o zs0IG{5DJ$8WRhI(i@h{lV}?H}J?V}f229&ejl*TOGjQknk!5hxp2&?`0Gbjsq=ZMj<1o-xWO3j-QU)zTMk!uTBJg z0Y1OmC?rM1WD#zLbulyxztlv-ao}ITMsXA{oWd>9CX0&C1wNXGj2RowLvSR_6vV=r z`N?moxbNkcy^ylDe+^$^p3u8pP}o_;TcEw9e0oRjL&2W^q!BAy?%@m?-IxrA`JUu! ztQ~`qI@07H5wrCp)*23)9eEFgmtamO>jWMeBeGYAk$)R@nYNpC(e?iCAs#}7D7PAhgB_Mh4u(r@K%B+gPi^K!Z` zcGFK~6EW7pwi~GJ)Z5Jm*s5ZQ##(}6l_rVat4{t6n~ryF^w%&0!k|5`vFx;b^c0y= zSKGPFQ&`<33;Vv~MOe|kw{}7Qf(8akmmV%3WnebX^vky;Tu1XI;XD2mwj0{#y)rq#sz z`j-&hX|?7_3}4zlw_4N2pf(y*@1FwR;Qf_qo4QdXSHjp}iPkW$QVb#ov+crr)k-%y z&ej?XB6O=>--F-ipBYlBxbHQrqJrU)TzQ-g&Nmu9LnQYSH9j&t0QoTR#>Fba2>^&f z=KP_#(<*H{B_FgBP;sZCjB>tB)UDX>aD_CXJL^;~fQki~`^fUxPQhT+c=U1U?$S<8 z?y&Bqj7LWK=AOWW$Gz1ymXTuQq0x`2y74PvRUQXGs$vE97d)i(ro#R2O%zFJ@tXjq zb%Rpwa2ne zJiev9*nde<%#1|Ls{qH16x8U%WV%rS(-O$K-tP{yv^_=`jxpM4Qslrt?ajTv;fLruzVRq6P6tJXdDe8N0nwWhN#R|nM0A)EMDH~s^&Eb|!uw#a{1c@GcS zh~}&%1#!ejtj9w_l7vI4;qeB9LpDdS3aTzgPG0$Y8o21;v^|BE9zlTlXy~fe zmKgp;Lc)6K7~xz`c^3N*UxJ&sS!89ED6CUdjfP{5?W%Gh7T;0gvbZHnNcbC}C-#nw zDi9AxphK^disIlg20#M>oeav--XZFOps<~k42K|E*}LF22k=2#c-NuF_ZR;!-Rl)l z%y+NDl(W#io}{t3d;N!N1Z~{wX02FL_xdLoqWz?H_P)8;3-6hMO|JTCuY}#`Q)MRW z8j6T8L_)Iu#rM)c9gf2KQ4_?Wqc9NkHlwI;6bA6^a3vz3I9TM=nU2HA*%QRUBXSHx zW%A(&X*?N?6=W+K_7F)j7P4cpO0dYnfmj{&nH$}`qaHTi~8I~1D`vVMMkNEU~1%@Na)c32` z4+j1j)apfHcCmlIGM`&RpF=#q3%QY$COCe4BxG;ZMate>s5XC%5XF@7>XAyuTq8u< z;^+2PO7qO3@*=;3M5)MSGQOMyT2S)ff;pTnHdH2lpsZc+D1&4fu!!B-!R!+3Uozuh zw<_4kCR5$vv?~RrhZ7zS4W%bUTNt9d7}Q<{4e<@4D`w+ycU8U!*Si3~m!98LQ5zca zvz>o0gp5-k5`EC=8Sz@NK4$uGskA$5E>ErIc>?a!3us<<^1f0_KOQ^*G*;8(Q20co z8LMZ1%wK!jeWAg85!p5wR>V)U-lo*-d5T)#i2}*u+#V0qiewuVM)>h%J zgD4Wi3CdGd;+yfItd}4P)8T0J37~+84P=?vThOQSL8nPA?9FQ9x%k|bfAWQ@E4zg$ z?SigF+7derX+;+q)qY(l*?Qc9CShd4_qt5;*oU1q`i0^RWeoP|1;{Hr{TsV1(U6lD z-~ST6%)kW3{Ys)nUh1})50N00M153uIRDnhB$;suaUn>z0gHM^rL5S$9@1F;f8V>V z0|#X0g}rMXaifFUyZ)W1_D9y~kKw$k#M{Ydg=9w10)o=FK9i02tt(r>nY~^ZttxlY zmbNPcd>`CI!)|d0^%d*1y<|Yt^s3=qmglK`Y|QbviH600XQE;8UlX;WkuKF<;StWw zz`(COKN8gLx#2@;?_h0#2*h-H)>HhkHONq*;5qV)hiyY~Go9GUgGnRPqT;|Nz=bLe z&Vy9s>R&<_ z7}!{6>jE5hwhPZS+Vi^|Mth{g4IU(7s_=+rPbgx0Hk)YZB+Y_YQP;V$?OP}{PCw#p z&JLD-Y%;*6zTIM*zfuG3Ipv??;NuqoG94L;=5J6jyVQ0S4p7$DOtW8B z?7u!Ntkz}inl65A^ee<)8c!}uZ^oO)1}6E_0(HRtY%p3^pIb82B|q`yw$0xakF^Hp zeYL}X>^3A`)vp-JKgE8^FxA#NcfS7ENw#ztQ;OUziU&ba<)umoW~vvKF!VU0vbvV} z(OIQK8y93qA6b`l2o*T`+v1+ub?+9M}2Nxvul$g|0JWxa+jI+I3#Kz;#w$?mAnqbe)!raxR_b zI_sWuonGg;&Y2@!=K<25xQNlub*?k{N!M95#&s5CUFXzayH55uu5$rEh z&U2T!&a!J==U=zD&N`a9PdH`;YN-VCi8*QvS3b$))tb#X14I#XW<&%az})JxaG z?>Y@{yUsmtk@r1xM*ut7b&hz=b*3ZN6aMNty+3xHqh?Wu2VCd6M_s4Wzme(hUFXAB z!1=1{ocERMJiE?y{_pX^DVqQKwbZ^)pbt0-gTa&EtVtO=lT&EE z*EtNHdn|IDL$z2JZJ8rRtZUx(DW&Y=rjr!955`5Ex|u5;~T(!X$>?b}@E zmG5Zpr(I|564%+|L)SUD!F4|P8eRC&b%M`bCy8A40cOQ^$dI)6+2Cv?YY(b91e z1+5B;idz-7Zqv4HyY{>7=9cWfM~9AkcIwP3g~{*Ib+5ggZ#RtvK%Z69xe)*(BM@1#6GF? zNtw#ZlTWFt8glAsLr*{B%(LVv*L?ctoOAAZ=bwMUg~Klzaq%UWUUqqyAJW(Skr!Mz z>Wa}%v?QR3rOD}A0UuBow5%yOBUQev zZfjw3`ZfVgCTdgVOViml3qz8b?1iNa1lMQ0*OOrMmM0Y{?(vOe-MdAGx+!dVXedr4 z)+VRFr}(_OWZip3A%l|P)kd6HKGKQTYC2|;UY*SdT1xqC%Hqc@(}~wpw0Fp=;degT8*gdiI$^}xkE=VAe zU5aC6+LJ1zyyffsVsK5tU3DKP1ZVjhC`8zliMmwzYh2}t zOMm4`%P*Y5FHBi}VbXAys@cb=s9{W4-!-cOX=Fu3U{%=3SB*S2&rmiCf00e}1Eg_- z$(axK(yGQvuNkXpPH;5^0~1S;&_JUn2&tysUA7s)#`~P*%i`vv@+ld1_BqM3lEac` zC(p@Lf6_1IJz07Ox>o6ZP77qbAcKLVz3-~LWvT4g(%x0sf0s@ppNm)1yake3<<(U( z=&dQ3MKTkKSa#D2ZbNQRBUi9;XQP9H*s5 zx!qIHOnj>}h9tg~rt2YSz13CTnkw&Ae}o|Swr9K_GKmXI$0e&jX)%#J!%gM7?SQ4S zPbvk#Gq5SuIHjiJ%S^gn7R8v7sb17CIU;#ca(ME>5f=@Yxuz5P68T%@y*2F2om*JrXrZuf@VI>cL7l^yaFS&wCh{bANJ zcjn+8NG5yPYpI$f*B*yV9+Dlic1U*o(#q`kE|uAvwx+V_heuJ_ncxi z9mzwK6RE(}Z_ZjjVgHnu`7!04_hZt#{>M~y$bE!YvJ+RN5K8Y zSCZa0lwFbb-d5p(V{@`%?f9wKRjc=KvhJx1Di~R=b%(6*Uazd)-eThX zj5qxGRN1;J@8;W+W7ZedeP2-heUbZ{3WjqG`9H!cydmF~)!opF;$^iJ3%qng3cu(+ zxFA(lm%44(>>JokuS=DYG=D+6mMM4s+Em2?cYb4tXVp+^KuH4Pu`skL4@fq2l3+mVUzye?I?7A9-k z4Wwo;y&hl~E|LiFIBt|*@r!AepbnK6Nm7b32 zMs;%f`=+DN?pgM?6HAix()bqvu^0!}bnIBut`q6_p+vcOqlD>4^mmJ7)=irHq_?Sj zY2C*yO)hXP%ITIARhAnD(?1YugK7%)N-P;v)9%n@VmV05mr9B$l31d#Hrcj`C4=)J z+9Z~QM6;ZCK3;bJ3P(j18 z5rwdvc-636_n9C}EJ!An0gc=~6uDWnOAOk?=YS^@|0!RcSdeY&t)aXvyj=<_Ps^r% zBn9c~6FY2O65o}t5t+5-K!?oYO4CeyrCYa(VLMK5b*Lzj22is}$mt9nc}W-E?r><* zu*KT+_y}oHXtBVRb(KkK;H^*~5elp{hN5bqR#y2;ImThha(vvYMm8U)E()|6E{ck% zh6uf6VnLjwM!hB3wn~$;?1@*Q88uE$9Lt*#$M;4Ya!w=ZEu%-IsNxBgC#rw5f)b&q z`kW!WhU)XKs?Sm@^73W!P)gP{W*D=nns&!p;WU*ZazH+U5>2s+O8W0%h9-)3#r3DA5xq%a<8+Sy$A6`@~SwmQ=qQ68!|D#avbG6Dtx+FrDe|i=e@uPHYo* z^q#@#El!rNv?y_;37LVZZp4&gxzU1H`!fV6U#+FYpC-Lki3KnbQvXz_tIn)I%Eo7; z6M-R^PBbLTSBc0rnll^KNpCTOTI!+*b9lUsHAf62(Boe;L`b)sba(N^i8$KX)Koxc5;$hxH$nu?zv{_cs`|#=87` zugUKLhHS#`Otw_x9OZ!t#cIDGEKwvxSNoUe75I=CEKmmelAR_YkTXqG)f6btDB*kQKIMGfaDnd0dG3}jT5n}P80V7Rr54gvE&mkttf1eiL*uZ>llhkWK9@JsP@~GBQ%RF^{ ziiF@)MWW>!VGABCmH!aSD?gNkhL9-}#-J*vxV4gmSW=p#n)+9TLa-|L2Z;rb z{vfKL^lm4fqc@!xwSuH59n~3nOcQ?P{kPx&jz#2P{@oPj2@=5BJE+4VjOUQ|=whPn zN)-DK=H(2kP#`v2F6BKs$)BbO8n)O9zuS~j(ohmp{Z~pyD1{DO~_!SLBi^JSOx#QCMYTuMUL)Yj#j!^*@05+?%kw7mnH=s zho&@i!peQF2#9t(T8Ju!4?$@gN~>B=JYLmNl%T4e^sGqOeEXR~(n*5Nf5=1`92s%l zCGpMKgqS52{qiVn{a_(SC9K590ihmTmFH4oLeqAv3xN+tN4sn(3u|b}duTD(B~&=C z`ydP8a-2zm@rH@Y@)8R-ZT!~{En#5DH;O60hGPRmE! zriI|Y*sZozyVp<)W%DZoEffs05Blc`r=F-#dz6C^wvo=v$B=4@VMD$Mhz4&pDLt$PvvTjRB1!7hUhAYn`IkV2zT~eGsSl2fu-+fb1+70v z;>P8Q-~{IlBni%ca{9rl%P0dCs>?YH#he48A`E`iBT%u!$T2(th zU`=yMTXrOxr>x_l8?1npNDnU|MI>b%&J3y)Jef1$^?8gglH#A?jx4$7h{xL1e?*bx z{QNyiKj-J)Cm#>`D#snHyyQK)2t$#7nIg!w+rqp~pEbEFHSdzr~9mMy^o1E~3^wgty$@8V7G_ z!TSMjn_xTnG3jho@My5VE?!#RD-&V`T6$wct#k#*>`4O@T=@-(X=jXc^YLWkc%~8w zR{SSY@v)k@F}NW&%sNk!u$${NNvWI|M{x`hBnCHD7nf4A;8_^3Javgfw`~f2RX?D6 zb0)_MLEhJj3E@qmV)JVHj8BMW6H@awT4ZAbkLKv$?(dot+$a`lEB;`9**k~^XY<6K zr8G^mH#XdB`5q_nY*E7c21;)barApQ=WlZQ^2fevC19~Q=a2w9 z(I})HrDPN$ZRH3CYBCTMmgJ`fJaoM85H&)S`ul4n*A`yLZz-Ihuvg!}GNtwgPb!Gg zU+q7bS6tkGjg(5HvS$_q%jIBCeZz8Fa6CDAJ=pp~#WwL6>T_ZD83SQ>Pg&k)g2h(# zu%;O90E2WBW}#vavcV#EKABch9CEy(aw-uftc{v9y@6p8wU2aQ?ccSjE_A%1FmlH<_?G@uq z283l)K@KAp^WS&bB10*Hgc>~ZOtHtUB&?&q62M^L7ZGCtaS^E*<-AEun4o5+^i`A& zxEK+7{(mX>hTz#;wI4HO!k(m^k~8zb(@ntl zH27zI618H;kE({eR~9@aBN0{ABBD|))d+YL4cl-qAn)NcbIwHGvx>FAI--(ELF@8f z0S~p>44YQGf0ZJPUzF-RA|eEc9&a3Mx1BoW9kK{ zw8w1rLM`DVEW8r#l@Gq-APDzCG=^|%a^X-aZ++Qj00du8#i#B2J|tpw-$axGs$I(c zBZBh+k*M_@&o+gaArSBKG^OS6E&y`%o7oinJ-}naN?Dd3VZT^P(L$$(MWi>^Mp*6d zn_o)akD?+C*IAnK{+hCF2LQL^gKy~#iya$cV?cR7D#pdjL}?*a5#`~pBp^G{e8bfJ zns8D<#!Ej|S-qsV${Y4nhEtHTvtL=gfV16ykkj%ktv$?{$m)e0d`Lf5l?5m}WO7yZ z=G!yb;m>n2pkmmq?hJRUoOXP!w3bR&amZq+{(Yo$Eq~>d<7@i&IeXf1h%2WYSKO(m z9Ji8{9AVBmzSp|Md9zK4CwxmdrbCHSMYx7AhfvnB#JPn~OK8Dura^@1gkKRB6TTp{>Qv%%A@nCqB0NBN zg|LP29^t^wCC(Va1B9)F-Mf@H!w547uMi5lmN@+g*At#2Y$AL^IBKsF=VU?+;aS2) zLfgGdoP!A?2)7XaKzN&Qz&<6;k%W^7lL&Vc9wMwKd`Z}S-xB9c!d--a5Oxrb=~m*5 zBs@l_Cv@yy;&de(LO72wmT)WKuY@-VyY(n>IuLpi(u84zk%Vf(y@b~Yd+rAg!l{Ha z2=@>+5qv_&{Y#u)gu#Sr!fe8P!i$8r2yG9b-3Z4ME+fn&{FCq+p+zaOCtOE(i0}&G zT|$?hv@c;O;ZDL!gl&Y~4=i!Y2@?p95$Xxyc|Xo07PTrYE^f_{#CGl4v~6$BB)VZf zhZ8$>+_Q6+FrVXz`|K-+68CGr|9<<)!NguAJrC@C(7|#tu}_CXIhn}8#3SAQoJ{QB z|CnQY9$3+<=YbqhJb?p>$w7lFQt4hNay&7_AJRXWb}~Tt0I2l?NYu)tEkg%En%G^)*G;jw`$FdQK`{fBnQsmvdC{^2u^mk)w*7 zRqQ*Xubft#9Y4<_hlqA{zG+DQ`KE2T^G%PGPD6@AYL1JaZ`zzY-*kjI-^7d4nJj0w zIp5UJzl##s@Lc{>H@28Cu6oJOvl?%yWHU<-IhD>L!?|Nf;wyW;=|_9MX){==1T=xlJ<^Yx)Zh|f+n;tu*rro1{CoQ=1@ur1xo@q$- zlpaH}gS(t9hr32|cq!w3=gld7oHCs4NpaZckc{_*99=rQhtR*LbRJo$n$sIAc_h6u zJI3cY(^if#y~Z&njxyb}G{tG}e&)QE$H=>D$~!#GarpKeSxS4CaBS(S9~+9jRVnYi zwD(z->oe(!1>-w$7%AnQPp5o?97yV+Cz%>t4wUssc|XX0GF9sBZAc%!-k)@!yN0rIbj@ zDu2&h3P_~)N#s%nO3DiVKRtyBB{q#CHSez1BQ=~bn%VN{Q}syA#Z~r54J(VR?ym5E z-e0~oDR)~;+L@vX$Og>o5iGXsBrokUM82rlSmx?&(s2AfKO$At;l7M!GBf_lN{Ml+@^L zYS?6G`fK6<3y8pGwh)R!k0@nNWNft3uP-IC0^!K5fKvZH@|eKhwXc*w68<;)X~J|8 zEb0ky)K>^R_kvif71T=w`osd6X0G&a0yT(>vfYD0AwFOpF&O)jL=`MQG4^JXAF+3o z!Lg5(!VdC6v3AP)b{-2U~asd;$HEiPpvZ5$%Rp(j4O=Y>#^jG3?Xmb_>CXk5T{dl@!H_KVztb z`v`s#oj2z3x)$0Td`*(^EK6+4dpV%zNXpqzCt?;g-eRtTZ&Vky+82G%7UPt~CVwh< zDE(x}qD10X-@uQMGE!5FZ(Cw~l5h&T$~<(UFN$t2upO#d#?bdSnD;dmN-=yap~BWH zGlyU4Uu+QA@j#otDGAw8#Ri92?Lt9(xj%3l!+QsX8ed?a4T21kX36-K?D6AS2Oc^SM)1&gJ zoEK720q-p(3xij_4SDwEy+Bg_swqZ^M@2pd3k=kQSS5K&BlR-MS>rcSQuudgo@bW# zd;9+;U-V{vM-`%Y+rQZIVg-MU7q6u_l`qa-R1oxK>qx6EBKrtS4E8dcNkm5*1i=Zd ztOp`(kvbpKvY9y2F_xzZ`%3$hlheB%#DurK;0>vX3bYq#u%4%16Ok%iXkotTpp6YB zd0$IxMA&~vf7{y2dwtq^#i&RyDpZ2a{<$CxE+B3V=5b2#6NN&We^3+~Au6NjmjG1{ z(yhUbRLIBkh=5VbHU1wI!kzgw`vfAW;V`EDjMYUwssqAH$ zM%MT7f)j~bjL%shV+xbv7+Z%JVc6*1>Jen=zH03=x6;njBLkxI>zX>m5ZI$;r0FGR7gG9up%~1bI0L4(T57P@( zkWa#ZFageXV8uCK`LWuxCd^?vb>*1@3#__!@aqzvs zqKa*XCrHXwu01hZA3XQ%#9)*XqEye&0LZN<+bx(v`N$kz$6WDGmus5o02UkXVmp9L z9vXR1P}Obbo}vt!{Da75EZZ$$DJkS?Ps4|iTd|hk5b$DOs61aA7ok!J^!J7!L$-0Y zn@x&oqU9P1EAa^uwUuZcxma4FBT!W0>sYh5APHF*9%d>Q8D)ym%lmn%MEfEhf3yKK z9rFc(2oVosSqhCpKYgjc^kbn#&$S?j17cgDr=mwCP=c=d+nUmGAtkl`pK&gNe6zB- znA-ZDNROmNkq*2rKt&Dz4o5u4s7F#!z06N(P}SXMG-By&6oG43A?M#j1^hb&5175( zA~tWa<;B-tufI10t#vm+wE1F_BEuh1zSA{oXLS?6kKEg)vYlntauhg2{tlwPvB}qs z6f?(`#4EHT7Bxbn@o?G*tNr~9O3|Ekp_>slDuD`KAcdNW-hKyu+vIJiTco%93EY2j z4(U(CZ9no`CA1;X%SmR zUdiD(-d3@x9`QB{gGU|zsT=J$1HT}z*ny^4K{nnkovvlfkffCYxHIo!laE2?b&A`J z9S%0W#HjUOi9l2(Dza-&TwN-^?-YE}{_S$@Z^7-XcMAq9zNnCS?%gyLQtn|I%RkE^ zQcaWh&;(NwOxl&p#P}|YOCfqvJ%Q*B1kDEZ4*8@eC@GYctR4Io;B{zTs6=Op@7NUd z%DIU3q)62)ujPus@cI$dWK_fh?I=k-3JKPSEY|zmhAiBXkKsREfX37HTp8=!o+ zGjIM}w3rStXlxx(|3ci-riK|>%MXaqYu}V>{tcu^Yl+P*(cjwkg4Rcp()_YFP1~ok zXLE89#D>S;3#!6kC<&o*eTzls`pAHo8jQ$rY=j#BCnc%#`8g(skQ9k%Adv=+2jmt& z<^8p=Gv8l-gA?4s zlVV%%c3U^K=@~*d9K!rrQMfaU1H?^*O89F9cs_8p8$C_ShjS^>7Zu2?zcI$QDzlP0 z2TzH1NDFtf1Tk7^RN*I*=i!FycG9*&@+)SWxXTUNMM~jqxS9yMz(BVG(oTJ(f``Wgi=X^zF_GM5&A2}m7do2VmXYe~PKN=1j3)k<4O-gxPNDc<)GP&4Hc?v}s_REVA++ zR%qqB7N29(8Ndod^hr%KBd!-niZrD{$%Ye&;b2jZx(A~3y9<#*QEoZ8goi<${Wesb zT6||jA(P4-#(QYj_KE(shV2@j)Mq>wG9`N7UznnSA0*MV(Q^?`MmHa^c+C7}F*NZI zjMh5|H`$gUH{iNanGCMf#xfP$tgcA;xlr-g8OCWsHgp-+D^7RT=CGB8vG$Y{#(F`) zw$WY|gS63ZaRi4MrnGkR!gdxUOR=B8BgIthb-^hMw|HUpqP~aU(Az!GLMkHjCW_rj zF`=C$QMG=aR3o(LyNQ5L+kCbE4}(PJ8U-Q$qNPKG^yg+ECWzu3LvTV4!TiW)LS~d8&>a!6R$nS2!(35KrtQVKQgTNqQq6f7WH6Q# zE9s{xC(Kfm^JIt`F-Z;Q#0&i(g{F{V@cT~~xcsTdi2y|noiz|mT<-w_61v_|A(HM5 zyM-NTO96ltnH!uKq8L#i>uzRIVH-9<^)lYf(mNbB_Vx7A96g|5PB58`{z^T*B!>Vv z&LpoG^h-9@W~vu+#K9D-%GyF%don;y45TV%>InjO#`jy~P}9`XfmK|U&Qy70ONUl@ zmzSQK;n&3(@BY$hN_^4i5f?2Sbw~d`CC+5RorK>Ko+2zEd_nkzaQdMo&clS(eL3$! zm_c}*a6&)w2oDiHAapyd#Mz&48DS3L0m9!1s|Y&?KN3bAUgG?j&`21?S$kp zoJS)3neY$7amSW8QwVbj%LxHtuL{mw5uPTjC2S{@Gs&4p_>}Mi;iTi?o$w;zM?&cd zoCzY_LRdg(GXNOEvxKdLFA4nzA`8O(gn5Mdge`>62tN=yB{|1Lm`S*e@H@f=!n=eo z2!{;fJQ86F;V!~`gk^-)gzke$CwPSC2#X1ggo9Hh&RK->2)`%1L->HuKg~HX!e0m< z5Dq<&Gg*X5gvSX>2%ixSJBf2wgaw2mCVhhlQwggGdsLP>MTH!28g$6O zBu}uVIpLJ4JbBP5Rfot6Y)$E(E>E)YCR=!xDa;SwUJLWh%WNEQ;tjSduFzN5t{r>z zI6d1mabmwo<2l=O<4ygh-ptXan{PJnu+6CEA-3CihmD8Wj`+xvkYvgx%NHcCTqgL*^m(F-(jD9ptL>?Vjh-DmM_e4 zB=V`t$%iKi>{>(;yk;lZEWz2-@i*i&gA^ZuMXY$ESCuuWrLQvo8Kctg-O@8z$5b-osPuc~7+k zy#2#_XWn}Ayo=rwuPK-o@?>6ZlUFN5adI!Wg;L^hoKmZim)fFcNhB7)Pd4{L8f?)d zynLa+O*AIQU-*<9Oobx+m`B#$-O3|t@=BYuR+C5Cn&k>W%T;D4t}5eP6*k9}@Uy&} zr=jZpvSY^%XJVqfcH#7GG?l}1O1xt=AFV|H8y#L}!h$q|d`VcEE~~5ij+W+$j~ylH zvZcwIX|-J$_th@clWwX{ z|HqtHd~h?LG5z0uUJ>VMpI=*x^fF$nq5Cv>eyvWQU%QXz*UV|_^i$bk56S_?o-C@G z!;0hArfSa9_t!Gn`^|H**(Xb-Ie0wnVR^ysX?~BoBjpuy;4tm+=-qxifW{MSLuM0r zhHa!g!`3C`P5IGF@(SCzKW5XLD9lrlBe!q@^A&k%t^AvGO{VpzJG`@w zd?iyeso=kQUTtZ%>PYjtT5ZJ|o*Hw9tnt39tPWaCd?DlAd|#@J$NMHe&x5|RlVjFK zFRUGd4su@oBdp_>Us$_6@9nhM3v2e(wC&BjZWg_;b|1DPFRb17U%ar^1ojtSSZe~y znq4jR%;PkAVXX-)FRXFg6^@#~%L{ArcAS^K54qSE)}*&IFRU%KFRaO_Q#lCw`s2BS zpvPUQ2SJ_D_8@4sI}4=QZZZk%&EO=JJt~!*%!+CMRCZE9u%{-m+9r#r%$R{{sYwG; z*;`3EA(g$QAmDXb2MC7ovO2?h191K$tU_lw`a+%*mnY)sGdQMd`m;uhk0%wIcBNbC zX?adGe4&#W3{Q%L53;_enVx+xtd57U%mY~I#1`#r?E_`JHYVM%c{fVlJbfp{NWk=@ z>2i#wC^$wqW7DpitbAO=;t%&rm1l2Z*!|XY92g@`zmiznv{#cJHhdLLh|*CSqVg8( z1?B7L98HIrG=oy8I#QvhGu4r0*Xk6L0^5jFNE~r9?)o&C2TnJbp%FNr!JLPt%FGHkrqA zBeF^JST4|}H_Hh|hGz?9gv86Z_H7v3V;bpE&^GV@eeaW|NM&9B4EEQ8J6PsJM^H6o zK-(P#ZYgM{ZGdZz^b$zZ5SFrOjb;d!%XPGDXITh-jjh%|J^>+XZ0JWl6=oW~j=eUy zi^C95_Bs|24L)a$5h!iVdefTA{Kv_`hsi}B*`V;}3gluS#g1s+Na3!95UVQr3MU4k zgS=fUTu%K(;q*Z~D%n)wmY{H*g43ZJTA(PLQT4Bd#o-i1Nt}6^}^K&|cwZWift;Tz@p; z`HMh47D8ecks#Nw>KOc;wTYNnz_4{8j5s0I#D7pfv_EDS@-&wb=dOH5()teb=1;Qj z6ZIYDr7|9eOT3ly9cmYa!B4EiVfNxG(JK~CMDI|`Nd+mMvNb%}ar#!C=dBH0gsPos zJTZ#JY82sUpDEB*8DkruCPq=mS{Gi6r5^uSX@J7u26)iMV-Zmt7%d?C5J=l@H2V7y zrKMz*x(VP>w0;b*H&Fn40hr=(K3$izu4$RyRy0MFS@eMAwiT@9OZ&^JrRh98Minrz z$$wh1Sa5rXJbDsRMMC7LMfdmbu=y`*SyM>Yrzgw)zzT{Qo$#+99^9)~x*IS&kX&)N zB~Nu&rM;SjU<{CW^6s<+=A~_s?WPVwyyi}}qyjdtN69p0SMK4}ye1I$unPZ8WBV`I zdYDye)Zi#}PTKdN1^t^Lou>gIZKDCr`lekIudu{#U=c8t9T1A=1lf`rL5s_xXe7vP zY@P&FKmwNSE{dXC;YB2)LW6Z3kVZO6yCP|-)&Ab9M2kd;^jdpc(IOhPwZQ@;?eGmu z2ucAW`jO@7bM_pRq0Q1*>qy1N7!Gv@@D(k#1a#;U5Vx}L8*>@+$PON0X)vGLtd@$1 z-AGgznqmMALnHHH&NeVcX(4nXaUo>&s|dQmk(4)%agkPE9ODZA6E1|qtGFjoc>gVl z7X@t?HcwTei=U$SCNd zQ%&`8a&x5f6f&g!3ktbQ;!jAOAs)ygwY63?>h-2^wXLN?SRg{L4WY!1i|%B*`G2wO zKSo}2ZX;{+XOoX+;AF;}(x}JHD*)2Zx6k zWfX?aF7rQ?rT&<=8$vwjC*wjLn6ZeDA6o6tr!?auoQGY>YR2T79V!~rmqD5I+#l#` zm^=5}uhMgKEa11Sn5V>Sxq(HW$OGEEdCk~*3L+0CY32a!7tA>PJXv7Zp?rbLqsgdb z4^y?EA7ChV{*Yy)+{PXqelp%MZslCq^X~p4TT&} zh5lrrSQPXZipEILYmjUgIO&JcH!)dPw7)%2ItP&cH8%%n)}iH%{&QYsmwoImy~;4D z4vlg*bAM$q<}dy!XA;PpEb9Wz3^RUb^Uu+;Vm6CRH#JQTF~o)$4%H0~RV?|MbB@6v zno~fwwr{+TJc@i2RGf*R_Mf*DKVXSQfyKFLAK0E8QfzO!!mlA7buLuGpDIO*f+tML zn0{RrD@oHV@=c{@ge2npJVs`Y%4+{U1Ke<~Bw{quWp@xlg~4{y=UaDo4S>u$0izn) zMPI0>a$R(lK;(MP;|23c1yx>}R|S^vfeLwLpjKZOkUctY*n{SEf#LePz~bVnEP%W) zAg>E#vNzwC$xh^Tfd}<4cL>E7l{nJ~KM{J301x46!kvUogr5l~ zT+E&lVJ@NM65a|RJWE(Z*iLADX^FEpAxRib*h=_`;9kZ(eL{c2nS>RD2147**}o#3 zN*F_!N%$LKHQ_@-hmr6>7)5xG&`9V$iuV8rmlN(JtRQ?v=ypYka|8jwwj?B+76q-G z7KKGli{jRVHcpGS#EaYI^4ss`v~aoXALj4A2fsUn`P_?dCHL~pef(ncm7x84M& z+3`R^FLtf=DLbUNO~*cm67SnDET5y#lUXeeD|cG#4*esJ%;kslqkQ-|tbdq))X|+= z5sJF*)%BQtyX}2!*S**T>$dj^Q9iq2M-4b?Q164}lSC(FdQ|q18~&%tz5D;8?%Qvv z{r_V9I=pXxrrftbw^F{K@;dkJ=VD`N9^sYy@EPxWS+17VJh^Xw2U+I6{TS}skKgIO zeO1lAm*2CUUW;SqNsqU$`TyATtYs70C%ti8w;%VTce32L|2pk`jgw7REFZr|+RLyw za&duoMuCv*(a=7{gllYRkF@sz-sCC#v|`ozEvU(hHImpH67mu4TGn6@LoS z6<_nGI9>4pe@c>?*dtx>6S0BGicS2Prsd|(OpKj@*?DuS`%N$5^DQeHw`I%u>S6XM z=BmLs7QC`$*)av#zS(OFf=h_<0C$R)!da4%$#HP1CY8&F66t(of*VvwA&VgeA4S>n zpciS()*0fi_UFEb(@X^Iv}A-yAd5jB{HQBUfXeV;tbyH1nsOviZIr=aBWe0PPdz6n zj(A^i%F?L$bQJ?oT_cRmcI}(xpA|D4v#Wu8L_rqA%p#b12cKu(8I9VZ=+?r7j6Hb` zY=jWY_DvxLVS!V5WhulGoTkjm5E>?)Qf75=a#vi$)**`-@Y)5Ah#kI-aW$>VXQCpu zc=A8EibIc7TACzT@d<|{#}@>fbg4}aB(3&Oe3zd4pSnb)ts+3Ms0|f7NjiI7EVAxe zIOKX|sW2)UWF{QI#r=)l5Uu@aWEbPS(_r>2wOkTDcXi+|XIe z$)ginw@L?Xit)r6GH$IpaEh+g(GmjmB0#~RLL3V))LTo_1w93~$5|}Vlv&C{o+zZA zd8;#VeI--dr+I}<%GX5fLc4t4M3&Y&2T$tymDty5Dg?BF|J~qz(oqJ($d9m_;!}`4 zF^R$jj)PnYH+pv!%v&?rm3B}`o z@-Rt=%r-I~Mi>?160cM!$SM_CKHDGZOjCW=D!&J82PPRy}J}O=D5&n^0=pPCP?;8%W< zsm;j&uJV6;%K%<$Fy_#0)ETcuS8t)7C(&4yV8a{GAugkKS_zIPF7w|KxkC6+tuwPT z;My7q2OXf%#04~2M~J*(^o5P3QGs|Lp{*a59e{V{SkF4TE%i4{yjJ=htpM(0O-yvl z@S*w^c(OjXlbVI-8qL0oS*bCEtSj2Jn(aJ~T?sd$XLGFNTxh1U^b9Hyu6;}{Xy_V> zZMFYr*bQwE@mVv(LvLv%enEZhYX7u1F|Y-sXxs0sv3<#puoO{ccjm{^4rs@HQc4uT zlx__+3DmCq`pnXPJdFV_;t)YSHtfEZgEbassKB z+~x%Gk}0;6K>jT0hQlth0f#`|)+H^|okfD#Hz$}uuiKjCSXCeO3>!AsXz*t(ziW5X zlJZT8-o%xEaXD8})XL@~MxQz|KAW`278`ZFv&l|n%y`2+uBgCH#v7K6jJI79A<8Vhmu!5LBIwix#ii z7#EpZsXKFyEDqCLx|n7r62^ouy8S^F*}?(}3;tGuzllr!PFI<%t^LjdzD43LO!mah z@wO9sbz-uA7c@IrXIFq#8QqzeiHKorjQlO@tR~>j!uZ{z^h@1lMHT{P?C=>!>VdO~w5qH}&NHj*VK~(D>xQ`)%;XtohJc z+c^VfCfKr`CXTN(Jm=m!*;uEGZCL{^uXk4Qdm3eRF^==@Iy09Ud#b|B;N2NFv3(-v z-TTRT_oL;!`#?GGp2-j$Du>?3@r}`QM_j-uk7#Vyq(UdbaLBD~+`bHVbuw@QKdi6# zIrJ3=OQsC{>55nTS;WC9hy2EEV#3kbKi0U$mXjRv$v@?g-?(zhfyRC6XNag(8HFuk zIQcMX#$TdigN;(pCQX$<9IGpqV@5HPLs;!pKHLB{Z1p^a-es@-3Sg03tUq{}4p;Oj z=qVU?GRA+aFe2ZQ>ng_^lIp@YiBBmH-qMx-h*8t^v78-teFG_yH+qLV$?Hkq2^nPg_oTc4r;)O^n|c){=>Kz9>LVdXlF|vlUzA z-);f#GT3s}{}u&_s(+=0dPB8lm&!f}u%^l`?=q;eA04t{G(JAOY!feM2Bo)r3FGuv zEh!~yYf=c8lQ-_$u!cODn(kuUHyE@g-zxn-+3pji|1&&AN}oTYb9ZLtF|1U2#K}@h zWVv$%D&ZumxT(PJr4$tqHOiLnY~_zqq}lP`PpiqWo}#bpAmS*#5`8ri=xfK$+Q+UF zSRF*}WSR2~nr1BXe#tSGIS0HU-|DLGCLuMJeFeg$go%XP2u~5-BwToPiSq`bk?^Z) zN}TrBa>s@6Yl1tDJq*Hggsp`AuPbq`CEQDRi7@zj_Du*+5xyrJFrN3C3D*O5}aF0oP!9b z5j;X2q0=<#K$t;TLJ0R0a{CqGe#rli_Df{1JJTbT9oQw49a@sfW{S_$ud$!Q=f`Cv zk}iLL$YrnbWN*@ae&r~JA{^-ZPsV%Wq?+UQW(&Zb*;Qu3>@TbZxYFB@$&Ox|_BK{! zM=!0)j;qCKCd(FP>bAC&FR~A1X{|N!L~WRI?kKhqde)rSnBsfk`&M~hWY}crQu*yW zH7EW|61xc*@8hJK;>i0D@2jfp29^cH8zUd_}TF-x*vV7BLEIHnG=OtR**76Nm0rfm7iH3jzy zfW-S{YTDJ9NLA^;QL^t*nyeWN$F<}4uB=|(NCaMMhw$N4_ujh7#=2z9`7Ik-5Ailu z^7^s2@_IWUabL`?B(Wx@A z459^aP@eKiXH(#?ly}5zuSmdwDXB~>PXWPG@b{EH4PPmbuP3(qb+#SbI#s3p26-KK zSGY`qgM1x-ZObgHqKyPR?X}CMD;7@dT=D9Jy}jc~)85h)!%0>*)&?7y%T&DT&N^5p z9t$VzL4L~Sll>2y-Ii?c!qVbY#hVk`rz+lF>7SKaOLp z3#MDvvHS;)!f^4N6zkO*lS60>Th?ezAOn zF-i^lv&ph*U677YT8hucN3%ofZd1ZIP8zrB zHfiEiC@L<18HBNxPbJnh@R`B2Vnw@QMQxJcXqBdN9Y8ekuq6K+Qt{e^-f2)C0KVip z{{ZH*TZKcz;5wgsXgwvK(CZylaM&aHZv>@BB;@EshFy)L<*N*0v@+N0&7_c%8DmSk z$W$+LVzynEl>2;DX*+=&IEvY1wyn$|)7cLA#kxV+j$JBsN(t(!%kD3&6{Pm!kz7g= zA~;VFP!V^=0Sw+awXu{`@$I;BLB3liF|~B)sKz>Z5B^-}t=kEO^a-hodUwWQjGlzi z(K0C=C!9{nOkXq&gvk-f3rAdZ0oNk+zG8-bVBGP9(k`+^-NQ?EdAX4rZr;b$wLh>~ zU9s35^m%!s+dV~E_5GBu-qB)mrwpfF_LbL2HA!B6*g}@)&E($})%VD6{g*S_hh<-s zViRcQ+UrkFmer=Rnw2$0mrZG%@z!M$XAW&hWH>}$R>#J;pudGq%pl2lZL`&a+5eum zU^8Cgm?>Q*TwsW$42U;4Mae#ecmTY=JL7a_$+MPCDUM;bXnQq-_TdPvJF7D#%WLJ* zWIvG_tv;c2AhY-$BNop3bixOoGLn6<9WU`!|5PyX)S)1eE@MC-^)ku}q`p>P| zxhDN0k^|j)m(-lpvSE&`3jE)4JXnh|-i}P-rlDX^*12%D!oRW^R3Fd|2&H;T7ss8M zgnhj|7#zc|_}341ZtvvTNz>+E(9lV3_DoHm!U@|O%NvugFe0t9K;a8F$cD8E^2=l;?>mWV|y+Cu=I@(pW(YZ}2$Jn?~w} ztr_o>i&N#b-r%a#0fVPj9k4W&9XxK3`+UKmQG>Dtm86^UDavFHSPI6A-RC>9xN^#9 z_j%PJflG2VZ+`=b7L+YlC8$_Bc{kzrJ7klsmKC7t7v*1=8!h$nzT#~_EJ(3ryy_i9 zN2SWD-QR!eyU{2z5nJEI$y~;r(#-<>H2Zd5_2-~zTzZV6^OVn| zd(VP{RKgY2j|(@mr}A&L+EC*9@r_GOb=>X)okq+3|7$^?iG#?=G+S_bqbCxW_&{(s zf8zE`Qw}xFmsNR6la@%cB{ytstknpgk)Smtt>L1u{e{EL?);7|B6+I7v&ZENIFc*^ zx?3D@zJNqDjh;9YQ}gt!^}No@l7}(M<}J~fy_jL2m4eVHWav=-!eg(-p}4bLFd54q zD3)&*@vwY6=0zhGn!3nIQ>S97JE$&Otv=xAf{CXzOP@QxI*{V}uxR2_D|V(X?y-wJeK(TF6SiA zN)8Lnznr(E0OKhDMckqmL z2Q{)u;w`}=Tz}>NMsMJut;QK(zXf^T0L}GOb3HZW>=UBJS#O^FTP;h}@@10qD?G8Q z@n=LnBU!dIbQ%op)=JIlkfrq-J6cWdRsEuL{4FMQp)wP@8YME$;&`XTaV8ZSQeO2u zz|;kKq!NXEKO)BxaF_xYEP|i%! ziA6Y}L3p8~oAE-gj&DoWoTJqZwHG&JqQ(z--$rgoC6sS#+J_8u?^#?{*FsykCi!z# zt2YW|5Zw%|Fy-AXRZCZFn0%@V@V}aN^wmi@7(CkE*&G|C3BY!lE|_sZp^+jBRwV#zx!VV4X{5%pI9% z6jWNP($a@wYh98VzzULh6Up>CEmqs=)Ao7jZcAIWT2`xBAPW(~QWbZwE_WE0U~3Yf zFu(Wb+&hy5vEM%5=ljQx*Ne0XKoyv5I4C*X9 zwni|aZh{Igcc`*sNH1^OFg;|o+Q01l=vYb^%P3T+oGoRrp&~4)b&PdTXd;(L1RJ)> zZk=pV(Xr;CT&?*mDRxJ3R`e7c7EHxynGw@V z)#6j0rOK1i^zKOBRc4_J5lE8dOG@f)%6=FmA>^HV}a-8nr+Yd(b#J^?CrRrJ_} zZyiCn8MbDZvBwHKbF-(Ws>+6A)~Hwkv9MKD9w0*vlv(rl00Akdw@l9-&guUj#Vqsp z)Iw=YS^jck zaF1^JXP&yN;q}77J*1SJ+S9NvCub)gh!sk#K*c1Ko3m4&QKtQ%H3w`dV{uxTBQsJC z>L}FK`g2=y$4RrJ67!CiIL1kovXskLC1w|rc+5C!5B@vjbgP*#Tn)XDL@;5QF=J6- zq>NTz7H8A%Tv;FaNN!Sr64fw?DmNcyESee7K%|A%6=A#R4Yl;KZ&osYL7BfFt7$gO zL_yoW35{)80&nVs%2{4&-7m{z9?DsEig{?v@_YsMNsX|zg}F0Zb8um>g}d|PyJxHs z#2xXNJtga#3uhI$%QLvoyLD&6v$ZXen`-;!&Z)A)zQS&Dv!A4`yY_OsmIMM}yP7~6 zNH={Q%v>Ed?<@#v%}^);bLBF6t!XVWZJi$<8gt5KR8`j3Yf}YMe6x$AGbERc_;lU3 zb#bxo-Ktx=V5kbAb=3I(rp9k@?dTAPEv0ZQM8U{;&IHe{R76p2p_*N2(24F8r>fxI zSl)F;@r>D(b*s|td{U+viO%98s;8}>w_TdEfB(AM5G$jKM8`Rk9+DZovmm5IlUnni zheuYTHLWHl3po{HhZXcy6-PgxZs`;}Ni3dBD*q7NqXo)Vm%Zsatl-S)*NISr|??A@ovLUwly z*HMBoT&FcZ?v`a?%H0!9y6^w@`oGetSXSd^?PL4Tp8DVQza-QDe83X8lFol!30tB! zq(^=^lLtUEcZ&<8LoZ6>@!iubM0u{%3r% zEONF~cQ4h=xV1QXWmlD7PF7(Kl!hO)ox$WYZY_wG>t-rfUk^uzL5;3m(OMOse2KLU zw?LeUh}l0!TDP~&*S=zmIwiHtfpId$BPVlA3|%0{M748FB!48ePMNVrh{Wh*MOD8_ zP#rQ{6_9q!NBN6rmfZ>Njpo~TjlpN_8A71u+q1w3$s%KcLfPSX-nUPscJ9ijCbwGM zasN?~;mEwop*7eB`IFL`z5+~{2eYF~1HJ>%akA;3`3tqoqsMuXtDr>GE|>JCHg(#2 zqBE`85!PZ+#jaG(!q{{JKqNkU5fp5Vr=50GQ;O!@y-lu zO``OZsnME$M97*wy}4(_SUrB}kwlERd63iaJ2GlPnAPD?ODfBGYyyO68l^f#t~fRU zLEY#aCmfrA{9tqr5OO*pStLkM=E7hPC_H!x0U6S@6X<5u^yb#P@&@tEWQExP;T8( z5U+mD9J+W(p&`=!maMFt5<~k%d)?_~>h?%+V@lRIQn+5#FQzI2xey@Mm4yb96QoSD z{i!*EcQ}%27ab>U{&CW3N2kegtE$0?RqA#_n%N*wWyGq=v_PBFq|*h}dU||ULx4Fl zC^6J&U{Jb3Z91<~?q}dZ>!=};rCE%jq4Iom^#sf(l}XP$t=UVA>4<7DCu&0qqkjE$ z9Th!c=&Sh#k6juwW|v1bBcAu#MwzkMe!9ewG`li7p2QbbVpXMiD7BvLlcfc0R7!X7 z=I_D5*OHoU9@Op{t3ORMS?2qkM~G5I?KMx22UF%yfwuDJOt~(h<_8JItB1^?d~M~u zgv}#kwUs7;00u!zb@QLO+R6w~nJC>iq>zQazC;LTHnA|-T3{$O2STP_4Oy4GOkW_j zbh;5Mjx7baf)%N7Y-u@Kl^_yBefK^+UXzc?Fn|-WRP6Glu}eA5I(P3i+j3%;Mi3QU zx@`TL-~H})gZp;wkNr@lSGA7W#+-8Nnt)Vd#4fFM){c~jn=;=`q53g_*i*&Q$=z>} zbrBh`?O7{gE2paGRF`+~tmg_ATR;Qq4P43WWChDFn;Z(v7f z1>^d`u0UxS!7P4DK&)AImF!(}voY*iP}QL1=}MxCiq=NJn`P~3ZUxY+E6VJrDQU6o zM6S#pxY3or7rObKJ^oY57}g!^aS-w!(9a!$eyXQiS4`h{4*Ay$;SJ^pwktFqt1bYkM#sWgtbO4~ zDw$8<$n~J+Dv)bmY>D4KZLZs9gloBdcz;!yOm@MRe z7z8J-H9bv-hB;A3ocMpiPCNXrE4)y`L03?a7OQH_-)7m5&t+#s1QSuf94i})gAoj+ zY|xrNPZb%h0H%J+VbR0CGc!V@m4ln63`XM=QN*so{BBd5L zert9(e&Lqs@WG-Vq9?M{dgD+I$ZH8S6#ljW)??C@&Ojp_X`I${CIM&h!J~-hpAxW8 zQd;>cr~#(8HtgvRf#bBbFnLC{Z>QG$L%tBsk+6^kgguybdL;gB;-SVi>4juBQmww7 z(W{1o)x*J=!@={1gP$4>o;Dm*Z9A3ag?w#wztFvH@fK-C_jT)9b$3h&A2XVU<#fZ5 z;khb>w4wo0DI*AX6$=@eo+Ho8Ew}p8It6WQ-dCC8jI{1JN&|QIJkaK74jhSn^2@{9 z>;Gb7Ia|u=%j}~E+C~cBg$fxjv|3tF{V&B=k3ErI)nR4cxyXmp`%7rh%>K$~-Jl~3 z0ZaXcj^S-q^RHUuUMo;1(*8@1)8Zyz&1o?$Z;$^^cGWv@PRAmNMNXB@uDVDN&6dQ4 z{KzhHKy^0<)BQ`?`12&sZ~GEnjP>yE?cLu?GRJy>GOWz+gW!jCoCsk7xpPL z?D9O1@MntLK6{g>sm|W?fch&G^<~@{Shz}CH|wYozv`&3t1j2umCUJVT^P%O7LUFK zbvIwEZze3&)U}&rQ)<>AaJyLBJXp= z!tR#$w5iSeOUk(N;9*Ts(7Th@yK_&{y4>bn(H}OdGfAm6q5DytiX`t_0?n2XJ1mKCdgZ?D_4Sscc~g_^>#M)eJGfqU zyw&IH*Q)ys&+OWYT}+VOH^Gw?&;3HolnR^^b69g6UnymL-Sws3gWdzG0?&}|s8)S6 zT|t-qT`I`lbiC4OjC_o$UJ(jn|J7&DdW;_3TIRc@SgXFJ7(F!-h-*s>>vCvTo`;9# zuwJq8i<4z!-%w~|-&m4;%apTkDL(sF=ypCv;hw880;r})X7jm3O1g0uo(o(nfq-=- zu=s+fHMO-O71Nn7ebK_$%-VpZlO7Tluws`mf$PT8>H^Cl_lgqZg%R!1)&;ia#2o$R zy4ut3ZdIO{T3^Ox;M2(CwkVs`=q84ByT z=a;MavNp)>30R?k^_bKaUU1)PmGCoZ9}meeNVUOuqwGi7wej4Oq1qRZ*S!ZDy9999 zUKm*1G#}TdH|L}P)|olsc!Ml+z;~Yvr_RGo+JF_4eH8TV3u@K-g4W+d3$}(l&jl)H zPSl!(qw`nZJTav;|B0ZswxDvH*8Ce4G_or%%hsCzlL)6;4)+vtR%vT5le4U{AbJhK z949!NpvMXN3FbP%3kl{q!E*?Xae`9`<~za31PiFOz=?96wbuPN#u<4s0%HNEZNpK9 zjzsRRQv$Ic3&KI_ru&{*{%HoBokFuSGuxUS4xPCj1D7w?FzVM9!&J|yO>NhjC%NPW z;Keo)G7<)pX90pfP{F0h_uA5`m60SgutNbIn8j;yq9E8ZAuFXL>~m6)_eyj`fn)Kj z4j3y%rmxi+;yfN|PDM{jldr>@(Xb|ZyHHHVB>#4WkFEFZzElp|wyMlBri&D$kg<`+ zz@62bSFzfYgj}9DoY=4(krBjlwm17uhAlQCib|I8QcP_g7|e%o?bf9)63I}Pelrvp zggcuhp4Tu@@%{5h4CfigFfv?P09!oQu-SEb(_L*XuWOkd1y~Vm z52ZQ-o*};1?Hy>(iOkj;Q&TPEV6)O<=G<*ZQbzphM|Gu)*J0L*!TQS|)x~Ple(RYd z*xw(~tyk0+X%vv=bu4B-B)8LpOa`(K-s|Y{E4iLNfCXo^*0hCe^rTPj5ZH*;3q0LQ zEBhsq0$U^GMvbZHk z%UyJ&xXmu)>*FoKKRE#N=dB;<1eB@jgbSi$KCTmhXlD3DbW?DO>J_UE28$UJhI{od zC*u5%_JOI*a!M15+?H9pJ9yadxHFPl)1elzlPSBURAt%%={^wqdJ;TKb-pLTIAc($%iRIC-L`w z-2Ro1>|f>opntD)9jAZ3}jJDWVSVNMnFSlBi+RxpM>Q!NS@S&(%a)1R6ig5W{AHJ)$M zMd_-}v87I;|7J)ymw$q3Pke)GID$J$MV}@8o&9nB1%I$f1tnOowCycyRPQ>-#WEL1 z2>w@3I`HO+r%Spn=ZxDA9F1_qF5?K*n!YVwdt5F3#>?c0cBgSfe(ARrL|1hf&5L%= zT8c>V+^opSSWPpqQ^{cN%hz|m?|mUL4YX?>_BaUeJCgT!$D>CE(53HuKh?_wO7FNf z&}HuRL>8pFBR>A03F~(wD{=Fm^5sy;F*}ZqT#&>@A@Ib{I~@QTv-qC)HEAJyJovf0 zXw{U-C(a5KLt~(9s}tsh$BsEh#a=^BOPth|4IdILs&q+fy4CFpAi!k`kb!L4s{+3F0$TNZL0>Yc zRVQU%HdT=kw~K;v1WK3HUzdTI zYd)@13TDVF({6Sg(bhH1n*TJ`s{(p$?|T;Nv3mo;O9}p4CM_(}eKb?|D}mN!lj<>` zCoNMf82kN*>?%v$E1`H(skpMJiQik=KwT9*p;&f^LCupd1tRnz0%T;OG2sfED^G&96m2MR%8f^F8xWPTtF3buA3C*)|TTr_P*K>kvYkPdXi)TCbj|%@m z%8yuYsz_~zT2=Kxxc;B2TC&O7(YC*Ep?L^|3T>jT1>>|c?+-W=Df?ede!@!+qw`gk z9WZ~s7we}=`|1hFkM1Ymi*@_7wKW?Q0#SCcpQXHjU3`|><1lGWstNOTkJ;{#tu74k zLUZ}XiSTkY8=|@%ztWR#X7cD^ripTCh6}>$*#s$?qJH!Be5w=RNnSz)`RNLFbApVR zr(-JsO=l`tVYZK_f_$W@>`)ITL9CY^pKy{|E-bmf!2x|L`%MAg!eGo9h?*uOSBZ~X zDxzy5FxRDF;1G*APz!pqgff3F}} z_^L7m!a+J6NyBg&^p*W@DArWkKpC|K><2d>%TSO#g|>b!eE{c-Ld&N~d#*ZEs$Ck2 zhf8mk;`3z&B3;=+?I0BhsOAkYM@hQHP<(P=gACC=kA?!4?X)$PwyvSA)2)RS$={#P$y zsWs$&5psEsDQ*gh+LdcWsh;4OefsVM4|rA4CHBzu8&tmt$=gs{1D>{kuVe9lVDo$R zMx`H-u5JP|I{Shedy#^wagts4^ngb|%}sJ{EiFo50^wHj#`VjB>L5% z{Ey!rvm@@{n_w>B1G7yC7fmXy6-K|7y?QA~V48bA_QJe;3?8tysAkMk}SMV_Z{{Ro}`lqSV{ZFPKc90d1-^-zp8d=rZwDB5DNN z*LQq36MIgJh zD9mAnoOm(mEJLwE4uiiwX70cCf%v~r@;4?#)+jwX5h6RC!nKn-(h}LEzm^Zf_&ZH3 zFcS>Yx2$wZB9YK4)xc75*E27D74pkB zUf(g?*C}*E&d0wn=UK_qR8T0LB)QfLvonm?@ zt55x`{_b^Z^{32~!|m!P1)>!vYfUaS4^4`kU>-U#!nN@pJb5O^>g(mk05RDZxr2Mw zH_(~Wddz)(^U(N!7T_tvTzR%K=n0nw@b(1DwJVxS2gaDo%W|U=l%YF37g=pQ)F#CH zk1`uch=R>AAZgqzm2$D-`VP*C>OU4{?R=y#>&{2vLLb8?1pg=f34a&-pZ7REGx)#m z34B=m86VyJzn=f)YYVe}!~aM4U%aj`>!#fJs|XSNk) zeS`l-JAS(PpW^>r9rz_5@o%KPUF2dk5!m6hMlJ|jdL>r$5ii1`N)g6jGZ*sfsU2uL z&{sI-b6r(sj3^6j1ET-yI-Fsu;BW&Xk1tji4wRZgEc2V7(z0}A+V+Tq%!8P<{fdy7 zwVfztZ5(udsq+SPXP~^|T`|L`G-5Yl+IEv;+Lj9?Pl6xS0;X*@Ii_u?`z29F?-KGm z-ksOmLT8DE*%0H37RRgq>8fX>!jbKu1rfVa+(%T}OX!T%&+x?_5+%p;Vk{W@W|`HQ zY;z2%hD#0)RfX_o5VqPk3U8he0#Ag**t$B?dZN7BSUWvddqH9|8PtT0REAK4tKYdf zeKi@KTte#jwre64xm{U7HSfA(OvS+9OG(Z8pzUaGs?$7FzT9K}4PjhlTD(e3@)n=! zEC^VD;fwVWNI^~OjqJZ`)v8XOabuYn-G}_Ct1FGJ>PmVAX}pbX9lNp2zC;kgQ^SQb zD=d~=&Ohnf&FBpQn_ZCw$bC;R^D0`qW=+l_B^;Yo!he6)-E!OsV(Pj(O)oo8mT7*(e963&xRzyKEYmGp z6l3O{m5irNZlh&I&%jPvZWDIxe%-JPf2y|J5JPj|BH!v#7YsyQRF3NCo(FtS^ z$Lh;>za6`Cx^?Gt-}`l^0S~z67<9E{-+LoR>|XI$bV2fJ@0}M|voAn-<~yQQA3?`W z#%IZB-$X9&`;k+nEUM{{w_h}DbDXlVZ(fi*HJhSU7x=2C<7lKaRz;+oNPV8C3&Tx8 z=oy1FwS*)n6A@VjVZ>ldV29@LZYb7#l_88N<8t*~^tlJ^q^BQ~RAJfB`;?DpdS`*TZtT|}*{H#3|iw(ayA2#1MeJfP4$pA^4~~&8!bqqPWwNk9{?gtS9JaWXFg_R zSDtb-^$aUo*1YSk69pNMWqryLA~q#g?}zzW_Gcu^sDI%FTMe^2Rk15H*dIoYFrh|! z1PKp!TPVg`zJ_@yyKai~l5O8uFk%4G-!IT#GL5KlWPc;4*nd$dtu;E49>nN@^s|SX zX6b>X_apW{BTVP;*u(qKIM)$}J>UJV3;>D*dul8`8;CW(v~(GBCMW8O`t>xyySC_* zp?~{V+!&u+0jSw$O3Q3&<{{kt(p@J3#RxWmzp(a5mz}pyV6ZoAbpn&xBYl!+c(&Q+ z?w9l}F3wj-P^qnljjSqKllvIVPyWGlzIO7l)2Y_8$cWvS#Y}}`YQn;?m@K?AOJQrP z+_z{vl;s!Mr6^%whPlJiDr(Yb9f7m@Ni>IUTk;<|x>V;}iW~X6U$@$2g|67SAEq~w zuVRZofF`^wo2LkKl^RwzyLnK1FBJq^a!7>;Y10Scm0L$DXR-a#&*^Sxo2s{5mOXOy zo_R*@`(SbZ-r)!a9VhN8}rZb>9xz+^oWB)_r>JdG>#g=b$N>&%7MG!z{HeOkR?M5t7E&xzYK)nyC zD;DJ-{Y^_%LIlqqu{8~ZH?Ybnt1avUV4l~tS)E4Ql00E=f6SB&ywvcl{rN7jT9T++ zEbKX8*?}2rr2c5sur^8i*5l4Fx(Wu&uMy9UP6<@5sbuM*lLT%js-YnN-eG?ZDhY??xbl1B{stz=5lJ=sfr@IQC>9s}JW5h29r|hu5 z!;+wPoE(l{S`e`MGM&9D(^-5Cs+kCLV_2$;t+|aKVF%{PMo<>z^M$^03{vE3rgi^= zDod~Z(qzFp@uEA~5Ylw7#I0u~*zh4X2*WualP~@`Ko_WeHNye5|LSKM)ZRdfsh}+j zI8#>}w5H#XXtlS@Ev*X2Pv}07pVej;FT}cyB zLmTVqB0e|6Qi!k$*<)3FVAN{LSnjZf$ylFX7lPOZN~9Sijh-qQ6%Un*^*iwu(Mk zx=MZBB;Ix#kEq5<2FyjovLgl7W<59scOQy%KNGSxe`}I)#yJC`MwHx4&$(j4PUpXuvU?$U6-2J(QC;~vS) zoa`~iqB_xhC%e+LWC%IVo=DV_GUBuo`Wss$U|LA2^3Z}kcz+992hGD{wD<$ekhb>9 zNkVAOlhbX!U@=ULAg(aq650`c^54SobJv}Veu|6oO}EmN3cM+O#+)j0eZV?jJQ8>d z+KRIvP}|<~7}gP7(fGD&=96Rxq@SE#$VW&2f?E0vxe_bWIX4am_DBTBIX00 z*9^~5-S=wU%fjB*CRR|`nvtnHSn*OA7s|>GBw+RU`ZV);a`62pUa8)-58$|I+W<<; zD$Q=)n{y7rjyA5UU^-p4dp{yy^L1_a>w)nvVz!R=s+Lnjsdf}sxm2Fa)y>v_20Xn1 zUtiq@-5knI3{lN-dI0WXZB!3lA~>Q40VV})(|Vyz8uoe4X;Z49wwxaPHsp-xgXcJX z7?bY9QMV6&rVnG1OFq(pV7!XEO*CIWKhyNEKL<5_4uY)Gd}r`&wr51k*~e))Ut0EX zX1fhPNyGUO53|GCHL10$l7OtR5bpqmBENwZA$#U4L|n0p*+sNx<)^ykNbjd3*G|%7 z`3;8(>WYz#8*K>>OWz%eT>+uKxm=f9KUOy)c}e9}w0y}i>Z<^<-{pYX4eKOjM7IlO z0UEyC=wgtvpWs9K>YHBw({-f^-f0wzRH6;K)tyD&}ls4 zgykK)h7C=8MSAC4+4^!R_XHmLjuc=Q6jux=;!n9q#MZQ!^Z=(9Cc~?ktL(eR2IE(z z^qq&2WAu%(_UXhgl6aWJO)4?IG<$;zSUb$uv#qY3L*DN7w4Js4b=}&E5>9jmz20^` zeoe}=WA}dXj1%LtdAOhs;dtqc3 zkem+ga5@14yYrBDt3$p?%UgAGFGL*c)~kDW1h^d+@U(|^+ZdNZeYS=$-AVPp|H-!3 z;<+Fi0fsUGffAYWLPIt)vvqw3Md;p^>pO(@Oc?%~jE$#%|4 zUHulc=s8X)#jgp8<@h&q*1@{3R+h&4t-%k_t9RyjLh-unuyvnbKBTs=uXXDsFcF-K zZoO#jO8Yxuc(`@KfVOi-f=ouLOYPE@%TtX98<_06u}XA?khvSO&9g^Xu3kuUd{bT* z^6n3L4~4uREF87pCY(d1IW_UCvOR6=$neRjhahH$&H=XDX0-%9k-FHactaM8?WJ01 ze9sFtz898^O?6nkAzydh2AM#pAsMDjp_oBpCp+8og5g7B zx&%sIW+2sNATzJk?*5j$&kE$)B)~!M!xp_|<;=~+`t{-ka8zW}>F@AMn9H*>oHh8F z01rzcYY<9pc9$WCWkBOFRAW6;W4&T+71Z++nJx2RVcmZi+}bk0a3Rl@kY`uew_^#W z=FisGNP5V#*-iLsJ)XdDY_$`U7-ZM(dHi=>yLGJm;bK=uVaROfzx=ipF4Ts)`LN=$ zegl()=MCQr_0tV+FEb%aK4QOSOW#r*`Z-lBIEtHDDFe;TTOr>b&HS0Wq}-WAs#N2B zS(dc2#`{hU@XW698{WeTg3|SIq(#mWqGaZoEX)*4al5SEn)ugBS>I0GyIrksKkNGe zD{9%YylSasaeW`Mw*6ctwqEtwx_0?%)IjIj&grOX35=sxebLoIyZ8k$R?0>$mjx?R z?uT5Vi@Tq>Un!fKz2Ty=$6QnfV1v!FL)^2`t-}G)%)iP`DA%n+N}r^y9p8dS#5A&U zaEb#$Y9oPJLZGZYA>U9v0=qqiw_onyoHJpJwsvPr;c-CE#YN)<=2ESct7FTktu38o zI5-Ff5xM`^(14=CMC@znv@A_$Ha$l1Yi;Gih_zdcMlng>DfS-VTd6kH-eRzPJ<<2r z>S6EJkXZ0+Vf8|Qn0B|N)=>@-Id4O#gAMj%C_WFsn~8^Bz+z7*e!(QecW_Cb;d{0I z3duvtNqFzgBwnPW(8Q%`$lH@%Zvnk=F8s9@a$sg)P{E(J0;wAJw4jR>+EvFG4dXo7 z8}{xAdv}Dr?Z?35gd8L8&(_Zgds1pl-O>H*#ez}iReF652lpA)1_xEX)B>}-*+i2^g^J!p7$bLfP;2QvCfZPq!tC(7%LE!oFAN_N(;BUwH+Nn6Ob zyY88fEMI$O`S{l8Ac95*5vWrnlxpqF0!g*8Qgn;XXiX2P?SDvZ|I1S0_?Ot~J#rxW z+Lq*Tc**v^jI?eyVUKKoWJfQu1Ys|GxQPm~vSjKDdy{)0gcv>ch~6i6^2O7cec#89LW2J$K#)a8$89_)Cl_WLj~Af-*wqiE%>}W;m>JNQJ0b*$s8M=gz$sW2^Fct zmudQGxiRlmk{v~=qX3Xz=`s9E0OrW1)Hl`3y2)^xSM0;MG=A4V8TNxToE+zHw)1gX zL|zdfD7xQFWk)|jccK$R*0lwp_!X1wZ43s9V~z!bizG(Sg-Bwc?)5J#jAz6qqBSY# z(hH@h9mrR}ASI3`l8u4OgUH)nu)hw&;>e|d5K+CQu}$XuQcDbBkT-diE0E!Kf57Fs zsRCycK_q4tlyo0LtjJO`krTNt)f2gx|7Qrr+ARJj@UbxTTdZP{a#a!SG%fz-CciNv z-IqzvNnQo5i-U+tlGckAXF&T!cira_WyD96I6G6qlPsY`p|`*e?_h6k8)aRf{Q%5`@^yg1T{v ziPIi=COIL*-!xkXbjzf*+d3GROXwx#iULw9@8o+kn;*VY z1pRQno@kY}E+)O?>4WIl^ejw)>|V$Pe*ySgU4VZ-_h>31$~(R}&K&4nNkX=s%t_=r zZQWHI?xH@Mi(LvnfpR4_&A!x$fvkZ~yONj-M9~s44JsWMD4oWC?C)spY`3*WT1#H3 zZxDG=5=T~Q$!H;Mubwq++UGw621&Jm|FW#*0T%)*OI92K2l{CP}!= z?o}VuxTo7ssR-A;*beq%Dl$PL7udg45%ik4TCsnmBFuESbf*0sBJS2LVdNWYt}+&g zh~{p9Rr>CizHiy(^!+wAS8clQg7vkvTrk(xo}{<(neL++TU9tpTN#4-y3;JP(V zBNyFd(n|0iXMgaXi~p?W?YC5TE+5uogRPo4Q<|`PW1HkOvOnA-*C*$KER{f1`cSv_ zNUF<}uFg_LTqwD2r&GliYTA#Kv`|GcCVJ%Wu^BSl=jwF5V&VV78+VI`FhmUygj(cZBu9 z-arfuN@xp1gUPajn)Q?-qT+K9lbn{^0~J!_uHfj~?sR4~osm`Ed+7hvAIH8Tv|tFa z_{N2ydHIG-`?Iuwq!g2XtTlR{ywOQg0M7jMj zMuL?)8$!>x^bgZ*pU3;)coFflqOvXw$TTDzvz#AOeG&K~)iT%fH)TG_U&zOz87fqV z?*r&ch^E9>-UB8iG=h9OcK((8Y*>NHPWv`W!ny)&?PJo0D^kO|2YQ1(MGtYNJYPKEkQBA*8km3F+>{xPPBBD6vT zqP~kIlx5D7&NC|~Lc&TZBeq78Ac>BxdJWHDrK@flxPzMehTHuDPfkhYXQZoi+xTeB zHC7Nn6g48ulPtVn$z}wf)Cv_mPgcUwM<$@+QVgRoa?z;94hSCk_eWBqHTP4II}I1e zG-PJTe@xY#`~L@3Hy&+Z^0nr7seO1VI%F!G1`--zklxSOZ=@P8U~Vn-*VkA=SiAch z>}FSpF4(190h-n{gXDq6oB5m5rSj8KR^+6kjm=VO?L+dD5E9skUwq}H_fxAzeQ7wH zubBgU1x{Z=9M|OQZ!H#)LX*!XK+3(oEVL4!Pwx(^v6#xxKD48YQ2K`ld_&|4SdBuZ zaw8z%ZI3ky$w>x8SGuQFA3P9K0}#{OCRVvYHEGf$LJrw|h%&S$iEC@`6XF$OOsG}u zksaotf@Ra4M#BqeGlU?Xdud8m?tnzO0740XP?m^x%S|=aLqlbDGa|rOq{5FVdecFL z+PcQ23@@~xAB+gGfVfKt#pj*}y*~ze7a*?`Aa}7FgyQEm&Ycrlq!!&iIs`ii-W<5= zd{_Rbt($wjIye1xHhpt3DNTTD`s^=|Ut!T#mmyE?v+t7lzr>>G=h4o~p$C1Ff46(A zHkGa>B_uX-FDR2t4Tu9y{P0^m_`)|Lm2Gbq$nA`^{+vw6qe6|TCRyRT-{P;{u(ZIl zc$|Nr%cC{FPC_`|RO*-ZVAl5XYo8K2ni6YDtw|KRm?|E&Uo(q%HWwW=6Q!H$r1!2U}$bBn`0tx2pA%v35;3O9cul84A?W(qF;1(Fds zDz#N-(-bM4o%}?q!#sSIW`4j&Hxaeat`twUGG*%1PCkjPLjfHKb04W&`UY&Y%5VJQ z<)0awDaoncJWyl39oB+xg|IzCE{<$eZ^`^#(JMqu0{*KCsY&i+Jz9)GjV1N^(s$pin)Xpa6 zX8ZH@76?GWNoNY=h_lFzk$H20oNe}a@Uno-UciP1{k)PcQtLK@`=gcG$`_pEO3`Lq z8qY1ylv^MgQh-WkOj)dNvs<|uq7K%-O2vOtvCfbjYTN8z62tnugoWD{f#!$Ywad9O zlsrLT)h~T)B#UJ2Q3c&8#qdE*F`^lnT3K@e0|CdKo%}X#-a!->pJMO;6i!yKw#~la zfCH6N+<2*qTR#walr%E=nD4m~x9iw}&)7H1U-zHjp%TY()DMPubGZwR%px)(tY{tY zGDw7$F{+{u1@89@2r&&Ajv4DS$}b5_5kiPo!Y(H>mTBEsf9a*SvM-bn!hT$h-W3xJ zY>{4yrxtUwpP>y?V9K5d=~d%9-Bdx3=A?Vnq%3Q=15?Nlc`xmW(qe&8Cay${`6s1i z{E9Ejk^rj-y_3-5f0QhMgx|hDz)tCwo$?#W4svRh1_0^x{HEFj*dLV?vyTfFjsOUG zyaUOX0Be{y#%~`Nuo6g}LJL5@+i)#zw7u?uE;BrX_O#~!LAcN`dirJ4kQbENd;qp9ACTcLHQ{pw0#DzC=V?tCILg z`*@K|t3%iil$?9#F>vb`oQdvT!R@nBWywF%aQm$N#9ryV!0mJP!-Pk{?H3Iu+J)Q0 zGRm}g>kHCd;C7yz>+|JYU!)*-7=Gba%7WG&B_8?Gqg;*|@B<-(c`AIq zr>Qj(xJXe~OJ+(2M?#|ybmT@bAeoiR_fq%!6!hv7{3tBcUf4J{G^^g8CIf@k60CC9 zHl`<=6H6teafAG(&nxpCrX;WPj?6UAH_Tp8{Q*uV!#W(c4mj}P?3YUROFG`cNpOn7 z)jX`@NgC!6|KbyA^VA)*8UKJ=Iu|ptl5o5_TNVUX0(;CqJ2u+WL1S;$j=A|Z7g;)^5d2oGj$DOQRw?+)JG#^zM^kA7DGlE) zC@>a$saQ!tPEuZx^`~T`aG$4N8ZC$EMn3zhUE>$w-}ZoG)HV%F5{OsjY((-`&s|mf zGmt5`3uYkTe_?auN-%LP{&>g==xn#|l#~V4v~?rWpa~5|Ja@Jss@Y#l2D2l#VMRef z^i$f}s(&i@WMz?=RUPH`3~jB4pJ_yM_&qZ@Q(HGj{? zN2LSF8)sEtRqyV@O1oY)C;;;lv(eq4oo_9$GG|S*U;yKbES8^n75gfq~124gB zuq0M{d9@dg8c+GX;RUTEm7Xx})N%H^*8&Zjq_C%cT%$7m6}>@5hIla^eCa@WMrPpf z6Qh|O;StK=cmzX1{4>acWs@vZ*ewI|eAlomS!BhWq)`@K+FGR^Fyc35x7`0-H45RH zTg>kfw*S%xnXyUuvuvRbVoLr&5fMg2b4sV0o21HYg6Dx~*7k1@ahMi3fJQ>Hz*YB0 zzG9f0gy+wSUTY|hTzF4^MarH}<-&KnG64m$&|^xXkdx}-*B_Bz!~p#GhJ;=7--Vf( zbkLqgX-dv>n%S!)g=lA-kAL2#J_?7}u&GHJ7Ytf%nKG2fxdWzRd84K9cd&&qvxH=4 z#?mRmhsx4l*D>;I%p6Wv8{RLpjPr6ZK=Fxa1}JV5Qy;c+30v8|XC}meEyTbNq$}=Y zl*q3lr#4)ILngs(8T{2Sb1LUEz7Jm#GvO6Lzjq5ecFDJ}`O1b~3`PQ;4!Z))o+QZD zr;Y9Q_eG|FB<{pvG3p9Q;!~IUbzZ;}(7H{~*Xsz{ISL!-kh^PId*tZbZX0hqM`1T{ z+b5CXf3lxgFz$;v=b`IcUUtMOk<8%BI90xl=HNw$A~ayBnd6r%(AL&@c=vebCzs6Q zW3Im;b@GzS$yYZo2nq*`D<{jaL!8tO{Lz`srk3B<01ImMQ3O^`$yo})5`r#2k zMb8(`g6)I~Btl6l?udhDwaX=~*`T(K z%z&77#fvt|)XDonLOpJCX4}qFahEk8VqTxI7edQD^9+{3VXPh3_27N85Na(uiW|`! zPj}_ygZtX{Yu{|wbWa;s(8srR;7|O~A`!8OjsN;b zetXLe-1=$TKOQSZrA`DnHL)7flh#_GedBfHOSdPMBV1R920TEcPUwS7=J8u?A_GRb(J z9G(m(i7VHkRIk?j39>8C=|v1vW>~wM)e||U(Y8NV#+{iDQB|6){r^9o1FUki=2~Y| zk<&-W|33;Z|K2o>0L9_Mfsp7)J~vEsiIkQpG_Z%ZUQj|IZqR{N?caYNm&Lv=dAK1% zW3hiu*rL#)y@l6;RK3FAU=vj-l>p=UU?XHWd&%0qnSJ-ubiQ;ar2VUv4hK0SrZYD) zW||IZI1(^7lv54I?|rIIF;y$KrQ=1vrY@taQGF(dy^xpSj4tz0wx0ZR=m4ibLQl%k z=f1xHQF-4yK@H}1X-71gg?4o(jdq!mu8LchAz9F!h^3}Ebi~juJz)5bF1Zy_N(@?B z%vv%KxkyE>bRzN)ON)7x6R9N9Y0f1=+8ifMZf+T|`{xsDF&FU{XS^qjXgH|}Ci|`Q z211GN+@?}LAdmAPJ}z>!IRy}HOu|>x@!t#meq`8Bd`A6BcCdlMmk*L(uHyFE+c}(_ z1r$B4!*f704IdZkK563y>AYM`0-c1BuPFgsWGXh&YF=bgE!?4wpF!_ax z6|0w^wMvM#id_vGTKFx{e$Pi7}zJaB~A>*bAiVAnVmG?}Z25HP#ata~bx(($m)>5r) z`wO_Va@VWr>e{=3-*1hqO8`vqk4S9Ag|<@0x~7TL8xx8=U_B(mCAvX$Ghz*x>I#0A zOBK*s2ZGk?a@IDTlPBvEn@-rslewS3l`gH>Lzxl(uGucoYRVb9*ddxWxvB@pe;^wP-Kzi_N&?S3;kcD)J= zS+-d4%?niiP_15531AtpaCZ%Q9q7!_nluu)vN%RF^9aeoHi;?ZF5`fQXw#6^^ezFY zO6Ru5PFrrZ;FB?X_g;+D+qfhVhP}OKys8HCFjKtzRqRsy82TiOn=c#RDy;vy)O;bc zl8sYc#5TJ2gLWL)hZbOGEnfWn#?JlVk1r3smx65zSWT-6dy2CX-(xh#E2K)q^UftZ z{=u%0{0-f_O#M}9=Cj8uF{+sl2Q$rFKr>12@k+RD^pH2*MmKGU1%OylH_$bXs8+qL z8+~y%;+RjM9G{BK0O^r}X>9{Lr;Q)i*5V2KUexZ{1#E=9FQVN^VsO-!uQgATX@yx7 zM}_VSQ3qK69%R>;m7)yR9{D@w$}*r&Dx(?QdJl{Hor&FV3YZ`q^mQ)Ix8CEfl9f^<)Z(IF5$B$dOM#y(QhJz=anZM9t6DGLT!m0ho54@VqJ=u1Iwt~7(xXz zk;@e%-v`<~3F^8mo*S2GGrS)-gA6l&i){qvlxkZ(Y{=M=uI3V8=Yo}(ept6?90O+;CblTMiwa@IOIm%NmC zPmL^Jx3;%%`>dMLW%HBMQk7%)4rurE$!7Hygm&ri?S==S)udIVLD`f^E2w%ny z?nrXMY#a!jsXzBGGWC6AKF@A@_K5SKu)MM&vOnp7aP(zdZx`90&`d}$q^CD_*we`F z(4Q9%(`T|AD3!qp+Ip zQxCpO&|>^Z=$D|iH(>4OMhMm!2ZXu{@%%zXE7$UW(5lBL=Ni7P+T9;ATnLVkZ)`o6 zD92hq5~z^5@l`OZqET&LN0zYly`@y?eui5X!KNIT<;Z=x0`pFdhbscyJN~^gOg0cC zmXQNB)bHJ_h{)usREa(7e5qKSoYST8`1h9bW52Xc2x4YfYtAK(4SdDB%>%#*Zaa^fbj zg-ecGFF%kifj!C+uFu}OQM?CdM*{($GbfRY0Ia|!1z7gWyHEg}y-6(aamVt>KNCAm z@g??2gg;WJx-Mj3pWQ-dyH?)DjLAQSXKps!hszNIs7}x*y*T!hYKjS`wMTiB^4QPn zE=MtA3R^Eb_wg37>$cC&2%v_g0VCk3q1#-N2$Zs9_$_Q-4ef8X%DXn6Lc>V`0*^;JrgugnggwX=SbBg=Nzndt1&_&_j0 znfl&q@BK0B=Y37iOW$x!lq?m8+jOMj8?^{V->eD9f+BzQx8D$AMUc`dz~-=}nNl4!p(*9r}}2MUehQXBK- zoKp7dv8$maGgmO!T3eA<^EZ73BNVGC5aFx3)^O>sKyv2hMcf}9R`sfLN%&2eKki5? zJM6Ue^*$W+bR&}~2s%Fj&sGG8Ah{LdK3E)W!NS4`ibVLPKSS#@aav*)pgxQ|@T7jX zZrA@0P(N!#5L0jQ3e<|kFkOACQ+>SX?I);tT;E8lXjl|vHHx?bJcF3z;p|Ao!?}_3 z%xo zXU=!pa$YKW7`DNXmd&9PwC34_%xV*%C4%(oIif;-eUYWWnK^&wmVSx9UoO3lmzzqz9Kg4^(u~EF!YR;Vis+){{t-^MN=pzwh>boe#CI4L`ij^hI;MPG|@IQ8FJ#OnE@b` zuKUkFR{*)x5qWE}&VS-v8KIU>lE|+lBL9><4di1jV`EYBzLX&!%Smz8B`C)1Vz127 zH2s|gc^Jd7A^FXXOc7K2CCV16=;6m5C@7=ygvEDeSY5R-yK|i7a&F4N_Spfa$WPrO zA8w_{Jc{UevY}yZ<=2U*hkEtFw|4H2Pv8NA16uQyq>61$3whRGbM@6%>x1v%;qbkw zo)6MDc`R8vCF054zOi-xOu+U}u@(>*=O| zOo`mKX{kOe;WJvQ|0%!ITB?tLV4}~6jgi#GB_GNJy!|r31!Bb|rU95K8jh0F&vGp^ zH#N{d=Gqwq7fpGc;fn*og2Kod@;IR>pCv7KVJyh?m7@RTr3&fFE*^f7^mDD{1#r`T zwef!7e*7~ZNi0!`54wq~r38JGfeSq@D=PH(gMbQjxGcFcsgcK)Y2Y#Lh`E=#Xg2wn zYF2ALm%Wobm6Uy?*f&$BKv7c*ksBpqe^LIX|M{<;gVy*R_P8H#T6?VvPC>B9A?rQ| zqqG7_1MR@l?^w-&cAQ~fWt+t{( znor09DcN1?iKGU+AvfELfWJGNBbEHR4{;O_`mC~vD*6ONNEA!G@vHmo2I_Kf$67uM zg`KDRVM;${dZIVru%I7JR!hxZ=?5;VuPs@~$>pP&g}(MWLC$lT>x2;6q+tl*H$3;> zMrpJREZ^&bnfZM~P%^)7C6@+>@i15Lb>XLL`ZpqY%jyj7<+jEnTiI4?g9oCe3q9T8 zcyKRl^1@h+&HuOf{|5hGml-(c4DL1ENFFl(T@tD111at#eJFWJ`iGlD|4DgE+O*wT zrIt6i43a#>nbY;kP^%~*Pe<_SCLWmKX^|lTm2dqQb7f+Kcb&4+c$F;bdwRK_8D4LY zP+sTN>GkeUqjUuB3U4$s(1*uFCJVl(b{bqtZ3)@Yp!yQ$%el^%Tja~<`NBHw;6-re z*WSe^XSE6l$!dw9P%@yp`~im>!M|4Y#Dd-SN+-5QV$axjII)){_Ne_$C&ueyvEUQ- z^-k;!iLJM zz6n!{bjCkyyPh~-8WhH35=91QAs5Nc(wap<+4vpdXl2}@|Lyq$wZxi-NI^vuEfeh1 zXID6Nzp>=FbwA5}AR$dED_-J4j4>Ktb5~NTms&9id63u8OHX?b@FX@@@a0q6{GXX*~eT0Y+3f# z=&7^Y{*yAy&e`fKTkRZmax0jmt$@{PFI_3kDJXo!8r3p=TC;}He2#`3lmWc~wJ{GA z3A*^vmBZ8qDQT3ECN%^BJk04Jf@N@H(~10w!fx8YtOCD7c^r}3NAaS8MrYuEY=?{x zV-EJ(Qfh?plRM#lf;$tUG*mL4KhN$}K!b5Q1B9 zUgndTtzj}mdRL+dfrZG?w}W;aY4H_Dg>&Yx=fssdIN_yEXBOwuQD(7FkpzZA58TFM zEMm_u-BahY{IXkzU_dyZWs)#>WqqaPNzO>;{>~ZcW?qL*;*)8IeMtNt#EZP{hc)uy zF%mvYg8dg_8C)#^@Uq5r}bXU_|` zg%_83wL%Aeiz0xZL;pElc=)$Y-^yq-F`e%K-ih@p$JI`bh3-0yksPA8!a`>xPK*?~ zqdklKi3FXHmFbq=L9yK?O#%-V=}%qB(t+{mHXi0WaRrKxqfYw|lnZzVM0VoW&7(tCgg$#p`pC72aIS&lEnt0|S%geaAm$PlTWWv1acJ5ZKH|b=6 zYx%d?%kR(0ieG_uZ1@7{zjx5^V6-c@fa6!sM{B%P_6TIBVZN6mjg(2`HdpFv^@;$} zXrj8<;|-Ei3H=_N%JDJ-Pe@$QVLk-3Z`ansR&eHIaiPaOftYE}kbJCDmwY5tuR;NE z;~PIZB4={b!>R&BK}l)1Xr?1%r5dN%`yOzLL{*XC0c~xx-`QzxZxtwX;^~LR`5<5o zlAywWR{^_gn#kY8*RR&}X(?UC7-hD2pp1>{-i2`|1)t7ZSxp1}o(r|I;3|ASmk?i_ znG!yf^Ff?O`}rVFqicza)9Crc#ZmNaRH8(JC(D+EGWB|B$WG+MTW|>ZBL|3qQ z;Tg+hA|GOQM@)b-ZgB-!V$X1=YPl=`W^40Q&si8{&VVOd)qf*T>cvG=W_3f2?@3ao zKgWQr^~Sg%!|j1;z8w3Gz-Jj=mhTK9Q+k9FNQJFm?4waoS+`bD)hpOd=>&%h2=2zUYbS2ed5ps!aTIHv*+rAY-TQ~1573!c+Zw&L^2gbBITV2HHHLlP+ zj2qzGtgNTA8o2jAN&PUYO}FM}EgZW^u!qyS{gr0vR4V$}VIQptxj9bePu>YNRYahf zQpx~<7Pq1V)ZCmFNgfT@t2_V z{hLOjbieWn=NPnFjR9&vVxw*sA7HYp#bAwhJa*8&XNM`r&L?Kww*p#9IW-9!%aD7C@uUoh8Z{Z?{ZkXY=)+ViSBhEVf zFTbpj6S2xhM%Vi|c53e|Y z1gJSH)e8P9$Bt&Y!e#`{lfZoH@=CyOmqY#nMEF83+5%agL^EFWz|Wl}4Dfi4=xCRU zYhGC$5uB>kO3R}JLPo%m2m}B7XTa|{lpH2WguYd`bZVhLR#v<82d$@x!8HFU%zj$l zlrQ)E<3*KJC);WLdcf&qXHFt#4Z?X4b|{lqURODvQ(Q%_{awlVE**n18SCWOF1>Eg;XPwVg$y>7-&ib0;Qklx2flj z6ZOHJ+zF%J1JwJ1l&Exwan`WJe&-|+5z0{rVfo*<))&4&uGQfsgeg3MVcQSly(7IM z0yKq)a2nrfVTjHmppQj^D!czMyPrjvYVEd7taz#5iT{>)>tmrM|Bcrryy6N3BE3x3 z0f1GRuW>S8vG|zGNAa-{p99{Y-V9o?ZJscYI>8@|foA|(qo1b5iB2W$H#wCc@^nGW zZTT@OQ<~x(_OHn*3)W}9%-to6tBA`O!h2(u` z!V2+mll(8$jC~!oCdBjv*UsRMn~>39g}b+)?M>WWLXvrGTEn=aV&ZgkAdoM>rsj^1!2o3JNZoUA6CqrwxCKEkBU%;ha4 z?wvcUW#5DDG?B-k_?lZM7L|W>zue3h`~j4%rgojX4&v7n$7`=eP8`1P;A6Jv)n4ZJ zviRgT$(d#Uf*nv;}L%RCknK_;&$l;)Ue5G#Oa}L^RlM}<;l>~oeV?N@LYgWqa!ev&w_>k zoN{FD+X6gRBNq#-KBZ5!Clns#RvPHG&%TmoMEe5@V_n3v+ijv2nlC4F167DneH4Vr zhIyF>4(zYfBX`4$!e3ppJ|2JNGuvtWRsE_O;8N-m{5AAAlO#4gY38=UK}{u2wo~ez zY&-uy+TH{{s_J^+Pckzwkc1hKXb{mLsDZdpgB1+uyf6cAaH621xTDb&TeS!?fGt}b zq8Xl}SgEzvw$`@VU9DCYw}dDOMA=dmq*h$o-wWdc*s>|i|9kFzGm`-J-+%ute$2f0 z?tbpM=bU@)Ip<0?8C#Bc9a8RDB^NjqJtaBrmWsL%uScjw6R(ZrW`3qCs-g(YNTD*L zcob+sW0Z5O(3#-SugkfSeAC1vLv*r~2>Rv_x3irSCMi|vJll)=cA-0`;n3Kf?tK48 zfU%73X6R1lSD#0qiOP^3n`=QF72*N`VUK8;?0VgLFVz;TRtw~UiN)$+%XKLPt>dZ^((l@16E`YlD!BM%mNKajP*>WeTk zE^yvkbIvDdMY@?#z^OfI{{*Fh4@QzWm(XZqUi3`)U^HR_pqWo~WBh>gI4;FTujJfE z^bntXh7}WNj0?He*>gD!9q^g|GS(2rv&SE;%t>}^^c}13+aHMPhn7dkOQCq~shR}z2E&acn z5?U00@f|%-i7%u2qfXa03aOrEUr#$~3M1CuHSTls?EAMP3Bz*3>AIA2od?tmOLWz?RUUD`6(^(P1C34nfXhWwEX~(UP>w` zAu9=2Ga?-ra?pzyr}rdikXXk1>DgovXG_@`8e28!sgDr@|A28_OV^FbX*53aVd}mI z9xQvS4R-O-%4pmZ`Q$oq8X|idwSTxpp1`t;*ItN^hS#rF)|8bw3689K2x{?V1L&UFj^J~%Y@6J zNcY`!KY5ZD9b!X4jAq|GqKCn8m(-QwQar|s>u&ifG3)RJF^jiet7vhp*}KcEZDXa# zX66Qlq>fFn6Ik^_{cixyw+a()lEjfz$zfCiat=e>V7fNjmpvrRjx7L`UYN90G)eLb zUR7=$4eRvXCvq<_hYfWqrTP6L0z`Uar%MMh%B>rha3chbJIF&Y9|AS*ka}|SlvYnY zQdbdDnb&+#j>?%7pNlASq2zXT`52M%7fMM_x37G;kl@PWdS<@Tu$M|A`FvG1WAz{ron7nbFT*{+6bHlvMPO!rk@r`C31Jrq1_m zC*OO&?Uv8s>P%Rk{VF*%cRBE;;_62nFI~z)IO~Yxr7=;eOqTrEX<>f%7N7`%A6n-l zJ$>m8>48#O6iCV3p#qg`d=NlfO${05t=50W-&EMbw9N8%*aFLciY))*A>!5aTMGrq zS&JAG6kyu*-3Y)ivJI4M$fs(0+U?hWqkAz|q_bS990?FpX(2*07=BJWq1b`~oYhAb zd4?lMz{oqUWf)QF?RPQh>>ml_ZY&aUo#U~c{IR&`rJ`jdDLOhx#Odcq+d`JwO@v8 zYLWBz9SYh{DDl1BzK$xD!FV@dA^`P_4iG79fzJNQ0~)W-B717Kpecbw#PrJ^1n@K% zFC{B<2VdggPy`uday4*>9kC38L(c%qcs@m*Pv>E%JXG*Nz`)?p;XItIqTO+-t;Ew| zLRkc)f~Ei0TML`Y7Hbu@Vge;6@&?c;r+fCZzfyQA_Q7KAA{5f{9DA+dRIu zk+pi-y{8$L@($nkG-K%FoJ?4o6@*?~3hn%nlmUi=5H|hU9JlBkHxh-p^GOb8{2I^{i!4PHzU+Ialt0R ziD+Tg?j>~@Mi!Q2Fq3gVtq6`#R`jY`Jh`nrLT%NGsWmrrMFZ%nSGH`}QB<(v=YvdVUQa1va}^`YtA&4kn45Ik97dy zk$3sWdR2ntj0`8yg5*}v<^tg)K5zrW2IIQxuI}8q9;V+#v3(+9;9vMgz2Dc9oXy(s zi>^xT-_lc2YClYeyHPqYPwS@a%e-U}wjrlZu~Vt}E?slw6$*WX9ZB(Q3qxqZ5fe*^ ze4!EkBFYFa5$`EE(R_>&mE0`oTP!L|l-WyRCTO#{&!DO55ZY|#^zZ}nB`3IWIZ|@l zjZh2%Y0H6PR(t)$eSB<|kKg771RX(1ts8MZLbJS-q;8t!&Gbbe_+28Vie?#eQ?$&< zlFd|<;^Q(^1b#+&*J@daBQn}$FP#_BGTvOEINDT;UCU)0hS8v_4X!tW#&FPe_B@g~ zAQ<#s55?F{rIjcmb*dzDTOc&Fui9&zbFW^Ee|ub(tp?EHpcOUD6bq8RolFWzy8OW` zUmtJ_m7glZvOFWcmZkFIdm`p~kEvhcPw`8jdlU?!LMj{mzzpU=JGEi3@5f+&OV}DY zG@SVEM#H)QyZtsfu>X~mP9)}%x3ym6clp;^ztnk>n5`)Lo{@c<@d|mla3^EW>{53h zV98sx&sW`wq)@RBa!f``Uw-M@Nol!06(Ft@{V8XaN_J zDpDudTrJMUmr6_<=qIzy^7y_ev&yJVnHW$LzT2&;F6phMuS8J2A&6Mi9UeB4kZ71J zkP{_^%NTZnHaz%ETu+6#&VUNwc_U9Lf(Lo-NibW9dO42JS3g5&1;V0huAIv+Mhv`a z$1NQaN6E`-lPK~b;*95eXJv(yX+*pgWzT4JEoAfx%tvQYH&;Qvw6JGh@(Q`Pv5b#$ zyJIjp!OiPnUhm*l1Oy&s`b51_#`_Taq$h>CI)Nfi{@KBFLf!Ca#eW59wcd_zFB(%6 z>!U8?CTjjtXr|cf%5VN*7Z_?dId^=jt0~OH=;+t&+ZOA)1EUkQkUak`=n7|Ak)hKB z2xoFrcqDnvP=d=`T^hD#m4&SjuWyMYJ^#Ff8zNRtWg_eYcj+o(FJ-PCR5wJVRw%62 z@|+X31*Mn}cHEZKA)g$Lj8;STH4Ku0v-6oIyel98Ms*`<&BRSZCk4@R&S0Vhk#cCN zEqzu9QNSpbq`cU zvpE#JiPWU7sY`mQ*@81uVr(KfEtSFnaz+NzgB-z-Dku>kO>SX zRti*&7iHogOr>1kDYF-w!^3pYBX+uGHt!=B2z0`Ht5;#p#ic(Hmps0PD<}e$__Ot_ zEN4r7B{xK7g4n#m;BJt{#2FE;$3*S3C$**1!=9Dmrh@^>h(yTUvEizZ4eNF14i`P^ zwkQ@^u+DS|cr-23-J4lRvm2$bS5GXr@TrN_WUr!)YgmE_wbp=Vw1V?av6aTVm~p4R zB_s1K6w;KrnpUd1SUG&_n-IKuJ$XS_1vd?*IlUY(&6fSuYeK=ODfTEeVO-sx7wU;! zLRvFv_BE0qNA%Kt$m4YNdvDgaF@oPDWKJehoz-8XLljPN>izwXVNv$ER3g&N1ybW9 z@+tdI*7xD^CLsjoN`1nYgdB?T@nEy+fkk|rJ(`1EXicJCvhX7x?YoKWs-PNXUMJmT}#K4y%|_ zPu!u0Z!+R8!I2n|g1?NXEK-ZoM_+YdU`4>K-2{@FQ$`dLS^If0kG=g13FwWzt~53- zz3iQ(S*R*N3V=AMBLMtlFZX^+WU_r25NxTb=wLREH!$)Qe=ctL;@-ffjkdwvuX6QT zss{OIXn60onu_LeXn_m)Q{=7Twm?_2y82KuidWMIPW&q&@90;JDE$bMgqKFW`#Rn&d(}@-_sm=3vG8 zUy!=3@a>22mEVK&-KIyZ+k*AT8y zE)(SbvRUU50E9>?+#RUG%Vz7>_lNliwHa^rb6o^ihc$6^;FoO(@)LK4tJckYSGqTV zYueQPmB8DL3Hl}ZdDZH=xzDV}Mf-cs z`i^Cl@(dDft=!Dt#Z~hN0Ro^FS4DXsya`jH?(B8K77{8y5g$R3*l3mgUY-5ks>M9$ z5Qk}EqHL_#tAcNL}GC3N8Xx?PjaJ3Ho@l&?oOygqj zqX1ogm&q(x>$*&ro}?5qZqPWJ(PAA!&_Byhu_Cc5>J?0=E;>D38K5M6lI|>`I~6%KWM8Y* zc!4e=r@}qPx1@?sFBp?QrY;aN8DvEt=?3&-~znlsh8nnu%^ zXK#kiSP#yXnqmK?BGyUkN>bBuoBb5MTO~p}N%rcUN`Zc|mTCiC2qCiD8SIZG)7S@P zMP)@|`wV&S`ft%n+1}V@r125+u9c(sB7(D2qk_p@DOPE%D!3de zd7T3uKA6sq0!j*3*VWKwmw0wN<|E9%@xWp5RrG4noqh4*MxfcMJysXp*$=1Y2?Avf z03?yioAXmrsU||!>&mU@(D{@sP z@~2$!<}Z~zv@Z5me81bb_%TY6M_s~}tx`^trOLRjvP--KRlDo(+9khJJ5DV~TdMXR z(ec!rGJ;kwiDSQd#UjbZ1fR9&yu4^ZA$Y$Ujp73LrhTbmqtOeZt1Q@uBjs)zE7?&j zHHyeOuAk9(b>BTHqjB6Z+;dopuf1WpGO>@ti3{O%?2Pb!;mB8RKX1!8N9WQ6ubCg# zm8WJCSS?68R>DYvFHnzZ}F9aFfhMK!uU*4^o<}2dO;NHr^#}gx0%nMQPyf} zH;T&s70nfU4P^wxshyjYKtaVu9!t@1dQ*~rt_vH!zJ>~CQL&fm{E3l6Rb2IQQYX0y zZ^jW}1EUqG!05|0IhPgrVcGtKyT~Fdw_nJ2!IfzuqRtTMbkrDPpVjL!rmM!f!@FpI zeyk9V(DS7!d`=xR#vSYZl5lFAUZWlrs13Q^w^(9(61&3KyG`vcj%Vi3TUUL);8c8% zu?e+W8a6NJVXea-n)nNAJM1B^RlE&4g(~om?O3=y)W}`6O!E3zbEl8G3~N|yHmCQW zRqkQGz4%L7%*u~+{CJEK));&D(hS2?9Lk!<_}oRh6YL12O|;$C@j=QX zZSSaP4Hm9eEw?QEfG8WP?W%vye4=xi8hfVIyLl7kRls;Lk3MDer?lVOX`jbxSu$6cgaj>Uw!K`4eJI4G*!1ap zqErfqc#iyw zimbxr49#i-q(OMQoRJ}4yN6e&otwBnZjns*06@{(GU?vo)raVqdd+2hzXhE5mQ!~n z_XR_u2xicf+uw1cHnkJaEL@N+Zb(aVm-`2_6g{0*a``ju(VwHXr^n-Kc!usd?S>%* z(qmCUGVR^>GfWaY8Q=3b5nbYLto~Bo33wae`Jg=0l|!;ygh2ec1?ndi$-VLs2%o@* zJO;7;p6`X^Y~(k}qv4`1Z)5d-d3Li+=J|j;A8f4tLVoGEv?Iej*f{Y}P>pt7>^T9} zcb!g;RGp6An(1&C{L1!MAV%NlE$d@#>?7U3=qUQubv+!le=FQO-aO|*=OZ}hMg%YZ4>e!@# z9aP8mx{y<8LS-;?KZp<--`{J&%^}O6?#VbruBH=*cfe?L`=tkxE7Q8l&G*poAF2UK z2X)(f$0%fxGG}xHR9hf3u3+OQ;GmyqT1w`Jb>O;$+IH)CLf&Yygntu4q*Jvj>xM%<%-bOq;Ha2~VgDEZS*|m-WV9@!DWj z6KR?Id#R2U^fc}!z~n{h?o1r5tI)syL01co(p8Q=cFH!L_(OB~p^rCkvLV0Ry(%Y! z9($wED7EBZj&R8A!M=kl@?$3JWi-g!YTlEc7y2QoCF&>1v?uG;fD`o!36h>yblP;C z_6y7*$vH#4d0KSZBHqMYL@gx;SNDNjnI=)&>U9*c-jON3-morVg)DDoh+%7@tmM07 zhFB5mSFPk~R`MmRwu!Qm@5-*^YCX%w@Fg<2Omn9Zze~?^D6zzuXSJ5!XDzD_MnYxC z7#(&Hxw!LA)GV3qy>6+s4%Hz@dF*_LoCI0LrmS^VFRNBak3&&RsEb2vDw~|OS;wz5 z-V)#Eop+{_Sw3VkJ7pDx(ga{%woGLcI^Og;g1o{cjKU^YQ^V$kA8)cVQcIWqc^8}{ z9dr8FrGHNSsUk$XW2L9kIQ_`9&k#f^)4g;$ovB~z>$tj6R)Cp&Kp_X3onJ7A&gx(R zD6|08?&B-33I%w*A52<>k*=J}JsZR2a`n<`6sCD~@fWQp#CSG#5$};aqU>ZoRH+Y# zavx4n9}ea|_{_NNj_)Ag>^|50r}5t2A>P|N#Cv;PvS^CP+tzB=x_m{GM1|E&=cd@W z$nbvIVK|o0`gji=oM~12P3vrEdZczn|A^&{zX6ll8caO!D2C~+^^fs)EL<~U9SB)? z^RL5QZ^3zW!O{Kii=Ld0OD3~c{cso*Oe~K73aAAemksy@DXAU=b-C<5)Wt$a!dwHk zCjNpHDKK6Xfnxp?>=Wg1r$_oV>kWzWyRKW6iF;LbW^FU|485CbOQqVh8mMTPQ7bJE z))x$mD>|&Jp7)2uH@%kXk~*3o3?W`Q!?N;_GM^N4E&Bs#S(@X4FXyMa>^Gg^n6)qb zj-iCCS1qR()>{cnKBX-+YAX1d5W`yMqdc`rI7X9VKi>mu+t4oqIB;RuPLp8PQ z>kM=X)`q(3g!?`;ekaN3xZ?D9`8}_hZRIRBa?OXD=&jMXSiuxXL?0@EN6x^<{#mDs zVg;05WA~*$4uE~hkth^&(-GY(D=xV?E3bB@$$kcU2~BV0v#=%nVMPZDsWh`&i0t{a zaZM*CoREpYrOMn%vDmW8Pa=siLun}Y|Cp%MR^vXhSRGi>_2-7eMw>T8yK9Q`(yxg+xnU`|5w2~oNxJW|8ikyN{T589;+;PP)v4H@tJrX@>zvP5j%A)3vU6i;Uh=+taF0!m&^zGXJ zUf+@zAJ(-LbgXN?TpJP^G}gV(?d;%cToK!4OX@(Z;?d`(y@T?;!>HIq*RFCv){z_8 ze*m(Skqqbh^{_xZRRSnKtPA#1Z-#5F?v{}zT;KuO7tfNz!euA#+(Z!a5>|L~XV3a( zNr22P8!Vr7k0Z$w^iI8li+ko(6)1>aH^H~OsOrBn-A97-I9lpom4iqIrW34ths^l% z5ip%lv24ipqrh}?u7>{rraQX9R3Wp1=?B16y=7rq^((cs?venovhPQrQQLdg7l`+h z0_0N%l-3xGOgQM1+3#TXZz27mJko=fSst+hND<4s^;$JFuCaeU3rF(!o?j}9N3zP- z;Sb9yREtVU=|=Lx92%&yupO^KEI%q%4dp;$xY{*JWU^!>4gHYYW`?-xM;v(%AR^f% z=-fj@roPm$CL;J$`!QBE($(xIs@1D+d3#-RC%TX##MF#Ng2T!vZ^#;usQbrpyCSO-kq=ZQnKjNvP z0`!^{c1`kW$?keXk^bb!yKAf+v}8K|f;F`#hOI9yN{;!ljFIMp=N9;uNA4~_2&h`S zKy+K_)yQ6va|?o1+ZJ9(J4hdOMtX5TIvJ{Zm;3a@DJ)!ZFlhB(K@DThHMmT}_f)Hq zzex675|jNH)^6~$0>j149r9fyfN*?`+f2XVYmoEE2#Y`zW59;aOVqDs`V&e{PG6WD zV;b0ez%@8O4cD%#GvY6r(s*91-%?ISkT>|Ex|0|Ej8}xMx={Y3>I+GW153zUP#4Vq zsgy!KT_sB9o5VoF4AU=%dyGCn&eUe*Tu>Hk0^anxVHMsn&c&4axG9*%R)TJ z#@x+F?k+I!&%lI#ZABXq{?R6*OOmlND;Fc@VOz8Ybv%ai@mKv4V;(CWy?&IuItdMP zsz+AC9ALLAmQ5!k%0-B53#&9#qE*Q&Y1+bW>%6Ou&;Tkn{)FV@S1SoI>tar2t*{uR_N zVv2wMdCXp<_ED7~QoF2PBqo62evm)?e&<<0K;G(v?xe_JEOX2?2! zC7ZU_LYMDbepLZ+k43h()+Q%-gURbX1kmrbVhQ8r#T~9~Ggint0Or9ZJw)@@_#=Tu ze07fqbFKB8P_){1-}2*wRU7BKtJ$r@Ilc&PtK zl1h#Ef!+&y%eyV_UU~YMC;Eh|<+fO%>I>1UU8&Nlc3$ONCzzaiklS6vJx3nt4cbXU zqs;^`0t>J3J%47u=8PBEC?hE_-ceHtH`!;QEGt}aZ7})0G*$`dNm!eruKLe4DLb?# z<)6UpK_vj4=v%&KmB@s36-p77(WrQ|MkS-nDO_-+G>;v{e@Q_iJw01m+yToCvhI{hiY1Y+ zv>$8&7RP04tmo#xtmPUAC04bIMziAs-L<-2YT}?>D7}3R-vX_I#Eo~AZI5QL>b`@N!-C`JVfmTCs!j8~RR;-a3_%N_9ZWt?U09y2 zFq0>&aOfof{E32}+77G|t)CY9ZWd1^S)u>A_^fq^T{cWz#6GoQ;vVPa4@w(Hk@wgF z_!_PQxSc)ezQjXX!y+-NzVI#nDV?NukFGds$LmPCcg6p@=Ykrlk)wB=K0N$)LCd3o zwNa?s{}`-GrH!NXO?N21zt4gjqz9qoM8TE+U@Lss|O+an$AiRxE z2PB_%2Z^x1|20UYjeh}>UJI^sQ0JfjMbz1w0ZHn3fk$C?yy@wvE3k31-h(a{I&^WO zaQ=h5YR(^q^RLvLKYUQ+dE%E74Uoe+b(SpxJ?b1~vkL_kA((ifvL8~n+a+%u+KE?H zlTb;^^UfCte3h@7iIC5<<}XzCE}=Q0%1>&z03}iLR3s64MZ$(ArnFkS5;gajiTTSz z)|>ixIJ-aOc*}G(p?fX!#X}G>$TI`I)w2QF#y9(YiQXz(HTIOpade02wQo5G+Tnt_ zbTGs*<+|8sAkIJFM_z;vy}x;dYWWxPJgz9Jw0FW#of2^0G}!4RzW^=VGUI&`WSzI43L zZft1B4%b_P%IN@G?)adgBU+^8u}wP~I${Ud>lJd})Q~N%cPiJW z+?8uN1E6w_omy7O4uNT?%fAd9pw;r&K=8)5csD?k(a^P4wmU@z4B!MaXw}4tT`@F7 z=#aa8uzzd*PltSA5JP71ZUv2+`x`bZ=onaGVxRL&NUkJUXC`VCaL2RNX97C5hpJZ3 z8d%5q$#UAQz<^^xF}+}?#mzNr#QslDmY%7OzXx5PstM_3)E|@?!M;o8qnKBj5Z^uD zqVb3odW!B5dE_Pf&WuBe_d*-)526|3tua!-Ri3DqB`hsAQWec+^FHF@2YVODkU9g@ z0n!c%4!>sTP&HFB8G&HqHA4r>R9Ni^_x*t6DFYWTiNczn&)X|jD4xjgG*R2(R@qt2 zul<{FMt&46jaTb*pkd;575^9mjvLU!-NH`iYZ1%vTjA0g=5%Tp$~P?p4IF8Rsy@V@ zV8tdjN37c9O4;EUWSjnykccoYQR($&1#Y1PEHL7qc!+V@NP@hNP*L>w@UY5BL_Q7x z#DvUxE#msLW4lyyYmIAP#|P=Qh;%T`{EQiz&@Q*s%rYp`_+y|rn02D>`SHYLZ#Uy> z3Mh^E>)Jx>o{sIVEk?Y>kE6?w)gh~YJ;V>(-;5Cx=5!sYV8zxD!KKdIv)UgE?pYo1 zHS}caFo$a1;kRDv*q&}1(t?KPD@(?>QitG%JFq$QcdlTXEDS(HsUzju2Q8@x4)x<6d3TL)j|~-V zRrjhHp6x@QHFV2BCfnEWiQ*cU4K0ljO&q(W?=Ok|2Y{!tgL+#2Aw#3 zg!75lvCAB@B6Khde{MCv+9y46~Pp9*&IL>HTVo`D3c?qLxFbRuEv0`X>7INpRU zXW)>0NE`9h2YE^JBEt}`rnlshr+F&7iLy|4F_Yj5MU`|p!b92mTt}2B9#x7%-!oQ$yJ@|r7BnHRsWoILrqodtZO9hPg&=aVqt_e zH$Lu*fMK+^(dr(GE-EiI4)!)+M-Nz9b(wq|Bp=TdekdQE{M{09)%KiLjWhfEnPe6O zwkqsYD|RN`Z%_e~y~Rw9&yQ4mY9O_lKKoCRg8)7lq}A_PIz;nnYhXN0QVeo?{;VE>W-~IM@~O$z|1*_zl=|(jsrpB& z_7AV06HL{{K$WU0KCIsGSJk^z*ITdByVR@7kDy<$g>q_?!Mjx^n8T3}h!E>3q^tUR z*Q!Q{_Vlp6ymZZ1z|gHLDDGN;SO6TYFLPBTU)h(HBNVt+t6a{oj@Fm2eN|uP>Ix=z ztsvVMu-UzwST268Kx@fX^q3~5&ONw1b!XY)U3Ukqkkkcm8YN7$iufiIpi$+~WN1a=LP-`sMai1w(s1UawezeZG$E zo&eQ8I1yV)#3(1d55$!82Vc*mzne|B5J08GIGx4cp2@OGvgkT8d48+&%**C^=*T>m zVmC@tP1!s%vw1Srysop{obAoUDhqaKo}XPQC#gAN$l%QDS14(NeZ(8j|SC%42KU({|5w<)u!*ZE5~-W-Y|2 zXc4Xch$?w(v)}rLRGXo}IebHC-RW!gxab4U6L(5CzR|TC<8MB)8*%a57WkE$wfV%O z=>-awcP^Xbq6+VPymwU7WtpZQJV~nHN;yOD-q7TQ`SuBtDZyb!Q`8sX3S1RDuFY;Z zO|LL>?|uG6iy=vK3BWq7R8 z6WX_tN$A!n0UR+cN`4`sgcE>4z~OmF-k5a4rCOe!@xt#Ba6{ugqb#sw7ix0h{@1Y* z=;_#*QkH8GF5&JTfsKI8YO_y5hHjluc7gOVd2u<*>Y0@u;yBCtNsK*53Rx(2t^~ID zo&}{GK&ScRB`M*#ke|TfJyBx#$mFPOKgwiVD(gOAUoDksA~{LcjhH*(eox<(k<$n> zH|c7^&BWX?rra68kD&+*U_ogrXr?&>9gkDb$bI6;J~GVR#12B7Mw?-4eYzup{V~9U zs%Oxlh$Mv#DqUc}X8Iz(J>y21G}XhELUlj~Q@TeV=jlEYh?L`p+!_^LX6>)s3}4r;>jQ$(oqR zD(;Na18Gava{Nv+PeM>kHgO4zxnY`GF?oM$f;dJ#WmDbEa7Qg=wIB6OV>1eL`*~*W-XH70YRaDc0?7P;kQ2oi!3|Ex|vyO4L8}C_Dha?CBARK99O)h%xdY}Ow;vW z$cSg1AZw+Vb$|R%3-B9^^-aBJS`)l`+*9+TZ%Wz#`zEQby?H;HhP52toAn>$Eu!nk z(WB;lqJEG9zE}F2%{zSY5AxZq9dEUu$hn17VKE1%E$NVTFJ(TTO?NU zD2>8g>w|I-(?;_0wH)PqvD<$yyGktkU z268yi4sy-50va@9f;X`E^r_K}8fa%x>;E^P_0Iw=2d+K>E~SJz5?T`EzB{-GfWIn_ zZfdC*F1Vg^D1q4Me+eU-X2C%Gz}Io`G8q~y3ae|0eG zezpP%nnrW7J|qlJ1*^Ul5&^3U&efPXe z&z>34kY3O~p7zHoM-|4-S~4#G^r^pkFLr9GY*b;i=PR5M=A{NWUwM~ZMXJ{;Vn85~ ztL1W|hvgGk(?Ws$zLyItKNdb z_nOIb9^!LCmkA7C6ZE}o%Rrv`jLHnxC-zgSc#VkM>+O?u(HN2xR}a&)oN+CZE_j1W zoOVa+PQ{8?cu`j*@pU}Rze)3#3(u@=HGMC;Sr+XQ;-G?!-P|fLc;NuU_wpNrDQ~W_ zXBJm(-n+L-N1Kcevaj2go7c1;Z%;v9oFD+I^%@hp=*u&Fq1RMvX5vKX#NoOwjj!1) zfk=poY?mP?Mv~{;cKfGk{C;=D|K<)_n~nMpWI*Ea8()i(Z6CL26GYvxnmO`_uPqqr zU0^Pktj@Hu z?oA*rt7Hy4YUSv#-Y)%{o{-)mQ-61JL0)Q8*jo12MY~HgIre-cTOTExJ&&i_aY!;& z8-hcDUG$+~Ths$YQ%E6>?8Ul;EQ&7`(x|8>xO$=G_0G@PlF0f^dXRRY=7?{Je5I~~ zu1=P%ouaQ$Gc>BohBbTMG2-7r{TCkk_fWr`*8l&aKG@wI?@bV2P%?D(CxZLzYSZ@a zzdN{}540mzt9?V626c#e{{$UIaEUEJTcsR(lhE)_i4yPz_#gJY{0Xt+SOfMSR2>v% z2Vf7@p#gXldSEH9sH2$r8nwQrc#YjSD@qWhS}y?aei zUD}VHXwTYmG*mY=u1h(M?eLNuy2Fu#$*Pc8a?4wH86~5mfJ_O_>_-#j25-vkxq}Px z>|?&=%1iXLACsR6Zu=&F(f*D`3SHKmxY!G^9a*`pat~~E{~aztGo;10L^?a*if`|U zfOKAw@3+m3{BTyCUZaJWc^e%r2@A`rIUJtReGO(@oWRn>Ll*&pu&5t*hby+26}wFA zB9+(5`_QV`F?K8NDyB6ZJsJ;=ST&t4E zYn0LAp>XVZOa)7Cx(s{M3{A68aWS_0}`dfgu%ihb6Sb-yvvnvpZ9Q}>nBLHC~ z?0gm73W)JF;Xp+~H!8MN>Wk=jqR4W(faO=DIW-!om@DTu$SQ*HuaZziO57C|Al!#S{p>Yw z3bJCrtHNzAOu6EAfq(*m0c&mn!8C!$bOi^!7q-IXN|Dle-!M5_Rb+{4*rXwk>OH<&1?sWZ(7HD{UzYLQObA5NE)y$S#l z5kS-+7?kX&++&|x{yB%&+vW1eGQp-7yn@fbzZ6BJe7RQ8g&#js7tGznSbkaUX z@1VaKs3Pr(6VyuLURyK{_8mL5t~Z-U9K9vmHQlmJlx(!=)cuq`e%Cq;{mt%RhS_#- z3!zl(=sR>8b=pO$zHGAIE68q^34zV+N8O_)W0Vr>l_m;t9{oS74OOU$Lv(ybr)G<7 zj7(j>+gO%*J&Jy_dwta0ZrfjzoXA97G#|tj>e@c^cNM@Q+y3OlmGk9kmV zrcn2^+n=C9k;90SH2u__>U`VL?Ht)QGJCsyt8QC%I^D*CVA458>ETptP=^l$ka*H1 zzZ>tN^?m7*->Qc#>5@lyfDVp;N8(~A(YMP*$b#wd2+Na>cce?MCL0v8kO;l$lJUHx z@OV8nFJ1CYRS|1HAv-UyP3!3b*SA=gaAq@lve&n)393e%9l`o^NtglgRbs&rBr z({Ry|nO3j(IuWhXCA&g&jEnETCW=Imd_=mWhwj8lY}=we#85(xC4K3V=gGQv%fP0+ z8{^yEDbEUMJH3|c)iop?8Vm?LwQuH@FwE;0oXhkfV0TH%Q~UeK<l1vo`0*5eHXml z={qIWF_`d7(Z*OG1Gs5sYiOgR+-BlEkNw#hLTF!DZ0Kc2-5T2IW6%H&yE!}97}^pV zmCq)dwMIC|&?t9)Y%llsgyo#0W{Z7}{b_n>A_m6IZ{xD!raIrkP!snJbIv@aNyh)` zU&vruQ&24(@XzcgfkBj25C$__?EiZJKhdP8aVo-&J{Y!Y_6dbqz$%oBJR1f6ajs)g zN)uVf4Qm(p2vxP<FK^!TSdaL3ymlRl!@SCJXf;wG-VVJwCATQR_ zh%Y2eO;0g_A`I6G!MRjXx@3g307T?q+o2v~QAY~lnjvIVE6}*XS)J7}Zxb%g&RgdX zGS9+)o4x6h-qe<3kb>{>-M$)};WoG&-=v;_-R6I7AcGfkj#2f;!zR)0A}TiCkv#Fx z%}3#h$;=^JnGlbT;WCONnBw93I~b$2dlh{lGpz9$`|WGHvqrg`gX%*_A zh=}&kHplQmdmLH`5ghG9d*mGBG=d>W^=!|~cx!q51$oJf{lK(-B${xTsIP$tk?H_z znjqYCU%8IKGU@uxljy9H1HmKdL%L+;`64>NbQK}&p7zV5q?P*okcoGEecgC^77eZQ z&Dw&8nQuW8mdSSxWz(@D{_^&IMn&7+_bUh};==cQP`de+=Dc-}RB<(Eq+%@>$?=Ri z>AaJ5-o2PUHdU3+k>pOTblB|e)Fr6*|j!QHO@Q#m{7%~USWFS3Kv#tA=m0u z&zg$DP{lYeI=i_&V}&%num=(&MAb+(UQq4JTM_^3z;Sy!!?&yzrqg_&pGD;-xv(p5 zW~8N#tSKGDm(~u$uZdMy^z1NO^;7zYim)tkTlNYJoDaQyQ zh$35~@Cw3{%0C}g)f`; z?@@&wq!0se^akY&M6(=Wi|LX#suZzZd>gsc@IuylJwjq08=`}F!w&bO%Gxb5$nj(| zR!HYV4f~>Bw?b3p>)Cv*+Ty!kd{jg{&YFpNL(7~oOSl^f7y^q?qIMdL+%BjPnhFGgC%c|PzLiTtS*louEn`-rO_%(A zG+P58CPy1-OallCQ9oLyCf3Wo`+9U5EDBNfVl;VCCdFglN{TF%8gTRt`v6@qEl}73 zg)LCn0)>+|`$ZpfZA;D{MGo(#3Br@pQ?oXM;LP;zmkPs4gXuNa&cqZ}OpRAieVBvl zWhlgC2Uq(i(ZCaN=LA$^GF3fQ!p>CR_!sH<+u4P6fZXvz>3RRq5p~$LctOa9pHZyp zud&`rAn5!9nT)D`EbtoEtDQenFMnCkTS*C>-{aLvK1O~7bAP(zS^xxmf6=gQK}CGN zzhLH;z^M6LlMy;Lx;`*!Zho}QSkmV_?@Z5mX8!EQ#D^p>YE9u@dn)_A z#*&&m^7kUY@9tY!f0;6W)y*<@Os`S}p-cc2%yqhC{U}+#+Xab_r3@Okf3bdV&En|4 zw|@7FIg!Rs6nx;P+~IR1ety8LJNVfv)w6H(m14xmil}F(1?oRhuKpYJ%`@g#LsZ+M;);$ENU*rp)-N{d3ME zl74skboestml>vr4`9aZR##>TIwkG&bsEvSF2NRAf-Hh<(NJcH>qWE45MOgB)HO0i z6?B|(W!4m;B(a^WK~`^78HGKS*)J3Uqn(=EZIh*TVP-+~vIkzHmKuaGElVxC2t9T_ zDYD0};aZG0?E6Inn!I_0ah=va_Q zy~c`5mVBf>6S&&*$CHULRI*H`zNAyvXHy?lsk3$JPjzZjHuY|mI#s9E>(oDHQ)j5u z^K@#hPJJ$$dX-8&L8pdv>L0SHL6v%Fr0Vl&I`y$^>X|BayH4$;QyB5nb?OwIx*(gnOr`eGspsm{x!KeODs^Y2g2n)yIy0L(U8Qc;sb93H@kX<$m#Ea| zbn3f0b#^v&j7oh-r@o?7bM2n0Qs?T_pXt(uMA zsUNA-6LsnYojNU>x?ZK`>C|C5^~P-K3YGf7*$NtkI`yV(>f0ovl(Eb?P%ZHP`MmmHJJc`k+qDwL4LzMs#XSr{=~xQl*}$Q?JmeQ?tD~ zQKkBI>S&#Mm82#-g(M+?q)T>xO^tV;PQ5H!cK1mF=RfPzgUxEZmuFM|qEesNsqg93 zN!ipjD)nKV+N@J2W>cS5so&A5Ki8?jZ0aK_^%|Yppi{q|O+S$epgU4|MjWgU-#C`&&~{ zo*4MG+fV6|j`CKT6E$@A_KwSz`+c_DoUbUS>@vEav5ACJh6QIM!OcUQ5mk<@qZ$>& z37ui5oak+^PoqBMI1U+<)yW&_w^RM%ALbL@vB1J6a(%iaU%;a_xko=*KI-|Nw2fdj z=mgphi(1#S;}vOpr&+nh+JV}LZ3Y$4EvUEr46e`(p z0&uU~A}+k`_H2rfU9!q~7Fi1PCOjaAPwZBXFvN8B z4jLuxVKCKh7pQ{zXp+;7-16v-uTQCFWqllciK0F!+KTo@X-ZN((j|XAGlNPQ_+{I? zTDSSC6jW{ArwV4QV}|0F&p$)t)qXv#{tSOvBx9)Qw z$8TRrlgdDsNmLFTsQhwOIn=3LL&qMV>KEdoPs@+eM9!+_uya0Z(EpWY=KJ6(J>P55 zzJB$5cU!Z)DXf-kvnsnwFP}y#aFEXdVNUzm4c9Krwq5VEUGp#7&QPktY`L&guH-Ar zeKoFiVpH<~UQdX4-M1s5wmsI=CIZOEjz`wi@nJ)cY2bu zupCc*H^1u8f_AiaDUKIgi06P4^cwHsD3b%coY#IuUnViXOOMOo{p^)Rpyy7_Z~}t% zqX_UNF^o5e#v!1z7r~5s^$3;$)+lm#rS%fpGDYhqI#OrY<4D2w%G%)MqPS#~=&W6{ zmiUHiGB-`A!*t+wE)Y-YT7uQ+_XCMx~^c)XXgxBqv>d)lynIbO7_>N=IJHB5RiQt=MK z0gH}F8n4ueIkdYj-dskYlYYtS?1$B5a+yXrZs$jP*8wR{9d1O}iLWMx!P+3M#o}h# z^siY-2Uy^so)6R6soBGp3nNJ+Fua-|z z!yYu5Y^ZM$joMB49hA}{DeLWDh{g&(T;9`293@SJq+S^iTw5LAenCZ>*|EW_JYaUT zo0ae2Thmzrl}QZRAwS7tj)C&*lL^nFmWxP2SpuQ8+!$OWC+DY2&O42MBs@QtVrbZ2 zO%y$(b&BL3O|QR#gm_CC=~Vi=btOcXKXVe1gh6o22*< z=~j_?zg=f7ySlTDZg$Q8aet|NJn5FF?N1QPWbsx$StTFB`_fGb&$E0?xNbHr_bF2; zYp5HGB9?oj<$0K-aS1nL>XWU1`eF6otLp#zDfFi*FV;6+m`;scd6U5E5&ooh#H-TL z&$6{!#kYz8;MfiHZ^Mp=HjISZPrnSRQlb|6_8(JW_Ux$m3Q56I4k=(zAq7B!%0ZX# zG5-DqGF{M{HdOW0af;-Gw88eShHa!vilpaOaY>iD^ZAsKPcpW9Txh+^96k2aV~X=c zn>py0&pEAp#FtzvH`0pmtYpbDzSG{H_(^kh4(EQUO5W$od&zr4Rilsb0@7P=rAw0X zC0TqOUqm`I>~{um;cy9!d<|6*X58 zy=b)O_kmB-u{+IL&vqU_{~xQLB7gnpNg+-Ru3u4z0=;guQ5w698%cf34eb9Wmzu7P zJoXSb*GRI6*eU&ohO0J3ORb4T5iU&aZB=_+TpQcOg_-fy<*E0WeDS9P-TKGBGc<3$ zJoN^-d+=MJaGg`ajGgC_t#&1Zy>c^Td99DX11chj<6lF|{51oOP38x7ERf zrF=}-?aG?BfqTz_P$4y$@hf|yEgTaH`n}$H+^9Wr*6XyF^!)VO!qK*3 zAiifc99Z4ZXul-|9TJx7+tw5Y?d|rv3PV^ioP4kpePFM5)+@HmGJs_S8w8V`Z0m1SIc>MwdIEC>fRv++Z9b{LI`Z)vk%mkq%S}`^kP3V_A1@dlru9lyK=k;QF6KlSN zXCp;hJx}mOT5a__#uF9s?KjTT3Iwn`^IJ{Aa~_wHt?qmlXkPBSRlNH5AbTR>F3Wtx ze6#pZnU56gbsHBa<_R`3!D?>7YjvZljTod!>g&!h%k?nty-N+#OGigoZEBo9r+Is( zCIFFZi%QH)U5}uEWWNhpBtH<^#PkLrsN4+ zVn*Y*8ZDPU$6_WC?X49n0ww!A>|CHBg<>l6yx?#-X3!huw-eTi^%%m9P`2{U(*;|B zDcFhJq>rN=-KRKf!4m&KB_bnmBx_UFK67t6y<`h6k%7SS{P@@>dP9t(y|oa0CP>uk zS;{AwUwal=G4=X}{T8^(Tn=QZ+JD4P*ly4t?&HV)nS5BPK9r0u1CGh!-K;kIndyqz z53~1SkwZ0Q@Tg6)43ovfC4B(tt)3w?Cd(jjb{Zb=CoWD4EKd6xE)vjPA(gUyApShj zMv#~esIiFhR=G@m1NMk~qCAe38Yk^}n5EfOLnTsN*UfVlR;5Y_fXlz-xrs8B+pvuh zZ>34;wuI*rzSthR9ayptNR5h*UD%6mX28^wcI|!uCoyO`-|cgG3@q7T@1=W{n*&SM z+kF{_$ZjprY%MKm<05Tut!Sm9{SK+j_|u9ghH=R*IIeGW$?Gh?g)(n{1U`ho!_scf zaQk^)tS#)lN65Y`$r~ULtBdva&#~^xBt>UuKf5nS+*BnbE?@-$*l9|tlOpz%omk}{ z;>k-b<+CprQ8QaM5BE~XhG**vbZz38?B~JRPNjNOZUY}j=z(i9KF1H%fqggm6S@92 z9LXJ9-cHVTwPiT+XS;n5Hc2dWM-_cEu~Tshjr(dor5$vW(VZPtQ=KC3NA{99ZXdiNMEpEy(-xDD;ZBr8%$BWthjycByM>em0d z?BBUKA%Z*>k@Z|txh(>DD&-3L8eetC%@ON_Q`ko2)l_xto^@Ou?s|DUYmz_8qbg&K zOMQ-g7O^PJK;d$)`gcqJ1?Gw@lsZCiS^Q=jZ>P$pR?n?Z7OAD@dz^c%T0K|tD$Blp zSFKSK#1T+=1@5}}_UJ7}{q9?Czd3Bw@4P*F^R1!6jX`T$(DIxGsW<9BH)7H0p~9_% zcr4snzk9;Xx5p~iVkT9nV=4L`PlR>`E#k@7?6cYu*Zw0hA-gQ$*~MG*n0Q-RtLLvgf~#0# z|Ai+()lqOK=vIJ<O)-6TLhIy((kJ_)^WfZxjm@34=iPN=bn zOw=b5U=kmMWk4f1)RacAltyVSfS!j(NN(>v+Xglb_PF5};w7*VFiB8cepGA)oJBli ziZ9ATY0*Wugx^H6_*!32hINz}a=-Xcz~>oTE9tJ>{sh#~@#8903SkG5o>KLwonE1N zrgW~%-Yk-2vSdhHlu+{FT991PjIs>5FylAlXz;?>kH2@u53&D7Djf84a#yv)z73d5 z@k{A1@C_mQhcMEbdW<@#`kFk?BgJYWSDC5aqmmXXTrUgL+{^OvJT9+lWdNT)^#r8pQ-0DH^pqG)zvR8s+XsA> zJ>P^wY>wkzxBZ8czL19k5u316O?qA{yvV`doIVtD<>&A24KU7mik}pxMYw6F<=}CH z4FO7{1tIVy4wp0kb{IpEHJX*f6fdH#@94T_9Z}cs|KI8o-k|z_&q1gEpPs1u&+MuZ zbZt-MzEa1xJAQ+N%kjK&qhLk8v1DtjA$%jxSOSF*;llpinHY1$>+so**Oldk#dnE# zhU5(o-e$CpFP9Q(ghu1+Nn$~-RI4t|ZXrq(VN;E*H|-tvYHmr z^NWmQdL6+=q7`isY1oMwQ5IUlHrHMvtlEs?3Nf0j*TyqH8ySWw&?IB&PMp8;F9*x5;?RI5%K?ItC93fRm1OTCcZr?b-K=( zjt=RPbA$bo&ROT=Y@IMlF%_$i>AI*?E=E0Gszd|N&Rd#g9l0)ovl4EmQw5Mfm0+e{ zGhNsQj~}7jzpjy8%B{{$RY^VBeJUelV1Ng|gwNH9W>!h%Zj4k8w0+HZCpsTxDayT~rGobv*@Y5ire)B%t>$Q>d=^Fo7nYe^!D@@SHabdZhVp`{#)CMFiED2 zc@xLojE12zkKw5G>?~!^lX%i=y^!cjjs|-1yH@ebij~qx0QHkk1a+M)0PrP#7jvkX zF>&jRk?AIUd}H3^r1R}rl2uP!=Y>cbj_d~Dvhs2!#){(gtmOTHvp>nyRb4K1<;Thi zy5kKju^X!=%c;u%GkzoFTl{gg59mm?D6->4B;H`dKZry2Nwg5tPVu6(SoV5Kfru#( z5j|u!0E$E3vi;H6h4V9V$4)W1&_2JL*bTwDVX!iF%p3=sO2#RhWW~_>qX(A@`ptizY z=GXC)EtN^@+ok{ACQr`1)moiohcCu>mOD@Hgdf)A!++rL{|{+z0^U@W2K=`qfhffk zrCPO0)S}hmSS^l?LCtM%XaXq|b)>G;K^Yu3Y?D$2*;1Bpj56amF5{@PJDY<0Hrlea zfb1%uj^eo88qumFi!+-4?>#r^0(Ji1_k27L&0Wqt>wDh)eb0>q0CahlA9ptQu@lk- z3x+@#6Rsb~Yvnp6Q_8={HH^ztxg8mhbS;rt0jHIvhAG$noFPOK#PDhsYP?OD1m*ga zhoYR=#r3YtHGWjC*W?LIO;*qj^-lm3qNUFZu^4+M330_^GgWMr`h_WjWE&)}1wa>1GuO z%m9ky?*qpdTc4bW-u5^_OO%SDjHr2)2}@B>nBBFitoU(YjwIg9zgjvHS@w=!$sS z!T~0yf`fq~{*KtmI}-6c5kxs=(%X;vHaL=AF$j0pV|fuQ?1?h z$6p=P_EPi%x>Xr?|Ltb&dm-hsowilGK-W<54cw=%LjHCRVDo>|#L_^u`(SfD#W&Hg zp5hEH|7WjB&cKG&v2>FiEiY-XoO^36+6E^27S;@uwbOV-<~Tacpc~-i62sAM_}e`T zl&03VdfA-U6-LjsE*WRT4cKg)*Lukdv=msoMd(rF22>ql7P3x&tf{IJDu_}2dTSnh zUPuMq>;u^b1WVMg4Z2Lv@>{c8AdPA(eu~7linb+`I44C|Q8&JB`BEzA@mcGh(r)1l znqu>v-FP`mC(3u5OBf*uGS)^bgnCAxw`x$ZB^}lE6UDCT==yr=c-@MPtp}2BE2KUP zt35z@tV3oN*aN`&BMJ5%v}vT8NICq8P^S1dH?U3uCwdlM`69DiK;_{}jET?$c8|Qy zPraLk(q4O7*SEwNO?4E_)RZqBjrFRj8@}x?ZGPB}r>713Ti5`a(J*r^pJsHv?0S2w z%rqQ_%^@6faMh^&HO&?sNrtGPnCZ4YAztf%Q6y$Mvm6#8#Za`?bPx)B#1>7!gr#hZC3QhZBv3;lxZk7Z)Yyu4D!Dv@F)OPjrWq<2tN! zFe643{tGYyp>|oM9BYo47GYAaDXvFEYGQA}HfLGp%RWn!I0!3+wrOZmaDI*6@L342 zphO01irEl!lYxJ|KaR=1m2LkknZjw(`{}*Cx8#i3x3m0xeYm~qQAkZXJ1F7p8I26( zA3Z}^X5Ap-g68#qUp$u=nvS+4xQHZYyE)vZXAt+m1;h4-lD{aPD+TR+8XHbN!)!Tw zx89&RYZ)cIeNIR@*kT~$_y8%v>@KHX%2X*kUXQpW`z|#o+%76T%{G--h4feKob_RK zke!owQ8~~_Qsd0~^b!5Z4YEMN5}Aom;@8XMS>oyE^v^$9wO zCrF@W(sl90h!ki|LMM>J>4cb9hkhn&LY5z+>ryj0JGW*Lhd-dS_bfaC98kVC%=r>5 z+o7C+s{}%0dytYHeM3fX=`ZArkgNkjMh^_hn$t=5OLs}+s8^=*%!8vwXB{d!!YDaq9$ofOW=nT81=p|YkTGK3nUVq#n zh3$1!_PQ#2U6X&9%kpLqn7C4O9%w?R{U!?;?ZNFfP(TF}&ERQaH(2-LiF)0SVm^lF zv1WvIctK|l!5nv5(JStkavO?F}J~^D1D9`T)~LnwcKt% z<_S>AU~9LCJ&E8MlsQA|1vgnIV>LuzryS`Ha~Hh-6_nPC+p z(ssVg%lNe(dhhxLj1rxMX?AdcS+1u=`alnnCy>;!SAImH|4h&mv7L!}m(hPrksRwY z`^$HEKe#sYJ{jCjWqYw9G9mb_)eN^tNFmA!U3<)h9WPa2PtQiodKCVg>G@oyM+%=j zNCe?@?06OYnBGK>)II?)YM$ja`hm+jiDpSK)8A~d?ioGTbo5;J^~}?>eC@q0As>X^ z#|E9%+9@PGo=(T|tc`HW%W^xvVoc8mWMF^zrvMs?>z3k2xtDD=mO<_rFM}KyicfXt zw2#rMJnIvJG*CK;-tJvJNAlX6vt~?LZu^)~d`!s-`B^h&GzFWyI@U3HRbg1pcz~n? ztnJ8_08CgNX1yfhRl*TY9Iw5ttq!OiE5K1^=+do2f5qEm!5KfbrOFb^_X%5CYzCVl zM?jU-_93-dIrM7Dn9(h*0nabmLki{TWdQwptMy|UnC4+OSXCfbNVnkE>A;*ftggqG zM()%w=+%T^=)Ehhlo(}uYjVY%H{qLX&lT2CUKqX~l$pVcashG6*zwB>0zo4FXP zM!!#{g2kcaBmw$-YXH0>Ko8G>-_XB9jwm#oKe*JGlA_NOg5`=`*-auf&OPy?49UG% zR6d*L{$r^CPIR(X-5e=eoGTY2^0=*gMCbw#6OC>?bs)vLlnlj5wV4w=I;StBjHU5tq8#+yNe6LG-g6%TIaC%khg8oL4s}l|O z))QX)VV};Yx7mxT8)|q-&&gO?mZmVrFObbf&YFDWyB5JF*==rkmXFsDxAHJZVnr{) zpy6p7Q{reBSx{{5T4Qc3o;|Vi?@|lPG+8Vo-j_tCR->bpujj0+ycUkX!1VC87(oD%_l#|{p$7x4tqXz^q zHo|Ofrb_E^HXl_9)!k=JwX0HgRr{=8N>w45F6(-tI!NM!Lc28vmRO%gyeu_=3;xuy zx_gB|#m9neTx+cpCP4I+q_L8{HgA<|xh#c~j8=X5Y4Du^L7`;w7RdX_1aV+(;1kF< zb_XvPIqgQV{Oom|o}kM)Idh}=YRKBp@;EO6WG3BmS$~|tRl)&cj83w4`|UYA-e$`$ zVSk~3K|NWFTq6L;CugQi>lUUVJ4MXOGnBJ+Y6_Gfk^5edjXYB z^*)lbMqVYq)C*B_t&QOV)}#+*`gm7o<=OAf%)G0!{POPAS2Id_?B<5ZYn~SZ)$V3IEGNiCli5q(&k0MaOdzhBsm0<08KO-SVM*Ow*NL z4P@B;+5hMS6yVomg+MrZS^|fPv?}`d?71N9bbJVjXTOw2g@nUJ6Gop$zB$3rCxiT! zLa)V*l3Y3|denXPglPA%m!(JieXo;Q>FwJDvb5G~I;*|WG;B!A_Q@aC$aBRr8*hjX zqs}k!7-6r?O7E5lT$d~zTmZR-+M`=5W>jZ4fq%pwox6Zf_hJy1FSa8qdt`8RG ziMbYoZke&S%i(&B``Do@eThsx87HnOE|#bj*)Szi3-vzAF(R^pUTZvZJ=82E5{-7N zo!mKzdb7I9Uix)gpDoI4jTa(no#p_>dSge2)Va2*K%>mhcgZ$E_(-9;xvelKdR$i7 zSXrEIMLjy?g%Y}fuZQ*E>r(U$$fYfm_SK1X9xYJ^-SY;(?zA4zd+;I}(i-kf?5`}E z@+=>x`{M7_mnpsbGP8GIs(SZDRykkyMQr>)q^#)ydLtP>M>?X<-(oG#ZE1^*Q-48@6hh#*2UsTAR<%45y+BIhD>HU3I z+HjIaSFfHgT0qd8kg@gFMbx4n`fYH?Oa%MI-W0Zps@u0B5K_58v6|A<{*Z5gr=^2c z)oD*di>@Pa#qL-{@<)fn>ten2cQz3RPka~hH5NwelQ-q6)r+dUV&J*R`cP1vJP)bW zXc?=D9joQVxyeiTnz-I=`1_q65)0;f>sso8g?4kTCgodygvn649x@SC=v1){88!eIrE!oh)b^BOH!wlAV90 zf60RRQ*0FIwJzSJ(VVtHW3Y27j!K#>-ZVJ4S#o|fFeDCASzKk?7(ui{tgGcMy<9F> zgype)kgdwf05_y3acV$- z!b4pnPemelFcxSOf)EB*itZT24muG^B!`?y{Wd`m%)yzudZcrp8lt)9qv&qZh$X71 zl-mS{l!!>`2qi9OO|rN`@H$9RL(S0GAc3r9xhv0VmFLPec77h1KeLZA{+Ag$JfK7L z(Mg2!k);v=z(`(tsDDND2VX7aoLJL8#KWfzN0G~BV0u00+PdsykPAd`l-PEUl?!Is}93fk|GqjM~vF(|@vP;!y_ao8nYXiD&=Cka(?piOW){K#(yY39-;bUF`$D%z(NoH@Nmjx|Clwa5^ zuV6rA6+A+8I;`J{*s69Qsk|k_kcXSBs{wv+$XS`&Ph?DS!E!~mWyI4qt~lKWtjBC4 z<9e%E*SXJo3qzAReIV`>aY67CS$b6J}T>+cW@DNc>3 zS@_0xQ(^R2+nh0`7;}amce3_mVTbZI(LN=QOWhIw3Aiewe6#f;N4+VXgRW)0{4>&- zc>2$*5Gf6Bf8z>){oeRm&MJIPAN+|&R6l1G{+A=GDKer`_>}KCt1yd4jvM{~_yE>q zykIjlJ?zDKI3n-m_ftC@k zzR!AP5m9%)17L{qffDBUBl%dtZxr0ELl=n!JM=TDui#g`LK*k&mQsW=!uH=S4Tzd^ ziEe3=^;?)A_8ivUS{k$NmfPfz*IY7SSCB{Pg3qN&-O82JnlAX0)Ccq*Be4Ht{k`Cv zglizh=`9-Lbir7<=6QCr-h=bj<>U;SORM8ITMzw78Yn2gDvPfF@FwUwU2x3zl)uR? z@8~Wclk(8sQ~5xCZ=pAW>qC2X8gLuKbMO_!O^-wvc#uE%lE91{wh&(xqE}Bbl>U0< zwp;o2mDyf-q!nN#J>q^ok>BO|w;#Sk0_jCH-}xexQk-@(Ng@jF;tTNm5$S^SxH|7c zq&WgH*DrW$PKE*K%TXN&o7kg(-)TF}XILw(}e148fB7IEa; z$HWlF%HR0D+hV7~95;OpGz%cK3XDRJiH6O#K$jrD*Qe zHYqQg;}`mkcCA68)P6R$i;V{Do2jqAsag4ZJvDWgXNSLTyB_`p-&6i>yL?G^`3I!D zJ(Uv{>#2-R%GNd8uInp?+F#q%c3p2@mMuSC%Ike071rXXN-vn8Lr^HlBFk?0zs80(0b&%KlG4897q?;qzmP(Q^}l}2}i=j0bpy|C)6!tdSw5dK*?7-<1cC-UdU{x#U=Z` zjx60GJ&A-Khv2i6D}=3O)Xn5m<10pu7o@0>Bz1YZ;PFqo=di3dYI4}azVA|d4$FWe zJ%{~{dq8H~um?kqe1~ygs(DAfOP9bCYepb5^gQiiL9EU_wA}yrz+dTtAM%>cW|7sP zo_>0J_w(}K>gDO`-ey03UH3CR;-5^g;Hnt@#Pa*PzSnhs!y^$wvX%dZSN#FfcfZk< z-`!ogODd*T1^XXSnRu-$~z7T@q+E%AvMl8&8EkqBtI3BV9PP9odjZnP^fR~XtxE;v^LyqqsG8hT zfg196>Jy4g82ni@NtNO+sLu_64Yf~VoktmQLp#RWR1^QX=UuP$0PQp>U&2Mbd}m#ci6Mi+y;(kT$eOok4puT3-8|N40xMi|=z*sA-=;|b!eA&x%ao#FvkIhy|q5k0Pmk&!51*MnpF%^2PUvCvS>$BJ3-C8;C zNp01eX>%CE%#!`q2TylT!6@q_ICX}*G)6VoZS2C}71;Bx&E<<1J%9i^0IZlNt+5t8 zCm(8r9_Yn6ck@-SjIC%+GzFzGfiG)YPh-bf&mb4j*hw^|d!!}W`+I85Y9|ilF@+=( z5?}+YC5NvFfG&L!0R72T0&4|%Z_Favy%MCK~qWp4M?|dWI-ILr$ zF4*fD-6-S)h3^q+$c`OgcLzPQYmB+ACp1=p>w{R;u}jxm_t`Zc%$K1%*z5YNAyXUb z<0Vqt)6zI&a#=r-s%#yCjgLe&Q!DW5K#D|jDn|{$(ahZ^&G+bIMWd*7PJurD&UNy2 z()C@1aPPV0>BOz>#I1Q~y7PrKMb=B)IueygnUyD|86>Vc{@3##EHiUD|C>XJ7w1xx zpT+XUi%abr9cPkMk8o$zeuJfEd9GDgDw7Nxqo$6Z_p|K;2+cZ#4|h>0RjH34V&5gh zPEshB34VO{eZd!Tc`t*{80oH^!_bliOUB!Xpv3ycMi9Z8oLt!V5#o=SsG5$l$d1$9 z`(CJ>=yaZX0&OxeKap7VL{)QU=IaDPfrZ|432J-&?eEb;7cJNF-H*a3Pm^wnMV zI`~?}KFF~uGIa^CS*7|W zdDkOybMiiIp`B1Bo0Q#~RdjToZV8S!P?!Iw-%72vE??!gQ-d~a*l-Y(v;Mr8z0U z<|wCfsgq3H_{Hct`>ilB))~g#EcTY6B&odSS~9dHq=rg5;jMNWaM+`7IKo5(pfI_X z^7+4Vs^NdL@uUdxoZMZ?5s1&W61wD^8uVR}>y92b)kwEaB}ae5M*{VH_+#KDx zNLE3boekgPm5rI@i^QxXD(jBUsi20;{;3xnm~mo~z#8@s_`p?mBQqkL4gwG79sLvJ zgFkfA)hZ{VaPB!j>4N{fgZ!}vY*dymxR+~Km0qm2bf?Tp{SqKa7R;@Y@8rRkYlT%& zt|qC;=lTgho|ZRRi-nRNpAUY`L9b-z{fr#ti@W!{hVJc}v} z9>B||f_JLiQw8fMj!1!!-VugijC{f{yi)!!&Gt=AP@>K)Mabmt`tO#!oYdvnCXPIy zi3;i%(7O(Z;*jNhBBrTYn&Z^lgk4vratKeAe((+{s~)DL9CcDF+}(vw$+E~avn55M zsu$fO`;p}vat|dfH)ck3SBtsMiI2Elekf+2V_w+zh)Qon-R3RdjgC2j(Q}&bx+2fQ z_hl!23vjo6Jh0Mt#RYE9!c{yPtIP{3Ldj8RSa%1L*X9O&Q}a9vf6W`5sIU?@82%Bn55pnQsyPyutzz!?&crJQg!$)fiQ+!sVX4gL# z;zE6^=hc(%ynquvhF5y>BNuRjd1QFLiVk;&_I@P0r#4&nA=It+k5min9VhN}#}IIu zANR7T^%AZZKmq+(ZtOF(-)ogQ+$}H_8D0@dI$PPA z>8I9)zho!Y#u+yh*Y{!vG85eEJZsb+*Kn33sNnvgfao>Fj79AvL>|pI)3(-{Ek5Om zDhO6<^zaw3#R%qLt!nM~_jJLHZ*~hceKZJdsFc7ImxQyJqGPp4y05<4xrj=H|Nb5u z1B{z!Q$iSqGCtj7R?-KN5;eoR^m%bju+9^XU+|gW{?_P`5ztXctFA(xu^Qm#AL#FTtC)q7|A50<`Qe~ zmMk;xdV7PEjD5`Bzm!WTd~C$?7Gt%3{;b{AI_W6k5gk_OYo6FvlGORuY4~e%r>fk% z&$BI~oZ&BfVr3ieSQTiV;9 z09@D0TB=UZ8kD zMWr&^N*wzle*IZ=pnQ{Z0P}npgC8GXX1O1LJrT{Y=4HCW5x@|7S+Hql={nobcGzc$ zHB9&}EowRn1-)kdBEAaCiDDzY(tlM^14_|NQYHH$t10XJ=xL#g89BNqt|IICD;^H6 zf61{jYCkRm{4y$ zL>=+-CeW-?BiWETdmJ~OJ5B`Xg;!D^nm*Sk9tG9co`u9(=cvO5?~qpkC>lLAiPZelmtD`a@vc{O*OE-YOp36Y8mVd`aJ0e66WB-2r;>mQ}cNFo@e;uX*S(4sm^rlPE_V4#=0Yk0cwm$PBJ*h zu8^b4^p7};K6vKmvS1cxLCVZ_-ogxtANdS+;OA@g4vd~d$8zEKR>R*}jij65EXQX% zID}@Z>APW_J34f#V>R4iYXklwgdZI%*0`c|sjo?B@}N|~&;(&ah02%>`DHHgQoVv% znt6%ELg9ndcsI*atC#0#DOGX$R7!bT9_2 z&Y>Uo@+5jWD`)y{E^4|EH#sf}n<^t}Qhfv|$y6(Z99OF=^7F~$=4cK2uV{0}4h@qa zcH9DIe(Vs(2LFV@#-XYA^lNBdTV7Sd%rA7j?w?fD@R-;!19*I)1G^skWh2+N4O0$` z);b}toHVJuPL>P0!T<#zq#|meJ;}54LEp7P-a_JG6tJ}w8f|_8FDRsgXPdf}@wK*F zW5WL2uMf$QV5_Dw?STu7{XuYz;47~_AW{J0Kz^57M@QH{&k*8?WI!9JEi0s z6RchOS1D>Ls7RGp=}LlXe34^IL`^A?Ej>-er4>K*ZZ`avc=1q0=<>9{%ZZ~TjwL5{ zEG7?Ebc&(&8p#Q{LG`YoMm|N}a9O&DgDMRF+D22b>$IBWusaNOILUL0wOH(U!&h0{ zG|&{rVMV%)#J5fgH@r<Vk6h5k&R!415Iy86$C0~br{jZy5Cv6@k zwf`n}!xJ)oBi+7)K?VK$J@bzg)E<}V^~Im!Z|qPzS<;ennMj!&Q^oasI&>++-(j){ zro9R}7|4!DI*3u#^u-hntKh!_pn#L3{#GoDu0FvVb14_l*Wg)cK;RMqkgq~&;bNY0 zyc}mN-s;S0Dl?QZ(jd&g>EuYVMW=F>J?!lXrrBsbn`?c7(?2d11JWBf7!UCpw(}`M z0%N~pHCx`M#vth%--_NEOkS32sBeO5rRjgGF$_JI<|ZUZA;BM6L-diH44>Dg45zQs zX?UvlAq$)Sl@0Hi{_W%tRL=c|+FGNWTfzw^kY{%`;oO(GG!#1GybkGk^w1!=gZytb z+>vq^>P=I9C9xZ|<%EKKl>JbRmXjnImM$C{K)ysh z$WL=)Pa~cD$rifc;d%=U|AWpmr#rM+I(XJ@B3H-{+wxmIMQJ%)4FxHyvOwk~Ob2!U zZZy?|k*04#Nz)Xfhx3i6QF&E*Lu#zvPR$_|tRJJCiJ;mQZu?+hWqg*mB&X?2LyL^& zVp%S=!CHrvTZBdAF*DC?_{_ZGm?K?15-Uq?wbRj+8YC|3iRzJrz=Ro~>Ho?z|EB)6Bl^~bNl-0ipS z(@exBD~C{<@;#>d$W))1>K)${>U$dA9P(W%}@4Jh4aBx*}c`#p1Hs-$4#Qjl6( z>AKQ2{w<~UNVPz!D_v=nww10h5`i)!%@&-DKzun1D;@tX zF{7B2$G#awO_v#xq`aF8^WEZZI-lCRwU&;FWva3e>Ef{V0oanrwv`8ROAYl`7RU11 z2jF+Yqmp!WvGz&}yBk*MZCqW{@W<-ps8bR%O4y6BLwqxeJqtb1k@%dF0iL+azRHy# z=S@}!0Z@IW-cfJpsoX`Ka5v3r-N7^2IGmXj(8EbU&!bGVp+XtupJQiwg@00BL#yB- zL4JY=t}=z!Me+BBGR0pt-YPK=9P|4UGBi>rrW=kn>~hn}O+wza-`4Z(f+Z7%~@-uG)}; zlPNb@zSW|qU6YPF(`!<{ldfjO9E7HTM3so+8^Zm{h)^K30mbf%`f8U#Cgew`pBAJl ziMe^7E{BBx^GQWSHG2)Uvc~aU1fi=es3wdGsx3ivb4k#@GpMS|Se9+U(oUmvg_-z; zCTNC#HH%^eOWT5_9|lYR74+|-&?+=irMt{b@RLEHLReKJE9YrRG33|)d)*QDJ3R|D z7|yK7@hlQBoIBGXo~SVp9TC7I_HZ)GMTZ0(+p>+N&J-@C3FM=EtvrV!F}(6KVx zS}G3=Xi~`T(O38s{?&Olxq5K`0a`KlIKvyXYlG<)9L+}czr-~nuwwI8l zP@frzPHJPwaf#Qub){XWnQJdX6wR3(9%d?gHf0gZ(yKc+3N+%8(u=U^SZ(pU73B*W znOa=M(T$24@zp?2W+wX1x2OPwFNI+M!|s3i8a}bMVQ>s3AC-I(3gWX559swg4<#7` zrE3vvWJ`&qBGB$+lXQtb;nb}nrcW4&z<-OF2xc4ez8kIADToIl zC^hWaaqOP>N56`%xkhHY)_N7Ms-^ZI#E*r}cb+eU*338*rCt*gJ5gmsShCE9xVSj~ zfDO@%$|65l{#N{@;$3u_2s*MG?;;ydMAdpDYI;cofe8;ye4S#4nu{OQrBZ{9C5Cr# zi@ph}@JNmT#vWlZixr0YPvVZ^R_c=5Q9=KNB2RpXLwGIcozjikpvuv5knf88V$T9$ z=d08W`R<@f`EGK;J9#Q^a+?w8r9@Q*q~faNh$V4^k@v&-{z_8z!FhbRce-%$ft1V zya|+XR(YAHl0S|P$GRxOfs^W2>hh*zr@@)I?fy)6=TFpY_EfQu(GWYJgI`eDsH&v1 zlr=Fc?CJKjv`Cj%#}0uR^(#g8S%=*e!dCtJkcfofK69!|BBednrnPvrpr%EmK%=Xxs7 zO`YcdXCqb28025sc{6=C6e@v>i$`S^TB;Zx!M+)XP(K+eeCp^At3#z<@VOF=wH|x~m*acPU zic{TcyYDKeth}f4DkmVGTOw*X)4xk?X2`Dvk*o&#w?zk~@(usirol+IWKrd5%$;tN zx*HxfNE075P2VMa{tY-Fq+a(_&ZbUIUfQHHo(GllA*&q~$*HrQObHv}q3o0xiM)rp zrzEg=wpVi>q7(fdrdZ218khC5g`f^W;QkWUiG!?-C1}hEnnp^Au<%05npM@vpc*!x z4hpnR6KhA%cUaS@L|fEjgQ&=BI^IO;2WD2-l1t#3T&sW{8|lM3A7}D{J}gfEkPG#N z>ARzNE|;E#f8%crY0FwT2ROlXSS^qjm~96kAZ3745Y3Ok7_c&?XOzTEA7}bZPG=uz z`o@l&k;LSL}SDZjTe?N>T}wNoa2n7E>Zot@eIuF`ijr^5=^dWSRtmGAT zG+@VQSie36HXmnHI)o0ydJJ;zc_v!?V|%4N&q6HK#_+cH@C;r7V}v56y52V}KXz7R zfjfG-scM;PEc08VCq!`U8JElppfxo-&zS4o{xzN!LB_}!Vl{t1y(0CZb-HeEKyXw2cI_z%HzNvQ5g>_opiLNuU;E?F4CTiMD z>&FqTk!_vEHzG!^j3WH#mOrNDRl0IB;Sh7Uc2CZv0i4Dh;r}AT$5*gf7@mTXGguk@ z;M~88HA>=+NNKiGeuaqfU&5i}c|F&5Zhl?HsmrLqFn%YxL(l#7FZ$nUbW?yHwz4c- zx+S#tlTh0?4l&KQSr>3f2ZGQL`>yc&VzQ>=ltyrgL-}nS9X?;(00Af_x~$qmsdL{ zvoHD8hBU%GT&W0N2CevR$ez2AN}RKZ<|>%Rm30Jmv{WAMNtel;kFXwWSr>9`Z#Kby zwk=p}vffGE*<17xot2^?)Z8068VHcZLDUe06~^M*MNduG8YG=?vIyieuEeu&lK`*U z&kgu(1vltTD-ZyZd4%ha?1mepoY+Zkn3?bV_5N3%s;HG9`O0Qy$g#)WkuQ70D^32cI z4|LX_8+sfQdMj9ZXh~lYu}nQ6Tm>?$seUdRM1na?^?)##&=*rJ5w&TsbX(95Q@90D z9<8pYdTX$BkuWo*6N(JSw$cg3hH5Qc;qPd4mrgD!om`yC*X4HvJ=N=A?*^Cds8K%= zKL-Zd+$pk};lB}1St>Wx*RoFIlA}*n)y4kmk#>xZt*{eH6H&h}p3AR)hPx3fj}|QV zM3U%n;uX%=WFy{Oku#&tnA>dR#3qK((PicEv5rVtnL^&)m)lgq(Evsvg#yH%)uiR8@GMZ4V``_i9_D1X(7^&BXP?5VT2jgmT97>~`^k$eZeTJwy_W&`BM!e{;y4 zc+8NneTrMnbZ5L2pDUv;W@2VuXz$0`W6`#aB3X1;f4>hXwhg1uMB6aB33IskPmC*L zfdjC&PHTP=_X)Mv^a1$`+o?{vQ5$Ia+SBr987QnPxIG_xrMf=9?L)WW_$-thjo;tL zShQvm!ywIo9i~fLpq?T3A2tXi*(}4yfLmfNp5abiLN$8cveht8qXULo-L{JgG0WMN zIV|hNdk?5?Y~SjZv=q;kZVgzoxZ0h#Ib+XFOwJE&`3&ousW-4M14DJf`vHnrLqK^w zo-hZ&k`C?O={NE`@jIy9(aL25_G?(baI^Il&W|Cbq+RP{`+Bilzr{74qp!HR0hQo8 znw+sWYt8zj}^W+0sfr)lYw`KR6K31z#1yruNAsBQfr-)Bc9FRnjBA2hTLv z`us?tQ3X82gY2`v@tc?(0A8&a<2-u^8;7pxkFGLd>2!5!+x2vvp?hw+r#vo zCuPLUjwmt>ORk|lZ@S$`&dH6R?}!nrbCs9mEutZrvt2&a;f+U|j=k)K*QPokB0bx{ zbXc|lo$0j==z51uqaEM*q+B99h~=Y}h;OzxI>7Ncf@-&cdm_CsL6XxN7McF9&BW;= zd7w5VPA}uvb8l-)tKkW5l;KwZIGw*^JfyO{W(tE^9_2A{>JM|iBel{hcR zr7YkfSo4Q+ovO5s(LEe;1b1`~_2aX--(%LFGu6?aHS42=8?yP&RCbaZyZUMY#UWEo z2kFV|h5CxRS`)4f6iJ-7O$w^xo|7M#RvZS#xwVtBb^qN2)(Ae8;orecBysxBbm@Ma z*Fs6>y40eK?}?VN4xqKcCA&1A-YKHyP%D2YOSR+oSw@%MGwt(CsiwzZYkemB%MRE5B))J!1MDp z7=wcT?FLt=(`^fO={luJxxYg_Decf5$CqYu^ni>3dX1;D3lxqWPE1?ROHY)0n(WrP-G=OVadmBjU}w?2kq6BmK;PEtJRo)3FNPz0T`VWfu*lN>x*dqOV{tZa;W zSyfC?0MGasdj-(bmDqpMH^W!!PD9#+sIqGTICYq${ z02G9{_100pVspX>Oh=0>E*;HTyR!D`n6BP1QD!!a27a!tvu2te?XW*WtKqo(+Hlu& znA$8W{mx_dQ&B=BbSF}W+NM1zYucBnH=?H)@!4cFIJLahSUlzg#D(VZiBY@of(`ri z$R&60jb*7(@qg^2)tsj7LI0TI8C%o>&HmkE@yv0LY#Gh|nf?`xPix63wM?AGum`VY zPGAi(bB)^xh5^mX_tKd$>G0OL82GNk8u}i!;ZFg>Iob-T$@y{ZNs`lam=4SaKsjp) z_fBzSlMzg`kq*kB(pFz}ag$-HUrD#r3eb&U8Bu$xy9FU-!~l4D${LRKh%-ar^Mjhn zA2t{VfYQy0NlcISVKJ$#@oXDG*yzDVYo+V_9Uus^G`@p69V<+KYwx~Y^c6txq6UK4 zVRlW@Ek~ldSe!htqz=z8Pi4Y9F~8lZ==Hp4WoBg)UX2XAFW2j_qz3ALBK7$Z$GSZM0kr;}gYDYVAgX#Z9PzcrjT!`3M zRrDqdsxx-1>DV+@IoFL%IN!_!HjGUabp$z`6A;&d4hGsr(zmO;%_i|knTMI%k-cu$ z7~Wj@?tbwyffe1ZeRq-fpVy1{j{{Yc7dhN9WLAz!TPagTC8}novJV$iqMt zDJ+Hn4)aF}-HnH3`=#=BU_RDLmCB-q*J|wUjZ;O`HnSvlBtsd8IelD0W>0rrhC<^F z3)3t3@yu^#3Tab!>@>D*82_QDHu;bOBzoDpc^0?%vC-J>wMk>`TZ!uc`Q!4$lyzWL) zCl!k%;y2u={P#8G3-qJl&5LKgC*^*84gO6R7B##a^tVgK@lEJ<6~{UMRog<)d84dHjyC-bC7$`$$P|fd?MgRRLng&De#H}rJ_KJvR)3E5; z=W%w!A^W`6bL#Yt@;#nYo1Y^b$Ml>Uc$85qBM*9knCn^Cgzbssv$&{``)(np^dUYQ z&B?lS7|AP4fD8M;R4>R5&j|N=e{0d-R8I(E4VHqXwixVcv-AnsF@|H4>HnhX2v~{i zZg+Z2$Bv-mBdIkcQ9i%dnQr$D;B)`mo<*N?K~fJkO*&cS4rhcvgudsN2yNV9o3?PM zX(pBkO*A1$VCF|?jF`Vn5YbS>8&VEV*`4nF(o=VKL+&7)Eq|2PbcK9|UPWAx(7<8j z(qgos=Go{fA-F1oWs-RVcrK$dO6SQ~{B2E~|F$BW3{S^86-wk0-&A*tmtA1`gLw_V zH`J=2L_kG|V=_D?`-pz}4mhDF#4$neb3G;SkYP75P64_#ln5v}ROTa0KQ=!w12)23 zvWDqsib+}%GdT%m_90?;R7<5JrAzgk`X)M?4DtC7dub2fze!t3;wD4ij4zloGY3~~ zX8f-7^nnBhT(QCqth#g^*Ij%%Gz<&gh8q|ico3G-vtTUHCP_}jWJ?~s8nwMfof*bB zrIrZ6$tZSA#{)ug3_rdsD=`BZzA?_Gu=HiT^hJ8Yt7W-t&z+RW^l41rK3)GkeH!l# zXZsY_eUg}AcntayQMi_oQf{&4Zq+gYLZft}sTS*n^Wy~D24z6rHvCo2rqc;V!=q4l zqtGVd_y$y!!qlcz+&C9bIQ$}Ef%@aU2-Jv|fm>sAB0Rfp-D=4`q$f{|YEkSxj% zL&-*W8Wr0>l&%;bw4;z&8gd3p7t6xv1670v_^E(!d=2aSd2S4@K>XRo2VNXn0+e2D zc||?iCCo>|BJ}Jf5Tb1Ioia{XQr8D?TMY$0B~_a}C9{gL-1Kr_?WH3%+$c!7XMcyp ztM_nY-aZM$AdwRa|IW3N3MX0cmlbf_t}Or_fK< z+C_fZT_hky_$N8QX(vGbZ+)m!Hvc#DGQKg5!uA$7UWJ|ovLYBYzI~80v(f7$$K)<@ zb#WtSZAMEF&dYc^jt~vrc1fEh)_ae1Ym?VdQY;z>VO3mO=f5H_FytJrL;igsIo&xi zMGLzSXJ-;^L zrJ6!`0XAa+HKf)}uo2*?*EtO(->RX1k}LO_J;>u<2Su+lBd=kz7^IE>PBf_!M%#crEC7HF_$N#;xv#zu8e8%1-W8D6A9#$Gf}|rP z!FBXV!Ae(Pp^Yfc;dw@Mr$LYTty&<%@aY{J!$;|+Vf=?5Sa=_gDTC`y;zs7;#tO+& zh_x#bEX%%41S_(aD#V-Xx^ENHxP45jFmoSU%1>~~rr;8^DnRu{>lnh0IBFo`F}wOS zj|8mWp9W@(&(4!$f|#$osf;3Zi|<#Hd@2hiu9?G!8BQx=>kX1 z-IA0YL(tEj)8{Xj&6V&{EYYn52n>i_ zDw91|%Ou)>|H*+rpp}eAJGCCAwZTLpUV{T*3BK^p4e3?2u_OtF1i=^Qy zDKf8bhdOU!bDD`^9YK*wE8PtX;y*?y?B5tYq8eTw!2)b}H=Zpjm~h^$oo>freA~dD z&O(|jdN(sKx%hExBCb*#@gaM>u8*@ z#A+RFCN3>D{TI3$-qV7bQPl9#O0uapvsA=ij~B~!xz1%%FHfMua?)vF7&qyHX}^)o zHJ+9~Fjoj1X54Z`BS;C+ymr^FU)U$%rf%U4SRy)9tePLUyV`kyDlR8g*Y0|eYkQ*a zDAx58{(R94cIUiR(t(wkPp^qvxzVHLdn#VUHv)C3b;>n|>(pSa&`7u%xDnTcC#+G+ z2qSt06-)fQD|k3?*2C7d1WBdtvw4@N>trMa4W2A}Bko)rT3be0Jw&hdbGyid?jl!9 zk^X4tB?3xXa)+&jAmQ{1PfHlY5yIt%JR>XJiAo%J28WT*gzttScW0RID>`8CIW17+ zn~l6UZtuSbVk6iAt&Cn7CYwTXCQ%k&5!T}0-x#P#j{1h^3blrkq&`r2uHu zg|;AXE43PKYFycLl-xSDBMnR>TuwjSHY1f9;MmUVZ8Nr-{x@fk*HT2NkbJSe=@>3u z%dZ)j6G;T<*%c^Z9q9mru0tn*jeeyY&))`#5{hC;Wq{4_LOTc!Vt}JE1C;O)TZ&(y za(x3365bIr^cM~9iwu7lGCVnYWKiQ0!``$9rA7QFghb{GvMdxV=@l$l(jE7Sw2QlD zUwt_ymsXfEupG$gex?D|ubvGRRGY&Zg{)&!xtn4jzsvFUaz-3sG@V9~5x=?!rJg|( z_X-9Oo*M6o3rQHVHG0mtWD(k-N^e*qSCzSQWWwB8#%~F~BaK|6DCE~)Nwn6568g1O z3=$ipZRRNKSZDe#bvG!DxvJUzFatRDi_0iJ{ho#IcK34+C#ST1D4dgtYrkiqn7w7> z(4&W?TjNl~iWW8`s@Daa$vw?$s^+59Py0kH{Row=7xcFWY*!)-S4aG|Q8`WLbB=B7 zFesquzinhw2|`lpWYhms(7t|<#{*ub4wt*wP@lv99{cI>{EHYG9mdT-hNnFZP7wYjqu4$G)%Cysgvst^a;y>WGg-J>TnRm1j~2Mh z`rXaBBC4VV79-+D>n*aI*y>Rci?xQ-AO~rWo;0v{W(lTpwIZ`ihgPx9s5=vY)ywvB zr&Cix{%@m`q@~H-E%~x7wd-(%jn;H&O0$2`)V-P~yjPeh{|dq}X#=OTgPSSp2>Eq8 zGI?_ZK;XpEu{&i}p#R+}$zDu=$aV+kbr&U1K1v??4H}RGL3IH3AAipj-z6*;{+CoZ zrXrjOz?WUZf9?~NJkx|NTXy@24V>#)YTQldDPX9of+$XIs zAOvS=#x6s%=-s4k3Fjm$fGF_@_I)c@Q5T3ZBkR(^#dQHQx3&=OqKv0T)XiNHcc4_W zxFlXNFgDms6b5rAmYBH{i+NeRQp_#6=|Ew+(*9&%I#86Zv_D7(ibWRf>pys9QVYu0 zAWZ+9OHo;7{RijkS3SO4?>xy!cn=N`X}b}ZMNL^3x$5jn@ZCDhz8Y-p+zV*C(szjG z*4aFie+)FVvb>eN+t3Pe9gy&MIkZ62&5+wZ8*JXEvfAR}C@PdbvWg9-boKKuP(@G= ziXQ9oxuhu)6MAA!D3X{{%l|sA>-n9=|LI&eM-s143ZnChaPDT}6%E}9&9Q}&S`2#; zeFsY12?1P;;DDF!r&h{W@RXkbKNJk{W1asHy-MCy%e8^YJ3Yt#Vvc;lbIFxq{eUv^ z`9AwQVMwfj`nyGLt|JL{3MZU$uu~YVhnaZR%Ts=e_0KCM_K#>G=xiB3|H#d!2Z_fk zxHgiL-9Yf(4@nZTMg*1*Vlq#Q0=$b%StLcou|d#ThqdabxpXV>c!;NcK6>2#NKz2; zk-YBt=q~xluzOa=8#-}?{WHz}xq+YL_4^Z#Pq*)*_D{3@Gt2&&%a2UC{j=15_=x@U zsQvRd`)3(HlzhtmX|*5j;)nU{;wN43?cJhTx=XmhbU~MWldo^yw{N`q<_)=F+F4~A zoBw?dhPvwf4Ne7HZaZlEqWt9KPS_`H0#fEg>OyXCErWO%h-1%0@UIUEx+~{J{cnu zYR&i~>fP4Z57Py^e{t{#Y)1m?e7lWp4jDw|StZQ~>XRd|WP1}<4=;H=8p+0rj8+mw znVl<4GE$*#N)GwWowCdOIlILAvCi$b|5JI7JqE^6pA>Mw_g8=4_mA4&Z~5NutxLwr znvH|?rsB?F4b1WP$?8zfbip%BhgcO}4lp>8W`?19@6y`ZW3AV3;d9uVPa#qHkxfi2kNCFNNSIzn^93^h#0GtS|{Tz%>KTh1s(ky?V$iWvd}e zGuYE2$)-m*Wf6@`^k_s7&hDbjddoR0lNAEzD0iQ4G}li@;Z9Z!1T>Lq;_c6UC>1w2~svia6SeabGC zJMt0Qsq&$jN!O*>>wa?@>GXwb>>^gfp_({791=9a$~1vL*pDQ=ub^JY*25K5g4=reR^4Y;L#J$W)=D@wn^!t8_ux5ym1g6s@SM-gVbV2N zK9l5jxqDXRMh|^qy7Xc!wI75pI0w(_TUPh@_&#NOZ2S5|7i%*#X3t8_A$lQS&)g>K zvm2%Ec6(2OHzsFuRVH1-59mvo^yOt;{s7#SbX{~nU))mm=lz$R)L+@DeaarxZLF9Q#%AN0^SUmCmN(mE7;XOUPA#o~U=_FVP}P=5Wzlaq^L_KPw%SnEFZl#dYIvOT}-_GNwv2hliFr1 z*=-Pd

  • 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�L?o)N?s^q1~;6Fvk~T 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 z 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

    &2Pqcik`e9NFXT|4}HZ!~HI?(dV0!`lw2Mq2G1N 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

    Q5G6AB#yrx8#JHydAu(M7<+aJ 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

    );H}phz6HGLhBVc0 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 Date: Sun, 23 Dec 2018 18:41:46 +0300 Subject: [PATCH 037/301] and more padding --- BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs index 2fcef986a8..6a9c3cfa37 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs @@ -27,7 +27,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx var traceInfo = new TraceInfo { - Disassembly = string.Format("{0:X6}: {1}", pc, disasm).PadRight(40) + Disassembly = string.Format("{0:X6}: {1}", pc, disasm).PadRight(46) }; var sb = new StringBuilder(); From d37ee3971678ba3d5997eee1daa7f3d9d0198165 Mon Sep 17 00:00:00 2001 From: feos Date: Sun, 23 Dec 2018 22:16:04 +0300 Subject: [PATCH 038/301] and more --- BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs index 6a9c3cfa37..8fca3a8e16 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs @@ -27,7 +27,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx var traceInfo = new TraceInfo { - Disassembly = string.Format("{0:X6}: {1}", pc, disasm).PadRight(46) + Disassembly = string.Format("{0:X6}: {1}", pc, disasm).PadRight(50) }; var sb = new StringBuilder(); From 2121107d1a43e86f5154c855c02c738f624af6de Mon Sep 17 00:00:00 2001 From: feos Date: Mon, 24 Dec 2018 01:59:15 +0300 Subject: [PATCH 039/301] gpgx tracer: pc & 0xFFFFFF --- BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs index 8fca3a8e16..377a6ab7be 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs @@ -23,7 +23,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx { var regs = DebuggableCore.GetCpuFlagsAndRegisters(); uint pc = (uint)regs["M68K PC"].Value; - var disasm = Disassembler.Disassemble(MemoryDomains.SystemBus, pc, out int length); + var disasm = Disassembler.Disassemble(MemoryDomains.SystemBus, pc & 0xFFFFFF, out int length); var traceInfo = new TraceInfo { From 62c178ff2e7a969e3d95af12fb7708cc9ca1c788 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Mon, 24 Dec 2018 12:33:09 -0600 Subject: [PATCH 040/301] GBHawk: add default bindings --- Assets/defctrl.json | 3020 +++++++++-------- .../config/ControllerConfig.cs | 2 + 2 files changed, 1527 insertions(+), 1495 deletions(-) diff --git a/Assets/defctrl.json b/Assets/defctrl.json index 64ab6bdc4a..dabbc31374 100644 --- a/Assets/defctrl.json +++ b/Assets/defctrl.json @@ -1,1499 +1,1529 @@ { - "AllTrollers": { - "LibRetro Controls": { - "P1 RetroPad Up": "UpArrow,J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 RetroPad Down": "DownArrow,J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 RetroPad Left": "LeftArrow,J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 RetroPad Right": "RightArrow,J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 RetroPad Select": "Space, J1 B9, X1 Back", - "P1 RetroPad Start": "Return, J1 B10, X1 Start", - "P1 RetroPad Y": "A, J1 B1, X1 X", - "P1 RetroPad B": "Z, J1 B2, X1 A", - "P1 RetroPad X": "S, J1 B4, X1 Y", - "P1 RetroPad A": "X, J1 B3, X1 B", - "P1 RetroPad L": "W, J1 B5, X1 LeftShoulder", - "P1 RetroPad R": "E, J1 B6, X1 RightShoulder", - "P2 RetroPad Up": "", - "P2 RetroPad Down": "", - "P2 RetroPad Left": "", - "P2 RetroPad Right": "", - "P2 RetroPad Select": "", - "P2 RetroPad Start": "", - "P2 RetroPad Y": "", - "P2 RetroPad B": "", - "P2 RetroPad X": "", - "P2 RetroPad A": "", - "P2 RetroPad L": "", - "P2 RetroPad R": "", - "Pointer Pressed": "WMouse L", - "Key Backspace": "Backspace", - "Key Tab": "Tab", - "Key Clear": "", - "Key Return": "Return", - "Key Pause": "", - "Key Escape": "Escape", - "Key Space": "Space", - "Key Exclaim": "", - "Key QuoteDbl": "", - "Key Hash": "", - "Key Dollar": "", - "Key Ampersand": "", - "Key Quote": "", - "Key LeftParen": "", - "Key RightParen": "", - "Key Asterisk": "", - "Key Plus": "", - "Key Comma": "Comma", - "Key Minus": "Minus", - "Key Period": "Period", - "Key Slash": "Slash", - "Key 0": "D0", - "Key 1": "D1", - "Key 2": "D2", - "Key 3": "D3", - "Key 4": "D4", - "Key 5": "D5", - "Key 6": "D6", - "Key 7": "D7", - "Key 8": "D8", - "Key 9": "D9", - "Key Colon": "", - "Key Semicolon": "Semicolon", - "Key Less": "", - "Key Equals": "Equals", - "Key Greater": "", - "Key Question": "", - "Key At": "", - "Key LeftBracket": "LeftBracket", - "Key Backslash": "Backslash", - "Key RightBracket": "RightBracket", - "Key Caret": "", - "Key Underscore": "", - "Key Backquote": "Grave", - "Key A": "A", - "Key B": "B", - "Key C": "C", - "Key D": "D", - "Key E": "E", - "Key F": "F", - "Key G": "G", - "Key H": "H", - "Key I": "I", - "Key J": "J", - "Key K": "K", - "Key L": "L", - "Key M": "M", - "Key N": "N", - "Key O": "O", - "Key P": "P", - "Key Q": "Q", - "Key R": "R", - "Key S": "S", - "Key T": "T", - "Key U": "U", - "Key V": "V", - "Key W": "W", - "Key X": "X", - "Key Y": "Y", - "Key Z": "Z", - "Key Delete": "Delete", - "Key KP0": "NumberPad0", - "Key KP1": "NumberPad1", - "Key KP2": "NumberPad2", - "Key KP3": "NumberPad3", - "Key KP4": "NumberPad4", - "Key KP5": "NumberPad5", - "Key KP6": "NumberPad6", - "Key KP7": "NumberPad7", - "Key KP8": "NumberPad8", - "Key KP9": "NumberPad9", - "Key KP_Period": "NumberPadPeriod", - "Key KP_Divide": "NumberPadSlash", - "Key KP_Multiply": "NumberPadStar", - "Key KP_Minus": "NumberPadMinus", - "Key KP_Plus": "NumberPadPlus", - "Key KP_Enter": "NumberPadEnter", - "Key KP_Equals": "", - "Key Up": "UpArrow", - "Key Down": "DownArrow", - "Key Left": "LeftArrow", - "Key Insert": "LeftControl", - "Key Home": "Home", - "Key End": "End", - "Key PageUp": "PageUp", - "Key PageDown": "PageDown", - "Key F1": "F1", - "Key F2": "F2", - "Key F3": "F3", - "Key F4": "F4", - "Key F5": "F5", - "Key F6": "F6", - "Key F7": "F7", - "Key F8": "F8", - "Key F9": "F9", - "Key F10": "F10", - "Key F11": "F11", - "Key F12": "F12", - "Key F13": "", - "Key F14": "", - "Key F15": "", - "Key NumLock": "NumberLock", - "Key CapsLock": "CapsLock", - "Key ScrollLock": "ScrollLock", - "Key RShift": "RightShift", - "Key LShift": "LeftShift", - "Key RCtrl": "RightControl", - "Key LCtrl": "LeftControl", - "Key RAlt": "RightAlt", - "Key LAlt": "LeftAlt", - "Key RMeta": "", - "Key LMeta": "", - "Key LSuper": "", - "Key RSuper": "", - "Key Mode": "", - "Key Compose": "", - "Key Help": "", - "Key Print": "", - "Key SysReq": "", - "Key Break": "", - "Key Menu": "Applications", - "Key Power": "", - "Key Euro": "", - "Key Undo": "", - "Key Right": "RightArrow" - }, - "NES Controller": { - "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 Start": "Return, J1 B10, X1 Start", - "P1 Select": "Space, J1 B9, X1 Back", - "P1 B": "Z, J1 B1, X1 X", - "P1 A": "X, J1 B2, X1 A", - "P2 Up": "", - "P2 Down": "", - "P2 Left": "", - "P2 Right": "", - "P2 Start": "", - "P2 Select": "", - "P2 B": "", - "P2 A": "", - "P2 Fire": "WMouse L", - "P2 Microphone": "", - "P3 Fire": "WMouse L", - "Reset": "", - "Power": "" - }, - "SNES Controller": { - "Reset": "", - "Power": "", - "P1 Up": "UpArrow,J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 Down": "DownArrow,J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 Left": "LeftArrow,J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 Right": "RightArrow,J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 Select": "Space, J1 B9, X1 Back", - "P1 Start": "Return, J1 B10, X1 Start", - "P1 Y": "A, J1 B1, X1 X", - "P1 X": "S, J1 B4, X1 Y", - "P1 B": "Z, J1 B2, X1 A", - "P1 A": "X, J1 B3, X1 B", - "P1 L": "W, J1 B5, X1 LeftShoulder", - "P1 R": "E, J1 B6, X1 RightShoulder", - "P1 Mouse Left": "Z, J1 B1, X1 X", - "P1 Mouse Right": "X, J1 B2, X1 A", - "P2 Trigger": "Z, J1 B1, X1 X", - "P2 Cursor": "X, J1 B2, X1 A", - "P2 Turbo": "A, J1 B3 X1 Y", - "P2 Pause": "S, J1 B4 X1 B" - }, - "Nintento 64 Controller": { - "P1 A Up": "UpArrow, J1 POV1U", - "P1 A Down": "DownArrow, J1 POV1D", - "P1 A Left": "LeftArrow, J1 POV1L", - "P1 A Right": "RightArrow, J1 POV1R", - "P1 DPad U": "X1 DpadUp", - "P1 DPad D": "X1 DpadDown", - "P1 DPad L": "X1 DpadLeft", - "P1 DPad R": "X1 DpadRight", - "P1 Start": "Return, J1 B10, X1 Start", - "P1 Z": "D, J1 B3, X1 B", - "P1 B": "S, J1 B1, X1 X", - "P1 A": "A, J1 B2, X1 A", - "P1 C Up": "NumberPad8, J1 RotationZ-, X1 RStickUp", - "P1 C Down": "NumberPad2, J1 RotationZ+, X1 RStickDown", - "P1 C Left": "NumberPad4, J1 Z-, X1 RStickLeft", - "P1 C Right": "NumberPad6, J1 Z+, X1 RStickRight", - "P1 L": "Q, J1 B5, X1 LeftShoulder", - "P1 R": "W, J1 B6, X1 RightShoulder", - "P2 X Axis": "", - "P2 Y Axis": "", - "P2 A Up": "", - "P2 A Down": "", - "P2 A Left": "", - "P2 A Right": "", - "P2 DPad U": "", - "P2 DPad D": "", - "P2 DPad L": "", - "P2 DPad R": "", - "P2 Start": "", - "P2 Z": "", - "P2 B": "", - "P2 A": "", - "P2 C Up": "", - "P2 C Down": "", - "P2 C Left": "", - "P2 C Right": "", - "P2 L": "", - "P2 R": "", - "P3 X Axis": "", - "P3 Y Axis": "", - "P3 A Up": "", - "P3 A Down": "", - "P3 A Left": "", - "P3 A Right": "", - "P3 DPad U": "", - "P3 DPad D": "", - "P3 DPad L": "", - "P3 DPad R": "", - "P3 Start": "", - "P3 Z": "", - "P3 B": "", - "P3 A": "", - "P3 C Up": "", - "P3 C Down": "", - "P3 C Left": "", - "P3 C Right": "", - "P3 L": "", - "P3 R": "", - "P4 X Axis": "", - "P4 Y Axis": "", - "P4 A Up": "", - "P4 A Down": "", - "P4 A Left": "", - "P4 A Right": "", - "P4 DPad U": "", - "P4 DPad D": "", - "P4 DPad L": "", - "P4 DPad R": "", - "P4 Start": "", - "P4 Z": "", - "P4 B": "", - "P4 A": "", - "P4 C Up": "", - "P4 C Down": "", - "P4 C Left": "", - "P4 C Right": "", - "P4 L": "", - "P4 R": "", - "Reset": "", - "Power": "" - }, - "Gameboy Controller": { - "Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", - "Start": "Return, J1 B10, X1 Start", - "Select": "Space, J1 B9, X1 Back", - "B": "Z, J1 B1, X1 X", - "A": "X, J1 B2, X1 A", - "Power": "", - "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 Start": "Return, J1 B10, X1 Start", - "P1 Select": "Space, J1 B9, X1 Back", - "P1 B": "Z, J1 B1, X1 X", - "P1 A": "X, J1 B2, X1 A" - }, - "GBA Controller": { - "Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", - "Start": "Return, J1 B10, X1 Start", - "Select": "Space, J1 B9, X1 Back", - "B": "Z, J1 B1, X1 X", - "A": "X, J1 B2, X1 A", - "L": "W, J1 B5, X1 LeftShoulder", - "R": "E, J1 B6, X1 RightShoulder", - "Power": "" - }, - "Atari 2600 Basic Controller": { - "Reset": "D, J1 B9, X1 Back", - "Select": "S, J1 B10, X1 Start", - "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 Left": "LeftArrow,J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 Right": "RightArrow,J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 Button": "Z, J1 B1, X1 X", - "P2 Up": "NumberPad8, J1 RotationZ-, X1 RStickUp", - "P2 Down": "NumberPad2, J1 RotationZ+, X1 RStickDown", - "P2 Left": "NumberPad4, J1 Z-, X1 RStickLeft", - "P2 Right": "NumberPad6, J1 Z+, X1 RStickRight", - "P2 Button": "NumberPad1, J1 B2, X1 A" - }, - "Atari 7800 ProLine Joystick Controller": { - "Power": "", - "Reset": "D, J1 B9, X1 Back", - "Select": "S, J1 B10, X1 Start", - "Pause": "", - "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 Trigger": "Z, J1 B1, X1 X", - "P1 Trigger 2": "X, J1 B2, X1 A", - "P2 Up": "NumberPad8, J1 RotationZ-, X1 RStickUp", - "P2 Down": "NumberPad2, J1 RotationZ+, X1 RStickDown", - "P2 Left": "NumberPad4, J1 Z-, X1 RStickLeft", - "P2 Right": "NumberPad6, J1 Z+, X1 RStickRight", - "P2 Trigger": "NumberPad1, J1 B4, X1 Y", - "P2 Trigger 2": "NumberPad3, J1 B3, X1 B" - }, - "Atari 7800 Joystick Controller": { - "Power": "", - "Reset": "D, J1 B9, X1 Back", - "Select": "S, J1 B10, X1 Start", - "Pause": "", - "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 Trigger": "Z, J1 B1, X1 X", - "P1 Trigger 2": "X, J1 B2, X1 A", - "P2 Up": "NumberPad8, J1 RotationZ-, X1 RStickUp", - "P2 Down": "NumberPad2, J1 RotationZ+, X1 RStickDown", - "P2 Left": "NumberPad4, J1 Z-, X1 RStickLeft", - "P2 Right": "NumberPad6, J1 Z+, X1 RStickRight", - "P2 Trigger": "NumberPad1, J1 B4, X1 Y" - }, - "Atari 7800 Light Gun Controller": { - "Power": "", - "Reset": "D, J1 B9, X1 Back", - "Select": "S, J1 B10, X1 Start", - "Pause": "", - "P1 Trigger": "WMouse L" - }, - "Atari 7800 Paddle Controller": { - "Power": "", - "Reset": "D, J1 B9, X1 Back", - "Select": "S, J1 B10, X1 Start", - "Pause": "", - "P2 Trigger": "NumberPad1, J1 B4, X1 Y" - }, - "Commodore 64 Controller": { - "P1 Up": "NumberPad8, J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 Down": "NumberPad2, J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 Left": "NumberPad4, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 Right": "NumberPad6, J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 Button": "NumberPad1, J1 B1, X1 X", - "P2 Up": "", - "P2 Down": "", - "P2 Left": "", - "P2 Right": "", - "P2 Button": "", - "Key F1": "F1", - "Key F3": "F3", - "Key F5": "F5", - "Key F7": "F7", - "Key Left Arrow": "Grave", - "Key 1": "D1", - "Key 2": "D2", - "Key 3": "D3", - "Key 4": "D4", - "Key 5": "D5", - "Key 6": "D6", - "Key 7": "D7", - "Key 8": "D8", - "Key 9": "D9", - "Key 0": "D0", - "Key Plus": "Equals", - "Key Minus": "Minus", - "Key Pound": "Insert", - "Key Clear/Home": "Delete", - "Key Insert/Delete": "Backspace", - "Key Control": "Tab", - "Key Q": "Q", - "Key W": "W", - "Key E": "E", - "Key R": "R", - "Key T": "T", - "Key Y": "Y", - "Key U": "U", - "Key I": "I", - "Key O": "O", - "Key P": "P", - "Key At": "LeftBracket", - "Key Asterisk": "RightBracket", - "Key Up Arrow": "Backslash", - "Key Restore": "", - "Key Run/Stop": "CapsLock", - "Key Lck": "", - "Key A": "A", - "Key S": "S", - "Key D": "D", - "Key F": "F", - "Key G": "G", - "Key H": "H", - "Key J": "J", - "Key K": "K", - "Key L": "L", - "Key Colon": "Semicolon", - "Key Semicolon": "Apostrophe", - "Key Equal": "RightControl", - "Key Return": "Return", - "Key Commodore": "LeftControl", - "Key Left Shift": "LeftShift", - "Key Z": "Z", - "Key X": "X", - "Key C": "C", - "Key V": "V", - "Key B": "B", - "Key N": "N", - "Key M": "M", - "Key Comma": "Comma", - "Key Period": "Period", - "Key Slash": "Slash", - "Key Right Shift": "RightShift", - "Key Cursor Up/Down": "DownArrow", - "Key Cursor Left/Right": "RightArrow", - "Key Space": "Space" - }, - "ZXSpectrum Controller": { - "P1 Up": "NumberPad8, J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 Down": "NumberPad2, J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 Left": "NumberPad4, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 Right": "NumberPad6, J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 Button": "NumberPad1, J1 B1, X1 X", - "Key True Video": "", - "Key Inv Video": "", - "Key 1": "D1", - "Key 2": "D2", - "Key 3": "D3", - "Key 4": "D4", - "Key 5": "D5", - "Key 6": "D6", - "Key 7": "D7", - "Key 8": "D8", - "Key 9": "D9", - "Key 0": "D0", - "Key Break": "Delete", - "Key Delete": "Backspace", - "Key Graph": "", - "Key Q": "Q", - "Key W": "W", - "Key E": "E", - "Key R": "R", - "Key T": "T", - "Key Y": "Y", - "Key U": "U", - "Key I": "I", - "Key O": "O", - "Key P": "P", - "Key Extend Mode": "", - "Key Edit": "", - "Key A": "A", - "Key S": "S", - "Key D": "D", - "Key F": "F", - "Key G": "G", - "Key H": "H", - "Key J": "J", - "Key K": "K", - "Key L": "L", - "Key Return": "Return", - "Key Caps Shift": "LeftShift, RightShift", - "Key Caps Lock": "", - "Key Z": "Z", - "Key X": "X", - "Key C": "C", - "Key V": "V", - "Key B": "B", - "Key N": "N", - "Key M": "M", - "Key Period": "Period", - "Key Symbol Shift": "LeftControl, RightControl", - "Key Semi-Colon": "Semicolon", - "Key Inverted-Comma": "", - "Key Left Cursor": "LeftArrow", - "Key Right Cursor": "RightArrow", - "Key Space": "Space", - "Key Up Cursor": "UpArrow", - "Key Down Cursor": "DownArrow", - "Key Comma": "Comma", - "Play Tape": "F1", - "Stop Tape": "F2", - "RTZ Tape": "F3", - "Record Tape": "", - "Key Quote": "Shift+D2", - "Insert Next Tape": "F6", - "Insert Previous Tape": "F5", - "Next Tape Block": "F8", - "Prev Tape Block": "F7", - "Get Tape Status": "F9", - "Insert Next Disk": "F11", - "Insert Previous Disk": "F10", - "Get Disk Status": "F12" - }, - "Intellivision Controller": { - "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 L": "Z, J1 B1, X1 X", - "P1 R": "X, J1 B2, X1 A", - "P1 Key0": "NumberPad0", - "P1 Key1": "NumberPad1", - "P1 Key2": "NumberPad2", - "P1 Key3": "NumberPad3", - "P1 Key4": "NumberPad4", - "P1 Key5": "NumberPad5", - "P1 Key6": "NumberPad6", - "P1 Key7": "NumberPad7", - "P1 Key8": "NumberPad9", - "P1 Key9": "NumberPad9", - "P1 Enter": "NumberPadEnter", - "P1 Clear": "NumberPadPeriod", - "P2 Up": "", - "P2 Down": "", - "P2 Left": "", - "P2 Right": "", - "P2 L": "", - "P2 R": "", - "P2 Key0": "", - "P2 Key1": "", - "P2 Key2": "", - "P2 Key3": "", - "P2 Key4": "", - "P2 Key5": "", - "P2 Key6": "", - "P2 Key7": "", - "P2 Key8": "", - "P2 Key9": "", - "P2 Enter": "", - "P2 Clear": "" - }, - "PC-FX Controller": { - "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 I": "C, J1 B1, X1 X", - "P1 II": "X, J1 B2, X1 A", - "P1 III": "Z, J1 B4, X1 Y", - "P1 IV": "D, J1 B3, X1 B", - "P1 V": "S, J1 B11, X1 X", - "P1 VI": "A, J1 B12, X1 X", - "P1 Select": "Space, J1 B9, X1 Back", - "P1 Run": "Return, J1 B10, X1 Start", - "P1 Mode 1": "", - "P1 Mode 2": "", - "P2 Mouse Left": "NumberPad1", - "P2 Mouse Right": "NumberPad2", - "Power": "", - "Reset": "", - "Previous Disk": "", - "Next Disk": "", - "P2 Mouse Left": "WMouse L", - "P2 Mouse Right": "WMouse R", - }, - "Saturn Controller": { - "Power": "", - "Reset": "", - "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 Start": "Return, J1 B10, X1 Start", - "P1 X": "D, J1 B3, X1 B", - "P1 Y": "S, J1 B11, X1 X", - "P1 Z": "A, J1 B12, X1 X", - "P1 A": "C, J1 B1, X1 X", - "P1 B": "X, J1 B2, X1 A", - "P1 C": "Z, J1 B4, X1 Y", - "P1 L": "Q, J1 B5, X1 LeftShoulder", - "P1 R": "W, J1 B6, X1 RightShoulder", - "P1 Mouse Left": "WMouse L", - "P1 Mouse Center": "WMouse M", - "P1 Mouse Right": "WMouse R", - "P1 Escape": "Escape", - "P1 F1": "F1", - "P1 F2": "F2", - "P1 F3": "F3", - "P1 F4": "F4", - "P1 F5": "F5", - "P1 F6": "F6", - "P1 F7": "F7", - "P1 F8": "F8", - "P1 F9": "F9", - "P1 F10": "F10", - "P1 F11": "F11", - "P1 F12": "F12", - "P1 Grave`": "Grave", - "P1 1(One)": "D1", - "P1 2": "D2", - "P1 3": "D3", - "P1 4": "D4", - "P1 5": "D5", - "P1 6": "D6", - "P1 7": "D7", - "P1 8": "D8", - "P1 9": "D9", - "P1 0(Zero)": "D0", - "P1 Minus-": "Minus", - "P1 Equals=": "Equals", - "P1 Backslash\\": "Backslash", - "P1 Backspace": "Backspace", - "P1 Tab": "Tab", - "P1 Q": "Q", - "P1 W": "W", - "P1 E": "E", - "P1 R(Key)": "R", - "P1 T": "T", - "P1 Y(Key)": "Y", - "P1 U": "U", - "P1 I": "I", - "P1 O": "O", - "P1 P": "P", - "P1 LeftBracket[": "LeftBracket", - "P1 RightBracket]": "RightBracket", - "P1 Enter": "Return", - "P1 CapsLock": "CapsLock", - "P1 A(Key)": "A", - "P1 S": "S", - "P1 D": "D", - "P1 F": "F", - "P1 G": "G", - "P1 H": "H", - "P1 J": "J", - "P1 K": "K", - "P1 L(Key)": "L", - "P1 Semicolon;": "Semicolon", - "P1 Quote'": "Apostrophe", - "P1 LeftShift": "LeftShift", - "P1 Z(Key)": "Z", - "P1 X(Key)": "X", - "P1 C(Key)": "C", - "P1 V": "V", - "P1 B(Key)": "B", - "P1 N": "N", - "P1 M": "M", - "P1 Comma,": "Comma", - "P1 Period.": "Period", - "P1 Slash/": "Slash", - "P1 RightShift": "RightShift", - "P1 LeftCtrl": "LeftControl", - "P1 LeftAlt": "LeftAlt", - "P1 Space": "Space", - "P1 RightAlt": "RightAlt", - "P1 RightCtrl": "RightControl", - "P1 PrintScreen": "", - "P1 ScrollLock": "ScrollLock", - "P1 Pause": "Pause", - "P1 Insert": "Insert", - "P1 Delete": "Delete", - "P1 Home": "Home", - "P1 End": "End", - "P1 PageUp": "PageUp", - "P1 PageDown": "PageDown", - "P1 Up": "UpArrow", - "P1 Down": "DownArrow", - "P1 CursorLeft": "LeftArrow", - "P1 Right": "RightArrow", - "P1 NumLock": "NumberLock", - "P1 KeypadSlash(Divide)": "NumberPadSlash", - "P1 KeypadAsterisk(Multiply)": "NumberPadStar", - "P1 KeypadMinus": "NumberPadMinus", - "P1 KeypadHome/7": "NumberPad7", - "P1 KeypadUp/8": "NumberPad8", - "P1 KeypadPageup/9": "NumberPad9", - "P1 KeypadPlus": "NumberPadPlus", - "P1 KeypadLeft/4": "NumberPad4", - "P1 KeypadCenter/5": "NumberPad5", - "P1 KeypadRight/6": "NumberPad6", - "P1 KeypadEnd/1": "NumberPad1", - "P1 KeypadDown/2": "NumberPad2", - "P1 KeypadPagedown/3": "NumberPad3", - "P1 KeypadEnter": "NumberPadEnter", - "P1 KeypadInsert/0": "NumberPad0", - "P1 KeypadDelete": "NumberPadPeriod" - }, - "PC Engine Controller": { - "Reset": "", - "Power": "", - "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 B2": "Z, J1 B1, X1 X", - "P1 B1": "X, J1 B2, X1 A", - "P1 Select": "V, J1 B9, X1 Back", - "P1 Run": "Return, J1 B10, X1 Start", - "P2 Up": "", - "P2 Down": "", - "P2 Left": "", - "P2 Right": "", - "P2 B1": "", - "P2 B2": "", - "P2 Select": "", - "P2 Run": "", - "P3 Up": "", - "P3 Down": "", - "P3 Left": "", - "P3 Right": "", - "P3 B1": "", - "P3 B2": "", - "P3 Select": "", - "P3 Run": "", - "P4 Up": "", - "P4 Down": "", - "P4 Left": "", - "P4 Right": "", - "P4 B1": "", - "P4 B2": "", - "P4 Select": "", - "P4 Run": "", - "P5 Up": "", - "P5 Down": "", - "P5 Left": "", - "P5 Right": "", - "P5 B1": "", - "P5 B2": "", - "P5 Select": "", - "P5 Run": "" - }, - "ColecoVision Basic Controller": { - "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 L": "Z, J1 B5, X1 LeftShoulder", - "P1 R": "X, J1 B6, X1 RightShoulder", - "P1 Key 1": "NumberPad1, J1 B1, X1 X", - "P1 Key 2": "NumberPad2, J1 B2, X1 A", - "P1 Key 3": "NumberPad3, J1 B3, X1 B", - "P1 Key 4": "NumberPad4, J1 B4, X1 Y", - "P1 Key 5": "NumberPad5, J1 RotationZ-, X1 RStickUp", - "P1 Key 6": "NumberPad6, J1 RotationZ+, X1 RStickDown", - "P1 Key 7": "NumberPad7, J1 Z-, X1 RStickLeft", - "P1 Key 8": "NumberPad8, J1 Z+, X1 RStickRight", - "P1 Key 9": "NumberPad9, J1 B11, X1 LeftThumb", - "P1 Star": "NumberPadEnter, J1 B9, X1 Back", - "P1 Key 0": "NumberPad0, J1 B12, X1 RightThumb", - "P1 Pound": "NumberPadPeriod, J1 B10, X1 Start", - "P2 Up": "", - "P2 Down": "", - "P2 Left": "", - "P2 Right": "", - "P2 L": "", - "P2 R": "", - "P2 Key1": "", - "P2 Key2": "", - "P2 Key3": "", - "P2 Key4": "", - "P2 Key5": "", - "P2 Key6": "", - "P2 Key7": "", - "P2 Key8": "", - "P2 Key9": "", - "P2 Star": "", - "P2 Key0": "", - "P2 Pound": "" - }, - "SMS Controller": { - "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 B1": "Z, J1 B1, X1 X", - "P1 B2": "X, J1 B2, X1 A", - "Reset": "J1 B9, X1 Back", - "Pause": "J1 B10, X1 Start", - "P2 Up": "", - "P2 Down": "", - "P2 Left": "", - "P2 Right": "", - "P2 B1": "", - "P2 B2": "" - }, - "SMS Paddle Controller": { - "P1 Left": "LeftArrow, J1 POV1L", - "P1 Right": "RightArrow, J1 POV1R", - "P1 B1": "Z, J1 B1, X1 X", - "Reset": "J1 B9, X1 Back", - "Pause": "J1 B10, X1 Start" - }, - "SMS Light Phaser Controller": { - "P1 Trigger": "Z, J1 B1, X1 X, WMouse L", - "Reset": "J1 B9, X1 Back", - "Pause": "J1 B10, X1 Start" - }, - "SMS Sports Pad Controller": { - "P1 Up": "UpArrow, J1 POV1U", - "P1 Down": "DownArrow, J1 POV1D", - "P1 Left": "LeftArrow, J1 POV1L", - "P1 Right": "RightArrow, J1 POV1R", - "P1 B1": "Z, J1 B1, X1 X", - "P1 B2": "X, J1 B2, X1 A", - "Reset": "J1 B9, X1 Back", - "Pause": "J1 B10, X1 Start", - "P2 Up": "", - "P2 Down": "", - "P2 Left": "", - "P2 Right": "", - "P2 B1": "", - "P2 B2": "" - }, - "SMS Keyboard Controller": { - "Key 1": "D1", - "Key 2": "D2", - "Key 3": "D3", - "Key 4": "D4", - "Key 5": "D5", - "Key 6": "D6", - "Key 7": "D7", - "Key 8": "D8", - "Key 9": "D9", - "Key 0": "D0", - "Key Minus": "Minus", - "Key Caret": "Equals", - "Key Yen": "Backspace", - "Key Break": "Delete", - - "Key Function": "Tab", - "Key Q": "Q", - "Key W": "W", - "Key E": "E", - "Key R": "R", - "Key T": "T", - "Key Y": "Y", - "Key U": "U", - "Key I": "I", - "Key O": "O", - "Key P": "P", - "Key At": "LeftBracket", - "Key Left Bracket": "RightBracket", - "Key Return": "Return", - "Key Up Arrow": "UpArrow", - - "Key Control": "CapsLock", - "Key A": "A", - "Key S": "S", - "Key D": "D", - "Key F": "F", - "Key G": "G", - "Key H": "H", - "Key J": "J", - "Key K": "K", - "Key L": "L", - "Key Semicolon": "Semicolon", - "Key Colon": "Apostrophe", - "Key Right Bracket": "Backslash", - "Key Left Arrow": "LeftArrow", - "Key Right Arrow": "RightArrow", - - "Key Shift": "LeftShift", - "Key Z": "Z", - "Key X": "X", - "Key C": "C", - "Key V": "V", - "Key B": "B", - "Key N": "N", - "Key M": "M", - "Key Comma": "Comma", - "Key Period": "Period", - "Key Slash": "Slash", - "Key PI": "RightShift", - "Key Down Arrow": "DownArrow", - - "Key Graph": "PageUp", - "Key Kana": "PageDown", - "Key Space": "Space", - "Key Home/Clear": "Home", - "Key Insert/Delete": "Insert", - - "P1 Up": "J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 Down": "J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 Left": "J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 Right": "J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 B1": "J1 B1, X1 X", - "P1 B2": "J1 B2, X1 A", - "Reset": "J1 B9, X1 Back", - "Pause": "J1 B10, X1 Start", - "P2 Up": "", - "P2 Down": "", - "P2 Left": "", - "P2 Right": "", - "P2 B1": "", - "P2 B2": "" - }, - "GG Controller": { - "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 B1": "Z, J1 B1, X1 X", - "P1 B2": "X, J1 B2, X1 A", - "Reset": "J1 B9, X1 Back", - "P1 Start": "Return, J1 B10, X1 Start" - }, - "Dual Gameboy Controller": { - "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 Start": "Return, J1 B10, X1 Start", - "P1 Select": "Space, J1 B9, X1 Space", - "P1 B": "Z, J1 B1, X1 X", - "P1 A": "X, J1 B2, X1 A", - "P1 Power": "", - "P2 Up": "NumberPad8, J1 RotationZ-, X1 RStickUp", - "P2 Down": "NumberPad2, J1 RotationZ+, X1 RStickDown", - "P2 Left": "NumberPad4, J1 Z-, X1 RStickLeft", - "P2 Right": "NumberPad6, J1 Z+, X1 RStickRight", - "P2 Start": "RightBracket, J1 B5, X1 LeftShoulder", - "P2 Select": "LeftBracket, J1 B6, X1 RightShoulder", - "P2 B": "C, J1 B4, X1 Y", - "P2 A": "V, J1 B3, X1 B", - "P2 Power": "" - }, - "TI83 Controller": { - "0": "NumberPad0", - "1": "NumberPad1", - "2": "NumberPad2", - "3": "NumberPad3", - "4": "NumberPad4", - "5": "NumberPad5", - "6": "NumberPad6", - "7": "NumberPad7", - "8": "NumberPad8", - "9": "NumberPad9", - "DOT": "NumberPadPeriod", - "ON": "Space", - "ENTER": "Return, NumberPadEnter", - "DOWN": "DownArrow", - "UP": "UpArrow", - "LEFT": "LeftArrow", - "RIGHT": "RightArrow", - "PLUS": "NumberPadPlus", - "MINUS": "NumberPadMinus", - "MULTIPLY": "NumberPadStar", - "DIVIDE": "NumberPadSlash", - "CLEAR": "Escape", - "EXP": "6", - "DASH": "Minus", - "PARACLOSE": "0", - "TAN": "T", - "VARS": "V", - "PARAOPEN": "9", - "COS": "C", - "PRGM": "R", - "STAT": "S", - "SIN": "Period", - "MATRIX": "LeftBracket", - "X": "X", - "STO": "Insert", - "LN": "L", - "LOG": "O", - "SQUARED": "2", - "NEG1": "1", - "MATH": "M", - "ALPHA": "A", - "GRAPH": "G", - "TRACE": "Home", - "ZOOM": "Z", - "WINDOW": "W", - "Y": "Y", - "SECOND": "Slash", - "MODE": "BackSlash", - "DEL": "Delete", - "COMMA": "Comma" - }, - "GPGX Genesis Controller": { - "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 A": "Z, J1 B1, X1 X", - "P1 B": "X, J1 B2, X1 A", - "P1 C": "C, J1 B4, X1 Y", - "P1 Start": "Return, J1 B10, X1 Start", - "P1 X": "A, J1 B3, X1 B", - "P1 Y": "S, J1 B5, X1 LeftShoulder", - "P1 Z": "D, J1 B6, X1 RightShoulder", - "P1 Mode": "E, J1 B9, X1 Back", - "P2 Up": "", - "P2 Down": "", - "P2 Left": "", - "P2 Right": "", - "P2 A": "", - "P2 B": "", - "P2 C": "", - "P2 Start": "", - "P2 X": "", - "P2 Y": "", - "P2 Z": "", - "P2 Mode": "", - "P2 Lightgun Trigger": "WMouse L", - "P2 Lightgun Start": "NumberPad5", - "P2 Mouse Left": "WMouse L", - "P2 Mouse Center": "WMouse M", - "P2 Mouse Right": "WMouse R", - "P2 Mouse Start": "NumberPad5", - "Power": "", - "Reset": "" - }, - "PicoDrive Genesis Controller": { - "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 A": "Z, J1 B1, X1 X", - "P1 B": "X, J1 B2, X1 A", - "P1 C": "C, J1 B4, X1 Y", - "P1 Start": "Return, J1 B10, X1 Start", - "P1 X": "A, J1 B3, X1 B", - "P1 Y": "S, J1 B5, X1 LeftShoulder", - "P1 Z": "D, J1 B6, X1 RightShoulder", - "P1 Mode": "E, J1 B9, X1 Back", - "P2 Up": "", - "P2 Down": "", - "P2 Left": "", - "P2 Right": "", - "P2 A": "", - "P2 B": "", - "P2 C": "", - "P2 Start": "", - "P2 X": "", - "P2 Y": "", - "P2 Z": "", - "P2 Mode": "", - "Power": "", - "Reset": "" - }, - "WonderSwan Controller": { - "P1 X1": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "P1 X3": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "P1 X4": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P1 X2": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", - "P1 Y1": "NumberPad8, J1 RotationZ-, X1 RStickUp", - "P1 Y3": "NumberPad2, J1 RotationZ+, X1 RStickDown", - "P1 Y4": "NumberPad4, J1 Z-, X1 RStickLeft", - "P1 Y2": "NumberPad6, J1 Z+, X1 RStickRight", - "P1 Start": "Return, J1 B10, X1 Start", - "P1 B": "Z, J1 B1, X1 X", - "P1 A": "X, J1 B2, X1 A", - "P2 X1": "", - "P2 X3": "X, J1 B2, X1 A", - "P2 X4": "Z, J1 B1, X1 X", - "P2 X2": "", - "P2 Y1": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", - "P2 Y3": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", - "P2 Y4": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", - "P2 Y2": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", - "P2 Start": "Return, J1 B10, X1 Start", - "P2 B": "", - "P2 A": "", - "Power": "" - }, - "PSX DualShock Controller": { - "P1 Up": "X1 DpadUp,UpArrow", - "P1 Down": "X1 DpadDown,DownArrow", - "P1 Left": "X1 DpadLeft,LeftArrow", - "P1 Right": "X1 DpadRight,RightArrow", - "P1 Select": "X1 Back,Space", - "P1 Start": "X1 Start,Return", - "P1 Square": "X1 X,A", - "P1 Triangle": "X1 Y,S", - "P1 Circle": "X1 B,X", - "P1 Cross": "X1 A,Z", - "P1 L1": "X1 LeftShoulder,Q", - "P1 R1": "X1 RightShoulder,W", - "P1 L2": "X1 LeftTrigger,E", - "P1 R2": "X1 RightTrigger,R", - "P1 L3": "X1 LeftThumb,T", - "P1 R3": "X1 RightThumb,Y", - "P1 MODE": "D" - }, - "Lynx Controller": { - "Up": "UpArrow", - "Down": "DownArrow", - "Left": "LeftArrow", - "Right": "RightArrow", - "A": "X", - "B": "Z", - "Option 1": "A", - "Option 2": "S", - "Pause": "Return", - "Power": "" - }, - "Apple IIe Keyboard": { - "Delete": "Delete", - "Left": "LeftArrow", - "Tab": "Tab", - "Down": "DownArrow", - "Up": "UpArrow", - "Return": "Return", - "Right": "RightArrow", - "Escape": "", - "Space": "Space", - "'": "Apostrophe", - ",": "Comma", - "-": "Minus", - ".": "Period", - "/": "Slash", - "0": "NumberPad0", - "1": "NumberPad1", - "2": "NumberPad2", - "3": "NumberPad3", - "4": "NumberPad4", - "5": "NumberPad5", - "6": "NumberPad6", - "7": "NumberPad7", - "8": "NumberPad8", - "9": "NumberPad9", - ";": "Semicolon", - "=": "Equals", - "[": "LeftBracket", - "\\": "Backslash", - "]": "RightBracket", - "`": "Grave", - "A": "A", - "B": "B", - "C": "C", - "D": "D", - "E": "E", - "F": "F", - "G": "G", - "H": "H", - "I": "I", - "J": "J", - "K": "K", - "L": "L", - "M": "M", - "N": "N", - "O": "O", - "P": "P", - "Q": "Q", - "R": "R", - "S": "S", - "T": "T", - "U": "U", - "V": "V", - "W": "W", - "X": "X", - "Y": "Y", - "Z": "Z", - "Control": "RightControl", - "Shift": "RightShift", - "Caps Lock": "CapsLock", - "Previous Disk": "", - "Next Disk": "" - }, - "VirtualBoy Controller": { - "L_Up": "UpArrow, X1 DpadUp, X1 LStickUp", - "L_Down": "DownArrow, X1 DpadDown, X1 LStickDown", - "L_Left": "LeftArrow, X1 DpadLeft, X1 LStickLeft", - "L_Right": "RightArrow, X1 DpadRight, X1 LStickRight", - "R_Up": "NumberPad8, X1 RStickUp", - "R_Down": "NumberPad2, X1 RStickDown", - "R_Left": "NumberPad4, X1 RStickLeft", - "R_Right": "NumberPad6, X1 RStickRight", - "B": "Z, X1 X", - "A": "X, X1 A", - "R": "W, X1 LeftShoulder", - "L": "E, X1 RightShoulder", - "Select": "Space, X1 Back", - "Start": "Return, X1 Start", - "Power": "" - }, - "NeoGeo Portable Controller": { - "Up": "UpArrow, X1 DpadUp, X1 LStickUp", - "Down": "DownArrow, X1 DpadDown, X1 LStickDown", - "Left": "LeftArrow, X1 DpadLeft, X1 LStickLeft", - "Right": "RightArrow, X1 DpadRight, X1 LStickRight", - "B": "Z, J1 B1, X1 X", - "A": "X, J1 B2, X1 A", - "Option": "Return, J1 B10, X1 Start", - "Power": "" - } - }, - "AllTrollersAutoFire": { - "NES Controller": { - "P1 Up": "", - "P1 Down": "", - "P1 Left": "", - "P1 Right": "", - "P1 Start": "", - "P1 Select": "", - "P1 B": "A", - "P1 A": "S", - "P2 Up": "", - "P2 Down": "", - "P2 Left": "", - "P2 Right": "", - "P2 Start": "", - "P2 Select": "", - "P2 B": "", - "P2 A": "", - "P2 Fire": "", - "P2 Microphone": "", - "P3 Fire": "", - "Reset": "", - "Power": "" - }, - "Gameboy Controller": { - "Up": "", - "Down": "", - "Left": "", - "Right": "", - "Start": "", - "Select": "", - "B": "A", - "A": "S", - "Power": "" - }, - "GBAController": { - "Up": "", - "Down": "", - "Left": "", - "Right": "", - "Start": "", - "Select": "", - "B": "A", - "A": "S", - "L": "", - "R": "", - "Power": "" - }, - "Atari 2600 Basic Controller": { - "Reset": "", - "Select": "", - "P1 Up": "", - "P1 Down": "", - "P1 Left": "", - "P1 Right": "", - "P1 Button": "A", - "P2 Up": "", - "P2 Down": "", - "P2 Left": "", - "P2 Right": "", - "P2 Button": "S" - }, - "PC Engine Controller": { - "Reset": "", - "Power": "", - "P1 Up": "", - "P1 Down": "", - "P1 Left": "", - "P1 Right": "", - "P1 B2": "A", - "P1 B1": "S", - "P1 Select": "", - "P1 Run": "", - "P2 Up": "", - "P2 Down": "", - "P2 Left": "", - "P2 Right": "", - "P2 B2": "", - "P2 B1": "", - "P2 Select": "", - "P2 Run": "", - "P3 Up": "", - "P3 Down": "", - "P3 Left": "", - "P3 Right": "", - "P3 B2": "", - "P3 B1": "", - "P3 Select": "", - "P3 Run": "", - "P4 Up": "", - "P4 Down": "", - "P4 Left": "", - "P4 Right": "", - "P4 B2": "", - "P4 B1": "", - "P4 Select": "", - "P4 Run": "", - "P5 Up": "", - "P5 Down": "", - "P5 Left": "", - "P5 Right": "", - "P5 B2": "", - "P5 B1": "", - "P5 Select": "", - "P5 Run": "" - }, - "SMS Controller": { - "P1 Up": "", - "P1 Down": "", - "P1 Left": "", - "P1 Right": "", - "P1 B1": "A", - "P1 B2": "S", - "Reset": "", - "Pause": "", - "P2 Up": "", - "P2 Down": "", - "P2 Left": "", - "P2 Right": "", - "P2 B1": "", - "P2 B2": "" - }, - "GPGX Genesis Controller": { - "P1 Up": "", - "P1 Down": "", - "P1 Left": "", - "P1 Right": "", - "P1 A": "", - "P1 B": "", - "P1 C": "", - "P1 Start": "", - "P1 X": "", - "P1 Y": "", - "P1 Z": "", - "P1 Mode": "", - "P2 Up": "", - "P2 Down": "", - "P2 Left": "", - "P2 Right": "", - "P2 A": "", - "P2 B": "", - "P2 C": "", - "P2 Start": "", - "P2 X": "", - "P2 Y": "", - "P2 Z": "", - "P2 Mode": "", - "Power": "", - "Reset": "" - }, - "GBA Controller": { - "Up": "", - "Down": "", - "Left": "", - "Right": "", - "Start": "", - "Select": "", - "B": "A", - "A": "S", - "L": "", - "R": "", - "Power": "" - }, - "WonderSwan Controller": { - "P1 B": "A", - "P1 A": "S", - "P2 X4": "A", - "P2 X3": "S", - "Power": "" - }, - "Lynx Controller": { - "Up": "", - "Down": "", - "Left": "", - "Right": "", - "A": "", - "B": "", - "Option 1": "", - "Option 2": "", - "Pause": "", - "Power": "" - }, - "Apple IIe Keyboard": { - "Delete": "", - "Left": "", - "Tab": "", - "Down": "", - "Up": "", - "Return": "Return", - "Right": "", - "Escape": "", - "Space": "", - "'": "", - ",": "", - "-": "", - ".": "", - "/": "", - "0": "", - "1": "", - "2": "", - "3": "", - "4": "", - "5": "", - "6": "", - "7": "", - "8": "", - "9": "", - ";": "", - "=": "", - "[": "", - "\\": "", - "]": "", - "`": "", - "A": "", - "B": "", - "C": "", - "D": "", - "E": "", - "F": "", - "G": "", - "H": "", - "I": "", - "J": "", - "K": "", - "L": "", - "M": "", - "N": "", - "O": "", - "P": "", - "Q": "", - "R": "", - "S": "", - "T": "", - "U": "", - "V": "", - "W": "", - "X": "", - "Y": "", - "Z": "", - "Control": "", - "Shift": "", - "Caps Lock": "", - "Previous Disk": "", - "Next Disk": "" - }, - "VirtualBoy Controller": { - "L_Up": "", - "L_Down": "", - "L_Left": "", - "L_Right": "", - "R_Up": "", - "R_Down": "", - "R_Left": "", - "R_Right": "", - "B": "", - "A": "", - "R": "", - "L": "", - "Select": "", - "Start": "", - "Power": "" - }, - "NeoGeo Portable Controller": { - "Up": "", - "Down": "", - "Left": "", - "Right": "", - "B": "", - "A": "", - "Option": "", - "Power": "" - } - }, + "AllTrollers": { + "LibRetro Controls": { + "P1 RetroPad Up": "UpArrow,J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 RetroPad Down": "DownArrow,J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 RetroPad Left": "LeftArrow,J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 RetroPad Right": "RightArrow,J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 RetroPad Select": "Space, J1 B9, X1 Back", + "P1 RetroPad Start": "Return, J1 B10, X1 Start", + "P1 RetroPad Y": "A, J1 B1, X1 X", + "P1 RetroPad B": "Z, J1 B2, X1 A", + "P1 RetroPad X": "S, J1 B4, X1 Y", + "P1 RetroPad A": "X, J1 B3, X1 B", + "P1 RetroPad L": "W, J1 B5, X1 LeftShoulder", + "P1 RetroPad R": "E, J1 B6, X1 RightShoulder", + "P2 RetroPad Up": "", + "P2 RetroPad Down": "", + "P2 RetroPad Left": "", + "P2 RetroPad Right": "", + "P2 RetroPad Select": "", + "P2 RetroPad Start": "", + "P2 RetroPad Y": "", + "P2 RetroPad B": "", + "P2 RetroPad X": "", + "P2 RetroPad A": "", + "P2 RetroPad L": "", + "P2 RetroPad R": "", + "Pointer Pressed": "WMouse L", + "Key Backspace": "Backspace", + "Key Tab": "Tab", + "Key Clear": "", + "Key Return": "Return", + "Key Pause": "", + "Key Escape": "Escape", + "Key Space": "Space", + "Key Exclaim": "", + "Key QuoteDbl": "", + "Key Hash": "", + "Key Dollar": "", + "Key Ampersand": "", + "Key Quote": "", + "Key LeftParen": "", + "Key RightParen": "", + "Key Asterisk": "", + "Key Plus": "", + "Key Comma": "Comma", + "Key Minus": "Minus", + "Key Period": "Period", + "Key Slash": "Slash", + "Key 0": "D0", + "Key 1": "D1", + "Key 2": "D2", + "Key 3": "D3", + "Key 4": "D4", + "Key 5": "D5", + "Key 6": "D6", + "Key 7": "D7", + "Key 8": "D8", + "Key 9": "D9", + "Key Colon": "", + "Key Semicolon": "Semicolon", + "Key Less": "", + "Key Equals": "Equals", + "Key Greater": "", + "Key Question": "", + "Key At": "", + "Key LeftBracket": "LeftBracket", + "Key Backslash": "Backslash", + "Key RightBracket": "RightBracket", + "Key Caret": "", + "Key Underscore": "", + "Key Backquote": "Grave", + "Key A": "A", + "Key B": "B", + "Key C": "C", + "Key D": "D", + "Key E": "E", + "Key F": "F", + "Key G": "G", + "Key H": "H", + "Key I": "I", + "Key J": "J", + "Key K": "K", + "Key L": "L", + "Key M": "M", + "Key N": "N", + "Key O": "O", + "Key P": "P", + "Key Q": "Q", + "Key R": "R", + "Key S": "S", + "Key T": "T", + "Key U": "U", + "Key V": "V", + "Key W": "W", + "Key X": "X", + "Key Y": "Y", + "Key Z": "Z", + "Key Delete": "Delete", + "Key KP0": "NumberPad0", + "Key KP1": "NumberPad1", + "Key KP2": "NumberPad2", + "Key KP3": "NumberPad3", + "Key KP4": "NumberPad4", + "Key KP5": "NumberPad5", + "Key KP6": "NumberPad6", + "Key KP7": "NumberPad7", + "Key KP8": "NumberPad8", + "Key KP9": "NumberPad9", + "Key KP_Period": "NumberPadPeriod", + "Key KP_Divide": "NumberPadSlash", + "Key KP_Multiply": "NumberPadStar", + "Key KP_Minus": "NumberPadMinus", + "Key KP_Plus": "NumberPadPlus", + "Key KP_Enter": "NumberPadEnter", + "Key KP_Equals": "", + "Key Up": "UpArrow", + "Key Down": "DownArrow", + "Key Left": "LeftArrow", + "Key Insert": "LeftControl", + "Key Home": "Home", + "Key End": "End", + "Key PageUp": "PageUp", + "Key PageDown": "PageDown", + "Key F1": "F1", + "Key F2": "F2", + "Key F3": "F3", + "Key F4": "F4", + "Key F5": "F5", + "Key F6": "F6", + "Key F7": "F7", + "Key F8": "F8", + "Key F9": "F9", + "Key F10": "F10", + "Key F11": "F11", + "Key F12": "F12", + "Key F13": "", + "Key F14": "", + "Key F15": "", + "Key NumLock": "NumberLock", + "Key CapsLock": "CapsLock", + "Key ScrollLock": "ScrollLock", + "Key RShift": "RightShift", + "Key LShift": "LeftShift", + "Key RCtrl": "RightControl", + "Key LCtrl": "LeftControl", + "Key RAlt": "RightAlt", + "Key LAlt": "LeftAlt", + "Key RMeta": "", + "Key LMeta": "", + "Key LSuper": "", + "Key RSuper": "", + "Key Mode": "", + "Key Compose": "", + "Key Help": "", + "Key Print": "", + "Key SysReq": "", + "Key Break": "", + "Key Menu": "Applications", + "Key Power": "", + "Key Euro": "", + "Key Undo": "", + "Key Right": "RightArrow" + }, + "NES Controller": { + "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 Start": "Return, J1 B10, X1 Start", + "P1 Select": "Space, J1 B9, X1 Back", + "P1 B": "Z, J1 B1, X1 X", + "P1 A": "X, J1 B2, X1 A", + "P2 Up": "", + "P2 Down": "", + "P2 Left": "", + "P2 Right": "", + "P2 Start": "", + "P2 Select": "", + "P2 B": "", + "P2 A": "", + "P2 Fire": "WMouse L", + "P2 Microphone": "", + "P3 Fire": "WMouse L", + "Reset": "", + "Power": "" + }, + "SNES Controller": { + "Reset": "", + "Power": "", + "P1 Up": "UpArrow,J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "DownArrow,J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "LeftArrow,J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "RightArrow,J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 Select": "Space, J1 B9, X1 Back", + "P1 Start": "Return, J1 B10, X1 Start", + "P1 Y": "A, J1 B1, X1 X", + "P1 X": "S, J1 B4, X1 Y", + "P1 B": "Z, J1 B2, X1 A", + "P1 A": "X, J1 B3, X1 B", + "P1 L": "W, J1 B5, X1 LeftShoulder", + "P1 R": "E, J1 B6, X1 RightShoulder", + "P1 Mouse Left": "Z, J1 B1, X1 X", + "P1 Mouse Right": "X, J1 B2, X1 A", + "P2 Trigger": "Z, J1 B1, X1 X", + "P2 Cursor": "X, J1 B2, X1 A", + "P2 Turbo": "A, J1 B3 X1 Y", + "P2 Pause": "S, J1 B4 X1 B" + }, + "Nintento 64 Controller": { + "P1 A Up": "UpArrow, J1 POV1U", + "P1 A Down": "DownArrow, J1 POV1D", + "P1 A Left": "LeftArrow, J1 POV1L", + "P1 A Right": "RightArrow, J1 POV1R", + "P1 DPad U": "X1 DpadUp", + "P1 DPad D": "X1 DpadDown", + "P1 DPad L": "X1 DpadLeft", + "P1 DPad R": "X1 DpadRight", + "P1 Start": "Return, J1 B10, X1 Start", + "P1 Z": "D, J1 B3, X1 B", + "P1 B": "S, J1 B1, X1 X", + "P1 A": "A, J1 B2, X1 A", + "P1 C Up": "NumberPad8, J1 RotationZ-, X1 RStickUp", + "P1 C Down": "NumberPad2, J1 RotationZ+, X1 RStickDown", + "P1 C Left": "NumberPad4, J1 Z-, X1 RStickLeft", + "P1 C Right": "NumberPad6, J1 Z+, X1 RStickRight", + "P1 L": "Q, J1 B5, X1 LeftShoulder", + "P1 R": "W, J1 B6, X1 RightShoulder", + "P2 X Axis": "", + "P2 Y Axis": "", + "P2 A Up": "", + "P2 A Down": "", + "P2 A Left": "", + "P2 A Right": "", + "P2 DPad U": "", + "P2 DPad D": "", + "P2 DPad L": "", + "P2 DPad R": "", + "P2 Start": "", + "P2 Z": "", + "P2 B": "", + "P2 A": "", + "P2 C Up": "", + "P2 C Down": "", + "P2 C Left": "", + "P2 C Right": "", + "P2 L": "", + "P2 R": "", + "P3 X Axis": "", + "P3 Y Axis": "", + "P3 A Up": "", + "P3 A Down": "", + "P3 A Left": "", + "P3 A Right": "", + "P3 DPad U": "", + "P3 DPad D": "", + "P3 DPad L": "", + "P3 DPad R": "", + "P3 Start": "", + "P3 Z": "", + "P3 B": "", + "P3 A": "", + "P3 C Up": "", + "P3 C Down": "", + "P3 C Left": "", + "P3 C Right": "", + "P3 L": "", + "P3 R": "", + "P4 X Axis": "", + "P4 Y Axis": "", + "P4 A Up": "", + "P4 A Down": "", + "P4 A Left": "", + "P4 A Right": "", + "P4 DPad U": "", + "P4 DPad D": "", + "P4 DPad L": "", + "P4 DPad R": "", + "P4 Start": "", + "P4 Z": "", + "P4 B": "", + "P4 A": "", + "P4 C Up": "", + "P4 C Down": "", + "P4 C Left": "", + "P4 C Right": "", + "P4 L": "", + "P4 R": "", + "Reset": "", + "Power": "" + }, + "Gameboy Controller": { + "Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "Start": "Return, J1 B10, X1 Start", + "Select": "Space, J1 B9, X1 Back", + "B": "Z, J1 B1, X1 X", + "A": "X, J1 B2, X1 A", + "Power": "", + "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 Start": "Return, J1 B10, X1 Start", + "P1 Select": "Space, J1 B9, X1 Back", + "P1 B": "Z, J1 B1, X1 X", + "P1 A": "X, J1 B2, X1 A" + }, + "Gameboy Controller H": { + "Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "Start": "Return, J1 B10, X1 Start", + "Select": "Space, J1 B9, X1 Back", + "B": "Z, J1 B1, X1 X", + "A": "X, J1 B2, X1 A", + "Power": "", + "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 Start": "Return, J1 B10, X1 Start", + "P1 Select": "Space, J1 B9, X1 Back", + "P1 B": "Z, J1 B1, X1 X", + "P1 A": "X, J1 B2, X1 A" + }, + "GBA Controller": { + "Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "Start": "Return, J1 B10, X1 Start", + "Select": "Space, J1 B9, X1 Back", + "B": "Z, J1 B1, X1 X", + "A": "X, J1 B2, X1 A", + "L": "W, J1 B5, X1 LeftShoulder", + "R": "E, J1 B6, X1 RightShoulder", + "Power": "" + }, + "Atari 2600 Basic Controller": { + "Reset": "D, J1 B9, X1 Back", + "Select": "S, J1 B10, X1 Start", + "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "LeftArrow,J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "RightArrow,J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 Button": "Z, J1 B1, X1 X", + "P2 Up": "NumberPad8, J1 RotationZ-, X1 RStickUp", + "P2 Down": "NumberPad2, J1 RotationZ+, X1 RStickDown", + "P2 Left": "NumberPad4, J1 Z-, X1 RStickLeft", + "P2 Right": "NumberPad6, J1 Z+, X1 RStickRight", + "P2 Button": "NumberPad1, J1 B2, X1 A" + }, + "Atari 7800 ProLine Joystick Controller": { + "Power": "", + "Reset": "D, J1 B9, X1 Back", + "Select": "S, J1 B10, X1 Start", + "Pause": "", + "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 Trigger": "Z, J1 B1, X1 X", + "P1 Trigger 2": "X, J1 B2, X1 A", + "P2 Up": "NumberPad8, J1 RotationZ-, X1 RStickUp", + "P2 Down": "NumberPad2, J1 RotationZ+, X1 RStickDown", + "P2 Left": "NumberPad4, J1 Z-, X1 RStickLeft", + "P2 Right": "NumberPad6, J1 Z+, X1 RStickRight", + "P2 Trigger": "NumberPad1, J1 B4, X1 Y", + "P2 Trigger 2": "NumberPad3, J1 B3, X1 B" + }, + "Atari 7800 Joystick Controller": { + "Power": "", + "Reset": "D, J1 B9, X1 Back", + "Select": "S, J1 B10, X1 Start", + "Pause": "", + "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 Trigger": "Z, J1 B1, X1 X", + "P1 Trigger 2": "X, J1 B2, X1 A", + "P2 Up": "NumberPad8, J1 RotationZ-, X1 RStickUp", + "P2 Down": "NumberPad2, J1 RotationZ+, X1 RStickDown", + "P2 Left": "NumberPad4, J1 Z-, X1 RStickLeft", + "P2 Right": "NumberPad6, J1 Z+, X1 RStickRight", + "P2 Trigger": "NumberPad1, J1 B4, X1 Y" + }, + "Atari 7800 Light Gun Controller": { + "Power": "", + "Reset": "D, J1 B9, X1 Back", + "Select": "S, J1 B10, X1 Start", + "Pause": "", + "P1 Trigger": "WMouse L" + }, + "Atari 7800 Paddle Controller": { + "Power": "", + "Reset": "D, J1 B9, X1 Back", + "Select": "S, J1 B10, X1 Start", + "Pause": "", + "P2 Trigger": "NumberPad1, J1 B4, X1 Y" + }, + "Commodore 64 Controller": { + "P1 Up": "NumberPad8, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "NumberPad2, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "NumberPad4, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "NumberPad6, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 Button": "NumberPad1, J1 B1, X1 X", + "P2 Up": "", + "P2 Down": "", + "P2 Left": "", + "P2 Right": "", + "P2 Button": "", + "Key F1": "F1", + "Key F3": "F3", + "Key F5": "F5", + "Key F7": "F7", + "Key Left Arrow": "Grave", + "Key 1": "D1", + "Key 2": "D2", + "Key 3": "D3", + "Key 4": "D4", + "Key 5": "D5", + "Key 6": "D6", + "Key 7": "D7", + "Key 8": "D8", + "Key 9": "D9", + "Key 0": "D0", + "Key Plus": "Equals", + "Key Minus": "Minus", + "Key Pound": "Insert", + "Key Clear/Home": "Delete", + "Key Insert/Delete": "Backspace", + "Key Control": "Tab", + "Key Q": "Q", + "Key W": "W", + "Key E": "E", + "Key R": "R", + "Key T": "T", + "Key Y": "Y", + "Key U": "U", + "Key I": "I", + "Key O": "O", + "Key P": "P", + "Key At": "LeftBracket", + "Key Asterisk": "RightBracket", + "Key Up Arrow": "Backslash", + "Key Restore": "", + "Key Run/Stop": "CapsLock", + "Key Lck": "", + "Key A": "A", + "Key S": "S", + "Key D": "D", + "Key F": "F", + "Key G": "G", + "Key H": "H", + "Key J": "J", + "Key K": "K", + "Key L": "L", + "Key Colon": "Semicolon", + "Key Semicolon": "Apostrophe", + "Key Equal": "RightControl", + "Key Return": "Return", + "Key Commodore": "LeftControl", + "Key Left Shift": "LeftShift", + "Key Z": "Z", + "Key X": "X", + "Key C": "C", + "Key V": "V", + "Key B": "B", + "Key N": "N", + "Key M": "M", + "Key Comma": "Comma", + "Key Period": "Period", + "Key Slash": "Slash", + "Key Right Shift": "RightShift", + "Key Cursor Up/Down": "DownArrow", + "Key Cursor Left/Right": "RightArrow", + "Key Space": "Space" + }, + "ZXSpectrum Controller": { + "P1 Up": "NumberPad8, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "NumberPad2, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "NumberPad4, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "NumberPad6, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 Button": "NumberPad1, J1 B1, X1 X", + "Key True Video": "", + "Key Inv Video": "", + "Key 1": "D1", + "Key 2": "D2", + "Key 3": "D3", + "Key 4": "D4", + "Key 5": "D5", + "Key 6": "D6", + "Key 7": "D7", + "Key 8": "D8", + "Key 9": "D9", + "Key 0": "D0", + "Key Break": "Delete", + "Key Delete": "Backspace", + "Key Graph": "", + "Key Q": "Q", + "Key W": "W", + "Key E": "E", + "Key R": "R", + "Key T": "T", + "Key Y": "Y", + "Key U": "U", + "Key I": "I", + "Key O": "O", + "Key P": "P", + "Key Extend Mode": "", + "Key Edit": "", + "Key A": "A", + "Key S": "S", + "Key D": "D", + "Key F": "F", + "Key G": "G", + "Key H": "H", + "Key J": "J", + "Key K": "K", + "Key L": "L", + "Key Return": "Return", + "Key Caps Shift": "LeftShift, RightShift", + "Key Caps Lock": "", + "Key Z": "Z", + "Key X": "X", + "Key C": "C", + "Key V": "V", + "Key B": "B", + "Key N": "N", + "Key M": "M", + "Key Period": "Period", + "Key Symbol Shift": "LeftControl, RightControl", + "Key Semi-Colon": "Semicolon", + "Key Inverted-Comma": "", + "Key Left Cursor": "LeftArrow", + "Key Right Cursor": "RightArrow", + "Key Space": "Space", + "Key Up Cursor": "UpArrow", + "Key Down Cursor": "DownArrow", + "Key Comma": "Comma", + "Play Tape": "F1", + "Stop Tape": "F2", + "RTZ Tape": "F3", + "Record Tape": "", + "Key Quote": "Shift+D2", + "Insert Next Tape": "F6", + "Insert Previous Tape": "F5", + "Next Tape Block": "F8", + "Prev Tape Block": "F7", + "Get Tape Status": "F9", + "Insert Next Disk": "F11", + "Insert Previous Disk": "F10", + "Get Disk Status": "F12" + }, + "Intellivision Controller": { + "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 L": "Z, J1 B1, X1 X", + "P1 R": "X, J1 B2, X1 A", + "P1 Key0": "NumberPad0", + "P1 Key1": "NumberPad1", + "P1 Key2": "NumberPad2", + "P1 Key3": "NumberPad3", + "P1 Key4": "NumberPad4", + "P1 Key5": "NumberPad5", + "P1 Key6": "NumberPad6", + "P1 Key7": "NumberPad7", + "P1 Key8": "NumberPad9", + "P1 Key9": "NumberPad9", + "P1 Enter": "NumberPadEnter", + "P1 Clear": "NumberPadPeriod", + "P2 Up": "", + "P2 Down": "", + "P2 Left": "", + "P2 Right": "", + "P2 L": "", + "P2 R": "", + "P2 Key0": "", + "P2 Key1": "", + "P2 Key2": "", + "P2 Key3": "", + "P2 Key4": "", + "P2 Key5": "", + "P2 Key6": "", + "P2 Key7": "", + "P2 Key8": "", + "P2 Key9": "", + "P2 Enter": "", + "P2 Clear": "" + }, + "PC-FX Controller": { + "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 I": "C, J1 B1, X1 X", + "P1 II": "X, J1 B2, X1 A", + "P1 III": "Z, J1 B4, X1 Y", + "P1 IV": "D, J1 B3, X1 B", + "P1 V": "S, J1 B11, X1 X", + "P1 VI": "A, J1 B12, X1 X", + "P1 Select": "Space, J1 B9, X1 Back", + "P1 Run": "Return, J1 B10, X1 Start", + "P1 Mode 1": "", + "P1 Mode 2": "", + "P2 Mouse Left": "NumberPad1", + "P2 Mouse Right": "NumberPad2", + "Power": "", + "Reset": "", + "Previous Disk": "", + "Next Disk": "", + "P2 Mouse Left": "WMouse L", + "P2 Mouse Right": "WMouse R" + }, + "Saturn Controller": { + "Power": "", + "Reset": "", + "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 Start": "Return, J1 B10, X1 Start", + "P1 X": "D, J1 B3, X1 B", + "P1 Y": "S, J1 B11, X1 X", + "P1 Z": "A, J1 B12, X1 X", + "P1 A": "C, J1 B1, X1 X", + "P1 B": "X, J1 B2, X1 A", + "P1 C": "Z, J1 B4, X1 Y", + "P1 L": "Q, J1 B5, X1 LeftShoulder", + "P1 R": "W, J1 B6, X1 RightShoulder", + "P1 Mouse Left": "WMouse L", + "P1 Mouse Center": "WMouse M", + "P1 Mouse Right": "WMouse R", + "P1 Escape": "Escape", + "P1 F1": "F1", + "P1 F2": "F2", + "P1 F3": "F3", + "P1 F4": "F4", + "P1 F5": "F5", + "P1 F6": "F6", + "P1 F7": "F7", + "P1 F8": "F8", + "P1 F9": "F9", + "P1 F10": "F10", + "P1 F11": "F11", + "P1 F12": "F12", + "P1 Grave`": "Grave", + "P1 1(One)": "D1", + "P1 2": "D2", + "P1 3": "D3", + "P1 4": "D4", + "P1 5": "D5", + "P1 6": "D6", + "P1 7": "D7", + "P1 8": "D8", + "P1 9": "D9", + "P1 0(Zero)": "D0", + "P1 Minus-": "Minus", + "P1 Equals=": "Equals", + "P1 Backslash\\": "Backslash", + "P1 Backspace": "Backspace", + "P1 Tab": "Tab", + "P1 Q": "Q", + "P1 W": "W", + "P1 E": "E", + "P1 R(Key)": "R", + "P1 T": "T", + "P1 Y(Key)": "Y", + "P1 U": "U", + "P1 I": "I", + "P1 O": "O", + "P1 P": "P", + "P1 LeftBracket[": "LeftBracket", + "P1 RightBracket]": "RightBracket", + "P1 Enter": "Return", + "P1 CapsLock": "CapsLock", + "P1 A(Key)": "A", + "P1 S": "S", + "P1 D": "D", + "P1 F": "F", + "P1 G": "G", + "P1 H": "H", + "P1 J": "J", + "P1 K": "K", + "P1 L(Key)": "L", + "P1 Semicolon;": "Semicolon", + "P1 Quote'": "Apostrophe", + "P1 LeftShift": "LeftShift", + "P1 Z(Key)": "Z", + "P1 X(Key)": "X", + "P1 C(Key)": "C", + "P1 V": "V", + "P1 B(Key)": "B", + "P1 N": "N", + "P1 M": "M", + "P1 Comma,": "Comma", + "P1 Period.": "Period", + "P1 Slash/": "Slash", + "P1 RightShift": "RightShift", + "P1 LeftCtrl": "LeftControl", + "P1 LeftAlt": "LeftAlt", + "P1 Space": "Space", + "P1 RightAlt": "RightAlt", + "P1 RightCtrl": "RightControl", + "P1 PrintScreen": "", + "P1 ScrollLock": "ScrollLock", + "P1 Pause": "Pause", + "P1 Insert": "Insert", + "P1 Delete": "Delete", + "P1 Home": "Home", + "P1 End": "End", + "P1 PageUp": "PageUp", + "P1 PageDown": "PageDown", + "P1 Up": "UpArrow", + "P1 Down": "DownArrow", + "P1 CursorLeft": "LeftArrow", + "P1 Right": "RightArrow", + "P1 NumLock": "NumberLock", + "P1 KeypadSlash(Divide)": "NumberPadSlash", + "P1 KeypadAsterisk(Multiply)": "NumberPadStar", + "P1 KeypadMinus": "NumberPadMinus", + "P1 KeypadHome/7": "NumberPad7", + "P1 KeypadUp/8": "NumberPad8", + "P1 KeypadPageup/9": "NumberPad9", + "P1 KeypadPlus": "NumberPadPlus", + "P1 KeypadLeft/4": "NumberPad4", + "P1 KeypadCenter/5": "NumberPad5", + "P1 KeypadRight/6": "NumberPad6", + "P1 KeypadEnd/1": "NumberPad1", + "P1 KeypadDown/2": "NumberPad2", + "P1 KeypadPagedown/3": "NumberPad3", + "P1 KeypadEnter": "NumberPadEnter", + "P1 KeypadInsert/0": "NumberPad0", + "P1 KeypadDelete": "NumberPadPeriod" + }, + "PC Engine Controller": { + "Reset": "", + "Power": "", + "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 B2": "Z, J1 B1, X1 X", + "P1 B1": "X, J1 B2, X1 A", + "P1 Select": "V, J1 B9, X1 Back", + "P1 Run": "Return, J1 B10, X1 Start", + "P2 Up": "", + "P2 Down": "", + "P2 Left": "", + "P2 Right": "", + "P2 B1": "", + "P2 B2": "", + "P2 Select": "", + "P2 Run": "", + "P3 Up": "", + "P3 Down": "", + "P3 Left": "", + "P3 Right": "", + "P3 B1": "", + "P3 B2": "", + "P3 Select": "", + "P3 Run": "", + "P4 Up": "", + "P4 Down": "", + "P4 Left": "", + "P4 Right": "", + "P4 B1": "", + "P4 B2": "", + "P4 Select": "", + "P4 Run": "", + "P5 Up": "", + "P5 Down": "", + "P5 Left": "", + "P5 Right": "", + "P5 B1": "", + "P5 B2": "", + "P5 Select": "", + "P5 Run": "" + }, + "ColecoVision Basic Controller": { + "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 L": "Z, J1 B5, X1 LeftShoulder", + "P1 R": "X, J1 B6, X1 RightShoulder", + "P1 Key 1": "NumberPad1, J1 B1, X1 X", + "P1 Key 2": "NumberPad2, J1 B2, X1 A", + "P1 Key 3": "NumberPad3, J1 B3, X1 B", + "P1 Key 4": "NumberPad4, J1 B4, X1 Y", + "P1 Key 5": "NumberPad5, J1 RotationZ-, X1 RStickUp", + "P1 Key 6": "NumberPad6, J1 RotationZ+, X1 RStickDown", + "P1 Key 7": "NumberPad7, J1 Z-, X1 RStickLeft", + "P1 Key 8": "NumberPad8, J1 Z+, X1 RStickRight", + "P1 Key 9": "NumberPad9, J1 B11, X1 LeftThumb", + "P1 Star": "NumberPadEnter, J1 B9, X1 Back", + "P1 Key 0": "NumberPad0, J1 B12, X1 RightThumb", + "P1 Pound": "NumberPadPeriod, J1 B10, X1 Start", + "P2 Up": "", + "P2 Down": "", + "P2 Left": "", + "P2 Right": "", + "P2 L": "", + "P2 R": "", + "P2 Key1": "", + "P2 Key2": "", + "P2 Key3": "", + "P2 Key4": "", + "P2 Key5": "", + "P2 Key6": "", + "P2 Key7": "", + "P2 Key8": "", + "P2 Key9": "", + "P2 Star": "", + "P2 Key0": "", + "P2 Pound": "" + }, + "SMS Controller": { + "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 B1": "Z, J1 B1, X1 X", + "P1 B2": "X, J1 B2, X1 A", + "Reset": "J1 B9, X1 Back", + "Pause": "J1 B10, X1 Start", + "P2 Up": "", + "P2 Down": "", + "P2 Left": "", + "P2 Right": "", + "P2 B1": "", + "P2 B2": "" + }, + "SMS Paddle Controller": { + "P1 Left": "LeftArrow, J1 POV1L", + "P1 Right": "RightArrow, J1 POV1R", + "P1 B1": "Z, J1 B1, X1 X", + "Reset": "J1 B9, X1 Back", + "Pause": "J1 B10, X1 Start" + }, + "SMS Light Phaser Controller": { + "P1 Trigger": "Z, J1 B1, X1 X, WMouse L", + "Reset": "J1 B9, X1 Back", + "Pause": "J1 B10, X1 Start" + }, + "SMS Sports Pad Controller": { + "P1 Up": "UpArrow, J1 POV1U", + "P1 Down": "DownArrow, J1 POV1D", + "P1 Left": "LeftArrow, J1 POV1L", + "P1 Right": "RightArrow, J1 POV1R", + "P1 B1": "Z, J1 B1, X1 X", + "P1 B2": "X, J1 B2, X1 A", + "Reset": "J1 B9, X1 Back", + "Pause": "J1 B10, X1 Start", + "P2 Up": "", + "P2 Down": "", + "P2 Left": "", + "P2 Right": "", + "P2 B1": "", + "P2 B2": "" + }, + "SMS Keyboard Controller": { + "Key 1": "D1", + "Key 2": "D2", + "Key 3": "D3", + "Key 4": "D4", + "Key 5": "D5", + "Key 6": "D6", + "Key 7": "D7", + "Key 8": "D8", + "Key 9": "D9", + "Key 0": "D0", + "Key Minus": "Minus", + "Key Caret": "Equals", + "Key Yen": "Backspace", + "Key Break": "Delete", + + "Key Function": "Tab", + "Key Q": "Q", + "Key W": "W", + "Key E": "E", + "Key R": "R", + "Key T": "T", + "Key Y": "Y", + "Key U": "U", + "Key I": "I", + "Key O": "O", + "Key P": "P", + "Key At": "LeftBracket", + "Key Left Bracket": "RightBracket", + "Key Return": "Return", + "Key Up Arrow": "UpArrow", + + "Key Control": "CapsLock", + "Key A": "A", + "Key S": "S", + "Key D": "D", + "Key F": "F", + "Key G": "G", + "Key H": "H", + "Key J": "J", + "Key K": "K", + "Key L": "L", + "Key Semicolon": "Semicolon", + "Key Colon": "Apostrophe", + "Key Right Bracket": "Backslash", + "Key Left Arrow": "LeftArrow", + "Key Right Arrow": "RightArrow", + + "Key Shift": "LeftShift", + "Key Z": "Z", + "Key X": "X", + "Key C": "C", + "Key V": "V", + "Key B": "B", + "Key N": "N", + "Key M": "M", + "Key Comma": "Comma", + "Key Period": "Period", + "Key Slash": "Slash", + "Key PI": "RightShift", + "Key Down Arrow": "DownArrow", + + "Key Graph": "PageUp", + "Key Kana": "PageDown", + "Key Space": "Space", + "Key Home/Clear": "Home", + "Key Insert/Delete": "Insert", + + "P1 Up": "J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 B1": "J1 B1, X1 X", + "P1 B2": "J1 B2, X1 A", + "Reset": "J1 B9, X1 Back", + "Pause": "J1 B10, X1 Start", + "P2 Up": "", + "P2 Down": "", + "P2 Left": "", + "P2 Right": "", + "P2 B1": "", + "P2 B2": "" + }, + "GG Controller": { + "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 B1": "Z, J1 B1, X1 X", + "P1 B2": "X, J1 B2, X1 A", + "Reset": "J1 B9, X1 Back", + "P1 Start": "Return, J1 B10, X1 Start" + }, + "Dual Gameboy Controller": { + "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 Start": "Return, J1 B10, X1 Start", + "P1 Select": "Space, J1 B9, X1 Space", + "P1 B": "Z, J1 B1, X1 X", + "P1 A": "X, J1 B2, X1 A", + "P1 Power": "", + "P2 Up": "NumberPad8, J1 RotationZ-, X1 RStickUp", + "P2 Down": "NumberPad2, J1 RotationZ+, X1 RStickDown", + "P2 Left": "NumberPad4, J1 Z-, X1 RStickLeft", + "P2 Right": "NumberPad6, J1 Z+, X1 RStickRight", + "P2 Start": "RightBracket, J1 B5, X1 LeftShoulder", + "P2 Select": "LeftBracket, J1 B6, X1 RightShoulder", + "P2 B": "C, J1 B4, X1 Y", + "P2 A": "V, J1 B3, X1 B", + "P2 Power": "" + }, + "TI83 Controller": { + "0": "NumberPad0", + "1": "NumberPad1", + "2": "NumberPad2", + "3": "NumberPad3", + "4": "NumberPad4", + "5": "NumberPad5", + "6": "NumberPad6", + "7": "NumberPad7", + "8": "NumberPad8", + "9": "NumberPad9", + "DOT": "NumberPadPeriod", + "ON": "Space", + "ENTER": "Return, NumberPadEnter", + "DOWN": "DownArrow", + "UP": "UpArrow", + "LEFT": "LeftArrow", + "RIGHT": "RightArrow", + "PLUS": "NumberPadPlus", + "MINUS": "NumberPadMinus", + "MULTIPLY": "NumberPadStar", + "DIVIDE": "NumberPadSlash", + "CLEAR": "Escape", + "EXP": "6", + "DASH": "Minus", + "PARACLOSE": "0", + "TAN": "T", + "VARS": "V", + "PARAOPEN": "9", + "COS": "C", + "PRGM": "R", + "STAT": "S", + "SIN": "Period", + "MATRIX": "LeftBracket", + "X": "X", + "STO": "Insert", + "LN": "L", + "LOG": "O", + "SQUARED": "2", + "NEG1": "1", + "MATH": "M", + "ALPHA": "A", + "GRAPH": "G", + "TRACE": "Home", + "ZOOM": "Z", + "WINDOW": "W", + "Y": "Y", + "SECOND": "Slash", + "MODE": "BackSlash", + "DEL": "Delete", + "COMMA": "Comma" + }, + "GPGX Genesis Controller": { + "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 A": "Z, J1 B1, X1 X", + "P1 B": "X, J1 B2, X1 A", + "P1 C": "C, J1 B4, X1 Y", + "P1 Start": "Return, J1 B10, X1 Start", + "P1 X": "A, J1 B3, X1 B", + "P1 Y": "S, J1 B5, X1 LeftShoulder", + "P1 Z": "D, J1 B6, X1 RightShoulder", + "P1 Mode": "E, J1 B9, X1 Back", + "P2 Up": "", + "P2 Down": "", + "P2 Left": "", + "P2 Right": "", + "P2 A": "", + "P2 B": "", + "P2 C": "", + "P2 Start": "", + "P2 X": "", + "P2 Y": "", + "P2 Z": "", + "P2 Mode": "", + "P2 Lightgun Trigger": "WMouse L", + "P2 Lightgun Start": "NumberPad5", + "P2 Mouse Left": "WMouse L", + "P2 Mouse Center": "WMouse M", + "P2 Mouse Right": "WMouse R", + "P2 Mouse Start": "NumberPad5", + "Power": "", + "Reset": "" + }, + "PicoDrive Genesis Controller": { + "P1 Up": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 Down": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 Left": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 Right": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 A": "Z, J1 B1, X1 X", + "P1 B": "X, J1 B2, X1 A", + "P1 C": "C, J1 B4, X1 Y", + "P1 Start": "Return, J1 B10, X1 Start", + "P1 X": "A, J1 B3, X1 B", + "P1 Y": "S, J1 B5, X1 LeftShoulder", + "P1 Z": "D, J1 B6, X1 RightShoulder", + "P1 Mode": "E, J1 B9, X1 Back", + "P2 Up": "", + "P2 Down": "", + "P2 Left": "", + "P2 Right": "", + "P2 A": "", + "P2 B": "", + "P2 C": "", + "P2 Start": "", + "P2 X": "", + "P2 Y": "", + "P2 Z": "", + "P2 Mode": "", + "Power": "", + "Reset": "" + }, + "WonderSwan Controller": { + "P1 X1": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P1 X3": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P1 X4": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P1 X2": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P1 Y1": "NumberPad8, J1 RotationZ-, X1 RStickUp", + "P1 Y3": "NumberPad2, J1 RotationZ+, X1 RStickDown", + "P1 Y4": "NumberPad4, J1 Z-, X1 RStickLeft", + "P1 Y2": "NumberPad6, J1 Z+, X1 RStickRight", + "P1 Start": "Return, J1 B10, X1 Start", + "P1 B": "Z, J1 B1, X1 X", + "P1 A": "X, J1 B2, X1 A", + "P2 X1": "", + "P2 X3": "X, J1 B2, X1 A", + "P2 X4": "Z, J1 B1, X1 X", + "P2 X2": "", + "P2 Y1": "LeftArrow, J1 POV1L, X1 DpadLeft, X1 LStickLeft", + "P2 Y3": "RightArrow, J1 POV1R, X1 DpadRight, X1 LStickRight", + "P2 Y4": "DownArrow, J1 POV1D, X1 DpadDown, X1 LStickDown", + "P2 Y2": "UpArrow, J1 POV1U, X1 DpadUp, X1 LStickUp", + "P2 Start": "Return, J1 B10, X1 Start", + "P2 B": "", + "P2 A": "", + "Power": "" + }, + "PSX DualShock Controller": { + "P1 Up": "X1 DpadUp,UpArrow", + "P1 Down": "X1 DpadDown,DownArrow", + "P1 Left": "X1 DpadLeft,LeftArrow", + "P1 Right": "X1 DpadRight,RightArrow", + "P1 Select": "X1 Back,Space", + "P1 Start": "X1 Start,Return", + "P1 Square": "X1 X,A", + "P1 Triangle": "X1 Y,S", + "P1 Circle": "X1 B,X", + "P1 Cross": "X1 A,Z", + "P1 L1": "X1 LeftShoulder,Q", + "P1 R1": "X1 RightShoulder,W", + "P1 L2": "X1 LeftTrigger,E", + "P1 R2": "X1 RightTrigger,R", + "P1 L3": "X1 LeftThumb,T", + "P1 R3": "X1 RightThumb,Y", + "P1 MODE": "D" + }, + "Lynx Controller": { + "Up": "UpArrow", + "Down": "DownArrow", + "Left": "LeftArrow", + "Right": "RightArrow", + "A": "X", + "B": "Z", + "Option 1": "A", + "Option 2": "S", + "Pause": "Return", + "Power": "" + }, + "Apple IIe Keyboard": { + "Delete": "Delete", + "Left": "LeftArrow", + "Tab": "Tab", + "Down": "DownArrow", + "Up": "UpArrow", + "Return": "Return", + "Right": "RightArrow", + "Escape": "", + "Space": "Space", + "'": "Apostrophe", + ",": "Comma", + "-": "Minus", + ".": "Period", + "/": "Slash", + "0": "NumberPad0", + "1": "NumberPad1", + "2": "NumberPad2", + "3": "NumberPad3", + "4": "NumberPad4", + "5": "NumberPad5", + "6": "NumberPad6", + "7": "NumberPad7", + "8": "NumberPad8", + "9": "NumberPad9", + ";": "Semicolon", + "=": "Equals", + "[": "LeftBracket", + "\\": "Backslash", + "]": "RightBracket", + "`": "Grave", + "A": "A", + "B": "B", + "C": "C", + "D": "D", + "E": "E", + "F": "F", + "G": "G", + "H": "H", + "I": "I", + "J": "J", + "K": "K", + "L": "L", + "M": "M", + "N": "N", + "O": "O", + "P": "P", + "Q": "Q", + "R": "R", + "S": "S", + "T": "T", + "U": "U", + "V": "V", + "W": "W", + "X": "X", + "Y": "Y", + "Z": "Z", + "Control": "RightControl", + "Shift": "RightShift", + "Caps Lock": "CapsLock", + "Previous Disk": "", + "Next Disk": "" + }, + "VirtualBoy Controller": { + "L_Up": "UpArrow, X1 DpadUp, X1 LStickUp", + "L_Down": "DownArrow, X1 DpadDown, X1 LStickDown", + "L_Left": "LeftArrow, X1 DpadLeft, X1 LStickLeft", + "L_Right": "RightArrow, X1 DpadRight, X1 LStickRight", + "R_Up": "NumberPad8, X1 RStickUp", + "R_Down": "NumberPad2, X1 RStickDown", + "R_Left": "NumberPad4, X1 RStickLeft", + "R_Right": "NumberPad6, X1 RStickRight", + "B": "Z, X1 X", + "A": "X, X1 A", + "R": "W, X1 LeftShoulder", + "L": "E, X1 RightShoulder", + "Select": "Space, X1 Back", + "Start": "Return, X1 Start", + "Power": "" + }, + "NeoGeo Portable Controller": { + "Up": "UpArrow, X1 DpadUp, X1 LStickUp", + "Down": "DownArrow, X1 DpadDown, X1 LStickDown", + "Left": "LeftArrow, X1 DpadLeft, X1 LStickLeft", + "Right": "RightArrow, X1 DpadRight, X1 LStickRight", + "B": "Z, J1 B1, X1 X", + "A": "X, J1 B2, X1 A", + "Option": "Return, J1 B10, X1 Start", + "Power": "" + } + }, + "AllTrollersAutoFire": { + "NES Controller": { + "P1 Up": "", + "P1 Down": "", + "P1 Left": "", + "P1 Right": "", + "P1 Start": "", + "P1 Select": "", + "P1 B": "A", + "P1 A": "S", + "P2 Up": "", + "P2 Down": "", + "P2 Left": "", + "P2 Right": "", + "P2 Start": "", + "P2 Select": "", + "P2 B": "", + "P2 A": "", + "P2 Fire": "", + "P2 Microphone": "", + "P3 Fire": "", + "Reset": "", + "Power": "" + }, + "Gameboy Controller": { + "Up": "", + "Down": "", + "Left": "", + "Right": "", + "Start": "", + "Select": "", + "B": "A", + "A": "S", + "Power": "" + }, + "Gameboy Controller H": { + "Up": "", + "Down": "", + "Left": "", + "Right": "", + "Start": "", + "Select": "", + "B": "A", + "A": "S", + "Power": "" + }, + "GBAController": { + "Up": "", + "Down": "", + "Left": "", + "Right": "", + "Start": "", + "Select": "", + "B": "A", + "A": "S", + "L": "", + "R": "", + "Power": "" + }, + "Atari 2600 Basic Controller": { + "Reset": "", + "Select": "", + "P1 Up": "", + "P1 Down": "", + "P1 Left": "", + "P1 Right": "", + "P1 Button": "A", + "P2 Up": "", + "P2 Down": "", + "P2 Left": "", + "P2 Right": "", + "P2 Button": "S" + }, + "PC Engine Controller": { + "Reset": "", + "Power": "", + "P1 Up": "", + "P1 Down": "", + "P1 Left": "", + "P1 Right": "", + "P1 B2": "A", + "P1 B1": "S", + "P1 Select": "", + "P1 Run": "", + "P2 Up": "", + "P2 Down": "", + "P2 Left": "", + "P2 Right": "", + "P2 B2": "", + "P2 B1": "", + "P2 Select": "", + "P2 Run": "", + "P3 Up": "", + "P3 Down": "", + "P3 Left": "", + "P3 Right": "", + "P3 B2": "", + "P3 B1": "", + "P3 Select": "", + "P3 Run": "", + "P4 Up": "", + "P4 Down": "", + "P4 Left": "", + "P4 Right": "", + "P4 B2": "", + "P4 B1": "", + "P4 Select": "", + "P4 Run": "", + "P5 Up": "", + "P5 Down": "", + "P5 Left": "", + "P5 Right": "", + "P5 B2": "", + "P5 B1": "", + "P5 Select": "", + "P5 Run": "" + }, + "SMS Controller": { + "P1 Up": "", + "P1 Down": "", + "P1 Left": "", + "P1 Right": "", + "P1 B1": "A", + "P1 B2": "S", + "Reset": "", + "Pause": "", + "P2 Up": "", + "P2 Down": "", + "P2 Left": "", + "P2 Right": "", + "P2 B1": "", + "P2 B2": "" + }, + "GPGX Genesis Controller": { + "P1 Up": "", + "P1 Down": "", + "P1 Left": "", + "P1 Right": "", + "P1 A": "", + "P1 B": "", + "P1 C": "", + "P1 Start": "", + "P1 X": "", + "P1 Y": "", + "P1 Z": "", + "P1 Mode": "", + "P2 Up": "", + "P2 Down": "", + "P2 Left": "", + "P2 Right": "", + "P2 A": "", + "P2 B": "", + "P2 C": "", + "P2 Start": "", + "P2 X": "", + "P2 Y": "", + "P2 Z": "", + "P2 Mode": "", + "Power": "", + "Reset": "" + }, + "GBA Controller": { + "Up": "", + "Down": "", + "Left": "", + "Right": "", + "Start": "", + "Select": "", + "B": "A", + "A": "S", + "L": "", + "R": "", + "Power": "" + }, + "WonderSwan Controller": { + "P1 B": "A", + "P1 A": "S", + "P2 X4": "A", + "P2 X3": "S", + "Power": "" + }, + "Lynx Controller": { + "Up": "", + "Down": "", + "Left": "", + "Right": "", + "A": "", + "B": "", + "Option 1": "", + "Option 2": "", + "Pause": "", + "Power": "" + }, + "Apple IIe Keyboard": { + "Delete": "", + "Left": "", + "Tab": "", + "Down": "", + "Up": "", + "Return": "Return", + "Right": "", + "Escape": "", + "Space": "", + "'": "", + ",": "", + "-": "", + ".": "", + "/": "", + "0": "", + "1": "", + "2": "", + "3": "", + "4": "", + "5": "", + "6": "", + "7": "", + "8": "", + "9": "", + ";": "", + "=": "", + "[": "", + "\\": "", + "]": "", + "`": "", + "A": "", + "B": "", + "C": "", + "D": "", + "E": "", + "F": "", + "G": "", + "H": "", + "I": "", + "J": "", + "K": "", + "L": "", + "M": "", + "N": "", + "O": "", + "P": "", + "Q": "", + "R": "", + "S": "", + "T": "", + "U": "", + "V": "", + "W": "", + "X": "", + "Y": "", + "Z": "", + "Control": "", + "Shift": "", + "Caps Lock": "", + "Previous Disk": "", + "Next Disk": "" + }, + "VirtualBoy Controller": { + "L_Up": "", + "L_Down": "", + "L_Left": "", + "L_Right": "", + "R_Up": "", + "R_Down": "", + "R_Left": "", + "R_Right": "", + "B": "", + "A": "", + "R": "", + "L": "", + "Select": "", + "Start": "", + "Power": "" + }, + "NeoGeo Portable Controller": { + "Up": "", + "Down": "", + "Left": "", + "Right": "", + "B": "", + "A": "", + "Option": "", + "Power": "" + } + }, "AllTrollersAnalog": { "NES Controller": { "P2 Paddle": { diff --git a/BizHawk.Client.EmuHawk/config/ControllerConfig.cs b/BizHawk.Client.EmuHawk/config/ControllerConfig.cs index 4b54d570be..303f054169 100644 --- a/BizHawk.Client.EmuHawk/config/ControllerConfig.cs +++ b/BizHawk.Client.EmuHawk/config/ControllerConfig.cs @@ -24,6 +24,8 @@ namespace BizHawk.Client.EmuHawk ControllerImages.Add("SNES Controller", Properties.Resources.SNES_Controller); ControllerImages.Add("Nintento 64 Controller", Properties.Resources.N64); ControllerImages.Add("Gameboy Controller", Properties.Resources.GBController); + ControllerImages.Add("Gameboy Controller H", Properties.Resources.GBController); + ControllerImages.Add("Gameboy Controller + Tilt", Properties.Resources.GBController); ControllerImages.Add("GBA Controller", Properties.Resources.GBA_Controller); ControllerImages.Add("Dual Gameboy Controller", Properties.Resources.GBController); From 642bc13e842e490d80431837c7f82b7e59313877 Mon Sep 17 00:00:00 2001 From: zeromus Date: Mon, 24 Dec 2018 20:33:09 -0500 Subject: [PATCH 041/301] fix build error (maybe some new c# thing) --- .../Consoles/Sega/gpgx64/GPGX.ITraceable.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs index 377a6ab7be..c8d8dab662 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.ITraceable.cs @@ -23,7 +23,8 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx { var regs = DebuggableCore.GetCpuFlagsAndRegisters(); uint pc = (uint)regs["M68K PC"].Value; - var disasm = Disassembler.Disassemble(MemoryDomains.SystemBus, pc & 0xFFFFFF, out int length); + int length; + var disasm = Disassembler.Disassemble(MemoryDomains.SystemBus, pc & 0xFFFFFF, out length); var traceInfo = new TraceInfo { From 45de86de8d06a8fef7d1b0e4ac398b9ef0aeafd6 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Fri, 28 Dec 2018 06:51:22 -0600 Subject: [PATCH 042/301] GBHawk: LY = LYC Fix: Fixes Slugfest --- .../Consoles/Nintendo/GBHawk/GBC_PPU.cs | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs index 7c679ab952..18574b8a3e 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs @@ -112,11 +112,20 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk case 0xFF41: // STAT // note that their is no stat interrupt bug in GBC // writing to STAT during mode 0 or 1 causes a STAT IRQ - if (LCDC.Bit(7) && !Core.GBC_compat) + if (LCDC.Bit(7)) { - if (((STAT & 3) == 0) || ((STAT & 3) == 1)) + if (!Core.GBC_compat) { - LYC_INT = true; + if (((STAT & 3) == 0) || ((STAT & 3) == 1)) + { + LYC_INT = true; + } + } + + if (value.Bit(6)) + { + if (LY == LYC) { LYC_INT = true; } + else { LYC_INT = false; } } } STAT = (byte)((value & 0xF8) | (STAT & 7) | 0x80); From 36e159da7273cc8ce2de5cd786fa47c6c3fd781c Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Fri, 28 Dec 2018 09:15:16 -0600 Subject: [PATCH 043/301] GBHawk: GBC pass remaining Wilbert Pol tests --- .../Consoles/Nintendo/GBHawk/GBC_PPU.cs | 45 ++++++++++++------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs index 18574b8a3e..6c137ea199 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs @@ -53,6 +53,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk public int last_HBL; public bool HBL_HDMA_go; public bool HBL_test; + public byte LYC_t; + public int LYC_cd; public override byte ReadReg(int addr) { @@ -143,20 +145,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk LY = 0; /*reset*/ break; case 0xFF45: // LYC - LYC = value; - if (LCDC.Bit(7)) - { - if (LY != LYC) { STAT &= 0xFB; LYC_INT = false; } - else { STAT |= 0x4; LYC_INT = true; } - // special case: at cycle 454, some strange things are happening, and it appears as though LY becomes LY + 1 - // two cycles ahead of where it's supposed to. this is probably related to strange behaviour around cycle 452 - if ((LY_inc == 0) && cycle == 6) - { - //if (0 == LYC) { STAT |= 0x4; LYC_INT = true; } - //else { STAT &= 0xFB; LYC_INT = false; } - } - } + // tests indicate that latching writes to LYC should take place 4 cycles after the write + // otherwise tests around LY boundaries will fail + LYC_t = value; + LYC_cd = 4; break; case 0xFF46: // DMA DMA_addr = value; @@ -578,12 +571,12 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk if (LY_inc == 0) { - if (cycle == 10) + if (cycle == 12) { LYC_INT = false; STAT &= 0xFB; } - else if (cycle == 12) + else if (cycle == 14) { // Special case of LY = LYC if ((LY == LYC) && !STAT.Bit(2)) @@ -596,7 +589,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk } // here LY=LYC will be asserted or cleared (but only if LY isnt 0 as that's a special case) - if ((cycle == 2) && (LY != 0)) + if ((cycle == 4) && (LY != 0)) { if (LY_inc == 1) { @@ -604,7 +597,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk STAT &= 0xFB; } } - else if ((cycle == 4) && (LY != 0)) + else if ((cycle == 6) && (LY != 0)) { if ((LY == LYC) && !STAT.Bit(2)) { @@ -645,6 +638,21 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk // process latch delays //latch_delay(); + + if (LYC_cd > 0) + { + LYC_cd--; + if (LYC_cd == 0) + { + LYC = LYC_t; + + if (LCDC.Bit(7)) + { + if (LY != LYC) { STAT &= 0xFB; LYC_INT = false; } + else { STAT |= 0x4; LYC_INT = true; } + } + } + } } // might be needed, not sure yet @@ -1535,6 +1543,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk ser.Sync("BG_bytes_index", ref BG_bytes_index); ser.Sync("OBJ_bytes_index", ref OBJ_bytes_index); + ser.Sync("LYC_t", ref LYC_t); + ser.Sync("LYC_cd", ref LYC_cd); + base.SyncState(ser); } From 19f3aeec3acf8c063d853ad079a79f05869b1bd2 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Fri, 28 Dec 2018 10:11:37 -0600 Subject: [PATCH 044/301] GBHawk: GBC HW IO --- .../Nintendo/GBHawk/GBHawk.IStatable.cs | 8 ++ .../Consoles/Nintendo/GBHawk/GBHawk.cs | 3 + .../Consoles/Nintendo/GBHawk/HW_Registers.cs | 80 ++++++++++++++++++- 3 files changed, 87 insertions(+), 4 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IStatable.cs index 104274715c..161f06c92d 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IStatable.cs @@ -90,6 +90,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk ser.Sync("speed_switch", ref speed_switch); ser.Sync("HDMA_transfer", ref HDMA_transfer); + ser.Sync("undoc_6C", ref undoc_6C); + ser.Sync("undoc_72", ref undoc_72); + ser.Sync("undoc_73", ref undoc_73); + ser.Sync("undoc_74", ref undoc_74); + ser.Sync("undoc_75", ref undoc_75); + ser.Sync("undoc_76", ref undoc_76); + ser.Sync("undoc_77", ref undoc_77); + ser.Sync("Use_MT", ref Use_MT); ser.Sync("addr_access", ref addr_access); diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs index a809042862..d14cc55f50 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs @@ -56,6 +56,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk public bool speed_switch; public bool HDMA_transfer; // stalls CPU when in progress + // several undocumented GBC Registers + public byte undoc_6C, undoc_72, undoc_73, undoc_74, undoc_75, undoc_76, undoc_77; + public byte[] _bios; public readonly byte[] _rom; public readonly byte[] header = new byte[0x50]; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/HW_Registers.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/HW_Registers.cs index 249c8e3ddf..5124e4371f 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/HW_Registers.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/HW_Registers.cs @@ -101,7 +101,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk // Speed Control for GBC case 0xFF4D: - if (is_GBC) + if (GBC_compat) { ret = (byte)(((double_speed ? 1 : 0) << 7) + ((speed_switch ? 1 : 0))); } @@ -149,7 +149,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk // Speed Control for GBC case 0xFF70: - if (is_GBC) + if (GBC_compat) { ret = (byte)RAM_Bank; } @@ -159,6 +159,41 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk } break; + case 0xFF6C: + if (GBC_compat) { ret = undoc_6C; } + else { ret = 0xFF; } + break; + + case 0xFF72: + if (is_GBC) { ret = undoc_72; } + else { ret = 0xFF; } + break; + + case 0xFF73: + if (is_GBC) { ret = undoc_73; } + else { ret = 0xFF; } + break; + + case 0xFF74: + if (GBC_compat) { ret = undoc_74; } + else { ret = 0xFF; } + break; + + case 0xFF75: + if (is_GBC) { ret = undoc_75; } + else { ret = 0xFF; } + break; + + case 0xFF76: + if (is_GBC) { ret = undoc_76; } + else { ret = 0xFF; } + break; + + case 0xFF77: + if (is_GBC) { ret = undoc_77; } + else { ret = 0xFF; } + break; + // interrupt control register case 0xFFFF: ret = REG_FFFF; @@ -323,7 +358,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk // Speed Control for GBC case 0xFF4D: - if (is_GBC) + if (GBC_compat) { speed_switch = (value & 1) > 0; } @@ -365,13 +400,41 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk // RAM Bank in GBC mode case 0xFF70: //Console.WriteLine(value); - if (is_GBC) + if (GBC_compat) { RAM_Bank = value & 7; if (RAM_Bank == 0) { RAM_Bank = 1; } } break; + case 0xFF6C: + if (GBC_compat) { undoc_6C |= (byte)(value & 1); } + break; + + case 0xFF72: + if (is_GBC) { undoc_72 = value; } + break; + + case 0xFF73: + if (is_GBC) { undoc_73 = value; } + break; + + case 0xFF74: + if (GBC_compat) { undoc_74 = value; } + break; + + case 0xFF75: + if (is_GBC) { undoc_75 |= (byte)(value & 0x70); } + break; + + case 0xFF76: + // read only + break; + + case 0xFF77: + // read only + break; + // interrupt control register case 0xFFFF: REG_FFFF = value; @@ -401,6 +464,15 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk public void Register_Reset() { input_register = 0xCF; // not reading any input + + //undocumented registers + undoc_6C = 0xFE; + undoc_72 = 0; + undoc_73 = 0; + undoc_74 = 0; + undoc_75 = 0x8F; + undoc_76 = 0; + undoc_77 = 0; } } } From cf806baff7aaca3246d62623e7ba91f30894743e Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Fri, 28 Dec 2018 19:49:20 -0600 Subject: [PATCH 045/301] GBHawk: Fix very stupid bug: Fixes Lego Racers --- BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs index 6c137ea199..b02084f64b 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs @@ -37,7 +37,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk public byte HDMA_ctrl { - get { return (byte)(((HDMA_active ? 0 : 1) << 7) | ((HDMA_length >> 16) - 1)); } + get { return (byte)(((HDMA_active ? 0 : 1) << 7) | ((HDMA_length >> 4) - 1)); } } From 9d14c1f214eac85012e527a80bd88625e8fda5d8 Mon Sep 17 00:00:00 2001 From: zeromus Date: Sun, 30 Dec 2018 02:32:38 -0500 Subject: [PATCH 046/301] fix ugly cleartype mangling on lua canvas drawtext, unintended goof-up in code. fixes #1411 --- BizHawk.Client.EmuHawk/tools/Lua/LuaPictureBox.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaPictureBox.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaPictureBox.cs index 301cfa90f9..6c8bf524d5 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaPictureBox.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaPictureBox.cs @@ -373,7 +373,6 @@ namespace BizHawk.Client.EmuHawk boxBackground.FillRectangle(GetBrush(backcolor ?? _defaultTextBackground.Value), rect); boxBackground = Graphics.FromImage(Image); boxBackground.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixelGridFit; - boxBackground = Graphics.FromImage(Image); boxBackground.DrawString(message, font, new SolidBrush(forecolor ?? Color.Black), x, y); } From 0621db45853ab2bf707783a752935bc2922bc3dd Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Mon, 31 Dec 2018 19:14:53 -0600 Subject: [PATCH 047/301] GBHawk: inital register state --- BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs index d14cc55f50..d7c8edcf4f 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs @@ -278,7 +278,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk private void HardReset() { GB_bios_register = 0; // bios enable - GBC_compat = true; + GBC_compat = is_GBC; in_vblank = true; // we start off in vblank since the LCD is off in_vblank_old = true; From 3766e2380cf02074a923e9164aa5fa6389e3191b Mon Sep 17 00:00:00 2001 From: Asnivor Date: Wed, 2 Jan 2019 12:38:32 +0000 Subject: [PATCH 048/301] ZXHawk: Fix exception thrown randomly by tape player subsystem --- .../SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs index 55e4a1d14c..c47af9c1b0 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs @@ -624,9 +624,8 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum } } - // update waitEdge with current position within the current block - _waitEdge = _dataBlocks[_currentDataBlockIndex].DataPeriods[_position]; - + // update waitEdge with current position within the current block + _waitEdge = _dataBlocks[_currentDataBlockIndex].DataPeriods.Count() > 0 ? _dataBlocks[_currentDataBlockIndex].DataPeriods[_position] : 0; // flip the current state FlipTapeState(); From 2b7014f8b8b4ea16fb6386c02eab7a47c0062326 Mon Sep 17 00:00:00 2001 From: Asnivor Date: Wed, 2 Jan 2019 14:02:09 +0000 Subject: [PATCH 049/301] ZXHawk: Some comment and group structure cleanup --- .../BizHawk.Emulation.Cores.csproj | 154 ++++++++++++------ .../Hardware/Datacorder/DatacorderDevice.cs | 68 ++------ .../Hardware/Input/StandardKeyboard.cs | 1 - .../Hardware/SoundOuput/Beeper.cs | 2 - .../Machine/SpectrumBase.Input.cs | 2 - .../Machine/SpectrumBase.Media.cs | 5 +- .../Machine/SpectrumBase.Memory.cs | 1 + .../Machine/SpectrumBase.Port.cs | 17 -- .../SinclairSpectrum/Machine/SpectrumBase.cs | 9 +- .../Computers/SinclairSpectrum/Machine/ULA.cs | 2 - .../Machine/ZXSpectrum128KPlus3/ZX128Plus3.cs | 3 +- .../Machine/ZXSpectrum48K/ZX48.cs | 2 - .../ZXSpectrum.IMemoryDomains.cs | 20 +-- .../SinclairSpectrum/ZXSpectrum.ISettable.cs | 12 +- .../SinclairSpectrum/ZXSpectrum.Util.cs | 21 ++- 15 files changed, 153 insertions(+), 166 deletions(-) diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index c4d8705210..f57d61d6eb 100644 --- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -317,27 +317,33 @@ + - - - - - - - - + - - - - - - + + NECUPD765.cs + + + NECUPD765.cs + + + NECUPD765.cs + + + NECUPD765.cs + + + NECUPD765.cs + + + NECUPD765.cs + @@ -346,10 +352,6 @@ - - - - @@ -372,30 +374,94 @@ - - - - - - - - - - - - - - + + SpectrumBase.cs + + + SpectrumBase.cs + + + SpectrumBase.cs + + + SpectrumBase.cs + + + + + + ZX48.cs + + + ZX48.cs + + + + + + ZX128.cs + + + ZX128.cs + + + + + + ZX128Plus2a.cs + + + ZX128Plus2a.cs + + + + + ZX128Plus3.cs + + + ZX128Plus3.cs + + + + Pentagon128.cs + + + Pentagon128.cs + + + + - - - - - - - - - + + ZXSpectrum.cs + + + ZXSpectrum.cs + + + ZXSpectrum.cs + + + ZXSpectrum.cs + + + ZXSpectrum.cs + + + ZXSpectrum.cs + + + ZXSpectrum.cs + + + ZXSpectrum.cs + + + ZXSpectrum.cs + + + ZXSpectrum.cs + Atari2600.cs @@ -1500,13 +1566,7 @@ - - - - - - diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs index c47af9c1b0..3ae4eafd72 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Datacorder/DatacorderDevice.cs @@ -131,13 +131,16 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum ///

    /// Should be fired at the end of every frame - /// Primary purpose is to detect tape traps and manage auto play (if/when this is ever implemented) + /// Primary purpose is to detect tape traps and manage auto play /// public void EndFrame() { MonitorFrame(); } + /// + /// No longer in use + /// public void StartFrame() { //_buzzer.ProcessPulseValue(currentState); @@ -296,14 +299,11 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum sbd.Append("("); sbd.Append((targetBlockId + 1) + " of " + _dataBlocks.Count()); sbd.Append(") : "); - //sbd.Append("ID" + bl.BlockID.ToString("X2") + " - "); sbd.Append(bl.BlockDescription); if (bl.MetaData.Count > 0) { sbd.Append(" - "); sbd.Append(bl.MetaData.First().Key + ": " + bl.MetaData.First().Value); - //sbd.Append("\n"); - //sbd.Append(bl.MetaData.Skip(1).First().Key + ": " + bl.MetaData.Skip(1).First().Value); } if (skipForward) @@ -522,7 +522,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum sbd.Append("("); sbd.Append((_currentDataBlockIndex + 1) + " of " + _dataBlocks.Count()); sbd.Append(") : "); - //sbd.Append("ID" + bl.BlockID.ToString("X2") + " - "); sbd.Append(bl.BlockDescription); if (bl.MetaData.Count > 0) { @@ -532,14 +531,12 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum _machine.Spectrum.OSD_TapePlayingBlockInfo(sbd.ToString()); } - // increment the current period position _position++; if (_position >= _dataBlocks[_currentDataBlockIndex].DataPeriods.Count()) { // we have reached the end of the current block - if (_dataBlocks[_currentDataBlockIndex].DataPeriods.Count() == 0) { // notify about the current block (we are skipping it because its empty) @@ -548,13 +545,12 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum sbd.Append("("); sbd.Append((_currentDataBlockIndex + 1) + " of " + _dataBlocks.Count()); sbd.Append(") : "); - //sbd.Append("ID" + bl.BlockID.ToString("X2") + " - "); sbd.Append(bl.BlockDescription); if (bl.MetaData.Count > 0) - { - sbd.Append(" - "); - sbd.Append(bl.MetaData.First().Key + ": " + bl.MetaData.First().Value); - } + { + sbd.Append(" - "); + sbd.Append(bl.MetaData.First().Key + ": " + bl.MetaData.First().Value); + } _machine.Spectrum.OSD_TapePlayingSkipBlockInfo(sbd.ToString()); } @@ -583,7 +579,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum } _monitorTimeOut = 2000; - break; case TapeCommand.STOP_THE_TAPE_48K: if (is48k) @@ -626,17 +621,14 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum // update waitEdge with current position within the current block _waitEdge = _dataBlocks[_currentDataBlockIndex].DataPeriods.Count() > 0 ? _dataBlocks[_currentDataBlockIndex].DataPeriods[_position] : 0; + // flip the current state FlipTapeState(); - } // update lastCycle and return currentstate _lastCycle = cpuCycle - (long)cycles; - // play the buzzer - //_buzzer.ProcessPulseValue(false, currentState); - return currentState; } @@ -648,6 +640,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Flash loading implementation /// (Deterministic Emulation must be FALSE) + /// CURRENTLY NOT ENABLED/WORKING /// private bool FlashLoad() { @@ -961,47 +954,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum if (_machine.UPDDiskDevice == null || !_machine.UPDDiskDevice.FDD_IsDiskLoaded) MonitorRead(); - /* - - if (TapeIsPlaying) - { - if (GetEarBit(_cpu.TotalExecutedCycles)) - { - result &= ~(TAPE_BIT); // reset is EAR ON - } - else - { - result |= (TAPE_BIT); // set is EAR Off - } - } - else - { - if (_machine.KeyboardDevice.IsIssue2Keyboard) - { - if ((_machine.LASTULAOutByte & (EAR_BIT + MIC_BIT)) == 0) - { - result &= ~(TAPE_BIT); - } - else - { - result |= (TAPE_BIT); - } - } - else - { - if ((_machine.LASTULAOutByte & EAR_BIT) == 0) - { - result &= ~(TAPE_BIT); - } - else - { - result |= TAPE_BIT; - } - } - } - - */ - return true; } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/StandardKeyboard.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/StandardKeyboard.cs index 7e23f843a7..77cb18d38c 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/StandardKeyboard.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/StandardKeyboard.cs @@ -183,7 +183,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum return (byte)index; } - #region IPortIODevice /// diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/Beeper.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/Beeper.cs index 5b518b031c..a3f5dec9c4 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/Beeper.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/SoundOuput/Beeper.cs @@ -8,9 +8,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// Logical Beeper class /// Represents the piezoelectric buzzer used in the Spectrum to produce sound /// The beeper is controlled by rapidly toggling bit 4 of port &FE - /// /// It is instantiated twice, once for speccy beeper output, and once tape buzzer emulation - /// /// This implementation uses BlipBuffer and should *always* output at 44100 with 882 samples per frame /// (so that it can be mixed easily further down the line) /// diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Input.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Input.cs index b64fa125eb..18345b0077 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Input.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Input.cs @@ -198,7 +198,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { if (!pressed_TapeStatus) { - //Spectrum.OSD_FireInputMessage(TapeStatus); Spectrum.OSD_ShowTapeStatus(); pressed_TapeStatus = true; } @@ -269,7 +268,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { if (!pressed_DiskStatus) { - //Spectrum.OSD_FireInputMessage(TapeStatus); Spectrum.OSD_ShowDiskStatus(); pressed_DiskStatus = true; } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Media.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Media.cs index 57525f6028..46d6a62de2 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Media.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Media.cs @@ -63,6 +63,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum // load the media into the tape device tapeMediaIndex = result; + // fire osd message if (!IsLoadState) Spectrum.OSD_TapeInserted(); @@ -232,10 +233,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum Spectrum.CoreComm.ShowMessage("You are trying to load one of more disk images.\n\n Please select ZX Spectrum +3 emulation immediately and reboot the core"); return; } - else - { - //Spectrum.CoreComm.ShowMessage("You are attempting to load a disk into the +3 disk drive.\n\nThis DOES NOT currently work properly but IS under active development."); - } UPDDiskDevice.FDD_LoadDisk(diskImages[diskMediaIndex]); } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Memory.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Memory.cs index 7c39525cdf..475c0cd6bd 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Memory.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Memory.cs @@ -199,6 +199,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Monitors ROM access /// Used to auto start/stop the tape device when appropriate + /// * This isnt really used anymore for tape trap detection * /// /// public virtual void TestForTapeTraps(int addr) diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Port.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Port.cs index d1c0f29271..3f5cb5a477 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Port.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.Port.cs @@ -34,22 +34,5 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// public abstract void WritePort(ushort port, byte value); - - /// - /// Increments the CPU totalCycles counter by the tStates value specified - /// - /// - //public virtual void PortContention(int tStates) - //{ - // CPU.TotalExecutedCycles += tStates; - //} - - /// - /// Simulates IO port contention based on the supplied address - /// This method is for 48k and 128k/+2 machines only and should be overridden for other models - /// - /// - //public abstract void ContendPort(ushort addr); - } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.cs index eca5cf0c54..a03e22ed25 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/SpectrumBase.cs @@ -72,11 +72,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum ///

    nE0t&%>yCw&nS)-wV8gsb-U0QG!ozot~5FJOGFjfW}yQae52 zGJQLq@gaRk(oeVaCtT}0q!)deF7+MKi@ww_&EYz~q*{n!d?-qcgIH<9Vk61q$@a#1 zt%um&za`!zx~u++X6yRz!D-k3UwYL4jXK$Sk)#Z2C@DYG|NF44s()gq@5>Cw``kqV zwO?tqx796VM%n-E<8J@b-d!Ihwf`RLqiCWXJU!dDKkGew7Lvxx;8mdG{lj;G&wng0;Ys|^FG}SZc$muAO5Zp( z>3MH6*b;uI?J{9cetjMylIR$b#O$p9u-ZSwlRfOwjYIBuAQ*%R^fykXU?nHr;_9D% zaJ<3`eP#PydX%=`k`~f`p^dL1yw1iWgs->kt@bN69%!W}I_e+u5z?3ItJJ2;`dp}S ze!qFS8<*)jkNCndUQ>I9Bw zzgXb`Gp_Kt3djEK$)vBpLgBe)C*f-TYYsex%g6Xg8<+LHT;tCEMApS6ph&~-^CJwO z++M?pvo-zeABf(l#>WCJ&zgV7%=Y7De;8KwZ7|y$IIl;VuI~9fgW3z)pM2i3X00lQ z?Az%N@?*Mu-r}E1Bk`^(wtwT2Wker1)Y{*bc)pDn61^*E z(Iq}y)06BOO`KiL{oC{3C)@MIv6MG9w|(JPdo~qWW~+Va_aWPnAh8*}qw*)4okfTT|%e+`$`!Bo<&xe-x-LA&pCVw$->5t+#$Me6{ zfdJ))_4ITrGgUt!C}J)j&-T^x`93VqX&;Ot>ipQWe%qDL-SM4Eo22mq{B(x6C~>If zzpw|t+Mk2Ict5FPJGBS$ciBDzjdDH2IQGByk#t#q3+J$Y{C@26Bz!H>l9eEj_@zBM znxs6&bIi6z`Mjry%J0~JmH6^|EdP@Etsm&hPs(d9m-`Ta(-SV! zM^$=BUumb8_l=NZ$W-$ z*AUD9B|iK>#+~&m`;#TlY5(7q?EmQNS3wxOmSiM4s@V%}?!jrzH~w~YkNL)XI$0?t zvt3z+T>hVwU-MEPVh&H8--$i*yKgqD*@bV&{!D)K{0VPP%l`CvVo%Zs^sRU6`H!UY z_*O7Zj|XbMVfe@F54``{^`X_i!myn=+~y~fngeaTg>bLN-Svaz&+ClvIAKy3RhEMhU&&5KC-DNu|B6r?eQ4<@j5= zNS|NuA9gtWH=NG?>&#zH4_BYpsnSoC>78`wR|KDoCLTM8d%vT5=*REt479)RRZiv2 zxA7R^T~Ax>S>nSrU7z2~x9Dxezt-lLxRsvQuOo2~MfNXEYJRfvUtjC~rWNVYzC&hU zy&O*&kD3Cw-T$i}<7nCi?!*iD5x?Z|p_#-qD*8RW(AypKD=j+g9|6H!`j*nq&M%<& z+W->NEdCz!mxz9>MMr;f^pH%csAo+rNf;sPIwPs#C5K zL{nZwk}JRbTGjTfF6n7K{p&mIPpL#S*DOyEF8%Abl!Ezj#;eI!_4(J`J4i?Nt8K!~W7rk7a6qaOJ0d(;Zg9D2$dK>||RW@RikSUHst0Q+RM*Ig@SpRQe!r|Y!X6Q}n-;77hpbKv>LrCM&$I@SE6(6=!)$BQT zmc8?<@`m7AQpLl6j$g?SYWd%PX_Xq~2~&Ai?rW8YaJ~Of#Oxlqm3yvejr3hH9kctuuBZl{6f*H>GQJW*^d`);5 zC(?tH8a&2^JG&Rj)3r^DI;ECVqxc=qVD~;%`$OjiWl>sc4*r`?ZhQRdp#140Xmph& z+$z+nAerZzyOjd%kr&(WiR|u3|8P5mXIkj!cG=)h!^VbHBX3A^rbUpM zIH+f4t7Tm@Hc`DMx(zMMP9Gy>Xq^0{7h+r!pSOs*gC6rPWbx+2{AVc_v+f;dR0l<^ zp(r;0eMn*F+o?oj|I`v~5up!$)Z*F9#QSJ~x&yMP)LGTx$E4I@bbg7v)xn7j!<2cY z^4TcmwBXqy^Qi$&1-RLv{;6x$PDAD}&)P1v&ZTgz3I{3NUxmXIK8C_hf6*HXEubc@ zhfFyX20x=ok=2KU&AYb9&YwS`otG)CUzjMhl(5RVx(JeF%NTDFQM5Q>&3Pv|i_)wa z4|Fn0|1SU|63L=OD9lwx=P7fb3TQ28NCo=iddK!X%Thp?)!yRV`jD^ z{M}ntyq-m6td~|IOPJ%GriQnL!PFrOPXoE}I}GG5H|J5basF#yx}xo}{Tk=D%TPUj zGOKABf{Ay(qE?Ha{aXQ3%IfMNLh=P}CsV65%Q?;Ajx;yn<(x` z;t@=$btkYm62pWCFEhs~shOhG z5(vNGhTr7;u{&`FNm@`86EBVp!|dvZy-}VBekjrI>W^v58=HsUv*3ctdgO_XYi7-CqF@JwHlZF zAxY`C{deg>%9SRuUqA9^=j0_3xSD>(tDTZLewqxwNQQo-m!Bp>?|#uWNI_cRBMB~1 zPxwhX&pBRuN}Vgz3wBG(X{n{aZ z4=~alMB+U4AppE#==|+Ke-|a(O^RgxftN zsL$=7&+)&_YP+JF{0~wz{RUQIBXcEy!^5l~$zV4}{3Wj$4_3a>JF+6nfknI#a;iL|Lx^a=l zgCb4iv8Rxa9}I4~CO|VLn2bLDe$dq@GqrM*`MX2~a#+1cPN?2UZ0wTyMot)V6QtCy zW`h4J5-oqV8lwe%BiVcsj1Cj``0ZK$jJu)z^(5{^-pZNYd@kkG-!55~RSGSS$M*s6FX`VUQN~x4Izduzy zNMfCn^=581-zZt>0Vb<@HM;Zsog-_zH zugHL}!hmzZQNM+kL;l$$MHXs4IFf(c(|<0JU-X>;ATvNyb@_awe>8FQj6Rs7Q+EZj z#7Xw^4LskA()#uxdo}r|Q42@&G@l>I&$XYUAHH^6$?4BsgTpM!TKkk!c)@ppnvtl1 zF@$tKr+bOP)Jsfk9JOo0;V(s+M#)~H|DP73jP!Hr7wwSlaRAcDQorcSK@dL*C|>Y= z`xGM4`+V{!OAnFQM*nKUxevi z$#DkB?j*5yr*4nm`X^9(EC(~(=rdr@44urE+o?S^`JeS*e|q3s{CrHlq3{13an$H& z82pmL82@-Aw1z<%0%<684THBpD8@cC>3fijE*b_YEX|R~#4<Bx-VYrInJq&MR*v#-Uh8Hl5GCYyt z5ex@2?8k7|lPbSY82*#t(+nSEcqhXf7-s)nr3*5=lH)I7cmcyArZ+HbW_TOJ`x!pP z@HK{?FxoJwjFowTj7-3kza3;fx7%pOX6T^ELu4MQU!%rCQ zWVjdmU5Md0_O~L&>lj|i@D_%TFnodG2Mo6{6!QG15Ca(=%kXrDGZ|jS@Fs>U8NSAF zE5jcc_IpCvXE4J&h7%e7o?#Wk%NRB@yp7=_4A(K-%Fwe~$sfotmth{maSYF9Sjn(~ z;Z+Q8Vz`3gQw(2YxRv2|3375<3eI4BE937oe2w91hW9gE z#_&pp7cnenSio>J!#svz&gVeJ`!Vz|+`;tC4But=3d5%vKFF|zVKc)x!x%$d-Y~aw zjdvbu&_=F^J+QBYI{t6_3W;|z+{iF*KNTNk_!`H*%P_$4gBfBeD&=%AY#qpQ83y-J zc#L7Y##vqqL#>yFfv*Ngxl6r!DLwBUC}HcaeI#t#Ta{-~vx2Snxyz^JB*TfLl)R^w zDLHx9sdU5dQ}UDfHQw=UhRj#v;yZb;xGuf9!h{LKo+&QK^E9P5+DnbPdbs_x-1C(>~-Y%LL607TT{ZEM;&=&Rq>p% z(wWsYvz_rZWwq7yH6>+7&O|(TkJJ%B4k3J0ELK^TUtK?=vW(~@6{VtXZmjHRgeMmi zOa>4oGiQprn))(|C!DU?Wi?e5RkOsb%DJ)f5v3I+bt*nqU0YXMQd1GD8!@xGs%``+ zMU>i^KSFENwR#sD2QHB`GXXI~Gyv}z-S=FqHDl2=j=!pHK zKQy19V9_WAW9KUvFH$f(N5S?g1)J*>j9#o@@Nxw^|EOTgMLAM#;9>=HFI6!1M+G|= zw$4|0bEAS>3{f*fg|r_oV}}V{kSXQ1GSvKHwu+B4)c&f|1?MPw3qzf*mGL%)1(C65 zPabo|6ahGK@|dYp#LS8dW|z(=7Y&!xRF~D3h}ea*E|@FU{dwJW>#kpS!@6bbZeMqw z0J0RwZG?(-kE~m@Zsoei);+oIX|e9%b&sxlV%;-u#NSx(#=eu}HLE+kRd9_3gK}|E2x5_B+}i&=D)Fh&Qijf2MuSn~T~XZGXJ|={M(#H{)+E zcypn6=h}Dv{La#M{_@UE@7(;(t?%4H5zAEYoqNPP_agrGckX)UZn5#n8#X@qw~cFB zHa>mjruem+7PW4=?y60}@Lm&Z2W_{Yt+EZBVO-CO>+ zIXJq2prK5gAAYA?wMFt8dQ){fP~|~f*>CwNY^k0L^?ZcE^y-e9miuSDe*G^DIGz&W+-5# zqlQfB7IOUcfW%Lbu6q=)_#Xi7!~HbJznVn<7jWu}he0T*Rs~4?q+H_>jrFBC+S*%n zoNB*H3y)Z)@fy{Bf($z^RQRqu#UEn6;9&|cWC*dYt6`*~pNtF-q)hpuGSd}2R?(k9 zp>L;x^Tle4Jf?q0g?3z;HOlmA(5TZ5F^|qF^LI+VBdH8(aRH`NdgrCbvtSCk9^XPK z=z6>hr=V;9il(4vvob{~==AW6u2>3sUqu%26m&n+n^VwfjHRn31--u_i`Eo$?DWg4 zEd_l5)7w+fsol}lk%GRrB8yI@hw6oRXBtN`&_1TiLeU8x|1w7?zsO}6VOY*^5yKS> zUt*YGn0X|pXBc5v&TtXK6%1cum|&QB6sKnxVW>+$x;ypPVQLpTOy$z;gxZ5MUbhcw z2hMoy_XM5s+TRH}vV&X;lhMepAOE!STAk)bS%YUiXta z{z$}=Z;(HdZ|Hb3d^Z^%hCT{+2LyEE4&Q@u7q`C3b-xr+{Zp7>A;TEMMGRXQu435E zFu_n9t>ok|3^9x_EMnNeu$kcshHVVrW!T9u^EXOvkYOIfD8q7wafZtnwlaK)VF$xq z3a^aFvKvzu!y0ye+-SGn;HZfOt)?{K$}r# z-MEK*k9iJmeFYJ?9Cr)uZrs%PF2^0mJsFNbU#)!zcPs90+|<~rNj@6z<+$UxpTXUR zyBoJa1Ma3q90VWk81CC~x8QyQcXX%_*WfNf!|KLe1P8sGoD`0CIqu-Sh{r9UV>;=% z-VojI7(#prh&%a;qhWUI#z{nkFL&T^IB>V+#GoU5xdV@*L3ZP|E_8g8sq@np8s_D= ztqTqNa^1KQ83(P~L608*d*HUN6=*NG^%Y0jZby27yf1g=kA~f?8#g6F!|lc$hi$rX zi=%}27k+3s?h#?!2dx6W3-CK~IQNz3MtfkbRcf8l z!BBgQwXWxNNDD(PAYQ4`wez|@Sgr6-Ou=ZbYS-m@eWMfp3=Hx5r?|eZdS*pkU0IDv zFtfO_az=5<>=A0yMwFJ#EUvGt)2OJZDybz8){`bljP^vvK#u-A|?^D|<1!2!Jo(MG8C^40wqiz^z6IqC4df zkCqYe1}q)&$DLMOF{QkE#FWv=ahPG-m*jIYffT7PE~qH3f`EdGQ<#6M-|;U6 zTh}XSpif-{dgrf{e<<7Aej9yL@x>ViK2~@XwqAy6+Qk_~*QxkGyMmnz1Dvjvq1LPU zBgNN}q;EUp9Um%soM9WMFYJ8Ew-M@ndBVZDYyTv~);sd=+5kP0<3Hp0^;Uo>kGs^c;2$FNmxT2N>jZ=J0y!ig`tBAkh{&R1>=^z~|#H;2> z{!xgZdGTKB`()QshOcNs<&12nGiPju|=>+5FsP zc+$MS^o&dmSzJmG{F%%6FR$*O{!0PBFgX`LE6taY)yLm|z%NYRgZ(TXoX)B!tt*G| zC&%h4N{TC|R9sRfrc@SJ>2d4Gs_Ht7aTwPy1jcI0@OQ*TWi_=G)m5^}8fNAlJEF9v z0&&)}3nCQY`A31{`Ntd#k`);BY9XK&bUe?%qmY^MIS27Oo`YD=IbyZN^$kSCb!OSD z`pV)OF}k|4l1{< zZ*TnJ6#UeXd*hF$;Ll0H-^~3|vi`vo{6!A=9`NWZ7Xb{Z)}_lEbMWgpVmbo16W8Im zgWoBirru6m^Dj%mA4~QDAKfe&TiVYgz3n_*bRi z??}P_R0{r12fs7_$`t%!lJaNb)jA?5Vk!6oDfp@1aptFG1s(j3Wg;!ZWPUUwCcoDF zp%nb&Z^T1ONs^=a!zuVrWFC@FX*7Q{1%Dy)5HBqkHGgRe{s!jJexvy-Q}ADsg1;dJ ze;e~_xf(7?!5?RSvg@TB1`x|q@ZZEd#6OS20AhuMU;8-4uf*M3{jPHGYg-UM%~_qe z*8e5uCz{?XBz|Jn zND;@?8~;G&Ctj!i9YCD?nwFD-pVkn)@dufoZ0BrWw4^6~8aJ@Cw`>)1@XKwH%hb3A zHrJ)g8&2X6U%q?(iAnr{1-UO#nm zdYzAkQ|gMVN{ees$5xe8m(oEVzQ#7tF&sMnf^_wxdL8eN4pa)r|U(q0uQL zMwM32C>w|4J~&e}l%Sd^mz6b?m9Shr$3DFp^YSvRPwOiyPv^5i#4@gUPDSNhJ7z*% zab-oxsH$0fV5p*YTt!1!X|$rQq@4JtR+X03RN_QXw7RyUPS4&Q@df1-C9|u_YB4z< zH^rX0PpzuBu)b_UKFO#otD2x6wN5OqnpIyst89EtHA;tZzPPsb;_8}G;-hPHWqsKc zEGVG5yd+*;F;iJV(Z|(aLc^IwpH_@Sv^c;uxvspdh7vKZ%4SkPVNnLe~7*~zMV0zJkG*nx* z)v;GqjFpjXE=hNwkY7_hyG*aLRQl1Qt7+I5r{_--V{p@zUshW&t7=-A%oI4~GpV?) zrb2QG;czE0rGAE7Ls7ah<;69~10Jai6~$7lxULNLFRLn5LUoNx21ooP+Jcn$sD_GK zQW_j;U1;kuy1t^alrkArQ&T(_XWJ^PYs+RF z)t1X8Bgj-?eO1qNb{NL(x$#9VQS_ygut^Dw8mT*SqE@kg-$=YOscSBgJjFLJS1A{xb2qDfpWt`W`R zT5+BDvsj7~K{trMh-KnNag(@N+#+rjw~5#oah7bgx(;?i2TmzhZm; z0r8-CNVJNF#UtYHm~TBQ9utp?RpJS;T0AM95^HdV=o!%_o)yoDe~7i>dGUgHQM@Ex z7O#j`#cSequ}-`p+QpmVpW-dCUc4>-CEgM5iuc6(;@{!}@uB!gd@MS|2JwmbRBY7M ziJ8GBu~}>p34GLXtN2W86Q7GOxHe0~cF`%m6g$LMqDy=&c8YJXgG#met@sX)jD8S5 zil69_1NJFAMw;O@d`7yFVPqOvMz%o~?PK&c{6;^czY#D77<(Ce8v~7fjD3y$j2vT- zvA=PEG1wSl9B3S51dXA_FymljxN(SasPQW!*Er1hwQ;y{gfYT6(m2Wp8AltxF^(}t z8oxD;HGXI08OIsN8z&ei8YdYi8@Iv6cZpMsurbOQZHzJUjj_f!;|AFIJ~7^i7!!NU6ov5gi*_d`|$dL(sSD}nBtZ2Er}QoV=xkNXed=s}bw9@&m`UqW%JKfyZQ(WBs0 z`Tv4G<-aStO0D`O3fp}X_B3TF)L-hQh^~4n3JHt_J^L$)|KHwc{fp=4?UkZxUdPT2aTFz3qUjOW3+*68 za?=T3%-}MO9NdF&?~hv@qVSR|+BCo=!zyU~r8on0f~n|qhJyAZQql34Tkij*qNjmQ zDx{**=)+UcDNi5h5a`V*(o^|^ zpfBAGeJJQ?NxkYv>4$-S%WmiggWj?m`f$*f?}mN|=qpmt$v%gI{!97F2Yr1CI_cjR@;^wT(~+}xaTDDSIz4xE>PPhVa8v)& z5A=M{@xRAKHtG*L{pg)Dy=J5|0njJzhCTrFXbL*X-wX7D6m&$3y+JSB9X%+-xx1kc z1iffC^nE}tO+iQYyS?ana1l7RrFb4(#N)eu9^7iG_D$z|B1o5seCcZcH@AD{kMTUG zlA+r!*+(6o(wyf z9$7X1wYMidgFiB!SB>32>#ymPo&_FrQq*O!M`d6zo^uH z>wfDtrt8;TqKcnW<|)$g93 z-_Y{+^!$eAk2&<=u2hm}zUss^|DK-T(ENLPena!`>G=)KpXzxrjrYCjpXzz>+bQ^i z>~AE?*}l4f_tw5bDfoA#;Ll6J-=;N%}p9|0;BrQnYiXm%}Yrsd{R=TETXP!E1h5{b`>KE>`Ju z`w2EGT#p&8j9Wh1)O$X(y_yFdS5@hGAmyN?vhofPyHUw01WOq4Ay%k^%Mtu@@A-6G zui^tYC>UfITGl(iBTE@z$aR^w;Z?l~#G&lDv3YP4D&e#d|${>75;V zuLm2JeZ2#5=ZJyc!MKA64+qS}eFVZGz>&D~M5gyd++p1LxFfhHB0h?{0CypH&qZ7j z?ox!yt;}OHYerxdT2oO{E287h6u`yos_KiYEDjZ*^<)IWbM-#6oE6#i5qw_RORuln zpJKbB;whb;M0Id{w2k?nWxjtX7-bk>d992qEqeY9J*U#OFx2Ogf}D>&e;xk0b4N*{ z_5ON8wW>e8o?OJZUQaeNuIsnGR{N`4V2I}j|FeGReLnPm`ugD|9{;G@p}juqLPVy8 z*nxK){B|o6JWh4&O)CD zwdM!hzBN4=>hqnNU%af^c`~2I-{p3v`8!|RJ-<%3r%=u<@X;-vdZ_(3{nCrvadS%w zGFtSWTaRYOTa)75se8fdxL?_z?KIJt|&vPe;b3U}* z4C5w9SMYt6f5#r`-|~^W{7Q=bxAQ|qZ(-;~ZvCLvpyRP0jThDQ<;9aR89xmBY4^f- zYw^&Anv@$r9MMQ_rj*qW@8b63cX9C))S@TzYk5)-|MB9<5b00ya!w?9`MAg7j^I8O z_e9*Mmt{n0!amR4i;ch_u zrGRnJ7UI4V_afMJiO30DB{id?jzM*pR4|b7XH`^{R$p8j9Cvzw#4n~(eR9? zxjx=)Q1znwr6a6*(kT`6Vzs?D+7wJp59xhc&dN8rc4~g-iPzSGb-s|vN&t( zgz=Gr^G_c&X{_QITX5Ed{DO#%8I_-Z{*;306UTDIxKWcPOq{N%LX4U=_RLY^$DS_} zK|*x$gwqSopEBWWB~C;q6po$fz|S0u1Kv{$CQLs4{6fmmflnuVOk~uVQ^ppYf9BZn z6Q&fLDdU{+V^1G5Ie)_G<0($Q0}q&&_uJznjz2R>XNu^UaUxbSlcKCEmeVIr9v&T} zU~7hgMU00JPIkuM{lgdT(YJ`h)U|FyrwNicj!&B^x-tjpavwr`kvJNeZ?cuJ}VoDA>#}$a3Px zD!x3nT>FuVuZ`&)42wA4GVsp?w7ky$Me=li5I9Qd7iJh`7-RS|YFT70ubtEB^HG72 zk{@JfCHR>@G_LBYh+&N3r404^DvNkuD8?|(^o0x;F>Geo!myQL8^d;n9Sl1e?qZlZ zU+I&>FqdH-!wADdhUE;Syw1||Sv@b;&sSp17iZYau!W(1?(sLqTN$ooxQgLZ4BHsC zGyH&|e*V+Jc!J?Bh5`PbYLH=wVT55J!*YfV3>Puf`=ff_a~a3$=PLSn$#RZg!LXI# zDuz!nY-6~V;Y$o(W7y7cJ;Qey>gP%;*dIDLKF007jbY$Y_AiFyjybqTj#BY@*L4^7 z2S4Mk78ygCd>)6PLtfNp(oHzg=%)1;;hKh^6|d<8>E}g>M_)QU;Y9l-m(U+B$l_Gl zefs+Q^$!f#Ywv;k?7Lsip#2XRJmkQGfy$(qJ6JD;yJxXOz+N z1-kSr9TXmodko$9GbTbYfOrMQ`F$FC#lwC}1$5we1E#EIirT-laP^uAy|3a@K);_d zrKB9Yq4d5=DXBn^l1}0+C5czh!P_Afv>Ph<)axVsN)q^K_2lF~4WCZtonFaLI9|I^ zufTx60E*70NGjLZ+7il7OsJ)8SbHHhp_X@ci3!()r1zs3moMX-78T;OXasj5?&)|Z z1n&_Q$70y_)x{I6Agoi1_eC%+lW}p$eQ8;8i7MP>0cX5z3ALXsU!;+ikhsedj&u%- zNIr)}+;~XkZ_$rdxWi(OpqPfzPvcjA^oBUSM|D<+?n2zt#aTxqd^EyGBa9i)Svq4oMQXyKYm!N6oSPA$de#C^E;87A;1ix4lP(LDux5bze@`vX4! z_mNe2Ax>0PSIxlz8dMCvOi>RHz}G6uF03!E#P=#@R#a8g&BaS=wY4e=Ja{vzMj<$D zQ&&-3Sz3W_b=TIteQQa@(~J96+CCaKQ%kXBN45`Rs`c6kh z?Q9XNtgjU%)i97K$Ct~?U?UK!OGRyEac#M{q^zb|RO372br)BQIy`znf${xxd`ugq zt;Nf0wJ3I#P(2NfIiXzDl_*bb*_;X$qWTf83W9QFwX!-;)c@oytr^rIl-0>H(YLyk zsvN7!S5i??Qc+Vz{dM@lWv$7fwnP4RqRZ?GrIx3l~^s5Cs981@?%y1T7)5Bw^YE@{$ zB$q{#m{MkD1;mRoyv>UGD=nTi3xkLPTQgVr6w1QZ(@m(nzG_x+P5qooe7#Ln&w_u>Mth?4WpiY)M~xMDS9KYUZFp&8V!UW>8x%?N@_7U>0>3Xs2RM zJ$?+JxU`HqDlrxx+W}vBapg?ew4eamS3!9-`Yyzy>#Bj_MQO!F6>ydr^zLZY47A|V zGW1?(Ws*_0GiJrRKo?hA+1ALXm9plPY~e3$}&evP&g%Oic(f69`0nMQ7bH-3dMsXo+P(gu~s|8;T>}pSFKp_8aT1mD%I;% zih4(idMib}N-@z6{4QhLQ1WW-BVOpag|nRjuoo1 zLXJjm#noCNI}glfW>OcAKHjPmOonLC#zcU|dfDi$s4-Sgs|uk;c}wtka%Qe=1x70{ zMuB_<#wsvQf$<7N6qumEsS2E?z(fTmDR8<1lNE?6aE1bBDlkQX0tKcjFinB86ev_+ zx&mh_AZHnK;7&L&GM8LVe$BH~)YQi+ipxa-H7mtw56zqsRcE<|8X^=y^*t)A`Vtk+ z=QgXb(KJ-4;27$wm`Bh26go)`YbrdmVirDAAjcgB56SK(SYGt*%?InxN4sJsGSa6ogDfm%7cvpj*?nvI~XSqR#i9j3Ns zVN$k*QCqVRYVB45k+&5__I8+>poNhJHUbSS1RB_3(!j!`1{OvdSO_&u3sD`Ng{pRL zp|WGJFf}A9E32`S!*+Mf5wg?fuHKKCZ zksRF1+Af7p`p;xM}|Tnq2SRBf5Y$?{&t}JsK@B)>e*tVTn9};bHZvse`xT`YRv1z z6ig9kpcBB`#k6naGy34$0|(%{0weJCfSsOG@#g>ec&mR7-r>K*m~Z^axXNfYmKrx1 zw;Rii6~=?cO5+LR8RKPRow45dz}RFYjIG8t;|rtH*kN=TJB?k&cg7FKPk8;^I?DPr2s;Po<~I6Z6z~ z>O2>D8a$VHF7;gIiF^L&S?Iaav&gf=bCu_6PqXJb&r;8Ao;y7cc+U65eDi!)`qudp zzWvk3q!*>1nm#RkPWr6$y7YPJH>EF3Z%)4>{ps`-=_}KpPk$}lOn)o=Nc6i$HX(y$fo>rLFkoKpv)oD|FO}>e~8+~{A z?)N?HTjP7t_qOi?-(6ydFC)EQ`tbBB@5gCd(>l|>N&7J^;N8bN#QSUS(cVeki@hTK zoAeXYkIC5Necbyi-{I-QGG6!Y^bYkM?)$Sh+c(npr1vfF58nIm1&zn>rHq&G6^!@s zrHcf1>SQ|mRsuL6F0k@VCiR~@gDwVd$n zfWL@zs_Fev*N3P71~ocH`f?F`d5-jE^5vW0&E(5ZOK&D$HsQ_Rz@N#R56BpnaahJN z8OLXg%P7p4m2pwV6&cMLcV;}Au{PtajE;wR z-(`==j$}{CF3FB%Uz)urdujHa*$-r|%6>8Xt?ZAoKhOR)JFQQk&#*p6^f|82*gj|W zIj2uqpPD|G_qnRivOf3pS=r~=KI{6t-)D25E_^bjU*G-v=Jq|d@0h;PzUTL?>U(M5 zMSYj{y}R$jecSrJ+V`!#8~T3U_uIbN{z3jj{73so`_J&7?Vstd@n7b@#(%T_e*Yu> zr~R+^|K;D}-|6@C^Ym5{r!)T;sVdTX{UHUNS~K=P4<3$7WaLz-_HJL1n>$K8 zMy@epTUmVgV_$#1dE2IjE5&p8#MG(ybkuqHEYyXZ*>XFFzi|%tIC5CQ`hLPW-H!s! z-}$mJpW|0rss>8ajGK+SjW<8prsQ~pxoO9yuguy7Vy*G0(Pq4Cm+PO}LLaf5joa%y z#=Axb7q&&yJEW}nqRsew$4QH{IqL5 zM|W-iVtZ{o?aDbG%xuSV{Rl*U)w$u*vUvB83C0;s<&-8*f>fXNzZt=O?>h1HQ1u{-&!qo^~DV z0CneYGr!ox$a8E0Z(bLavzh_q0`1;#JBO<3=WmKHtbrdzp)FWJ?(vIMJ$dFDBGGy?1!;-e7Ap zp)B3&_2zgF_RjLwdKYc@(vugnc!*j9SV4*sgt<2}qfb<OV{4&H8Oa0ZvXB>!rW@BP7-?HleZ^3C<#<9ooj#n+WC()*?lP7kFYclLbaOP}Xc zW&5?o9$&zBfGuX^<{eN7ozLPDukT3TZ+$2GrYqKds+!^l2B=DW<9w%4l{}%8V;9vmwq?gA zG^Mnq%0-t{czl2Nz0aM&&R2cU`Cjq;^I7RyJ70TIc56Fd=hCm(vf=a3H?V*YwmMAe zad>(^hYg2s?~+=wm+$qei^Q51V zUe=3ibl7F|B^-+MAA6k`n|^otdGv3O~$Q+*e`^@_?*JQS5?#enM zYfe_}|3}wz2Q+nk9c~hq3bKcQ>>xAjDSJxENAU^-pYH}-}i@-ym!wX=bn4^xgk!1jPsr9N7UjJBwJF^ z7xPuWSG}eBr|O_u3b{F^B>j^OEX-Jh=Z)`{>V)c3e78O)570W!Rkhh_#%h*oPGC}m zr~yO6C6C2K9mi^DAmTe^Ffh8zmR#6>`-?YGrCoN-oZ$xVVh-y&84? zA3qwYYgRE->rmTDA74Xi;Ljd1NVBDQ_qS^F`Uj*)?VQ@T46*t$vh4E`uG+6^57j37 z2jDCX0R>wXPiN+;BNK{;3V9zhLSZ>lpQUchJeUJaZA(w6|0_3F#Bc|U3EY8 zPzq0m6jJmVP&0;i+Ewz@rRufn>(uu!@6G!tRx-vsd#6~Y60g3IO&kYsG&3!(R3Y_` z)IX(Ui}9!&4(688am64oRPGM-Zz-|VQG?X)sdqDQmaveqae1LkWs~|4^Vp@9r-3wP zX;^94F%PZ&$IOlb?H?g&UsA`_@X|=u$Q3nnU)KoIh*pXxKWg+&sf=?|BZDG}QCz2x zS)A37PRX#xi5egX*OaZK^o^ZuCk~*OUXU@NN%yU1Zi|@38UwivrMyA^JC46n%8FtW_ZmAn~^=E?5pv=C%eZanCChXS2Id8Q8SMe zZWBX8pd!4cnbA#i&h5kfif)>z{Y9Nw3o%b~t!As{M$LE06Z?>2rz+O?0oB~0xd%U> zXK4v%HUfN%J|5PDxU>)*8-=KUt zRc(J&+-#d1otPYB3BoOe?0HQw#PsONW~STW3LLPV;Ng zjAb)qI4#K@7tdHl>=Jqdmv^A*_Qh`C#LhT4_x_0!AAbs8-o8n1$@e1ejGt!=&gA?LHhlPhkoSqP zzHvoAYrT#IXr|FjGhDf`$LW$HT}LsR={nPw7JLr)PR$IN8Hw-IIeMpT3(?H zhgsNz?3-CQvw|jCYpOF_7V$Y$p_%JuZey?;3R0I6g98*bN+*Z=yT>Mn2D>NgWK%b0 zo+h79J$XhidrRClPTb6qna^kbJ8Q-)bMT7f%{mSKk3VOP&3dUN)XLHlYrUuSh1T_p z%wceg$5cG-GT&V(DRX_60X6OrMX}Ce?ktyCUb8YtdcA=!epb+|Fnsan$;Hb!Kg>#` zz=oCQO|_5A+DF$$ zW_>a1dwg~*>c7WyVeoLQ`_aT?4Q8c7iH>Wt{-U}a#7_Wa_Iz8y)l${c(XwPfji-wW z&GCVeu?gn2Nd?mK(Mll5U8drw70SHoVQ7CIXzfbo7+A&CD$`o7)yOneq1d?Vgs6qP zTdPy+HLZP0rm?e+CLr!nim!InBCTUuCrLJ3LY?CkHkI;Rmv{P8RaTu^$G18u+ZHaI1mo#mAvB1>_)J=O zztq01-J?CA4Ytqtz#~w2m87&E=Jb*FX+k*>DxaGEk0ZTjI*a>ybQFx7J+CslegB`r zy;sbeZ8qCxw)1Q+lH3Pq_UuDhTNl_2*@sb(JS1p#+Uz_QYBE^1R)~~4yJmLd>`sv5S+a zqoTvt(aV}YpiRf z8=xDbo35LqTd1VI_HHr6s&v6n0h9Emt|mpg9}y%LOe-B<;RcNEJY5f(iHB0_441R! z9LbuM3)N8tE=X~uW^X;l-J86TldRjW+oiir_m1w6?h`$(o`If~o{L_9UbtQcY{FHN z6RJdrdAfUb-_<>)dxb=L42|?C9O=5JbkE=i^Xq9yk7px2ikR{PT{%7FNNUQ__{kWQ zKLoq%O)&N;okt4z{$5Xmg>Ow3zGGP{a~*liu(fDvnU$31;zvE2|Njl^eKTbvCq-|$ zUaQ_tz3=st^>^uiVIVY!GPrB-hrvrj?G!u-QsWLa%L&Tpxu;}D7KL2>Ed2`o zO+DpEe~G??+R_DNCukhmeyb!2R0a+qb5t*S!??-(3cObm`Njn{yb1^3%#1wN3B z` z)WVjfb#c;+mKv=vde7*-(LM+`Bw3|Gu zi)bd7MG4s}Y>t*yh>VUIeWKJNX9G_*I%jm5W^jurnUZaEla?vDY!zjJQXe!MsKU5! zD=LxE3uAsiIs2&>xGtb{_3E;?Umk0%9z<)|;~Hac1xf#fG9)t&AD@cN@QL ze8l*;@fqWb#@`+P_~Va-nBB}1T>`YutyiMktL{V)EsJ2QrBsV-Y8Dw@nkE}fc9^_ra?s=hlhY>W zOfH#RH@QpAqlB7A5jBr|Y90%yd6ZN0D5ge{Qlk`7qe!Sx7JKte6efS0JT+A@)u8%b zMD?9U^_@=jT}Jg?Dnh14rp`E-%2cvVEm?=LaA;IPv8q4CeA5Wi0@E_n*G!M#6x^(m zZ<=hH&1zjl5!XL7W#{qra!W#AeA7~Uegg4!$@MhT18U+9Mw72bA)pO=fsN8oSAcsm}45l z%+R5CfTgj{V>H$t_VdrdK|q_WgC%HA_MH6wAy6UTeL`s&64pub9C{Uu`~Cu7d%bH1E&$xO}6(k$QXHM8Sp=ght{n=)55ckKo>;{XwbC=&DL+?aE3 z&L4B0k=&$^#(4pb%Q^jX260?|H%(=#W+7Ci07s~qwwW=F&{9feDwpug9L>DV;>^+* zlvw`{tK%5$Ei9QBXQ@)Bq+BzpS*2Nr91peZszPRUW(|0_<=9xIjPtu0MlJj$IJzlJ z6_g;e-DU>{VGx1`PrYPo$0;oCRLR1r7j%8Y>=$MW{f8x7vtF~m%tjw7aP{cyxMC%y z(mL_D3R5{WCI@*2vAicB@L@6^)^g3Y%uUS&teM-hoslz0X;8NUnR}Us$_JHxw6YOu z)}qW!oJ{i)^VQ}p=9ev^EEZZ^wzy}}GuL3Q#oSGEcg+2j5OXrlFXpw>lAlrDg>o_1 ze7*TL^RwjM-Nv`fe2@8C_?BHI$-kNNtNAhWQ`DX;r#g79)Vpj7x#mBZ%Pj&y?=rt@ z{u?Eyt0}!ppVGV9IS6vlKCzO0~ro3_(JqaheD-WI2vkRv?Rkxtf$>R%$U}@h<~7%;+eq z82!nc4q?`i4(2xQ!MW~pz2|1nZJ68cj&W~^(A>beslX!%cjEZdp`H>An{&k_hW3#<~^#19fQb zmvgT&OZo6s3;$yRZ_O&wx&3oTC?#tph3C4g4o;Tk3`>2>xt2ke5tb>IIhJBt!TFxq zk46cyw6hd4qv*0Mpk(s!oM4?oA66JHmZF8_)c&nm*v?sKx!SVDa*yR#mRBwBQFCgB zamC1TgXLD7;;+#RzpfBj?zcQj`+_W5fkRmyxBQ&uQ0>%GIwx>j?oY^>bqC0>Wl|FKe2cD{k}taq^$r}>~o?qhZAM|He%@p{f;t5mBxtMyjr ztop15t^Togu=cVJvW^rXtA$olLVj|7v&yFc{$csh3Wx<;t+i^#7yJXg;N^wLYOB>j zYECkhl~!+3!2iP1t&UlprkB2nTKWV;W39fiy2-{?xP@sEvIxS&OU_te5pDijj4?bsp12sp3D8rt(3> z#KfQkS+B8P$22VZZ$oKz2PfP5L+i`d<2G70sWu`U* z>)&wJB~w{zO>wBHe{sUHmRtXYzY+oTmNIDN+DEbHHFY^60VJ*jg?Iz zGc%(?WFxQ%_;1K+7r9X^JN$QC#O)lA@N9BzifvZdG&A!Ic*R%Cazh)!039}O{C9wz z{~6!`OZIJNZAd^ZviaTyQbF((nN^f~^t5OnM`UYizem6mL<(93-#G9bA{`nX&d-aU zci*woamY!>{ervPgX7WdspggMb=Z5gcdHNIZGi*|y!b%XX9PHrt&-%wFP-*%x_W_F`zK0qxZN zF@c&#m%WAU3ENL>Kes(^`<3lw+pD%e*xs_eC&X;?-7#Aj#}>x1g>h_Q99xMGW?STo z*%td@wo-r0w#2hbFw=I-cFOjd?Mpjkr)sBZr)8&WX9)9L4)a_A^IQq@Y=C*Lf_bin zd9H!+*TVRXFn*I)mtdBihndx5}>3uGy~LuFGzd-8MT|ub>Oy*8}_pfZqu4n*e?@z;6Ng ztpL9b;9v9U5@_3putZ=K+2Xz#j$pPXPW5!0!V1 zQvm-dz#sGI5+M5%_J7*<*$>zc+K<{#*gvsatt3H0s1vH#Zon*B}tJN7@@KY$)T zgdUGWk6h?+0rZ##Jyt@G)$rT^o*Tk*BY18M&rRUDDU37+MlyqutbtN^0yBZ7z*gWO za25y!UIITskRTNLwE=irfVTs9dw>^sWA=Q2p9k=c0Ph6w&R$*iT7q0bzMxPb6_g9A z1$Bazf;9pR;9UUT72w?fUI_5+Fun)Cdjh-{zCfQS4)75G9|`bL03QwTF#sP6@Nobi50qlzVCG=yVC&%E;OroD@N)2T2y(#Jp8!$D z8vvgKQO5lMp91iyKA7DJU(D{TA7*zM;IsTX1#=y;9r7Fs9Eu!D9V#7a9F{w*0?3~L zauJNY7$CC&vI<6C1|!$N$h80|1sbt**y*sxVV}c04(~Y}b@YZ z5@8yu{q@LU$YJWQ?y>HP5=^swY-sY)0DMp#>IQA9f0F(lJT^&(WVll!kL814rd4w1 zInMK%7pUy}JlSb*|0Lbt`2ya&1@ju_HP73CGkQh$gkq!;&09JTf)8Vl7%{LExB5uv zYI>$^BcmfjBM+-EcT?Pt+pfZ$_tv~a^G?h=H}BHCA1NK_BSs+M1}-J8KBWZvaa@gvM{`FzM|WzdgG~P) zQ2ifb^?!uw|9x-}v~f;3#yMs+v}~?j0(?xJF{+nC-X}|EMxT{7)`90~!pC z6k_NGsJn8aX_(T?5Ek+scR0S~_<`d|$Gb{Lmr7svBW8D&5u3@UG^A!upW{WxYYb*? z(-z7fpf5Q-aO|Vd^fvvx8+?=x9UnXX>jW7hc$h=wpGPBOa>$TzUqH9%eW)l=b+U5u zcA0W{;X1>;N{E~UPOcxH_}CA#H2CbyDR<2Bz;PkhDcB{;1sqvUX--8>2b_AGEuHh6 z_d5ULV(iX!%67_gD)7a4v;8ohjz7lJ_0V)$oiz7Rsyh=evC8a^2-em%A?aJ+P_E z(A84tN(}94pavhh2}ke(ZY6^)uJAt`}UtasAfy8nm>AmNqb& zEwr|S(d=O~0gUDVkn>zM15>oeDvZpcm5O%tH;6}SMjD?qye zv=E@(0ontgJptMapuIi$Zl-P)Zq{!0ZjJ!s12Db-;|DPQ02AP);TG-|?H2Er?3U)1 z<(BQ1=T-piLZMw4v3Q0Nn@Ba)5pa(ER{C0MH75uJDZT zobV#F|H}(|4ovI0lP^zrL-?EUZ{d^>3GWK;3$f=3@O-X2S11=MghSBBDD?3+^f7kA z6MOFMuja1muIaAjuIp~-Zt4#FlYa^ZJPiYW0*$|b#-BlB&_nqj`*GbJ-Lu?tglg^q z?!oTi?$Pe??#b@J3-~8s!k~5XAuEgj6~JEv*fRio_9OtF^Fr<-cQ9@EUqX`$XHNKI z=&TRdeTDl8_cQK1cbWTE_t)Kzc_8<7?i)bswc>x~k6G!RJney58J_m#y6<;C;C|Q> zvvl^tEM2@YOV>|6flo6}9{&V(z2elFlfD=_SB%^*yI&_#e>s2FBlp|x4`{8Vjn-=T zQsn-~eNq9MPWP|~6NWSD!n-AE9c?dm%JTg5b9;XYChoQ$@S~=OGR8A~N89tlk zA-xM)l}Cg}B0b&~dOXM#o~BjBR`NZTd93p2@Yv;X2vo2h$Z=Nnf2bJl9;Cj#ys8*h zOemP|-w%NcoB4WentP9>nt5FExZ!b6shWLD&N7x!&Au%|9{nEwc27Xg`LIYPe8*#a zpnLG)V@2PD6#I7>CH_;&xt`iyFD8%cVAyOHNsWT+jIxk(>iE=G(I^d;(3mEKJilZ zGNc>DO=~pz3iijRV}D{4(5GCn>)+k5zvJ{=+(xCCmG__=aze{7>qMeVn$qstit$N!ys@t-aTB{%(3@c@AW#%qoGQK+quy_b5IcvmYavzeq!#8754?PcaybGi^%Rml5}_k-@< z0eLNEypeI!22rYh31*!Je_;VnsZEQj;rVF$IQqEy!l?o;Kn z+~={czi*lEJHBW9cs(Oj3=?69~NoAQQx=uW%^xn>~IIQqTk_m$s$5%N3c_xT`hH_{xe zg5sAI70B;fzaP4RuB?q1-a@6by%beomf@3BhQgHM>Cor|_@trGNJ;$>b*-FGe{Fw5 ze`|k7q70DJ%UX^l$%c3MX24+6}@0PY`9@`#^ak(-H(3&Q^c|4;p)D1~xwTqAo=WVp$-DX8`7 z9-w&8{08Lzo44I2~{y;JbjHpcz4N zLED03gENAgg4YFa4b=_>hnPq$AUGg4AU~iu01Ma^@UC(~$9f-)6M2Z7+<*)g_JYWX zIs+O4Dg#!~XgEfr!C8s|+5@&I$)b9KWrz1Mx7O6u4 zKL-3l2T8aT8{$h;14aY+fo6e615XED#Kq{i;>m;@lH&%3fsNN<_T^#}I3rNEdlJrz zwYSnG;V$I|It020h6FAN+(na}!!*IUr33{=1!hdwUAEGCR>P141r`P_V{0BcD0$!*OkBkhnhk8-LVB|h4^Rl3>mH%Vl^}z1H$-tLTesLo3 z_Ov+TO+sCf%AUIi4$^z>PVf1TW8Dws^wUHs3epLR5OIS{f^32um0SA(xrHvUg+cB? z0rVDrKyRT79zsXyCH$bwp!}e+poXAz%rUQJW_^1QmexJkJE-V|_PZeT%6N7V<9Bl} z=LYQw_6-gfp`iW29=&C%K_3Nu7WCWvn)yfO|3+=M-Hk#NbUx^cq8rGf5ZsW!?nXxx z!xIWPRAW%d*bnm1?rb><>YX1iK|zZ7vmQ=R4T@3Fllh4FBCo;hzG2#50QlZX&`D`c zVZPOT&}?u`VfK7SMkxp+7^qCBGe3lR7zFOZ8Z_F_sY4=-#&kza&Dh9-F#BZoqv4(jrl)Sp!uK9{~Gugr6kxLRX|v%{~=y{Yad8f z=Gg6@fC3JC{^V#inlBHYflq93{`2V*BP0oHVsa9H#VFV)Sb#IVL1y$*%*PYMWtgoE zQ!A@B0^4cV!8)GdRovj*;F93Fo^H@H6y$+6WoTjzLlX~1y9pKN&A(}t=j$3?@EajJ zLVgeBLw<7bJ0X4&Zt&6IkAlZ>2{nQ5MjK~!@P*(@!M_Ig1`qVqVNb>@Q1JJ`Hx-2# zWZNhUk#i`fm_heA#aBq3ps(aG19NEt_Z$iP=io&DujqB<>p^>*=I{V zH`FgQA~c!V&gIN@-UBfoni*OvuWPon4$TXd5@P{ZwflJlL@;Q!HJG)@xcn(R`9Zvy zBM#jgRuWbhb}H<4xG>_U$SYA!QMs`hvAMBDu{E);i8Mk#4*eqZQs}kN+o6M@Q(=x_ zV207^Z>5q$?I9IUHIh-80;3B3CA61jRC{PfWlA3z&yL|foX-yT)$_vC!*s)p!{#bG zlMz^)P4=b22w2(ZIOO4$VOD?DaKi$_!oqUoBSm1eL+%^85*8np$)MPo=wc@Dp?=7} z1}zBm+S828G8Xf~8pGPcc7=UNy5?t*=~^;Qf7lkv3$KBD>%;bk9mKu$x9AiBjmfcc z3}qIgu+PJ;;&tCM!Y>2b4f;!x=`(X;Al3d35EUcH9jbIqa^qsJ&aIJ9DaJv!| z_9C1I3IkkvV8tDNNG5Pj{lTKdKSu`p#wYMv*~jlFQ#_~sl=8!a!dHj4M+8Ug5%I#K z!&Ad^!V8#PX;32a4HAWOU^~J~!fWX5c!S=KISfYhC92`u!w-jFh~P!cjXWPl!P@^-oKAQj zaGjA**I6ErGmtfWB_dKj*(>Emq(;<5v_xzWp@@YMMTDH9jVO;5IGY=$EGZA8=`TxY z3oCwFD~&1?u|MKguap~cB;w16@472d#K#ezfzF8AwVLD~bzI&N4>U&P{T<1fKKSx!V;W9>DWzu?JFS)aE{rUQERJj%nuN5i(ZL4H`t^}I%zAe2fJ5M2V~i_z|JP{@NSQS{#EgZ*QZ_-!86 zQFSQ#{pd4LrVJXM9Jm%Znq0?5$~W0?qkoO=jvkHvH^wPuQA|-xSxj|Ieaz|@Eaphe zhZnz2z&NVmD7rs-@KPeiQA@`->Jcb|_%XgQfia;mQ8DpJ7{}y?RE)#Fk%4h|w<9pl zoD3ARASNRm;}|W%INWFylNVDEjd5nesAgB-Kl5*)sm3*Ur1`@|n3=&XcxaK%kJ%8j zC1y{|TQLXXFphSLjH4B^6I!A>(2dGn=+E>%%+~NOw4QqpUd$K;?uUD-I7ec>tVJ=G zV!rPluEm}JUsDueQ}=67%+ImTPy#}0u`&Iz8n~L$ESwoL7W0y2YZowDQ5ex@vv5|d zL97+4iI`~;J~{#-Tro0C(|!~E;R-Z*)K7oAjI#&uTkRX0d?r`mCGYP5mUWRLT zu&G;ka9x5;-NA3+!KUsOZsQcj_Qh8wv?qL(Sd$c))SMic9Gje)T$bFLyfNiw%Fiji zDUTQEiDtyUh*OKxiCY}EEAHL6597w;-Q#`ZGnvy^sFYgo74qZEQP*K z+-6!hzDEm3dq%&?XY{KJ<=nVW;=YViIzik()8gNb`!?(c8>0TomE8SD}fik}ldZ<@O$k#e^r4nt+6M&VdLv2`_m|v; zj(5fX2o@alMmlWc567Ry30Nl7j6crM<9zZM2xr7!W*!FDp!lES2YUzptL8d^LlVVL z#N&2Q9cFch0LQFu^>q_#k^p1DEB5at7!Vv$n_)K2fFCfjBr;2*1P|h+C*i0AD~R|O zG76qmIl;j`r>BAv@)8PhrP|UEPupWSotDx^q(PsUZ^gWXEeWqD>`(ZD)Cjey1bz!0 zTn|h*obUmz2i_)RAYEvxN8T`_Q^-rWmS~TeruLQJ+U?MOyY&a`-#1Y!%1_JLc}PsEAb<+6$i)Vz&mg= z0VVEDJV?)~4387w_duzZDHT62$hVeYoR0@eP~w%un=~DMK>J>bm6gSi8bbzuFyR$g z?L^WH`Gf=|zDVK{bYSB|(t(XV+_}R&m846Tt!^A18G;bi#K;)@nH&e#H+G zvK!oD!g-wR1iG8eIL`iYM;~Twz^>I!djw%MFedC?D@Vx-lM5LCfHqC!uUDYtWyuXx z7)XcFA|i)-2+PW@wMsMj-QElv$*XQlivR`XCM8@_oiBWnZV7 z;++zmlABVTvMyy4Nz*cPKP8kvtQw(@icv~xN*12*WJ9Dq*)a10mNO0`Rl|=UU@GpV zvZ?bat4L#l$e~BAz$yWym%sx^sNjIeYq%BvbfgcDy@C5~Zp!;KU!VIJztp7+rF@xk zl~IH(2=;TAlD%&+CflPrl%hx(=~jU0m_^-NwxJ%S{Ifuv!J&ki>!nq#D&q_0E^t^7 zxFDZ!7E3Vnt{5$FUEob}r^|#HdQgHEge}PYAJ!Jl^x@vUOm-E`QpxKa$%3~QoLF!t z_4CvxX(nlQX+der(z`R}WXLimGuLEZ$$Xe)o3(hM@xnJ39$)y|B0mvYaB#sfGMP^? z1~{@0E8s5pe8JZXuG435vyz{h5$b`8ftbJG&(wLTzNrgSKZXt-rrLnLFXArvd%=@b zE_oZBTz@1vOammsSgQ<+0>Wb(E_%)(rXQs<|}G75y`>9iVtxT{Qz zQkSL{;%xg4X}Yv?{z`2~m8Ev3Zcp8tdYCfwzogir36pkrg*>Jf7g=d{UsGv!my`@J zqmY;SP3jM+cT#^>rpxgOJw=;Jki$5{^-@Nu{i$#@A94MdiV-#383{^#nWn*bV6|U~ zJ;Xd@Oy51u;>8sM)(%(z}F#QZI3#3Z+I!vAv znQd{}Wzx?ihhXyfIH3j$wvzi;DVJBGw1Kq0sbgiktQw^~PJ2mesBO64qY$&*4J58K z?30hc296FWddaisA)sw1OSYHPm|;SG)hK;^I%ELgTJvgf)~4@He~XydW>W0YMT9Gq zr`mEQ$p#lqFMLw_PrZet45jy{Gx-mP)7kkCbyX;XpP@etD`QBZj!cQnDCcI_WVmLO zF@z8(K^a~dfnXJaRi-{AujFP#Wh7@PD~C#}QAS2a4!Mv<3c1^;3b|E-3Mi+lm08+n zET@$u%zC(jpRqCHNXDs*Z!>OFMOu0pyEERV&W90o7z~(M1ohz;URdg9oKtr5(wz|} zQ80=78AJGuhTyzqr{CsGJRO(A%=wk7ncPgROq0y0Oi5-PLx(oZAoB}R=G;sVVkEsx z0W*@ve=9ZKEpApx$V|#y#Pnpx=6eV6gUodOEqPO>C92|Pwq|a~+(F%jV?w)I(xEuN z8RcZYm3g>#a0I^?4DF#U?Pipl`Dx|_`gtBHKbBOZ%BSv*7qc@yN>}S^`?GQA~A1h!TPd)}k72mUEVGRyeaf zduBDElnX$H7G)(fkCSRuvx>87vf8tLTF6_-Dy$FtAH}2ZOIuM(*0!wOS)XNH=_RB~ z`^Z=w%6dBsF0H~dxV2~|O{GsqQ~2l`92u#`RF2|G2H2ReO$55y@a3SaKeHY&A})p& zaWdhdtS2lJw{(I?hbY9XTv#W0fV%1X4bcad}NV0T3;$7f_mJy7tJQ)9gp8;QHTol%t|pn0Uk63?tbAuleVC3iy{_fEfR^* zqPRs1NYwy*G@xd@rrZgYGZVPtq4Igr22RnU)?Dmhzd+RW} zW5eC${KY>n{x^GewpF(Kqwb<+{x6Gr7EjThfq=zBv<4YKlie>v@(LOMw`?`~!EeKp zl`{Sx*~avPKSm`oes8t|{k?Z$yt}VN#+PRY(vRTGfyn@-FxcF32=<`wAUO;V@qDK= z|3MS1osw+gcxSKA-k!ZL`)u~t+1Ill=BVV@?e!_m(UU%LLoV7IVS%R+O|re z-Nrf!28_`5u0}bbIWgoetpuT+lbn-52<;7|(4M5^UL7N}>q()VSuT5ya#lks5h#}1 zDo{>G&TEYPilz;w-BrAt_j1nWe4BIQp$O%CkaHSR7I5ePT=I|kFx(YDJxUqF`L{J^ zvSt&%U0eNFuou zP@C(P>qn#ZFB-L_fZE*H+;j%Dg*0kyOHgh>Zry)SYokPMD+{&y|Fy0kGuZa3M!6s6 zo+h!q0!FF98%I#UAjvuewzjDXv<5dA&Jzc^fyOL4I zYljpq(ORO1V>e?OEq_lLRBw-o&=TPizh1nw2eXVE7Gsw07H{DcFA?QA<%Q=pHl?llZ+TCm`F=OOn3|& zfz8~Ld8&DO5D-xelWZP|l^8^SvhVMFRDkl_^8%Gh`z&DcP(m|T%*#v6OV7*At06@| zKjphpvB8a?yu!Q^+z7fy$1u&=_fFVA){acYDsLTapIAv$^Y-N($vc(zW!|l&evCfh z$t)p_S;C2tA-Kt5S~^#14L9$Xr8AZqfa8^$*Oxb*_k!qrf@W8H=?~*WlYjSh(@c^7 zCLAV6$*aXUe}IboR8fJJS}t{)4!e(rg=|mKN1`X?FHKr{D_N z2{%7HKPi6^voXoc#(Y?T^7Habm}QIQ<<0zC`8E0Nv^?_2UrS;0xd)BbTWp_F`rrtl zxg6ym%Kwb^<`VMO)>ON1rq6t%t#lNg%!h-W2%tIMdZgUHG^5|DY%SK6faspSa0vp z%==gk5-k;7fL9Vx1=Qr@7Lyv3_i^$?jiOG`9?{#PqoPk3_l=<#i8hP2ywiJ7ii3O~SI8Wl{ zh(8=(aj-asKE7w@YHb@&Uz! z5*Lm%j%30c;!j!TOV=PM0n9l~!fOx2zlh;-X;PWBVkya1!~K(k58*ckAoI<=um*mS ztWfur3xMNCM<5zqIH%A7H&h^llt{roi|>^3+XZ@Cu1<6paSP)L4@x+MpR%2QqHsxJ zL1A@aLt#hZuH#S-bHW1^N(;-OLgqvf{G(6$2~gI@Mjk7_;^A}%$}7J^fd-wK$Ui|; z9MrDkpDa9Ec(L$u;rE4i3VRF3j~77c%?YT}ISHjr{F5~7$?096e5LD??5)|{5z80CI1%b6+J0dFZM1DE>7qktCQJFBoB$42FZxzF_qIGp`r&Oni+c) zX;O=P?j=<%vMQQi6jijM=wQ)35h@ZCc~3tj6lKLw@xD6*g+s#yMOA}!sAyr4m`T)r zerVz`+zLa`;>*A2zXMPrL)ESnwHIw?ACcz=71NVppC2eeMei3~C(jHF^J&o~_I#cn zrh0uuAETAzF@mN&MWfT29-*2JD#qo2(r%iNSC^q;tzvs+PWsQqrmQ2jadHA~2v#0N zpW%Me?NU58$sADsIvM|`;#8Vee!`o`P*E{UpE_Q`D_&WAz4+(izvYusUU6&jq2f=9 z;p*AquHxNx zG^8t}&C)&6lO;1sjNzBNcb0&0OY1|`5W$mnO1F-ZMvW7_hpU+t{3<=fTEQl8XRPC& zkzSErll~~ZC;dY@EPZ(#3hvIFz{~GWLb2T$dj4mo&;QIT^FPC$|C!+tC>x@}ORiO@ z#G<6Ij921N;#Cq*vVe@=5|UYii1}!YLU|e_GC?^AQD{yE+N|h=A|gslKC@OPOoZ2< zlDd-3C8%UoNeg{loZ{IC#B&CTP_e-<(f6E*afm1n_d_a-6i-UGL6jBpE~CMGOjlP( z>UkyCOMWhqm%L>5zh0qW%7{D}RNgHaW1(^b2s`>-b@W^5EMo8(%Q2N5Pe%vjm8~3? zQbDOlX>e&K6G#KuuH4#LwWu_*G=cOTij~f@hxjFHma|KCa7s!$OZS(4Rr+`3>dNsd z<0{XpyH)qA{;f8sE?K6vZ1FPDvdU$bmc6Vot%-(g-_k9mJ13z$hcl#%a-Q?rWjcCney9Lv3wcAQ$9jcW zt1P>$wCs90w>+x6puDF1{qhIp0~Oqg=!%;afRsV}Cw1_MHu&{DLd3kXy0WISjb+>6 z4fQYp{Ao;&2f^7Z!Gx+++_Jr8@0Wdv|DJ+SrR)HqEd2|1HH5|?@e5DEq2PVthTz@_ zdPeU`xMg?Cy35A!Ia4j%@H>Ekn25+aK9BiNdgUPhhm}xo7NK&Da%1`U1g;HIV4)?b z+@d^i7#0BjK2+{l?n#fblWO8KMla1tipmqpv%06~2Ogj-(9J=I0X~b*nKYRAfUQ;K z+spUEiK;>6E#({Nmb<8q{Xp-apB;kSXA0l%RiN_YKI5;&;fb30?!kvtAK@dt3i-rS z>YHaZs%WWz3(;ZIIj|VzBE0KR#omfTBfXEPmhO{%G*DnYs`#wpBE3i<rs_zl{T%%ucP&NH7TmHsB%z7Fe8}==65CPRZ&$bRoPXds#R58RlBQ>D6NJLX6}BZ z{iY6QK| zmZ7RYsvav9ngdmk*{sw8YN)zraXG5yS8GDz26{00l$M&uDp2*D>O2v*+NRpKdI53M zw2D);GqbqfemUdRUU`ePQ}qYcUsiupfT~Yce*sCfWeaG zGgaJWhRdv$&0|)YN(JZK@SmzUv&?H*+_F^WX2+|`!l+Qt7Mw3vVyJ}r{ta`2v9APE!)7z>S3s{=Iy zHAA>MaG$oRyvIf$PoR$oO`$g-Fa+L@amuxXmP)v_b878tiQd??buD$1^;-4L^-=X7)t_7Lw>+}|)p^%N zzxv}OZ_~VJhZxmm*5%+zoQ1nmi3htb`4$u!<@o)5(mE(}l(m%?6)G!7?BPCOtRm-pcu6}YkZ~4sS z4g(6f3}SMk3f14M|AR(gD5&b-NP!F$+?-H8#dTA9F_>@?w~FBByjmf|v0QJt8Qp9F zE25f&GaZ(YehV&y05pLB7#zXFP-ATAQcYz`{HI>#P3D|xiFwOgmhWEv&hn!$YUlFT zl*L({#KDE1r^9~=6I1ael_=X^*l`12CR@r=!drfAdH)K|ikVWh{MK@~1(Y@|Ta_D` zO0QNXJiZ(ZO{E}g00WV3UWI!+S$LU(6jS*yc-Q*iz7iEbsp<;96=zm_v*NdvUMn|< z_$wk;B(GS!B7X%_^2GWv$0+jf8Um@UC|;qg|K3THnxT}pqGiQ~6?;}3rSa`Ljk4c+ zg`f{jC+Ne>Mdbb9vS0E2id*D}iy3jV7)a+4jPq!v)=Kl0_R#9@m9NzQtemDA8BbTB zN@+?=nAS?OinlU&W!1`tm5tE*%D9zjD|1##=t55f)+`aFXV`HB0Oe#sk}q@LyA zWlFo@XR6?~4yuGnRT*2@TEbhof93ltzgaoS2(lz*4?kG>8EX$$j8$=0USIiO6KKCKl8 zvSY{TSJQqaF1H*tR5Yw)93zNWU7kZsp2=BZ}_?4 zOQ>3sP%PWh?_YaXxFUz@ddO{0FJ zd812XRO7y1-QYn$4d-fQ}(>C>i3k=m-kRa2|}S5f2v0URt zOW>e2PP7CLqGj%bX}$kG03u;pT;s*7w>tgtms}3X^z56SUVH~QeiiO}xa|mjW9^mc z{xb&mDXclQ<|6w(g+JvLXwA24e*I4;|8%@E(6zCC+N`x3Dd4X8cP($NChnZyBOipw zR=Lu#G*ir5Yq8dDt?Sx2Qi%+vWl<2WO|JD>8;EO@zY^LcU5zoHEuMmiE2cx&=C3WG z1KZ@!X2~pk*Va;3O(JWuYu^AyILN9KF@@|IAX$js5U0&}ytb7S zwD!}r*Vo=}RHMRtg=;U4jDeWKgMgUzFD&)XtO~9DW9^F?v{t?r59ui*eKpGFcorrV z?4y3H<7FXU&rk_Pm_$+k20U+(c4)4|P(=x9^lbDS6Tuaj?90K+;TN>NYfNCN2aC&F zr!F*#8&@~BH*OZ8#*)Tr@~n9>M#D*l8wL(i_m+4~jX;^LLdlhe`v0dM#4g zB&hLh<7MURUb1s>1-J2TV^1R)`6e@_Q5nNZ6KM`|vr4sz*EG8+ped>;p{c%i0Qag9 zLd&@yukYtJnKfBAc@wp1f?-He;2djmRECLdX5-~*4*0DLB#<5Msa0trN`z2TW)s{e z(v;Iw46Y-%%m>Pbu$Rertkwh4x9}3Umr2h+UxxgstGM(475z{xw`pV3_NKi=VTDRK zsgGIdDGj_~xNeK6uGmUlYh_R4sp(SFjV9*)vkfF7W-@qc>T4QS;;DyxUGRiP#O;bL z95AJuw=^GV{-*i2R^3*Iwxw-r+dgbJX?JUnZBJcSzOF+w6Pu64VC%3=*dgqvX3yrt z=G5k;&1KEZ?N%R(5tf9>Kyz#5e1zp-MOZn;x)Ii$pkN*y%D&E`Q-Tv)gpd<+1x}3Z z!1mFc_(Pf#yGjxE0d~E6v>UQ1u}`rJGz-Fgqsq*V14=>ISi;A8We&1pSzEIJ>PH}t z;IW8{jmdOm#!!WXuxBzp4oU3alO05Gll;7$+|q=}QE;p=ORO%2>iwsx=M$~MZ5$OgI~+~YOq))! zP0TYpRHMPd2kAu!(FQ_sRq|j+Jm_e>cx=HX^{EHuIPfwz0ss zlHl>LfNyyUWxrHtB$|=czc+`nWc6m?iuU2d<4>6i(U`xxAJSWOehk7H;kBrFd25wQCslh5S ziwKEY^H589%ZirvmbY5IX}Kvu&EqXgD|pTSw5Yb|w?HZ^DgUCT2{O1Cf-Rw-R9b>s zoLcgcPLMmYTIaWB4a&g|qvj5GPbsY`3Do>^K9x^a z@LNk-H?+RddZ6_u5o)b!ZJe%0*GyBNb*H~9q&4ZVYSenP^(u7maqIbEwvJuRa{ltz zc5)@VRTYExCI-=ew1Q%$obi_7deo-f7F646t=l%I&A!d8&6|`p)(*e6``t8mNZd+U1Yi;|c>HhCB z0xOAV$>{!XRq@+CZ@ber)b_ZYBSmc&+O8^DUb9m7zsM}Ir;WWWjE#K{oX>>3vjQDp zoScu$^H96C@?L|(pxn1xw!?2ggMd0r&-ndX)b8CLOn*J8lu#q|;;QO5a!$8bwb!<< zZQs%UR{QDp3+?yYN86vRGhVl7T>(_rpH>Fln|r0Gy|sOlQX?rNvye(3(gSQLM(qdN zkC8vEbC!O(k=am;S?ize*I667wH&qo(LO+f>>zKW;QXY-(i_9wQnU`On?av~ciBhc z-CDHHVqFSoBJ1E69o9v34??AnL}p*Q&I7O8wl8}K8UubgJZ4{kduO4t1^-+{k9R_8 zw|t_sTh1;=>uT0D4axhJ7&t?>|8xafw`tuQ>~~+%@6J{35!I1e zfYuGJgUb}i%kd9`U&UIDw1FZ?$?E`;w?n(bn3lYUX~_$ICEB_yWpI79gYExn11l2z zLvTYSrV>ZbT2_EM@;geEoO}jZ^}^XN=5?&;XzAF{afsBeV`=R=8rQBnws#QuFTYLG zt`peWbu`ZJJI;1oqWOIk#qVPz+>W~)e|9`&=B&ImO(wkF0X0F&1K;r&bg{q53;y8- zWF^I|FGih4opB;==iJVDo$!m>6wY>&crpPzb^3OO(suuNnA8qde7sbv!fG)Fu4HbLWRl#~yuy;X4!3GL8EU>@|NR=XX zLF`Dcf;15+BE9!62uP7?M+M!9agMi0z}!up4eQz)6hPR8JJ;y<<2-Kf?vgVwoRclin3I&gHGdgs9mmdGx@yZnvO zQa7Zv)TbK~4!s@VA?ces1DO!SK_Z^Tq(Ws`pOSS8AmO; zZ>$p$+FD<=eR>BMS6r#R0xQ6jSeMTB@guOCSoaDoMi>%~5{^Sfg}9n-Lfl4>{~TvJ zipYO$WKadiZt`DUx1d}8agC#+RWC<7$19Ezj^&Pxj&GbKUm)$DcDTT0k`yH4<_Mxc z+8ec-)W^{uE*P8C2P9)S*?}GjMzegoNoI~o??7|HG0U+C&)yGF!{$*~=|?vhBJVoL z$!?OVWAi)M>ZPJEHzyoFI{t*(fh|z*17rJ(mY3+JVB1b>uG2uL;Z75tlLsWv!fD}_ zmw>QCH!q+gljq=m5PF@QyfX^=e1s+8wAzVUpM>p$I9eFsou;PVoDbG#xmiwzPF7Au z&LbJNVQfS=9dmLMvW;>l_WiFH;Ov}}pHrw)l&~LWQvGl_^h2ivr%bvZX43s|xe4J^ z=JfVCT(_m_e_94!s(B5FR0ZPBU`Q&Oif$RLJG22 zo52O_a9ip#XP&cg{Y$}Fxc;R;OAOD1gM5;3kk9zW=Q?XT>p2?`O0*~0la zo&5kh`{T{rIcCn$&V??6T{2z8U5B_Xb4_+FbN%4@(=FPgw}-Nap@+BUNYC}2>U_dE z(K&-0xjCKm^2010ap!x^UtPpp`jIb&pCPQBA2_o(2HXV)D?M-=mRaA03;!rtz+E^% zkD>IbRCT#7qg`}e;`xLN&t)HZa^7X8%UqWgR51oID>$yqGK0%Tmu(bYg~6ASJ2^FI zSa&gUF-MDLPpB=}bDS<0dlv^6FP8w9NUS8ndf283cKt!OYy5q*07WjE+K#WoC*T`| zYt$?C#9fMA9=p77`3~=1x>UHp1Q6{!ifyHW6aC4f7DKS=tR3gG3+o~6S3*UU3W1%N zx@%v0fYa3Hx{h(3;R;8JTR?&Hp(}NH#xzP{LmTIWqy7dn z!d2V#pfLZH=<&;7*Q2g>u2)<=T!V0_A2K^xFL0?Jvr7FGm%5qt_$3q&ULg;0%@oxb z8E8bfR=dL6L$J_*Zn}?jeavFG)>z|X=Nq9~^(_-gx4v#u+-A9*cXM@v*EpfM&WLSx z8}2q9XHFgGXe-sU=mqn0+)}p{Zi;T3+%(+|!dsa2OrPQ-6^M8A$z+>uubCgWBHYZ~ zPK&-~eiB9_c+LDC(`Vo@L&%05H^PCx+sve9(4-LkMWn!@exwvL4|s2_+3XmZUN0pXcGa7~ws@laYc{t zu=cQRC3gW}VU!d3wz(6o+(nC|ob;|XbR|9-z9v{oc!YQqc+`4|c@BVAP^}1$D31iH z7Y?Sm4n7LLfx374t4BE||39Q|jmKk;HfGFGVFZx~54iAAI1ex)H@4}J^bq#>y%pg( z-jk&ca~kQ+oZ)=(obS0DQ^#gn56E`B>L+Grd*WfjbGK(Cw27y-=XF#xd)`V<6VJ1r ze!7IGrRQnZy6^_HE-ax(cwY8&!;8Zz&)$9>NGIQ#hds`+aAZM!D8mUFGif3Lq@01>b}U{`<+e}LC0 zuO(hQ(FY-20u+Fds8M;Wfc)=G*spb-;F>Ez*S)ZWqoJl2#vRY@_^p>7pB+wr39HEZuOS7csu+Jfu#x7Q!<7f_)0Ug#}U zc(8(#Oo>3UAc%WQdRw8H*+tGY?{VILdCPk*^j7rV?5*c*NL`hVxyi4U=*Hf+NaG9| z6Au7}iSG1$jddabvjEBGklb|dE8c$ILEfR>vEG^9 z_q`iMlUs$7`-+nL!X)R!O0Ewim+xIlC8sG&?i5PyGn3px^sdUw_EwN32}`c`XCE=2 z{w*J9873Fr7ofkdBAx+~9H`S8oR>)Pnd-B^XQ|H`pKU%m@`TSUA9*+)kOId8QsVjW zhYpn@s$-u*F&^Pbo)or@eF|ux(&2&`l98k*LQi2dq-XUz1(zgV`o#HU`c(Nm@_B!C z$5sB-!@erac(aOL6kY3c2S@s2Z42y?;$l#mLZm0*<0WehBz%5e9ddQd)#+E)! zI$cfmmG@oAx`KTRx}?XRBYV~F>W!Kk+T!Oe@{|Uw{4*RqiU)YyEzhcEZz>@GC;5&@!OWWwa^tr7QuIOob*N!CP z*W@P7>h~?64})$=hdr=R;Mkwg3of=ixy}}N{+1UeTu8ZW!1dMf_3#_V=lUM>wemeK zWEl9ChnX;v`kwK1pjpB#nkCFMJjX5ez3zL{_ott@A3ROQtplwn199I3-+JE`Uzp_i zrumkTT}HUlaZF@gWV9&Km=^6ei};elDw{`O%86&2OGT8o>dd%)vVJrC)*@Y%(Dw#} zpS<5v`o#TskjSX1>e$Zax9{6%B>^7fKG#qC+Wc#)u5Gxs3*PCF^fUK!_e=1r^m}}5 z5TEcn>~~Hyf0iQI8Ul+te!hM;S&KS{*^4@GqmN&j-<@_)VtGv$jMnE}EfSLiEaO-b zey!IC2=d17yGRf#ED)|0UEZ;_BCd_N2G>u*l8!^l1s{l;fR?K8_gHcr1zW~{dXK-xF=c-Ip58YeL*Hp^CpXxCJE=`9$3u+) z!q6=XuD`MWdH+BG;cwx849~fbb)qA+q;NEGd^;>L_&fP~kjIqMggec=1!m&@5&p6M z>Hc?Keu7&*CJlrG(r``#js!^{#k-c5NY=NN`)N-2SNMN~NbdVTc=HDKrzem6*lA7p zKlg8^ru1j%nY?`mJa_~W_M}DrzmTW}_x}X+4wz?nhFcOK9WaJruZQ5irhmJ{^E_R} zvDQSu>HyZRmJL%g4Z^8$qHt=Qe&{0SP=IY``~YX@Ba@+z=7@Dn{qt`8Kx|FNFV9)L9s!pL4`0D2RR3Uh7@`mZUW6Y_9F?>j*}ADOOo0 zVB9LmwRlit@Py!b!D_HebB;49s4b`?=yNa;Jc4`-i8r2Hg6EB8g(lG5tpYo_@xj8| ztZn7Sks_KcZyfS(#~T?ujiJdg7DVup;5GDJQ@k-qnzQ4L3f=_z<|@wB(ST=!Ivb98cVHvY}XSHZU}xH{Q5d|5uhAe3$&Xw zI=B@{kuB)TTH#(_bnp-1USAAN(YIR#b`m+)htZ9i14Hz6+3U0EAv%^GqU9KldWj}_ zJGu7j?DcUFi7*-l!>^!4Go z;@9J^r(Ms#ewW%c+D-2o?Zhep&Fn3roqELe$Jbv8PxuXj9i!{-u79Cr%iZLTk=^(` zA!4*P);@t`$jA_-5QC7wkkpW-14PL9keMJq!3jR{;2Lk)o0hM@QbQJmET>rNd77nO zc!h4pvLHg#LbfA$E83C>*%QJiZ{==-)qJ>>`+)&B#609eh$r;(5Sx%wR6m!e`?;+M zON$mRB3)rB_f1F?Yuf7DX>dlOEhI05df!JV-wH2eZad5kX%2aJV*py}cuB1yO68*h&!@>>y+vRQg3qWdeMN2(1l$ zgcJ!uSz!X$o`-@~FH4JX6#Y2Tq#TBXFEhRD@0){Jz0AjyxG8hfN8g@!aC7#}B{x?w zqMIx^8|Vw34-hw%ZyrXB(w@kYNQnC+dp$#B-#l~Ek%@B& zQ6r z4PuJy$Q1c)m;|fHejhDyPGMJtF+HPV(q`6hp3$pZrrfZIu!OL5q2EHv z?^?!hp^&gXf3PCL>cikhSW|qhXNNCG2R(!tLAx!CZXql?8rXh*Ox2wXUD9y<@I&E8!tI5D9H`v) zV{-4nlr-Eu+&}z=&~E|dcMapWz|xQv6`5m|g|?Jc8d`RL`bWeM98>=ObK_az1; zI_@_&dFu$eAH3a%RG)8L=lqj~+Es=~0t)f6#WOzLO%(vFiIc z++Yp=VO|Z_3&4rYFU_6E4i!%h8Na^2ZFvo>zd0f^Lin_sVuW!0Ly>0f@C2zuL~Ep6 z&pnqsLUiX$3D-VW(KDSQaa=sORt20V7$~wv^>S@&XX1I?BWFuP1dpV@# zdFvLs=bbn2mOt!(Ft;k+CFhEquohGCTUob?Z`Iy{V;PhjF;Ap>#&_$U38LLIk-YFG zIjUFGu&B{dlcVNFt&Z9(Pek>P8U!<*WVoa!IUZ(1$#hRj7M1LiyGi!R%=)1lTgXo~ zAfmLRSVO@{p;WVn>HHZ{XIP#86zs=Gc}C^FfKz4gI?l4Fkf^ArRJxR7SS)=EUI)|o z+|dpbYQ&eQU9W3V_gN7JzOy2tTBF_z*90dC7qBP8^~Fw{MYqS^mc2da_U79fxA)(+ zx$Sm4@pkU*vfFQNcisL&C#)~z8*iy8mz~Uk+e`nsjpRb{D-+>`l>31b+!ow6r8&V{ zniH6SKFaM=w=XeUMf&tE(Nsg?w$JUzf9w)X5iU7jVAaD2W=m+1IdQxCb|basa16xJ z+fQ$|kXu4d)Rxc}yb*L*I2Q11tcYld=$S|#CAxn!_52g`bI=rs9veNGis~%ZNAV#? z#hsuwN?s0P%eigPD|%DR+?W+H8)JvYPK+($OGax(3!=@UkHz$fnZyVIHp2Q#W=Kw1 zkBGL7e)f_t9_6lS; zQzg?)weSrnioF50hnI!j8MZSFG|QO+sR+blw#RtI1jWPwiN7V{;xmplpWeGxAtu z<`OXtF%RJqoLE@8h^2EKD@w$%-H14rO}Vk`Qe_wtu~TE`!Yru+7OQk^xo=JFCE8<` z$2!Nt)rPUFW6#1PcQ6_Gp%S|#b|+5mhl(W;yD#<-oa+JJX!qlfQsm=P;H{|oOIl5x(A&7>okNiKh!G3*`tIId6J(70J~8{^dD zwB!4|dJBj43u4=2-^PA|W#oL+2F3v2e1dm9T14g`9~oI_C&Qjn;wG}V$%!|g4iRw+ z;)I&lS!j%+vz!I@2%tsr<&Zz2V}6IFWSm)?TU>nHy|_nlKlwzQb=+CeiHnuU#APTf z|HfU73uP_;o?Vf^&?x$(>6HRJj5$KpNXQ{oHa@5Oh-e@P(dj(k8!%=q>YI~hUz`hPM* zXNnmb16{=%#0&4gctg{bF|fdRyZ9>%3p_xxz$u1Ayk9)LJKIeqPgckR&$C$IaE1jg zG$-O~;~!Fd>nO0m_~+1t;KmmjM~Vf0#w^g9VS$IOh=kq=s)z+9NGB}SB@%`wzzJ~B zHMEs6`vmvvynFEt^s4B$V1%XrW=vd28qo8*x@jERIj31;Z-c+Q*zT~=NP zf>NHH*y#itmR#UxLL^*Da2H-ev6NZORyUJOh)Q^p(4I&n&PiN)fJlf>$b~1;J_)z) z3Ly8z36(;Yj6`yVC2e9l^**LkXC-`Qb?Vb^+FyRMBod_($DtKv@?E3mZ{+N5F?k0G z+hq~V!mx-q-IANQI&o8?21t#RU^Wd)c>U-Z)QtChZsLK&V~M^mU=@s)XabDoHSR|o z9=s|uMLW@syqYfYa-ti)nob)pv+I#-=h28!3Hl{wCf-S`OMI93CuvmDv?P@zy`*bN zw-~u;nJ$r7kyx#3JFn2hcAh`It^}$iouHi!FOR{UhsL(D5wN<1uiK&=ZWs|s5=njZ zZRa_g*v$(_8u+65eLH$1aNa#*B56X>WK-LD)g6GYF%eIio3t=#S<))7Il-0Y^Xed_ zYvjrqtoh6fhGlh1ec?^_RBxigG!{gXY0^1TrUl^!l+DP^1u7R|v*M5q_~Kg zN2R>e@15K?d1UgG`ECt(=D68N^au+M;QhMqJCjsYyERtC>ZvQN=XF=bMA z5T<-VxIgmfTgRs_%`MDTgeR!ze zXu%(T-;|1!hLkrcovBi(nyE&qXH(r$y@V}(1D*#;d6ELhbG|^9Za|-ca$$8|8Q{n% z-&47?q;rGj$T9}vsl!tzq|Qp+NEd67h}4pANTkk7T`jT){=0zQ1J@FjVG7&fAlN5X zxlS@1C@1v@s~T;)zO=N!tJ~CEM#0*aTX^`4#NVj_sVQjl!qV=?hSYF)0%=2PG(F;P zpa6xHzTZ@5snq=C* zv~g*(=)}*n%lqTFsFe2Ogh&a0z=TGZNL!nxf`*D0BIgwjvF3+jx_U&~!89wZhG;t; zUPL9*j;Ecar;A49bkTOaiJ(tfP};4uob=N4=NXeS1Q`c20vKk#`d=Q-01-T`GOaPK zHGM$(U+LS^Q|N-sU>D@K7pUSJ5@{W2zeU>a=k;#t%2I|z`q1>rBA$MG(+zxpQkYI( zm=1CVQYyiT{S59FO+OPNeNXyHbaiYOpGZHDF4X6rE|M(|0g-N>?!rD-=Y#aB(|yvz zL{qrYErkL9(5n_cG;b$YoLO9QT0 z+BgcYHV|P}_7aU5Rv8yFTIbR~9KI2)&t4vPjI3XhlrC7f#(0sB@H%SfRf%5YK@ zhsdhWV$Dj=z(rS(b9hV8g2;NG^^LB3V>CpOZz{s3g}{X~FME3S-0bDqn%VqpqwKTU zf!TT471__SU*|~WOv;&&vw#k$E9_fv1tWDNM<@GV7b+_BIxP;Y^WEXbd*22JAT)3PXOTlp3q!J_6!lf2D|T;<#YEzpR$YPq{bGGn!^hFP!NwA{kn%G|a*?L6bWTxNO6kg070 zM#d<~eZ;Ehv!>kK_j%j$b_&FEzvr#WTbH*9F5DH*lgyi(H!E*p%hxVgM9P!S8{Gzr zL*zarT9YL|+J#Q7v{M@>^^v$&twweEefy;)y8Up9Y6{+#^zFHLP_GeMVKw(uh?oTY<4uWY>KS>k5C zQoeD1ef|r05$KFWYrbl}E- z`Dyv3@b4y=>-Q1 z{Q2DcKLvdXq=n2ZkQyi_0Fx>hQNW{x<3O58O#o@JV1B`hf{g|6z8xj19%YYTKlDY% zuO9{??Sj;TYNn&>F&(|I zporDc&yanDD0o=V%J|l0d>0hJgjlHkZe~LiN)(z3h{Aq_%ieqza0`bOjxVII`js&< zCkkZ>XHqQlG#=92F+)85uInhbP^oZB;cmzZVJTKW%h%8vqL{8d5Z#8HaS}acGhu zQ8cRvZYk+D4owt}LuXjLYVbeDp-;>>G}oLcI$C5))r>WaLq!*g9LaI$5;YFNy9jU5 zQ$~j@iK6R8k?4Q|@R$s`8*}2}^hQxeQ7)1PwzYqRb9xgstX(39;;zV4c*9k5OXHZDp z1JX3njb=nnKm02~Y8Y;-zT9^OD*Nv*Y|Irq5s72nE+QdJ@ID#iqsQiXDm@ z(CsT!Pu~jXw2G~ZPvYYihp6L4#4xh``rrxDInK}Gz~ZptnBwB%d)Q|qo+4R7`bou^ zRCXQ+llwqLB=(3tu2L^N+|{B_6u&BdM;+e!W=#}#75}0M?GoMceGIsF2HY8W=YVjF zYMmKzXZ)RM!qZ!?(CMw%JB#kDy0hWVwmbXr5s-FR$HQ5}c^Lm1X|mumYj5%Ctq#`d zEjzJ8cMdb$i8_tMs5*==;@-J>C+<$BP-3`wCzM68mQ2v2c-42W332D{oj-iyPSu?c z)FCdTI}h)$9&qhoPO2Oixu92(S!>*GN|Z>KtbYk&Av$n!mZMcNxnz3Df)WMtq52W5 z{=JGJrg_vM6;(r`WOK17A*JIPzNy6U&Ct@BtX43D zT12}@MCqDR)}xm(u8TxiRezls>o+zy@eOUTj$T{<=m{v2Ze)%lFzwY+BJ3#0+kMgU? z_{}@)z&U((-rYNQtL{E5^C@9w*6K!sWWdA+;wt_Gdg zBs#AP=<2hT`*QfKMBQDhyUurG?&8aA&iq(#*Y585G^NKhpxidw3k1{uVy(i!P+W^?O<%dAI#;SK0isRb@(Ltedi?Qh zUDm5?SeYz6-rNuw$&I>=R6gRtpX^&n~B=lh$#PAF;vK6J1Tm!a(oT*)m@Y*RWYSPo(by2 z3Nb-&-S z-o&Z!tq7rg$%yzm|C~CXY)3@q6O;2HqQUkM*>kD+B``)(r24O&n=N+?#lBCaxq~xevHn_IJ?J&VAId zJKhd9CIr3jY2MSlmr^;XQc&quSzP&BcmPzFxMz3|7E96f9kONjfD5A`0`9+S>HzKb zkMvaNp3^E>IRUbh8+b2@aa^lM+{?Px+77ppfvSw`oqHwt8U?sX z0xj>oMokBY-blQyYzZ9jc;7)D{m>`weXf)w(eQ8}r70P347d@ue~GrC4$+eJfKd zb4`fKpvovH25xZKTkXJBUQsvIFD3WIY-NMHfZt4!v?40YD;q#ffn4RZoiY%Hwtvhu zD?2JbQyCkHGd2p=>gZ~z>R&akTdtCrTqPJ1RkN#>Fm&KzL{zP+QW5r!_qcaxvE+oE zX5v-)RTfnaRsKvsH=2O#880I5L`J4lQjAM>H|C3O z>ps-|s_$Jtu7Tk9t9GdNt`4paua2ostFEbjT*IxAu36dqQpirW2uJ1^N@V{rwU`*7E zu90Qpv1gj>Ma^7R6viz12|WU@OVp^>>_Y6Qjb=wSdPI$W%^|vKIe&m1)f}m@quG%& zW=Ed{y=t!B556CHKlA>h+G(|W40_kxs!6P=uX%ZY*8LUtkKDgZGsF$g(KQzWq9&)N zgm$Z8Gszz!ucrQn8;|M7#>8vB+~?dMaDO}w;ou$pGJJK!8l=>1q$ z?`tt5?&sexqdjczt`C0Rf_wjEZSUHl&27+~zID6>{~z!Fpk<~=-~~cGl}Og5%^N@c zQycPIC)xtm=hiN$U0J(@PSWl@+z-vV^V*(mIRod^=(K$CNC7*xa4bM9vGxd_A$>8F zsJ&9_U3s9-xZc^Q>xKy7k z^z0>?YFlf+*Kz4(sU@|v=ERRBbl#f2b?6aw{pyC&4)Agg=rm&6j|mJNTx_TFa>zd2D?SyxYS$;6IVa0?V@(Y3rYwBsJDYh}*wDp}Zx-K>KX z<-kR+GHff=il`q@Ka3K|zG0Ef$y%a*dj0(RmGye{th*G>3#;LZ5mCRkey^|^TIQqs%^=wH?DW9&v@RhPt;r0pJp1@sJ)}By%p~IXPivlz)c%42-o}9hcmAF|MX}` za;o~m`bws9&oPzTQqNxhHTecHcGQ2R8_+>0#9aQyCmQ-R3=wkNrxdHzI_AVV*08j3 zb>rs7BaQA&$qyzy*z{o61HA{f4=z6Nc@WI++o0C4r$MK|u)(S!zu{TK>&AhNW0*dC zfaKg_$EfJ`Fw@XI2I38;8ZI<=Hb9T3RuV<^%Zm+(2ET?#5f1YE4!sS#LzF3%w3`wQ zr47Q9FH8wOpZ+zPn$Mk_kdPHM8Re-+$h9yu;r-De8hWUOzZx&jsD;rp%^0OwA7wh&NR?J!*Q>#F|GQ z?Dnu$K2u{0^@yfl52XKDmEQlT%EyM>2QwZlc%Z;k=`N;9Q{j3sx+g?~cuHS3=gF!9 zO*7)b!3Wk%`29@yY%D<~(U&6P?FSe7Ci-M+;z8I0(Bh-Jzwr7yTe)-&hqG2-Y{loO znh5myoC6koT`NN~Q;xw=a|3}X$AqtI0X7qBj=8|X&`eKPU}`0>5a@9%&H1_lj)tz8 zi3y*ti<~)DYzxGTev)9MzzhR37R+QYQ@|_$vkZ(fm>`vYwqgKtH&9S*GX<+KjNL-n zpV8231nK{o4+VLO7#L=Te^>9h0M$=({f%5=?CF>JRN-m#lbAlH`GDj5@4W<*r0FJU-<@R2LXT|amber7(Ha=yw9fU zT_K5r&oC6{@StoQFyc_A-eCH|w-gv@FhjwN1cQ1%^%Lj(1$N56w0LibUkc0saFYf& z6wGj87-?}7w+xtRbZ|~?8kN3uIt9f!3jt5XCk5$CLHcx@QUr=~FlVInP|nESGMtf; ze{uSV%>^@$(_3sl7^aU7sLx4)q1q8ufdZ}v1-f1CQ}G0iB1rzid4}yB6nyrcg3?_SjQvhQwPXqo z!11}@_@r@oap?V0Krm9!kENhr(mw_Kp^fXAb~i7k;&Z`}cK>gX>NU`BVyN&uR=gu2 z@JP(hX+ErQjOLS~G1KiXeVW4O+EP&ZBn8z@VTj%3?6AM%6nuvLDPTJtJ8FkPPzQr> z9f)%f{c(V<5q(RNG>&MjKhSM|pxgdHWBq}~`UCCu2iomVj07_p%vdnv!SJA7C(+S! z)bN)r?iVz|yo#!iSPW_R{{|sz0< zyrw@P17-@CX<%l6zrVoDhHp7AbHU7~qZL90{MEgG$kkB!P{U9d;Jy3x$0@1@Ds9Z#o=qJt@4c`oHcIUA)@0No0 zmxA_}g7%k!_V51dDgWA!sPfoi*gf2Tvj;t-!dKz&BrOvJ{Om zPyn+U%v#9LIxxy$Hh_H-m@Q|zK_nZYU(h?8Up#JEnwXhc8G!6V z!db?;dXztuKO~f$TL*Dv^@K4CFNgX6$R;Zo-L>B zwA?I>?dBK;VVH{{9gfbw59as(*ZkZ5kNNMOUeN!`^kV<^$|<9qGaSVh`~I zVfXIkjqSnz#UApX+e186J;c-4gZuj);^8>|d%H+u_wMyPvIqBRJ;bxP2Y2Nj+;{ch zu7};b=O?v?ei+_^yLk`s+xFn@(t~?=5AL}=xHtCT{~dvMR~!M&{qcaCch_0xm9To3LFJ-Dm&;BL@^yKN8dK0Uan z_TXOCgZne=-kmRf?ZLgb+rQUO38stg@ig|}Zh+mp)7{!0+(-71?lkP)Js!Cp{44k1 zuHA#Xc@OTkJ-EB{;2z$Cduk8vB|W%5>%qMXyLYeuT|Lw%$Nk^iQMw2BX+5~3u^Iiu zU_e?7kd_aqQ4Wn#|Nc|Mas^r=RRAwvX>U6zIYVv-1!?D=pxVCw>@R39g;&Fnjz=gD z<9y^g^|eKP$QIk5VMzP`{~U@DTyY7>UcLL^nEUpV>OWv$&&m8ZJQ?y&&*3RN>K^~$ z_lJ85u*h`(tzNs1vqo8Q8J~~OU8A~rvl5hNjjG!2ZH#x$TBUW0+c$xKR7m)(RZ`bb*`kO7 zlIgBh+M%*WNek75))vLhN~9zFfpTf7t0}Ib9oE4o+rv7Q_1m|xGD=n^ghLR;qqR+G zy^6ZVw%s^FG66;PH7JkhN7^AXw8J{p?OWD@?{(WZZDOZ`DoSOI7F6FRGAo-EcZuX{ zv&t3``xe!0n`wtFsv1x>Dg#@$E3Rc#D`%VHPAyh;DEkhjZHntzg@T}@zkg{n+P!<5 zA$NA0k^PFU92_63*kt_dx<=u<*DWdma%Y#Fw6n^N?Ci25yPC=_rA=DuDwx(ywT-X7rNtkh4$T4I@^H`yM?6UW88P4$l%xAo$jZ| z9dfUY}}%xu1?0ci$$s1lr{m8?NHKESJGh9xzK$l zMbz7r)Kxca7m_2Vdz~U0L~Q8a>JXKKacAm~bQjhQm2-C8iQ=h}tN%;gQT{~hj_nVH z{I|M7;TU(Oj&P9?n!~OuWY^lfeUp;bYG8h3#jCDc2NfrD7uFiEIcO8;&un=K&CAii zfL0_Wz@W9uUSN{GXl&QFcZK`1_Q$aXC4@|2fGFg;;g!0 zEWy}=2?0|8<^>o6W#Iqtqw`BcBw4Tx7wl|<%EC6NTx+9)te6avGrOhU*q zM+5Ar{k8!fwKKw-V+h3{D<~I$8sNz_LBMN+9r@!S2$={%5bWd+pe_0UsDL2gp8-JO z$u)CuCwUA&s4f!k0ze(`s9&LQM=)HBAcU_1uodvAjS$`d!)XWtJ{H>nMdB}FsEi=s z-vdDDqk2W*$q^RdP_S+X_yQnGAN6m9x598ff)Kt007{>%Pr&P8ybQ*NV>=!HS!`d6 z@ofN6`Vf@-vll~hcNgOK0lNm^5j`PKCoo)&AmAGTp!PxZi15Z3{)HgmQ?VVjJHlVV za1(-n{|W%5kNOwFlY$Pw!C*z@4*`hEKN;gKFr14Zgf9eu%8&XN3a^9VBm@C}1KUwQ zM))%ru0{~>F9D$R;XjGj#Bel%fcF4^%D)D?AH#4df`G3DfXY7vyC1}G27-W3#CE!W zUdHwf7~cgDrH|+d091ZbdI$UgjGuz>QP@uR z@AKHc4&&bdMCn6RWc>RvBzJkh@fz4s`E{{7DW5|+E0G=Wj{u(S$9BYCQ2y*N zR74QMKL>!q)Ad7+sNfIrTZDH5z^4DB$Q|%Y5CnV;05<&_B6q+~M-cGw*bbkh`y~uj z5Cq4M08skk*nK;O!;m|~gT^X0{gVnL;7)2eK=`}hk4^sq99|Ydz(-;`-M`LZyAsC# z4G^UdQIdc5VK@#!2=5DkP5&n`eg(!q0LZ3)6O5mQ@#)x3^Cw4a-;D9!0iyJ|*q!Dx zh@MdU7XW0_za{oZ(gWnL80>8Nr~Bz-tp;>jE}~4x_lR~eLcp%1BlXxsL1kbVMva*;1~dQHvON*_*Do3{s{m! z{gaAgkncGdpN$~cY5wGl?W!368z7th)i7Qf;QuoI=Yc|{x9Qy5%^=%zYY#R z2|*}-D7F(Ap22W6f`D%UfYOKmWF=@~I2u8~djeq7|1peTit%*-+4O%9<7Z%e61LO* z^D?$?!1zx9QTjCf@4)!s0CUMk5vBjb7{3rf$X^8jHvJ#K_$e5F8{6sreIDD_Vfb2m<~E02H3CpWPTg3gg`Yvg!XQ#xKG6`vBSW zZ;0{JF+Ks?At|zcFJY*HAUJjcK6=3vhT@1R?%g*iQGa zbJ(tg@vi}*^lAFvhw0cLzpNt@sKMdRH`0cTM4aUC$h|-7uWF_pua14SF-Wvd${*Pn) zGK_Bk$fkcIjGu||DcIf*LkA2uV*D3?D1Ewpc4GVpfd5ASHW62NJ;rwcMCn6RWcj;~|AFAlrvL8a|5L!T>E8^;GY3J4GzZ%UV(5&aDuRIj z13(Q5kLYtJg7BdZ5Yhi0WCuZDD?s?q*^TT#DBA%d`rU`@3RHO1zPpee7`+C-iD2K0 z>^#UHKvX_WWQUHv1E3w)bCF$}3J<}^^wByBN*~cbnLY>tD1B6aWct7;Q2KnZlj&H+a;NRE=(0Gb^ZSXf%?Sn66B>In3BdPm{-fuSx>$IyyrEHKr#GO*-XSqKCiLsK{~ zVQwt267=i`qU#=?u_0*L^Nr_FaZynrZ|wN~)lc_)8CqKLO?3sr7})vgjzjSaOw6s0 z^7Pm!o{gcE0bMHO2mK695A%%;^?2Pfp=+im5Wx#$!WcT7jpX2Y{IJVuvG*UZ8~plii55b*T` z7Cc=8fvyqE@dc$JO{!o0+z|Q+0{K-xEr$3bL32>)>D8CoM4s3<|(dFpw57}c`@u7UJ z$IjE{r^*ZTEJ6{;U5#$hFZz!i1+6QirVRR zoE9~fJ8g8b&V{K zpS|L7E%bI$R?)rsC#@Y{{>0*b!5P@!7R4hcP4yGn-o5?*f^<;3>|&*d!gcpoh5dc~ zFaD;@qT*8n$b)#$kB*PBF@KSJ8_ORmCrTH!SK@4@9gw{d>^y+zN5{wRPs`^}=^6m+ zUcYRAKGzTud`J_Mpx9zX%?iCA&0ITr9`2`-j^ zISk)=B-RZ6Dg)P_C?TxRJB}Ot zkQjj21%)#}LM`|F` zr~6m;e%%QDt9!pj{hc$P>92^-NQ1pQ{}2QB?)_C6{PDmY{SaP@vl)8lW{xWK&E3$m z6u~Hi3*ATQe7UgFL*ab7#Z$3tOSS9X=vCY0W<(6Bs#+E7CbeZg(Y$J;_>KXy;#*d& z9O{2VKcNL?J?JN`KmzzvQI3963cgp-PYk=i$NpB5b}zYJHh=L4yi4EO=jy0JlU~kU z2hA6R>b8e?>IKZb_;A3D)JI3hx7R(p*i_>^b5nAktP^pkdd*6G;m-ad`{~KqZQ+OY*kv;>OGx{GqJ!^$YZ*OBgSFydi ztzBD0-#^%H zxaMb*>HKvU^>0_DYCo`?CBC+09Cx19roNG-C;C5Len>(sQjwS{E!{8sJWr}rHpyUT z!Z|ZupV|XyfiL;@27G(6->0-``XryK*u?OLJ0n&k?6&KlID6UNtd!fv>A5`n)VIkA zIlfZQlexY%aaK##*Zm!1Q{z8u%0qGc;g2i__tSlGcA1{X%7Z5T!!-{c>sLA8rT?Ek z?o*>Ved7Xpom}fa@O@24?+XSW#m4{6mo(hBQ|C*WzQFd-LgP`dB#lfDkE#9rZ07w- zn#UeUmv4BiZ}v3p+qaHvr#0CrBkG)DwcA4K>rc5?2N&iyF5dR>sp<#)jB5RznKvIx zCav1IFkbn=%>Ip=#`KN(yn(w=`tatV(hSX!>hh z^picY`Feg+KI*=?7IM(Kue%8mA=&5Js)YkypVRMUF=Qu4;>?B|&!NXspGVJ(JHB{K zvXq}wja&chx|WoVM<*seeb}$I=KlHB&uc$?O?YfzYX4wD#qeyqJyX&?H`~OT*{n|) z*{a$5qWQsrf9@`mJg~Q)*q}cF0%yZ$ov-)*81a=VjfWq3-Z$u7P5%ZBd+{y#3EU<8 zDf(ewhHF=CUT>)K(8hG-hJ)47k2LF>4)lAf@P1k2BK7FZh@yauC#Ngn5ve~(a$`Sc zWnIoszbogSpnfwXQAT26Rl2)mL&fx+Pc(A$n>y?#KA|W-X4Dy-g>wtkXU!BZGS*Y-vN?G^OmoK_FGbbfmzzpdGV-f0 zw{?6kYwCI-rJ5AA`BZe0(=7Xd%CSBdwhqqUAU(NB{l0nE5jVvS{`Q9G*+W~C7BwXK zjP*KeFR|Na%$bo99KVO(XT|!KEsWT=&!%;(vGJd$s}ySk2544XmpSYCVp!l6-n#fO zzD-2-&E~cbuc|uRWbB_52;z$#L`Lu1_d0Oh+G*uRW`@7a4@VoxFX_;n!TYOEuYM+r z#}4jXxbA6uuYJXbG|b=135>eFbk4{~&X>P#?K<|-{GeVgKQaSHq&uD+aP&!p?Bb62 z<$sQLT4pP^9XvUvNOAd$C%Yt6kG@}fN~it8EYE)Vli$Qa;g-!}PXe$(Qd z{zXBHH+5x9bPn_Cd(X>pNFPr5US;_PB?q1FrgznwZ8Y{}qz^L=3aMY^c+q=+m#dmj z!;?V~<#%enH@|T&`~GQfgO0_x)}uyGk~9zDe6S95EcIqvz+7c4&D)v0^^2mwhVe_OW4(9lzsmt33x#&bYRI4Ys4KM0?ytAvL&?79r zqt2`8b9-j5=y1oeDMnA^ug&O~aqjI=qq|Yc=J(CU?E5-<#=7R_g-;Fy^(s28tI?)0 zNzl2ur8AzmksmQe-}S8Al%T-rsnJC*zXd+|wY0pm{`jx9%1omO+h3aTS6B84j6c2j z?5$Xtv44FS)@#Asbu-3W+Q|1xY&KW^RAsbvq5ZmJHu3v(w={e&8`#=hQ=U}*&GBr* zvkim2V){*XOfE4G^1q~*adzFl$=qJXi$@o(8YX{kz<_D1eN^?i5gMm*zaQOhSEjRR zLeXNo{aurN{KEz$Jn|YAIfkRrqA9QX^Qw+cL!?vz}#^eGGQ2dad*1SMKDF)~2lH%%MN4!uqeWzdYqsyz8nonJV+I z!^#Yot!rI<%;wjgBqPD2F3nR#i~6X)JG@x=OI&oH)c1jdgXfj6x@_@F#vRfBqJ#Nj zrnP6eyR+93kHY)(dYxY;8Gpi2{M>L=iPWt_1~@OP9$0_QyMJ@Xb}7AYqx-14H}>v3 zE1>U+^?Uo7hfEo}zVzj|@ix~dOdqE`KC0iGF@F5Fqw}BM8u=;7a8$|11%vL|c zO57mVO_tI_HJ1;YEcbipF{jkwn_nIq@oe4Z#SMQsFL81!U6%H>-_qsp)~@Pz_Wa6i zOLLbC)QAP{Qd_tY4+}}p`=ROu2G|#2QNG8lVLiV?O z$JEk2v!-m?tTXxe)SyX|uD0@qb;?YfmUv{wgeU1U*J=NpeyH!tX_KJw_&Db?hSr-%3M ze{!Nu<%t_swnyE^uRd}&Nc`BZyT!+2XJ;B;SbNIk$@j%(?JnO(FKW|Y`%9A;>cJ15>Max|S6=t-mtR8p8 zVU3!>2Mv8<-u9K5);s&ur|h_r`&B(7a_P3`LrI4`?x=*@6}W?+ix=GwwCRf1k6Sh_dekUo)X;GtqCUB?qt-5dR-O0_ zovL~Ff~pUix8C13TBb(&_x_@(9@h#_&3I6(qA>DK`Hr3WKbCtITt9O^&$De%Zg|Y* zvcMu|XsObY4}66zQ*Ky#pwIFm9x@_dkS7Lt~NhSTxPGH={9OwyZg13H@$9Y z=y`wqdy;37?K6+BcQOMjZ=VYA8nXCW@X_!7GG<9WLnLgjZpe`LJ6YZ7E4Sd1V=t|Z zSN1pecQSOSbbjM+d->s))edJ=#4jaHF1~nC&(}U@z^*f`vEyy4A3Ugm*eG{GRxM$Zw`MZk;&tI(p;a=`n+&%x=pT-;Nq-_aSV~>v=a1 zZ@0doxGE*IaQfGv&NWMeBY&L;@%PTYUS(OB^lFr3Vs@B9@}-J1DN+wB;+Mq@Owbvq z61QF85Nj~0Awx@fSi0nA^;G$5u4##vpJduU8=LiDzh=(c`99f*{ssD(sSYK5BHzU% z4c_Uk<2?8MlSPlTjAYXmH~4or&*tf~9n!kH z0(Xv5`z{ySHZ)NB`=PH~`oR8WcMRezr{59hZwg9n`s8D_*5%LrpQqFgyc@IV!H&&S(*{ga zkVr1>h`kYVQEKey*oStf8}ygB9;unxHNn)K`(?_q11`Sy7gx=3eY?wjx`y`JMEPD{ zrJjaw9-m(M;pUsCZoe<3&R(ZK!cT)RpZX?4`Te0Mb2gRA*?xPt{gsmLwV+i--|pDo zA7QXC&tl-^qh*Wsy^L0C-mCCOV~ea$+h@y*4$;Fq77hQZa7NsJ>dH)+3GEXVk8Hmh z)9}pUZtUK9%aV7$-Cy0ZJ@%B^`npkX{uobOrqgHLg$J+N=a!stax$+Ccsnib+g2B? z9WT!;mEX10zK?TQtLeN6z4OlZH@Ueq=|;0cR^Iua5_6`jjM%W{Q%vXKNprmh1zbLo zJ=14glQ(Z;Y1fh2(aO2GV!vua4=5fSyWi`}(Iqofy}bhWef%)FMPiiEX6;iApPZ_7 zUcF9!qP5MbPyV9+hqkW(s4DB)z9?xRHukkKP;6`vMKDneY%XvKsVgC%j$&i$SQw)? z_E^~1*g1*`Ha3oU!I(zMVFBtFp{ons@SS+5icGuZ^?KqFO54-BB3fx<9Z`wcg zZYRv>S*mJ}H>U}{W>I}Oj)X}orw`{csy9=6V_9zAx? z&{>)HioWgN?@OP@?uo5>zNlzECZw&V)uq4APC0gNZIh9X&ZDjjsCGDP>!hJ0t~@(+ zB>YObKKV8;yK}#Mu~(zx)^tn{I$d;&bmK1|s>+`ZuP@^v+rw%a1~NGaXm*E1gbu57f#Z|-vI z>k0MaZltWpy!^QQ{0mnTtafy&HFEQaeUDP?EoL4lH>=!E8^6KH>X)x}4RIT{-}zSQ zYnOfty?Ou1>r30ajlDSjc+rr=UVg!AQos0o7&cjZ^50@6{k!^_hg|(wsHN{T%Ytv3 zhpA6=3bGk^+1vU4p8-Q6TI9WdzN6`-_7@6{|FSaQ_TWa_*L-ZVB{Agso|9MB@BQFZ zKO^K`yW9PvZ(J#OZr%BoeX3n`Sl{iIs@aM3Zt(}wG$kr-d%eBa)+3eA?Vh_JW#7s| zc6m~k3^GfwJXYZ9md*JeSE(C5Vxm`Ir@{v{<<{-+w{JQ0hVx95>qE>FFR1rEzid-; z$ma2r%y(?Bu=K$Fm02m58pK+h{IihiL&JGiYo_0^PP830xZobk(3bYI{6gkG^zCmF z9Ng`7*$|D-c&$UmOCMF25c9cD%b2VjKF0F(!8e7D^wuU{JyvArV~;8OQ~vq9D`AAs z&2qPkU$b|gdU3?7PnSArJ8#i=HQV0p?DD;;s7res?smAn(z#{E-1HUakAz;l^7@lY z(Br`k!>)eb5Rl+{%{wKnt*L!vgS_P){FSfMpqm9pob)go(xQ4E=fC#nx3M`{Ks}*% z;P$HO@bO!B`Cqa+tGT~);H?kVHLjjaOioLzbUb~{wmw^1maMa_;OL$E`ZrJA9kStR z%2@Tn16z0G-Ep@-)aDBd|GC`0=^qzjHkn?pRy^`XiLv*5^B0-p*L+;T(7~;S4eq<< zzV*5Mv#q}Ukx#X;`fnCXHfI-_-FBko@(blnUIqr4ANu;vr}uz(ZNTYLA&rNG1)D$m zda2CNNf&En+FTpfH{fQ6Gaq){4xhgN`G=A__q%u}PrrQS%JQsb=Vy;}%s6zU>+P4_ z&+iF%v1)JcfY#g1Z@O)1+%cnIt!ta|mFd(tZ-=+ero+5%dp|$CCg66@dSTO_y9Vu# zJFVF|b+7-}(pAGRBy|tG+xSd@n7MoMx6fNCPl;VU&8pQsy1V)QE&KA@)!Nqg_x@W4 zn;uI4wt9Qoxq7v)E}7Er*2Z#+{0=4m>-(}=^x)--^MuaMx7f;j?Gx+9ts^V~#+#{n z7oB^c!J-`&{sf)}23F&*2ZY2K}eRtHqmql@Dx?r`-=-y2T1^ZPf+ zXr8@x??%sCdzKt+zvbL0hwa}U@7wpX?5W*{CVOt3?NDXg@>RRj8k_x{Za%xmt==^% zUky00)qhx>Bbp8=0|LwBsTp2t&bIvfn;b4MeOX_#+hy$YJfBAGzf_re&h;DnjHzYs zdDt)HsOfJpuiN$NyLv)b=Xu9ZT%Bxr{?H!xkI%Cv-+O)a^!n{x3vAywvh$L$_R}XO zmOa=P~DfHruBk1s%!Rrp5MZ%c9F7N+kWSxWq$Lz zRkKBQTvxNlJ|o*6>S{mndXKWl<`kc7GR=CA)2hl@V-Gl9J>-~lv|zN6EGluJSE{xj-CJhdxFODyO9%Gd)6XR)E3t3L z)vLwryOuA|c;uk!W$YKXQkA{AD^XP>X>2{uDI0xe{=VJw{LR-#OB{Lry7%)#tLMDE zI`8sEi@lF`mYud{alKo?5u7MF5G!o=mQi0nd#%E zZJJl4!;Wc{^Z${gJ27sL^Q63$2e_7Y46&$Jy!8<~YwPg=T@%}k?6Ed)&$y4NoqSG@ z9_@IvLSp6D1GieQ{^PIW^KLxop(^vaYrVedK0XW1#(8GA-|1S?0V(^)-3a+t7!vAzWTSl_Rxk9w^?D)o=J6^6=|GR*~((AWtAR-3%AzR znzuUc{*1kDD_6`aqzms>tpA3m>KZ10_Y1y`qit~PmW>(;Zj zjMSx7*%frU`1>{wU7Pp&5;N?EHhBBdk$qo3^R#O6&dqUXiq*!=%Ze<`p4|FOgV|NS zL{R%TIW)LQ-f@@0^0@BrV_~)ChWY73PfVwc*kabT#CYqX-BJpjZ$6{o{P9-`^n8BD zs`Ljx%Z%Bc`Igw{%iq6!%d*v$>&o3f*}lS`G3Cp9m#a~xZvOS9pK2D_uDgAxRM7S} zMH;<4QS@Enx5AsNt+I*iG^==vzQu}tb*Nk-W%{s^!|r!>?ChG^bVlv;<|luj-Yoz7 zU9HAmbnS5ChPG=>>h(S_&SCE5t@SSk|I?tb z$;~Rk4`xl;v+sAZvQOtum6ECtS3g`(sbZB^#cRfHv#YiHR)rd$yc?kU_s36s%3|E>sl+SD2IJr@n;jt&`m>Qy1Z>W zrpiI*zw5VkD&!T}#{FSUmnl=r^>`8J(X&CGfZox2TlLy`#me)2>eTMd{@UX)qS)PT z`$t~xd$(y;KegxWKK@T9c&(VYdBBrd4g1&lly_iwyS{@q)D6AUs7!q3yCFO8Za(+y zUgXNF4_j>Q|LE)0;0GxI_3sZWX!g8X2ghgk)rJ23b4jnK-mf)Tb?@GP{50X>lXZJPSE|QuFAt3!l|8Oy zwHL0v3%|By2g&Hebc>$ktJ#t!h#*xjV}wa=5RueZ9_^wy9!dv9-DI_2h@ ziWhD)>G&W$xIo60wf@g9Jv_(GM^1C9>-YI9`qoa)D} z)f{=;*2(=)?_OsP&u#JP;Keb2rWVecd%E+cHK%4AU3%i=@M9ZLbtHtyEdaRpU>7SQ#GUJaf-Fy7~l93zE zEp{wA?~jjh%M!PTS6L8aR&-IlJslRlI{(|WNsSz)b{u3ez2KdJGtNy3njHVfzf;=0 zyFSU(eN4i!%G<{-^h+4yWqlyNeDcH5H?Ex@H~UPF@!eMWPAqBLY{KP;f@|-lC9P5K zp8uD>>DhHF!ai(#5<6m3jUpX4gs(5Me#5b%xu?w|k1_9KyL+ssQn+TpZ%|IRUgPulYL^#WT9ZEn8Vy^v4x6m8Ev>6HR^ z7k3+!;`!Em*Q~|$_THMjZC}~Uu?PANytY5F;Zth=DSHF7e_5TFQe^w4XES`}_il14 zyMEQ+K{x(LcieS!o89x@EW1t)- zP4Y4Iddp$$PbSsh)XH}HiGKN-2W;OmQI%HL!!c<7zk>>l?~{GE<%9VXwG$?uzu7Ev z+qoHC`^Ge|YyHoCn+e^$V(vLT%_#W3+kwFBTJM*+&0l(?ZzYGCcbD|;I?6r#?eRC3 zvoAZX{w?%#s%@jCXj9c*Of`$H!+#GmZV|u*C)s&=8ZNn4ae7^W?<}-hfk-e@pDPz5>dgmQx zPIfDjpC2n*AYu9F>&c~?2BeRwbs=`v?63;2n^$|6ckIHM{*=<(-aQJu zx2RXX^P1bMUYy(g_4nKVy4FdV)MHV}fPbs&@(js#+jFv0-CNf`#5?%5d(<A0*f_9c+~h(L_XjjN-T#iq#x6a+IlawFth#YZLS%_1&r6t&aeBYERrNnAKCVz@ zLC;v{DVgb;8uU*-^|a59<~<*rAK2bwWb(IvOI`M9UNPj_L|3a5^&dadO`kr-?&*?C zGrN7*Jm!9{LCw7CHCsKyYHWoDVGj#VIB2=O*{aZePIp$AeV%ZzqHWy({PaP$c04&`HNE?=?T?!Ts$8$8K>?6(yWT$zzP)Bty7ED@aPSgS3n%~% zm>kU5uq~`{aZ4-DauHn?t~^`g+s@$=3Ku$lC+c^btAE#AzkiKmslu-DD~DFjIOZSi zJb>GcrRTQu+JD*5bZxuB1J4ZY{LK99i%GsW+E$z9_ue_{L*2M; z&a=xm^sKh|+LMJ>4s88!>~a2f%chpfw)R=pDafM5qHg=gRd0NK-tP+<)v5Ed7ev=G1gml9a`4kWaP1?i`RaQuTp%$gT_gX^G`3^Eo_2+iPf#H4LMXh{8sHb7k9Z^ znU2ohobqt)@`CQe%WSSw-sM6ow@+bx>>po$d$?P`tW{@{*H(xsaCVsgF3p@bUAU z&XQT0s7;!h^e_oGnQF4mF=|UbV!Q z63!(rmh`v%WIMZ5?b0Vo`ZCbin zk>>eZShO^6WzjmHlZ~@&o60T@ZCkhN=BjN!!fmem<__mNW_K#urD<1<$JB1SxO^Z)E>N1FQyh_geI?^mNv`ZDR6Pn$HDzV_J>vppQd|1#6L1U zs>9IKn5J>thSeXj^|vOY_Qku7IX`yL`0NSe63R^8HpOGw^XW5ZHv0X>>)U68iy!iGzGuAIrpy!P%!;oEiYbh$U=!Td+5kNm0gy0o#!#B zTU>XoXV)H$dY0<-p;vnEtzJ|5`1Ebu&!T^N{}ltm2RaV=Ht2}=M2(w|rSCD{F@7zy zZ?xpP z-FE2Bp;0mUVv}MU#+``kH|*)Kk;AP=EE!?{+wR}mkGwQ;(5Qb#Ma6%KpD@~b%-k_$ z$1WRNecZZnb;oZR-)O>)362v}CN@n-NoX=@`=kbwlPB9xSv#f5)TL8PPn$EX;PeU8 zzfK=Iq&D;xfUFL0@S7rX}`FRr~5;GIK zEZDoC#=?0E^DGKmbZt?)#mS4y{4xHI=YRBBa%f4drL&iQTI!p0I;sA$1DII(RI_Go4#)9o4g~r@aB-s$2V8pGGfb>Ee=~JZN0a( z#kRTIo^5m8zGVBm?Ok@P+VOQq&z@Uk9rq;*z!!I4IdT8jOV~0u}4miB? zu*H$yM^+tqd!!vcsC@5e{bTXR&K)avJoxyo;}$1+p7`^`^AjykPCl7_vhpe2slBJH zPWL>$?DW&qj%UW5Njp>KZ-0DZ@$=v9&(1n~<7~Bax^uhFnWl9~OH8|yR`Yz+`F-cj zFLb>y|3c;kyNg3E?z(7l$^Fu-OII(cF9%-UbouS&mRH7IIen!_dY|;A=?~ItXGCPA zWPHtNdv(&)b61O9>w9hKwfomQ(EpEi$IC{hCX6Ku;ZeG4w>Q?_-Nw@CZ zs(yR$?G3lHZ#T#snz<|UQ)a6>@plg2F}vIT?xee??-sn*_1?^T7w#3k-}C;w`|0;> zAM|;!@WJ&5Wgqr`_{YPW56e9o_-M(aTaU_T4b1u@>t3{nCllV{i zKP8^@d@|?Bg(rpo?fUQZf6x4z@2T6<2~Uqa&GXFZ*~n*mo_%=M_<7Xx&G;s6t?a<; zmDzW*E4=9cBJsuL7lmJTc{%yzv6p#YwSG1H)y`KhU)6a%`1PvScV3r!0h4{_UQ(Z{OB?7xHe^yF2g7yzljX=KIs{%|5jL5cgs0ho>K^f7ErZZ< zMt|D#>Gdc3&;Fm2K41M@ zyEVzYy`pURR9#f|REcMJdbM@FT@e$TXJK>nt(Na=Z0z}R)BTTaVhc7Mdx~7%d0^#U zanHy$|3cp6O23oMCl7eMV8*M0lk(O-XaWzHwXOJNV@9|`i)XlBr-A?H;DozP#y*bt zlJdfC47tD1XtBCT?DIWp$Pd)))zJL!P75mbt{pmH>XkH-`=s|sI$NXLfHe63y)jXJ zdNuA{_my>Q-RPiOZUYZKze>y-+I`8(AInWtJ>+>TpSUOt;jGhz1o>*{^F(T& z=%A1&K7AJC12@QFJd9FDM2Ce1g#`$a2**7jEIfjq$%9)_L7`eT&ZtF;s2GiFhlK?B z;7}N1NyoqVyqb}m$Gx5U^59kpAT$VP#Na)i8lCb|sT9xLyXwceJ{mu@P7{G|5n;TH zGl1c0vVl8@G@+URjDB z`9u1KlU}YLw;QETr3%pC+f5=L3`6cvO_Xn-IWQjO zXB8nd%mFHQ_bsx?OSJtQbJC`x3DD)%f&6d9)$ ze#rC*d#EoOUu50e|g)d{nF|QJ3*@cX3h6I$#u@K7X{KIG*c=Af0_MRmFGD)J87glTo{Gs~sBT ztL+qoA~dq2_6^ZQMjG4eg2wIVqNMFd_HZ~fJRl6`Mg4x@jj=!En6goeCgO+6sie!; zM=Dbs-;Ib;a!;cUjSh(l!dYUPl{e%9%xzy5q^v38lqvgVV8^NVShv8>ZI!;V848QqK(f1Bk=? zLX`Hbw3~3P>;t*_|I)sFE3ZC%W%{XG#f!iXN0d?!B@Q1+>PwZHXI#^bHGaDH3Ti}1!{u=0+rU0J7VrR z;w9}FB9_DbF9MSO(0OM+t&VcR;0ba-%0=6t^VT^nd@rwS@CwQtAGB}L+vV_9)sxRp zEB$l`J`>2Nr*ry_djWoW&N`>f&KNxScUE0+nSnN)L>+l*ud{9sPw6SW@TByjv zqC*FCXb|0dK;vkBh-y!L4R?rL!jKJs_VOoqSDUU-C5w21OYbYfONnbvSV_Ykt35%p5kvb$i0QX-=b+7V0 zNBX9tG!FIZH)z6dExXncbMBB)K*!hy>{ zQQ?DVI7JTi;plA$C-SNd57|^A)m?BkIckciEY!G6O|&@tsSDIJ zQyUGIWS5|LLM<4jCimm9A(9efa+||0ESS>mkwl^di zqe?19F;5d-DO1gsJi?53N>wL$XWGp4NOMTmWm_h=ov>RIm}Q&jmEo8Y``&b1+apz0 z_}woyr^ls++oE0vg5^j-hX@r*}D9XJgp2@=FHZYPEmlSCi4s z2P-bq+$lV(+xdE%hrFS3)xw@OepI2Bq=yvM^qrRz};!|xrW~QmVlQJE2$=RlD z#~mrwW6q^2ek<-bjN10v(kOajnSP6|*9u7(+n9sYuV<5=kL78Q>0S;Hr;(9#{B;0mO~fr zzRX*+aswAn-^j7Emv23M@!l)bVpSTp?cof;ajO4n@G0p}(sFZ^rwscZjy%wMKf^N#(3hfi6wZqMoK zPd*hWTf0T4{vji#E?&R)%#D9P7c6Jrvh#q@-=_VsVc*|3pMJ3}U#C@N z?5$^C3stDwy6d3uQ8SiqI&kjx^KaBnBDGP2@CFD$hlFveZ29yGAvKF(7^k!^4D@x; zQA+zVxTAGE%s?Z;brC@{12BvdWj`RfVZ5UCa`zX5mOy+EL5y62dU!>t!d+b>RXP{v zPAZ*SpGY3f5RAkiMHShjU3W3KiE0PSQSSIQ!!U9tjQjU`5ane^p~-nQ4KL*QL%um_ zTu@t0F_CWt8XQCh2kCT5=l?T*6&E~T&*3j3tj60|3^EM&6Y0Yxxn98|rreYQDW`WK zra#JiJcrf)kWR`swJthB7apnf!9R<)VlNt9ERPF*X-|o#u=t2SCjJ@>R{Yd4fuycMmGh-rmoTy-mxgdhLDU>h*QxYhk@nufX>`}8oy{GxIRA?BSHIpL!+BZc!s(Tktu5a{G z=IOEGS{%u<1elFxjI9?TRBv%9BYCe_|%44E3HQ+oZz%~+lTOd-F9(2Ets+eV@ zs)$7e{I3IH{9~1>va!Hu)zTZJ22KJe`|%(r;7rJION%A00` z5BGWTKXf>jMG*dSgkKr|ql2=n5BU* z9E6XlxFr^MESmveLik1T|6ou};BDZPpOZlyfM3JC8UF7DDxq>hQi@tM!2h^u))KeO zTAe}oxNy+YA5;x^Jvim}1duE6zi^LRr7Q=6$^$P(_`djmBnT=4s~ZTv4E~4u-m(tx zUT|yBbWj)I&*J`9OWZzYSs3Xb%jG`=821fX9fJQ9Uk#`t@Sor&pwS>_;Jc7heENV& z0sqeBk12v>Q{W3+{z1T4fU(*FPVt=tatD41_f(#^dDXJG%EmH}i70<8mRUA}{1lfz zUR9P=f&T)h{2C8x2mBA*Q~BfOR7>2NYPFEdA2+31;+9maYh3=Jz*y9=+6_+iX&R_A z@JG0(@~1je6zMq*&hpX0e%SgRQ~-y$Y-m0T>is>n*(3r z@(%_^y|&r`PW5RDs3Y)OxTo~=29-1_e@uZbn?Qb+%Rd0PI`Bqt3U4B)J@7NQr~DiQ zLc6tE!sR~-xHa%CF8^@gy1@IvsXomBbp`&)<^Qwxe-Qpt`Fn%Zu)hpk1&Rkb0pEd~ z%HIoQ3p|U#_&k??Ag~?qW^gL61dto>3%IB9|5^J#$>r|{J5^wREjZa92Wkua z81Bix{-CnJ3%LA80Ji|X%HH_@bKeYeD@SozV0ab+k z<=`fu(I98wdyrFn`hZFS&(78UFLL<@L0$v$t>6^jNg#LNS8z||`Lp(an#*4cJ5^zS z9XRFJcu+gwCvZ>YKLAt?coCQXZ@?{quXFi_0^0-c0WS!e2I>s_3GS)l`WRXH;gCmXZ8DqAy?JjKi^s>+&~sEe3csY;ufSe7sw zt#U%tZOrn({b;x^Mec12n^};1^WtV2a_?(uN$+0q9z)CKyS1I?yl1I{B&U@;+Ei1Szi+g(Rm7BVD6?vO*5E9&L7jjjp-&+agQz zAS==RnwsXp0FXwa^Z>hS=z)a)wVY!sSBz*+MyMt>C^R}$iJnRwtz_dcxr&160hX`S zK5@Ldz{Biz7&`NW&5qZ(YbYLINl3Xb7c)6h_bb^J0u`R{9d`m|D64WmvByg%-&v9VDD_cUfBVjg zQY6wImO^|m2f|EP(eaSFNUjzLdvgB_Z`4M?Dy67ZW95z3n1rqbuJn1Otj6~p)U_im z=l8`|9=o`Ex`{nGn9xGmB$oaa@Adhktc&E{j9`>WSm%&SDOAA9s)-V`@J5wmy&H2^ zxu?STIk$lzt}=GC%RJZWxv0$WlL9cz%X#*S=Q-!=hUYRrX|0YITyvD1lpFF}St5ZZ zM%e&Ey9Uq&<*XBwH2wZ1qlGnIVlikWa%dwcdkk8LpS!Qu*q$1fkzykz5bH;Jr=%ot zRJmxvs*A-c+!anCD(n9mEWDEHpC<8PVWgjz=`*ZA$ZCWdh1EAo3z`2IA5tiCrTS5P ze(v7L;ji+83*S%_5s;45XC&Q9TgP6|Ir7H$ZlEq`EZN&)u4_ zFD!@LP=82MYH;_n=SKdC>{JPN(6t!)-|r&@yFJ6??hJIcq`wor3sn}<&x#z+Z7+wu z)1bRFZg-@2{87A(>y4rVv=a+K%8LQ-`;ZXP)P4~!(iZFECF_^6eNW#`lsJ*fSZ~h- zK2skh)}Lq**dLigE5jngly%{D^fD4y#1jJ(wNE%UNhphS^a2~?k1CFromdN%PteWL z3LO-F$_bZf-uxlFQvRC2(B@y-3)~i_C(K_kc`-i1Z(cGEFb!bnCQgj*Um8Z^CQ**g__ z3iMIPFSVi(*Jrr_i7jRDUM>wNPL1R_`e&o(ytzVb?h1{@&Q~KvyG*Zm-Q|4OQ2$2`0k6+RYO0Ijb0QMtxYJK0kwma)xg~KiuNaw*K(ezR1DtY6UhZB_TGt_Ddr#W zSlN`PuSP0Q%}`ow%Ha((L3)Es@>N!&G{{Gck}>j$4igchB@DQ0uEyez26H9a`k-G^ z3D#q-39AcaO3=LyUKYP3m{GVd2pM*l?(9iR6mg?kD|R59&v# z?d7nI`heunLYuyy5$6d|#grK{ElQ&>4GlKOdtVHYbG-O_)1D@^(TiUuY^`lPy~DDt zODR0^lEA7$0^2ZGGk3f#)H{wn98jQ-FWsb3j7NA)X%qgKB(bR6p!1|Km&`c2Ku%wgz+5RIA0$Wu(Y zPe0{8GDZ3IEA!)XS%#w) zMcykSoS6GxnR5S2W7HCU_%F3>W1=yuF=13rBXd2;@vY=gnL@*9ApHAFBg2wmNWXLY z2Q56br{Y^<&=8Ad8gMHnXz`UVJmd!_D!>G7xcGiK`2Pz-@uWCX9LS(HL1k@ap3f}5 zX@R^2^H`gR8H$inJS_2Da!Y&*$r9hwwp7&ytp|mG{solHssG@&`Qxl>p5H^#WZ1H3sbf4F$agS%ap7x`57t z>VP(a!a&bJI1q8Y6{u~iUWNBnSsWG+JTOOs)AO6w4eu| z;-I;po}kO1MxgDWXwVx_LC`c%XVBjud(Z|@DCjAu9Ow_w0MJcPOVB>hZ=f%rqDVne z6D!qh@Y&#=;GW;4$Fuz~6xv0xtwU1AGQ}SMaXj=fKZ_*9ET&z6pF2csO`C_;c{*;1$3tfG-7K z3O)#Y5cqBI+u*IiTZ10}KL9=od=&UM@NeMMQ#gUtAa9Tj$OGg6(t&7Q$PHu%3Iy4L zyg-hiSdb~GEvO2}4^#})1Jn={1G`Kma1jrgx9%KS446*{10?|)#P(e^RP+m|`P<~JukOinD z$kT5 zPbwjE50qkPFO~66VYsEA zBK%VnKG9Dx{wa>qq#qm9Ladl0xp_Da76`u}T$VzgTMzxO2L13sd_#4#2{u^eH8C|Y zH?cG+U}9rpYoa!BFmW>RrU=NeWtcK73Zn#mO5(>BKc(&uuUHC(j*={Mdf# zPo6ur7WQo-a>mcCXik3|FN%0l{N%(-nGtikPq2NjT3*T_{HICvf9tz` zkD_wgGnd~K$oKwhu|WA>2OumPZHBB($3?Jw8Ua;^k}AcwU!{juTq3mo|7D8EHniM0 zl7S-}$fxh)?}J^L!N2lNuGd2+*H6)r4=_aU2mUEbT>qtic8Y&Be(4{@@0aCg6u;q$ zf4}|OKaJmi^wOxpi7mg-J!sU!jcX?d@_l|P4t|w>BhRs%#(QEFSGCoV(Y}Fds6qPq z*lPwT8joU2dt3erBMW->?2WY0?48Cxx--X7;r56M_S7Asm74 z!$%It_VDZc^rM~fIQNcB4}{hm`d`Y~A4CD?@k3->$%<4H8+8NN@?T7tPWE{H7SZTq?z2c!a_v^{SbN1^=PNH9T7@70=3AXPvN<2?xc^dQN81Y;k z%W}q2u__f>^80qi-#evOz1={=ck*aFCGEAvb7}J69}gpYB>a2 zIE6>!b{Z#R7ozf<(m>D4A(F(M!2Q6T!L{J6!TrG-fd_z>0!LI-?Z5|vcLomzcLfgt zZvq|)ULKs{*bSW0&=8#Rwir0Yp&B^F(+zwGxE(mf%Mm;hyel}Ba~p74+-VCQ4ekOy z6udon40tne%5!&c>?Tz;29F1C2|fnAIrv2Irr-(Soxmr9HvpdsE)AuT%*>iX|4n&7 zCYdqi1({UF6lXFSj4cFIWizI7Cu3Pl_(yp`M$MS=kc|CW*1Ks0EzDxTYdSd>KaO>JS+ldl6r%OJvlHseY4j zWK3;?j2mNWZ)Cg}Q=KCd$XG5Y#xkb5M<#(W)j=|ejHxb?NoJf+KvgQ^IK~-_QT-H? z$vBqrd&bzAtr(j+B7IcH$*37qUqr@{@dyD`9*oTy2QsF1P9}jd^=V`h8B;$(CWSH0 z-N~F_9Iqhy&a{XRb}lO>i!rr5GVd8v-$cf;uCPyi85uQW>chx5Fs8nNj2mMU0af0N zsV$RR^<`vI7*7xo7b}bSOk|wNSiWuFGp@pN8wX*Z`cg6uj4KJK z@?eae%!&zQJc)5U<0*`1GNwL=OcLXg0;-Z3Q(s6Xjd2A5RauN97{6ycj$QIqb-2?3$)0dl#7*O16KA54#lL5ZvG&9A+%M9t|r3%H@X&= z9K&EyHd>j6hG1KnSf^FChUuU4#tuJRcol@kugvE~oD}!U{F&Aa{V+9*2+~FIMkRV4 ziipdj_&yQg!Pu>*3(|=mnd3p*Mm0Xlbzq8jD&yxIWh4#D^Z}F&xSvYIpWI{H-HRI#2Ki_8^0m4Xe+;VQzU0WivXB_s4YiCiTf zNb@P$gn=0j7p-C+mtNtb0qoDE2#4Yt63!PoRvmyvds>dx57OZx=XvR%aH<$l5#hMr z4!2t=*`jz0dzd89mB{R&)MLo{A#9OEgu^8nQBQbJc*@Q1~?xbVC2QNV@^GFpirhb^N@XihyKRj1TpLjS_3L2xf zL3Z$5Mk$BL@Lc!=44|@#N)AWH;es0)Yspemf>LUZh)1}uZ#4DgdUJ>R|JNtfTpwLrLBxs*2HcD_~=E_3bM$z+P3{A(wl_)9QkBS6{D2WuK z-)};8aL!w&T&bhh$NvZNobISqpi1iPMaG5tgyZT;rMU=I1Jzh%AD!r=lzlug5qM1) znu31gkGv=6NAp}|>@vtOZ>F(=;hr3gk1q~w1Ox^R4h{(o3)c;ah>VIJ8WS7GL#m3! z3tJZ~kUxLEe9B%4v2DUK$1SVy&#}IEkG>vTCZ7D4yahjZVjj3o?2D1yjh}lk_hN23 zN%-R}-7(iOM-Ymkx}X6?U}cz$hIs_m3&_MUCrma76W1`OxKjSmc%R0g6+x9i^+7bI zrg2_T5RGRlgBpN@&-e%Czt2bK8WqcyDp{g{?A@l5NCQ3dhv;C?3Jo7);cPJtJ_hNh7m^(4IW8UzQ2w%=`e#_#X^Z9u%|Xuqr+{XT09XZ*K@@#NyPIWfz%J{!ox#) zpr4~Qg~)yX5YKySf}&i*BXY@TR~@YwM55sx8f9QFRaO6Wg&*hI^;u;bi z8R#Ky|4{bowNdVkqOMXgl-Zqvps0_C>y2Y7GGg78>v~}eh2Rp6t1QE!*pu*xF3Qm+ zcF+05opC30(jp6u+##J9UAv1HAfERK@(p&Ot5X{{RQz|v8^PUh&ug1FH@d76B}YLZ zy+4tQ2*5v23IzOYYC*fhZ8WT07mj;*bh}i~}Pq5bI2NHUY ziuogv60m0oHlltfb@3FjG7i_Xd+$yd&alAQSGjqPAGVA2MfqSWv8qQz+|NXc%kCJm zU^DD@?tUB(SmW?=*Vo<{ypqT>+6Q;T8Y-TAp1U5gb(IV4mW zf1%Vz42GnuC`$BR#~FL8V{r|0F5PImcxhe>pIg`Y1=n)*K%v#&Wlz8)K=D^YEZ6OMUB1#--W6M8;Czo5Wa-de$(O z`qyN}QookMSn9J<8LQd<6O3uxN+yjljbX`TFs899nM}qs79*3zxT=7vY{pU_{hqPZ zzpDC(@|XHeWc48dJ*qO18u?yo^#%&qLGj?U1z_>l*nT*{TCo=B9IEisb#%maNVVumk zE8`T#9*k2N_hNj4v3x(KG49Lq48~%#i1KGF^{?xl#5~J{JAf>f=VAPwabCujeMR}3 zGPY%m>mU?k$Jm^)BV)P_gp3V_b`|7vtKD0~y;hj%Qq#@l3|`87DDr$T*pCBgUzW8#7L0+=Ou^V@Jl> zjGHo64G`&V#@L2&bH-}Mtr$BnZq3+cE^fpI&=iHuztuVLJt zaSCI1#wQqeV4T6YBjYT_ofyAo+=a2_K#~5gjBOcvFt%gdov|b1UX0xs_h#(HxG&>C z##+X)jDr~`Fb-jy$apm4HH=Mo0FuJkl<^71be#~H48~TBvl!=N{GM?E#+HLb`fV87 zGA_#4j&U)@j*Lq%c4J(cu@~cVjCG7_GmdB6oN*%KR*cs$c43^tIGAx7V-p@wWimEp zoXyxm4!FEU`m7k+FwVzV&A0$#2gaotJ27s~*o$#6<3PqHJV1+OY|1!+u?6Eq##W5i zFwVy~g>eDKCm5GzoWZy`<1EG|JivR;*p#uQMx@_@u`OdO#&(SJF?M8JfUz6n(u}tFJGfrjPoN)$Y6CO}zF}7m-o^d|LmOdiAr5W2Y zZqC?&v5A^m3--4#wo)rl<-s@~V{hr6u}-?LBJ9UY_l##s_l%RId&bGqy`6BMD%~?q zlkOR3O8d2i{cLHUvC3DZHy>jg#wHHJzM8QWV+U!Uv6HmlP}uj7_8EIi`;2wczN4@o zFXfD9N_h(*Pm*%R$x`klxefV7!&(PK?(vmh%`n zZ}VXJ6zM;QZ^77`<#HZo%W_MW>sY>=aXjO{8P89b<&#PaiuJs96)?9Dixv5xU6#_^1| zGoH!#Amb#)ml!8AUcoq(@dn0ejBhi}WIUU3Hsegjsz8w+dl=g=KFe6m_zq(S#@87; zF}}svgYi|y-i(himU@uNjCCxR^JqJ6-%{@p&+-tqZ^?40N14g;K$hEa`Q&4q#PUvz z-PnB{#>p&?WbDB1^D|Cm`5eY+j8`(wWW14aHsj8WRY4+ucQCeLyqEC_j*rx-W{hoEK1RCd@C!3mv)q%h)GM`S?7;F# zj04&K`iz}e9>-Y4@~VtISRTOmJ%?X~u{X>88S5BNXY9cK)nXja@=(Sz8INV0%Jy3_ zPGb24#>p&iE-}l;G4^7)1LIVd|G_woaSY>3#?g$k8TVuy$muP@SQRYFYaU}8#yuFT z8P8{|WA{ZFJFt8j;{=XxW5!M_AIUhD-4|o*!SY^=<5^yuu{X-c9k7u08cs1i}#zPsaLPUNqW}L*~ zm11ne@_vl7SYC;-n&p0s9T@Lt?8NvmV-Lp3jJ+ABFxD|X%{ZR%amH&n{L+kPvb;ZI zIc~qlIEm$l7^g7a$2g7gD#lri7cfrd@X9b&g^K)I$k>MQ0LD5lj|Pm@EFZ==gXK<) z9auh@aU#nd89T8&o^cY(n=hV55poXzqe#;Pz;KH<_n zPSMa=8Zna6DyLxx3w!>`X&yRbBm56!`+>@77dq=B>;);O zVCc+^cw+}EC!y$Ujqo>&v5v8h?MLwQ2=*_K!--T*?a*19AxeBBl~Xlz)<%rzqS#(E z^B|;%OfvJ`>R1tkO^jY{v7{6 zb|1?55zO|3*}q6^2p|*9{^E;D3f8ed0US;g<0y`QFqcQDK3_!shVt_OP9NoWFno+e zcvMn;h!6F>R4?pN_RdOZqJG%pmY4R7sh-%Y+HviW^`!^yzYvD%3)P>#jH%w(E8pW(-$*WM zGu6K+1@~b4RR8R83ylY3$`^aYR{Br%(H=JtNdLpoVhGD|D%DSWxR!FNr<7mPJ=Irx zAZefKEnyiys=pLpX`kvb<-g1?s?YW)4e3ACYm&?Sqxx-+n>XAz{#4HiOaG|8Q~acV zRPQN2+OmDB|CHZ`@}~T3gL`L$q4q%G$^6$U>1(GCpW25#VkgHX)J_P?{H69n;mP<= zyRnCDIj^AhL+R_x;ZZvx+!ud4!EKbjf1!Lc)H`Zl_HZTBMfU9BN~R-L$rl42rsTT; zQ@b>_PwkWHq0Comr&P~mxlwzibjWyzD(UR3PiLf34-NH#+BL;b<|DOls#mgIP&+3q z+ZDBU!ZLhn_f#&q^MU#SK}~bN&SQ|rv4%)7VSr-i~0{^d8ktU2LGvF zF_uT>@{jr%O1JdSS4n4k)F@%7|1mB{(GMAX6#Ws^IFWOrUm_nx4I6^=P|mdBk_l7t z*-);bN;!4W=d`vxmJM`6LL_W3C*GG|0Zu<5m^2u2rZ;?;V`hHC0lc9Zzd~(sZ$4I5#h;$mqL&V>Z zP8lx`&S4R+PWpBv;^nE2r-)Z4qj*sH8NwCuYOjyCjF&7g(f_tFif1UsB!(Vdgx^+Q zpG5eb_5Fej-_So&_=fr?!gta4e@2;J@xHE z$lK&{?~zO1O<`H$r?;N5eR^vdV>xP(?&FNoOK&gHoBJB|@WCE$T7y4g+)kw^j2Nf;>hqc6Vh>;C{8)_J{V-|~M)Y&! zpE35;mz$8&Ut@U)-o`m`v>wxZ!yfrevkt0XG%g6>S|i)125);|MEmp6$5&uEYnAqW z_3;;SLwW=b(#KEW!TNF*I4qa{I(_*yk3&wKa@8mh%`{j~rF<&=!Zzyl!e}KOH1P;{K8-YV{x1X{5Fn#$6xtx8<^yrN8 zlhUKhl|G%m-U|0}RxaH~=aLUK@{h*3S|d#3Sn@>}F|P>HhbQKVQu{#q2O7W2*|yL} zP=3q$Dc+BU`XjN>7D)T_RE9_I&k%im6!t^)`7Oq^hWLqbx1n8%d1{cpe8qgiSWf;^ zyA?)^OQd!K_c$oyc&SApOzl;pufJkmC$$ zF&_%h=a-nj1nb*}m?s$GFXqj``uvjPdTB$tqR?>LcM|1w$Pm`G~Y6` zM={@%S{0I0e<6J*Oz%(nD~y<@7|TU_Gsp>t>g%7F&(U9D#5`YWp@d$_xc-Q7zSLHc zoWeJ@PyQSF12Hc%#7F22q;`w$lA-$Uqt8Eq>8~(yTr7JGiDiqIShh%^caYjLI)6#+ zM{3PzJVKhq46AH=>uUJXUh;I zHkMP4${5M zBS(Z0dLNzs{VnE!;;(Ufjh`E*SLkVmA{N33eTpGIV!TKFiRfVrSkzdFrF($`_3;rn zRR8`GI8xs~2ppv!#|iz7A^e}6(^+G5PRESnPE3Q6rXD2}@wJDqR1#G3;mAWO2`Z;B zVA7_A;9gOCoE^2tN!Q%xN8|ZC>WTbC#QClo6%;JP6NjJ+8C|kJpq}_!@9E zFd5@`y=VV&-}|ZDC!&0NFieXNLTJMRqLfz?`7eAi{H1VGeRBFQ^XEREOG9f7*}!t{ zOYUTR8~PgTQT*J1oxsT$+nZx#&kC|+U^!-x_7q1(f9Sc5-;d+h5YMHd_&FKblm1bD zMj6>N2Tu5bJ+hzMzqDNT;!BD1TJnCk|HR+3eM_|{?-Av4a(T{7K94Q^KlA@{Md9Cj zc4x!*L@CGH#L{LnQY&V z@bLkj#oH`1J zWw~QXVEei6qt%~VZXba!#yk5f*I=S6rt`qcVe0Rn|M=W7pYK-Ap9au(Ui9aZ{||fb z0oTOxHT*9{!5+neh#D0X3m6+B!cM4y0!BnZQ3<_Bi4+BE?AT++jvYIC^@<%kcEo~M zBZ7L>tFdE$&)J=Y81cFH_kW)E^Zq}d_Z=O+IcLt4ot@omcF)dey+cfmp#8r)J~MQ- zQ#kH&KraN`{yZ%^q2KVhU?M8)j6gI6S&VuJf*n$>WrxR2)W5V#|Ce@ImDpiDFSP14 z1euBawS8#k0D2*yovac&+z##cFEO905S^<_LjDsj0yHt?HmDuU_pGL>-Rr=(N zK0Ss%zob%@QT<&iD=9OE^LBnz9ztnM>s2cG^mmjh%Gpu8K9<@G=O>s$H6E`R6#Ze< zu&|U^VO=xbC2~A=9bW#Xa5Rg3B7*q4-w^SfYsY2KfLb^cI zYbq%Z$DQ!~ZWY^%n?pke6w{1CdB}Xw3jy=p0$D;8+IHIG9rb0uDbF;nqCB({gRDEA zP_JDc)*AqJVju=g7sjWqo$@z!+UFG<$G0l6!+MzbiuR$M2xKwpAqe&2aqppJhxbiaw=unab6a- zC+iw7=bZgnFPyhl-r@D~V?1wV@szCPDO?u{<$1K`wS;{h+Fb@ z4l8*5ExNr?bo<`X?XsigtEKNLF=Er zo-cpM3BEpYKF?U%?*TL&rsj@M?i&&Vljd-TfkH7bIx#s#>vGCBApzzB%%JVmy`B?W z@$J{WF3kLmUflLK_P^1K+x^D=H+pgV-`M{~kLO!FAMVvUzERHCIlcuuW<A;5{TsUy&X+2QYmTpc?s1M9^y(H_gf zcB4+vqfXGHoe;J4LSEDfpRpXlMw_VrT{N|>{QMGS!|U_E^5arnl|TPJrS_>hdSRTa zXg;w{I%7n?A3E~oUi`wBTYfp-2Uf;~c6tY=!t7Hpw7iZqvL;){c!ff> zo)W^(cnecsxd-E%u#lbMCU1fqIB%m1%+VU&pP%5As`}&N3{-{YF#i*0Docz`fce(a z7}_3~3<`dKbJL7+W{hiEJj?(b3QBGwT=($sFr4U&@sE!8^(&u@t776-*bW&^{Or^0@j;RiJg!x5ZjTfWrzDwF5!=(u+IEANbkb4tQ8#}R9-}xWy$OFTl0)< z$J3lrV#Uii_ZuENLfr~}qCq&ueCa&QdX|r(~FkEhHrwChvn>uzmrT{%d*V`d`X}bx=~m zf63qp)5+o!1UH;d8B!~bbMJ((aM1JfDV8@-*nYSlNAK7DoCJCw=q6BNL$P!|2k1ff z^Tu!pEEDlcjPHO%2VE%&nJAJ{S%cmKekzl zf3R{m@#J*j%XufI)^@%2m?wOs!36c|pFO8_es5?tC#UC$PY@&HKPK*SYBj z4~HE&cD~E*eODb{yz|Uh@9u53+I`aS+j*VBgPojo+>|{u`-^*acMrf;yB0tmVhj#jlp){Jyn!(A4nm}Aj%;sASxlMAZ9|$ zhL{U6AEFwf1|l9?B8Xy$5{OcWGKg}B3W!RGDu|g7vmxd}%!jCksDa49iAM}k3Q-PG z2{995E<`m%1{y4eD1|78sDzjaF&Cm5A_K>@6rvJhE<^?fh7_U_VlG4m9vDg?Dk0`V zWZ(yY6rvJhE<{|kNC^=a0#f45NOIpEA#$CE zFXq;RXacc5#0C%>LTm)l6e8|@Gl=-Y9=-&JkIQhEG>0hWe;*)!H%w9_BY6_jCKKK-R4n?R3Yj9PGrP$AIa$y?CfD z(kc(zllL#m!*ORk{@3z!>qWbO-`J&sUI>^^`5U{7T6S38Egd_?mLIQUXYk`fxNgwp zEjkYW)BCL?Z%{q4)XtUK$!Pi%THe1szJ%{lp+9D8Z723e zhF1H9afm#uW0&_EyB9ikWjc1ocK_M=PS~FUB{cv4)cG%umiKSZf392k{qeu+{8v6- zGaWZyxAFD4Zs#eYd`H`1M`huBE>PW_?`Ijc(|vB#f#&<4dT#WNwo~`HkptBW?fSRR zjk0Jy9H%h+ehN4qO_deLt#F>k@hbtn5YSGlWhabhv>T#jhsU>~5iKQ`3y<#dSjfzeVje^^u$>Cf# z{citfz;=o`3;rIm+@5cb@Vi=Qr!Gs5^YsdPET0=UTK$dtMLD^md}03~vq3Ke%$K8M zmrmOeR?OEUoNopGr@vo>y4pgMuzuZum){t~l^iF0%KzTK#_##<3{8qtSJplpyBPkd zea1cc{ipkUGyOMur_fMb{%&M+0xYr)H}k~SVp!_R*U!&W3^$g7Tky5QdZWQ%;xPUm zc~EF@QnHXBa;UsM^g9ht4GkBT@DeTO=dF-Yswn@-pB6o(@okGl&fk{zs70^ZPPAeF zl>c}BxWabnuJa=3e=Zl_GfCw&|UK9Mh9N@Z6{ zQBS@e4=Q_6$|(IP11N`3$|=JrqbOac@b$z}SwWdhnMyg9Qb{?5GM#cZrHXP9Wd`L+ z%1p`)lv$M7l)04ol(#6KQZkvepDC>qh!|6c2SBcrId2YbjobXTa?D@`TSOtGRjoSEXrGyWt7Gn_r9)qYR)_ zP^u_{fh74ojLpw-o578Q8 zM~IdXS;*i3nOno>u@Hwr#2_CT!L7R4h8IB&(UGz9+Awllp)MgpFk|GgxXO+gm*Io8 z?jloy6T`SPId)cjWQE;G+|SS(pijYvyfj75?d&&w<9D*8%X(Il<(|FTK)&;$jyN^SXOX>}U*TS{0m zESZ>`k_eB3U^mI#JQz7%4hZ|7->>DPg6?N3SH3rJ+zaEG-yz|G$jB4o;-g`0%h=eY zXdD&ticaE>5bd3c?bA&U9Qu=mJT5pMR_zM=r%u(itF%+GzKVYTrROSo|0g@4|8@FV z+ZycY#gw?>p3;5LNWUb+^Z3X3&51#+Bx^laJ)i~VlU;6PM%Kzzj zPv%~Y&^qkt`lGOYEnAAA_zF2RAt-nhT_g_lVm~;Kh+WGUJEq;ih@J5?;Sw7R7poPi z;^1U4{}rK~?u73<(Tp^U2Q1thoERFFrj?nq5YtDw;bPvYP>c>H6{n%{`(3A|HN$3e z0e{!zgRK3&5=~;@USm}TF1$pHK~<)zzR1wc&8-TCZW8WU2xBF-lLf#k1>GeQf0+?% zu-F*>GRE>KIRtQQQ=~#LHUg~?1B-A%5?JGZu8OKkq~N?SgY?2BPP=ZSbB%N)NP)@EJkdD9KAEXQ2Eq(#td7*0_9XN}C$b z$DUkdxx*8mwMfnG-S%5^@mTPnyW6%6Ia|}U%KONMhp+nX+W)2PoO$v^?YKHx)SP*! z(T2IZ25wo?tE%muK10<(ca_z*e%DBg=4Rz9&4#xMg)O!7>b&Hv|KuCay-R{yZYgpU zIUGrRTRK0v!Jyn)o0`6eEovva_87_&O>Gt!+&4bD-568zVwqw4uJ<~=Y$FR@Hsai- zhJW>*Yh`2HC?Vd{ES~#SE$!S|y2DVG*zD7dtBcwmx)d0(#HQ!EJL5iwZ|{G9)QWZD z?EasQo!Mr&sE_v}LuR7&$uIBnTl&hZ>g<2}#>C&GzVqF2Lwnp@)_72vx!nThX8k{= z9T>H7bny56^Qa)&BN1OqsQsRe-f=4XqJ|;VIIRg+;hMoC4JJuhUC(4`@J*nPhV~9 z?&cj;bJLw~^A}n?FnJLrY2&(g*-NL1f1W(AAMmlo!@PQE&_T};9!Efs9 z@LyDSpOT5#*H(O`;B?`*II_{)d;g{TidDBAof_`uS(O_zbC15J)wE-id+ zHRbt|YomI4Hrr|4yqDN+$C9g;KhL~#>Augj+^7L-heq$2;ZVD?&a ze`m;xtutD_y7y(>pCzvzHhOa;qKh(pZ+Ess&awITw>LHpdw1O@=0~^MF#{v(AGjku z-?Lq6)QZl-i%#!)e>ge}FC9zX1u4Jmx;o(REOGA@W&TUIRsX(IZ_K6+y`vW&Yu48M z)Y+{CH*SqQYkRfkfZGdItIjUZy3ohcbfl(Mwe+ly$)e`=U+a35?wA`oNc7~w(x=gd zt=Ytqz0`OH`V1Dev@v8KMDy4$8lN^h-de zNjV0M-MkEXobztHojKjSIM*v}t@2#YtJb^!Dr*@xZ21hkF}E70T}~W%CUwn$(lj4~ zMJ3#+gJIVGb$v)|!nl$ZPl|eeTAL6us$bVxXPypfe?Q>9!`sx z>y!QW`-iuE*3L`1Q>|p>%f6Ad)->31bKkxXwU^i>%|GG!{NmE~L5qo9oezJ^7uWBe zdi8uw#KSei<#pdfsQke_I_tu(P&WO`3 z%s*9|=+-;t*4DzYUJs2|Zd{SVq&t-0BV;()Ex0avZFn>>%(Uil+v#7nrPgn|tKZii zOP^adkhJ%zQQKf`PlxYT2fwC|3UFDSv!TQ>>BJlNu^A!B^Xjx{d}rsM>uvVbmu;Q1 zt;aLxu1l6~dGJ8*`?a?PO8vCV?ohhkij}h0JMNzCu*1==yZ4!-{K&XxRkK#~D|=&b zYTZNMO#4=%!YxTtT@M!3yJBEEU9rOcuJ2RdJ*7Th8X0xmI<(H+Fw@?)J>RoenuWd40MWTV+;Wj$W1Gv41c1Jr#U1Wb3Wl z)9*j)k`o-IS#)IiMU$8t$LCmc14d->)OPfl)omNTt4=)MUfHy9)cRIOH%tm#cd=ul zsM`eBRY!A7PGtFX_Bywt%j&}izi%JexrLWa=SwE+-ud4Zwnak@O;gjVkNlSom;6M#m>Ns)hDTyw^Bu zm;2y$H!t7SZ}7$ywL4U`Eoo*YXF2=g+i% z5M8zV^c;)7t1gUq9`D&W;m(|eDU*_i*)ESi-D$td_O!EA-rTgE7WdJgfeCXuzC8WL zvJNgqW>1vsY#cufcTDq~STJOi-S}s@IRKL1%zDnVSIY(ldut$H~_1PG2oV9kf z+q~pFzqw!i&m>>Gelo{7KD5aHV&J}Re|F$ULp+@c3 zbiBW+CDzA?W*iyjFtGcmM|SHkIQCs#FtNkxj~kNDemc4IiFu4&NznF{v)&qgevy7- z`|-i-<%_$fDoFEH*W#?7)-)a0C}C0bu!kMyhI#Z@yST2pPS*g3Mtc{1@Mv?yzx7y~ z+p|(KRmz?wf8McHd0dGbZ&+fnOvcqI{LzP9X#m$jhSeB7!&;19m3oX`RZ~X4YBNUP z$db`Fwq^{ByD>mocm{lrgLs%~YwG!c?g>iK$Xs#Z;-YhN)U-CsS2) zl&M>lrt6(W};QkY2S$3cYHk>3Y>oGxe%BKA>0K z?3!NnCNK4BG^wUv!`xE8MpHbGgh6}?-&~?L43jxckC8gpVU$ZU;Cu9a73Tc%p11)x zKT15zrcklk^$?i7AQA3$CNV?cN|66NgtH0-jWE*zuMgt%I0pr;m5sA#1VKKWT_PF$ z4pYJ3FbXTt3PE5Y zIHC?^91oa=Zb(8JmWz3j`1}LQg$oQ$R~Lwv#u!oG0wUUWqp}l~U8szQ1m^Lj`u>#u zKrA1(8S9RPh~>mV6hl-%G>4c75!paO0Ng(oH^B-(Io#D2nYW(X0-7mh6)J2-A|U;G->I1Di0El3PX?k}VH zK{??!GU4?M^Mel)cnDA9%4q&_(sHmR7&OOtGRm&>!w+mYgzuC%UNQV!E{<{t8d{G~ z9Iq`yTlgptwMzU0LCO6!R7rngo+_7<1(t6&r-eTn+HOHEE0=$67qpYMTd))ciy#Bl z&Nh#UAUmXWd)4D}JS)hQ(w}8bxjnB}SICuA09BNy58%R$a+%McUoJ0ShT&Yf%-f$X zmls)hF0k-CQ7&`&%jV_sLxTO3i0lE@dudCZ&o}Nhzn4QA#Prlp;!o zQvHdRPnk=ZNvWb#QYt8Alu}9wrI?bT)Rgh%t10s-vnewvRg_9f1*M!)N-3cfQ;H}V zO3g=FA7wseHf1KIic(3bpp;X}D5aDVN-?E~lA+Xmp!HJbQ|3};Q)W`CD3z27N;##B zQc5YI6jO>Q8A{E2T0dnzWiDklWhSMHQmI1)mF1K&N-3p;QcNkLWOS%`N83Z0Pnk=Z zO_`}f6_u5g3QD;SWmJ|@N+`uT6j7O>)V!tb(qTT8b1AcRm`P<7rBa6qD$6NlI+Rjb zLMhgvh{}u(HE(Epb(l}(T*_=6W>Q(DLnW0JI+Rmcrb8)}B{~#SS)@aT$^td7Y5R4U zPvu-4W>Z;UCY4n>R8m=>g359o%BU<*N@a--#Z(q3qOw4S${PCpE>KNnf%#Mxm`i1W z*;LNdp^C}^l~fj}pt3+Yl?BSEEKo{iff6bU6jNECh{^&PDwnh3sz9u64*!0z8l$gz z6LOoAt>$Z+XP)mw#AOqkmrW#O)3$q6!>4)>`RQtH)0XrjU9PvAEh_RS#?8lSjvED$ zdj{sSH1k5q2W62#M4c#-f5Ra8JrhSV6GzrKX4ZwQnC~)lNsNr_xxCoO;`tCV;c?fT zw=Kho0~caRGqoQ4XNh@Rv*LMy{={%mPw4@JFmiF9LDJv3v1Fb1*SDtgdlC1`*=paS zVZ<=3^cgcKnl!!c1pgh$&gj_J^Y#oO5l@x(nhlR8MUwB9#fdItT?1RAdOPIgk4sAp zI^2mRMy}JwG`Q$X45!rpxX&wsn4cX1{~gGb8Vk+VwGAeA>etf^nkA4G3gy9)>w}3p zccOt&?O2lC-q!43oq=S@%UV_@{xRgQ7oWsS-uEZ1)}%~s`zD$Une#Ptd#WE9*f4VM zm|HPqcKw_$b7%PzgH^Wq(FSqEqk9v1`xZk)tN>kqsjT)Ydby#2a~E9 zf5d)o+@Jhm=4Ngm-H{Y;X<=ZoI)+Ss+sUr^R zRRZbN|4Cu9#Awpo&cxuw#8A?|_3@o2mIji8k9zCBT`eP~(}Ll@9Z|NashOe|PkaxK z3x97DO(as!Dh7+fh=dDrQq@$h)Tu@~)AL+i87nrt(7Q*R6Vt+K$R3kcJH}S#khSS zac?v<`Kp^gIo0{IQG=8HNh8hZCg0Y|h`pQoQS8Y+L@}|(5Vd|UvT#2G|6R!L*s)#q zjwB?z&NTC=5PQ-n_IShCjH2sR4ce=*68x6+Dn1!Q+;8vJ58e<*JS?q$c;zI2B3>GhGj6(^Ji9xrPwf%mB=2~0??dBah{3+`8>KrEh_qkz?BU;B z$d(mO7v?_kBO93c`mWXG%QlB45{C9w@J_4UC5Lf;^z-l zekA_PcS(R<2pQj`?!`@RkZw28#BO32V!XeRWv_$*q}{yQho3YFC9awQ>@jHXmTG4L zi=Ifylg8f4KOPSvCqmP9{h1d|^xyToe)~W?>HcMEKtHp-L_fCh+U}Qf(ptPeSif@& zQ5m$BZlB~pI<7r3pv-$l(x3ay|&k5cP7n`k2CyOcL*7lq4<&d zG@3MCck)|NS}$Uhws^?pXTjuQ4}G`5TJa<@bYhZbmLJjgy*)>{D1x+Tzq9>>Gu=tA zfS1uzN@2e_w94(GA4}>fW_H&1=|__G`HPK$!%02UiFHjUb|P}o;Dj)%VWjZ&<0)c?0vKa$@H(H_EJOJSlV)!+(D=#(&}+ zlSa`*wqoL6_Gf#O4_+#tF7hx^mkXVU=DU+&*~=jEy@mQ)3pIRiOrDEceivVlT!Akttk#6m+IO?UDa3+?`ETxWUmM! z#W6)gONPZ0!{yGIZ4C#L7P(b}y!Q_$m-|{8mVAYNICbG!gnu-dB62ovF-1n~PTm;N zpN%9@U5*l8i6=Sr!SapW@Nm-eLEkw`UL*ZUzNjfr|30aGc&`Tj z+UXi+n`!0kN_`V^Kk41KBSL=ud^@l_o!@^G%Vqw2woyl}xSzt8Q*nQWVWfUvS_r>y z8KzTch*|L7eCoZ2*7Bd^B!z*^%*N}vd;db4;Qkb?Phk1|F7AF{g<nRa@4%UByh! zI~OMjDxu}6>G@e`zm(pm5))HvS7`TNoSkw?Gbb!Fzg`kYykExO_jyHZ;Ld((`Q3d6 zo+yOEz2mU*CfIOu8&uo^#q^3*H_*N#Jhk|LLFfT7qx;Va=6&S<>84aBd%zQd|LWfq zxI?e|?`QjoaBpAu2e;Gz)j#bLCNUNN^x>ZVzxgNR7Yp6+e=U_0CrzF*b=vgw88c_i zo-=ozYW{+Sixw|gnz3y8ij}KYugP4yZvBRhn>J@{*}84}j-9)*cklUQ@4i3x=NveA z=GGBQs|DAt-?&+LtLXNfyZ7!tP(LhwR8so*$H5a#N*~-GQbsMX;?b>&+w&^J8)VWL7ZnoX+df4}LaAb)zI0PKQBO;@sV}{4Z z#V066Bqk-Nj2xAkHac*~&|yLH-=~imJ8t}h|I^$5f4ctvcK;e&7n zLr&7G_@}S;@BRt-wYTTrZLf9?{A^sw`M;hXmMz9<+TIp1rx)43uIax33P$<@M8au643? zuc^>pNh5#{*Uub;=VvpB=Eu;yu1W{;*bi&lN7nRvZPW^W*T8iUUJI4SO0GAdpo;53 z-RFmp7lQCSRWm`TH@C*_b=5TqWJaWDcsun3GOGH-pk8;UlM;ik*;%>sNXkZcmkpN} zk|w)v7&SStlw{1`)h2h%3c_?rt-WH>8lo&}HKQndEs-Djeqj3Q_2foL-mbuz8_CzZ zoj(L5Zzj(l<<*`%WD7YqqVb4(&fAD@jXN`kx7k59h1AWJRNqBLlw@?vNXaG-N3VZr z8@`(~s$ae1hyHuW)vHaG6gvGuH13;@-nH3Fh-p<~)MOtyCF{N=pz5E*Yk29*0?nV~ zQoS*8BX92~Emm~8>2@-Q?C2tPciwh@gx=_FAGhEjS^IZ(`@Gac#N}+@JilRw$l(yp-IrQvKr};0Ak@!L9>othXC4=VXj~!o_OSU^lPMO;4ILVCc zc%$9^WvdxpCGN?H!t&De1cq?P-0qWaFQg?YbO3W;v{Kz=0*022Pa9haTj9S zd!Hhu1D3zFJ$Q=P?Opq*wDoB+O`K6=x9~K%zHqZb^5Zn=w;X}2 zFOrtam!JJO?;^Q-x|&b74;RV&Lw$$07;=e>d$BF^@bOEue=ZaG;H|#;vo90dL3c0g z&|D_n$MhLkeZUpco*fovdf*CaD%;@}TRWdP_9pPKj=V||T3xrUm2s7PSr&afBkwACyUt_v zkFu*IBJIi-r?v&ee&hp@d{6;dKkdHB;28zPa#fDK{ei@AbMy0&g7)X+7#1dFB>9z-!YrBKmlIW8WLsNXh1D(?LadMr<4H7%pt*0$d|SACP%E=VnQu2o2k@(+C|>`_Rr-04xzC!&z7>vb<^^khlNzEpj%* zc6zhdw+Nf%_B_(Oh zBC`0vjj-INw@LLwr7Ee%ZSt&W_>v8Yw@Gi~<;!2JyiH2715TKpy-kLv_UhdB^=%UP z^+@ezP41A;c^AigbiG4{y>(c%Fa8esB3ig4Ama|HzN6MG_3=AoY?IBayr178Z8QyD zuc?2Rc<;EhxzO=0DNFeA=v~BJI{xmG^P|0!)j4;`^S4uL?0R^Ygf&at8Cv}wx$&GC z|Go1)GUZJ1@(F?W2-|U{<&(+xh~JXMtXaCn zePTE&Dr_kav( zHt}$2j|XJCmEv=&;0NTy>hHF_(;txLZ&T+5?0P^F8+;J=z4?G-yz@7<`SyU!{9(EK zb6qw0k-u@Huceyw488nnwVj$2wBEAnK_4|)>DKy4{U9}wJ}@7`CaOtow?64Zrm9Jc zZvK4}GQh6><)b6FsmbJamL-Wt)gVJdiC3C z4@ud@>5X#CACkkb7A_vq@gZ?@w6GLAKP1m?yel~A_mCb(56RkPw+=l^dq}EYd0!`f z_Cu0zE^_bV)ep&sH=?S4os9Y!?IIr)$nC?da$ZayUWQpK>Krw@r&wdsAPzN(n)khaz|*i}qs&vpI#uiRp?`mT-M-hyHhrC(y3TvANj z7t5Bl`%p}diu!gbG?Q1mR5t)z{@Lf6S5ix5w@S1wzBl7vkc((h-N2Jx)AD&bGd_<~t{`lkU z*+=Bdz!5R}MUTjkj>8vrdG?4nCtRHp_~jA#>#ovcbj=d7GtvF&yrw1OnDRl~N}CcA zdHGZE8d3tsL6?5ZWhM0dP(pTW?Lv|hOUQ%tXIJ}AE+Ix=*G+D>sDvD1vxk;#C?Uzk z1EY`ZD5fv8Wd1}l?no&KZxnlX_oY(OYFT~%`}ayoN<)h+ z`Y%gK;~7_PH~U^niqd<%>si=xNPe&Gf_=NjVf`1ymr!V-bYR`M=l91>I z@6+Lgq%iLR+;fU+pu}rHA(+PhEYB|BU;koR!u?5s!u?5s z{I&3Dooij;`ct^yw~?mfeN4P&o_4H9&((*Qe>6W*aCr2+_N}JnVqF;MwX;;X@7hmd zeM96qJ@@D9T;aM^^MlV-J_5nt@aOWi_hrR>O&PuKsBz-+Q~y8kSN!kZj`;o0-G6mE zg2}wczaP)H3;eX{JdN2@pLM1gH=YE2o{rwjg&#j^9es%-KW@r&^iy1Tz34t)uTZ{m zA71YTD}4vS>dszt#b{o}^{`Qc>$babO%?Qh;Mpszv5pD69@jPZ0ZTu~;mi5{@_HXw zY1$j~zOeqYi&i;)Afujv_u=_l)A$!}V)IrEczGv-f4Ci&2mkQ0b-5-8?(}v5eGo(& zG@wE9kl)U(ly;O3lu}ApN)JjeNnbW;tvGKm&hf62>HwHp`4UND)ol<5ZuECS8K;y;rhmAC=?fEG_#}*kdAmcof*}vg?U07~61fkch5VsWKqw;` z{r#bga5RQ;@RbKFD}|f<8$LssFt>Jyuv{0GpMVn7p{>UH%4H{Sm=_iz25;|*bW$lp0FOQ<{%5n^Hq5{fke} zq|{JKpYi$tN(H5oGLQ1-d9;3AFBeBO?rnVMD-I~Enk&rl^-uZ#yYqu#etdgOs25l3 z?X18>R>-0ZT9*+GaC>vYLullULzOYcmKeZRn4%lKm zAK@{FE5nCFyTd>d+RU$7%$N92T#M`PZWeN2IX*KhM)I)T8|dE6(391Z;U2 zv=zVmFjU@us8v8uC4g->*zzl)W8PoSN_^SE{u1i?x!hmp3l#CyGfs)&?$NQ~PKxLx zC!hYF48B{3X*dl{aAJ6WZgwnKYQ=!+-QrW?`lrFl193PpO>B4)zYGh5*WZ}WJvPZH z7Utf8k6h5wyC;T+Yumw+0t16%;W`q7mK`iLQlZB*EEkMjVd^3Ggv7YuWUcmqo^J>) zSps_DmpJJ8X8J|P!Ez+wq0vdxkuhxp=zzCH#`D ze1BA=fEC!{cHuoI-St#Zhe3B;m3q7yu8kG^`ccqv^k$S_cw$_1JU0uccX)DC0$zr4 z@82S|?fEI)%X@;$fzu|T9Usd5rzX^=8tE(k`x@@=alw_!IFkzo4=Oj|MaGND&8h51 zWfLk7p>hi& zx1_R~%B`qeLS+joKc%uIm0wV~HI>V#9G(his)SKYY(gZ)P7+8@ijK#hTTEy|6366V zUJix?)CWTXM@SHeXE991Bvglnb3fIXh}Z;fvcZVp5H3$#LRbXmi4DV=;r>b}pAZz4 zrbvKG_6RV*^oT^7o+e>}(mFwmXM&)C_}c_SP&}-r6dVCF>_Iz2lb8X1?$&rW2ieKi z%WZ&OR8!!IOvI1dYVd<3}@V+;3~+#ubDyNA>lezCY=1vKQo=EqGw zr&jG|1XOsCAC%%aStR8y8w z+EI$%@%2e4JtzYx6_iR!6=f!+P)?4He2dB&O5^u*yC|iULVlkFG54mp(BFL(IA(nD#9!8om=?UNzyDpOB903gC@+Ph7VvF$Hc0 zgoz_k;<-~g_j)?5$TMD%lH4&NB^jXI0->C+@R8A>Tus4YVKC_?H+UhhQ(~kz7FOme;9IA|#B4%qnk;avUv{-EYudxEw0if58o zTZH{F62CviupDCwPFX3m*AKc8rUpzCL*en<-c5oj48=*@B?=f-lFnuIj1N{|ixQ*Z zszU79u`f;)nVgsqiv{r`h_mCigWFfQ5G3}SnCmZbYGd z!>kkHq4T-D_iKBwAE0ZT6BC9*!xho=>(VtLE*RQhKBl2xaaK{S7I4ji@{z+Nsdj&T)^7w))% zvBk|60@pvWvEh-yvEq<4=*FaQSPU{d<5)^zQ+3{yjhm`u70U z=-&erqkj)jh5kLjZ1nE|O3=Rtn2G*9KqdP30Ojc41I$PN9-tKcdw>%3?*WR@zXzy9 z{~lmI`u70k=-&f`b{s=W(7y*LLjNA10{we{O7!mm=A(ZPrlWrkP=o$GD5HN5kn`^W za{fI)Ir{eiHR#_1RHJ_nFdzMUfSi91P>TLNn2!EEKn?o$02%b}0c4_o4^WQ&J-~eQ z?*XdNzXvEr{~n+S{d<5K^zQ*m(Z2_%LjNA10{we{GW72O=AwTOP>TLNKsoyN06G62 zl#SY4Mp=gbJ-}S_??D;;doUgSdw^2(?*XdNzX#LNzXzyB{~nalzXzy6{~jQN{yl(9 z^zQ+R(Z2_ni~c=875eu8HR#_1%jRKpFb? z05j3Q2dG5<9-tWgdw{v<--CMe?*XdNzXvEm{~pw%e-AJh{d<5S^zQ+3{yj+a?*YPo zpA2 z`RLyRRH1(lP>KFMz+Ck2K^gsffNJ#b0gBMS2Pj4V9!y979w3AMJpeWO_WSdyweg15~1a56bA@1Js~@4=@w`dw^>6 z?*YR2%jRNc8Uk=A(ZPFcl3_W-idzXzC! z{yjkTYVhv?s?fg&)6u^NC`11qpc4IifKv4D!F2TR0jklz2bhcgJwPS;_W(r};NJsO zp??p`=--1f`u70E=-&g(NBg+34ScME@S32>pA28uaf0%Fw?D zC`JDsU_ScyU^@Eupp5=KKsoyN0CUm52gsm*4?u+eJt(7p4?u(dJxKKL0jklz2gsm* z4?u$cJwO%u_n?gaJwOKidr(II9$+^5_W)Js-vd;me-G->zXzy6{~lmI`u6}O=-&gB zqJIyjqkj)jj{ZGB75eu8mFV9Cl%jtRP>udQKsoyNpp5=KKpFb?0O9<=QG)(GAm^ih z4^WBzJ!psiJwQ47_W(0F{~l-$`uBh=LjNA11pRw}x#-`6ME@S382x*I4Epx~X`=`F|vC-d5*k(6Ox15{boIQWd z^mWn&V>UVe^UbsKo3dV4tzI-)`p|La*;X4G{@H*Xac*qzrjWIcZR2uJ%@1wJ=A6nu z{@&f1z4qa?wN-r^wpK)M=Uxe>ESoY)J;%$MHSb$6UQ*MBy>=vY`r7!GY?pK0m)<;Y z$?DB8US|2B9h<-B=H%Ejrfi)*68^ZXG-Wq5I)7&CVheWmbdmF&;5KZ>?d_+{-EYGd z)k;gbw5Ks!=f<@Qr2{(9cI~giykuYf&TLMN4EJY5!k)GIw(&<^C-(G`OFfh4U3NUvpns3k8Q&cD zY`)^~c}WkpyX0!ST?OWBZE>R`Yil)SQ)X?d;Uww8I*qNJHu}vw$0k2MOp94;!WQ-G zmgo`Lf&F@^^}_p%B|E6e1CP9EBKC)E)Q<7p3|R}M)Y)RP1?#xmZ{lr{BP*ZuB5KFe z9<1rEZB;*habR1;cRmwyny@XdOzkvG)Pv1kxw~|No+JC+rPVr*E0OY?JPnK-a!E%&z^wZ@j69b&e9-njRUeE&GGHs3vd6!u_vwgamB}w<$vaeKTL94Wx>wtVPx**-;15I`tp7EtUm0MsKdL~ zENjRb=rt*IoA1R|pXz$y&FWrkO1+1UXJ6J}Gd8?8>-NrumG$oFX+Oe^T`qSG6rT8Q$rc_q-`r?pH+FrIIeXWrJL@TVH+PMhJ)3Mh zyiI;JSGFkdsmX_8F&os3>5{CkaSZPqH@Wy;H`Z|1Xm1my75m2i7=re8YwD z*6f`a-`&v-99bu`nO(jvtIe7>S-Z$2+lTH)L-y0?FqO+=?ALHGODX zTW_}Y``$0sZg0W1Zex1Z#ov`3-(|WGp1UVo@~I@ zIt`+COWDms%bLzAa$vLO)fpq3<<1^lmi*q@*@I2iUplQpx4P`h1qZhqkFU$N)xTHY zMctY;iz{6!nc&GztEU?9cwiUy=AsF1!TW2n+gAK``BX>zI3GHk7Z9Ddf(=Gw@$48=MOiZ)ab?9 z{n0zmp~Q=wf8^xWLOm~5E?QzV=d>Fe@8WU*=0$+uPm8r$#kpzaE@_V|uVHoA~4)6VbILJGaTr{80uy zSfc|GMYV?YWs8~R`yKQ>*;_MD1oTt8vL!Qj8;|+ilZ_1e!}0NJAGWWfXOEpHYO|Rg zw@LomC1tPInz*(ss3p5`gxMFDrS9yA0jVR;tPEl&eY&v0+c%KS>DIt*me*jm!>*Oe zqdfvxlMXrNGndHNeI(H-X6G>W&IaZBwkwCS!$NLX-?~W3o;N<8up?;@yL8)~j-7k; zVp}+``nL)g)F`VYG__hDxndc8i{*PZP-?7Yc)l`Fd{&C7e&rtb7O z@@LIwPjKq8+n=o;-l*p4=Rxep#7>7S*Eq4hImgD#{NTpEZky(rT0D#mSS6~ezC48e z12;Uw%-~<>Ag*XY_;S@h0U6}u?>AEe0!5Ugf(gDb4j+_o^`cr z{C3Q@A?%T+L2hL~`m^VPR5ik02C-ho9`AP)`>_R=n%x~es3)6ZA6M;&n+rS3!L8tc zUOzVNT;7n<*)n!S(4g^p#{${A3$OJ|y4;;zTV}8^yJstUevq&ZfuVy3L=IzT4RicB zC(DM-GQHhX-N=z0-`8;DIC&uZ^+b~=r*`rV`AnqpOgI9snsr2JCxF% zJ-EEaRqxDUZ1R$&H}mxa*hQ+Mi|Ou-*p?3tY-^a{$@cBO^-bJkceeU~4a0mReApv3 z-*oMm@64u;FbuzZ#huLwu%0q|e-HLtpA#03yY*rpnBDuh_IWRMK>rVe*x>=JcasUB zb03+rXa8<|&gNDC+x_$1IbptDY`yIdpLOu?W&0j9>r`+30M_zN+t60coY+{4j+gR0 z0@=#v2h`wof@FCIj``VxIEvh+bCd_{r`vFjnpLYgW=<{O$b7H*7VWZ)9XLuhkKlP{Ge_yB`y9p98@}VpGxp(_ zy>1%E{M*MkD)xNhC~M#KJ=#fnC2-6)+Qw0o@PuRbc#991uCxo`C|{k)QL^U&M|Dc` zkC-ld9>h^me=SGJ+hUHY8J1<3t}2S+C@tO2%R66l%7j{5*x3yEc4BJ9U%K9AzVAKTuX4-^>v{GR&v@caJl#V%c_V;oA1wJ=mku z>Z-awm$QkTPB*LfHkxf@FA~jJ?arDVd%i&y_{Py-QpB-9-#GTu(F5<-eU4%~#ic!4 z@*sj$1}Zl%pJmJ5Y&vRtl9Hn8)QHN}a9&A)R> z+9$-6om;i9^sS*kJFIrf%B)*{Y{-?p%l9M?X6v*YYs97uW^?zfh+cDjFe_iM+c!%U z!!ArX*kbD5fvmx}vVarqYOzd8*&Jsbnsx@#I(u3Q$v_RP~OvYZhC{dMnl)d5bdkHkOr zWxEh|y1~rVhjZGp7LJY9tUR2+b}N3QoYLHl-PbMr-1$QhtVO-SCGB22v8wHLzI}Ky zfQ_zwWbo#FA?(@-f4^_PTFy>!9MJvE?Ov?o(`GZ0HTBpfPOf$vs}E-roEI%ww=0%i zYSgYk{2-cjYi9PbUY#(u#@;@)JwHaXwd7OUFDmk32fAN)fBSA9*6ZEMTR%DsV^@vo zaB-T28@qwL^x1nNmaVqtvU29#2zGq+zb4iCs|O3uj=1MJ_*Ni3TeF8a2;wM+;Oo!q zg?J6(8;Bx!NZb*kH^f+o7=(Q2pF0?0D#WD__d&c4@h!x2v!QglV; z0zYrXCsK7t{VuIH&Bys}Wpw@xf%3hgepnu*Fh7StVLlFlj4&SuM`8XBfx>(p0*`x& zEtgLo(?g&z--bZGmE3&>_^2lMyc>f+UeZkXnT(Q`E7ryocAN0L7N0X>C}`1T!q_5x z=`gziZAZt{k)~`u^w*(p4Wx(mTs&&;ZZ1{7ZgRY4K#SyV<4=wMd)Jmez1!Y@V*c*M z>7~1xKVN-)U)F@Q<=;#l@3ro*#^FoR-f?@|Mp?TbK1}2dQ-1^%Pk518^3i5|-Nb?? zUbP+v^m=UgY24N2xg$22)cgD3^+MxyUsi59mAHLWS(1l)o2)|?jg@`6SNmV=y$5_% zMfyK{qX?m>QA8uQ0|+FLgqsi`l$;ZKfB=C2Mo?343Zz_9Ab=(ID3<72u*ZhjqprK? zT4G1n66<1*Wfkj&9;Cfbn{(#edlQQ6Z};>5_k0L*zcbG~^UO2Plr!!8xaQi=FYWcO zWshAwaeJ4sM{LNScSY%;OFsB;a@Osw_s@wK`Sju6ufP+&{HXF%F8Hc@ewC}rQMs=2 zROPN*cwLwKSCp&DRk?qxe6ha4b3XkKt}18ca;^@%ycHkiD!nMzqwHMVCb2)|a{5W* z-EOOuQ@g~(@kP}oy*|M4#oAk|BXN9jqd2}; zKI_~uIKHUyoAO*}dc#}|X*w)MgBMeOA{**Lyv z9`oW;IKCJ-X!u7szPLZ;_Qg29xNzp}^Kg9e>AOLU()Ml9AEtN)wgMUkv`+gJ8^tb-+Ir5IKJ@x^UUQq zzBseL`2>zHUf8vCE{-oA`C$IdIKJ4?YvvjpUrau0$3`4qy#L}f8eiNt`;sqkd@=34 z)8cS^QC$D8&vATl&gEUE;`rjSdv|<}9wPFTPM>4F5Snt+q&Y?wr@ZF=Pv8blNvq` zdvlld*#%E8&VF>4b;bE7_uF{gE-Nu+&78k1*=0RZQC<7+8N1{@#$8tL1v~GF8Mw=; zYAUPpfA9LtomOkx%VF18;NK88@~HtkD?6;_XI?yJ`@=h|etRMZpM1j(YsJt{lS|IsVIB6{^WT2s+hNT-Vf~*kn6blp zr}Mh0sUvpCeT+M-d;5M8KdtKyE9$Ykp1pMA@77uM*Pp-sv)`=~{IB-*zxuni>*vdc zob=f5*7JD_v;Vd7ckA@8y|cc*@OP`Uck`;S(%-GAR}^&_d)n`EALH*yT;7wtsLe_|tuizgwRSjkw|JU$$GZMT?HR^B>!-L+<)+#(OVqw?2)S`_rk9ZnyY8 z@a@)~rmGJha>;h9Voi^>@8EvsN0)rt{cmS%w_1MucxPkkcI*3?ThD(jak~}$P4ko; za6j`$^w`$|Rbd~rS)=yk*1q#XoAuzPMMpjj z_2ah7!?rfv+-6N}e5m!Gm$q3?U)S{Pz^XR6kFm`Qp) zhD{v=;qKJtBx+pKfK;;wu0`EAzAzqEw+ePo-pV&q>I zJ$UOjYwf)?7o=UW%{u(GTaF4}y3Kn0fyD1VFWhF8R)@Xx=DclkALBObs@-E>ZB5)} zJ^SUP^P^7PW_3O1w$hrO+vGmRZPszw8;{N2xYc@n#P~(qzTRr(ti52ss`s|aeT-YJ z@!=erukuu4tscu_266mHssvC#rie#0`L1* zZ;|^Lw^*YVrH}db>@C(ev(I_vro1h3?r)2=`@+9{-+%HJ>*pgkr*<8=#hP~5>Unzx zZLxZ_ee+Y7leSo|zH-#peUAi8_c3m`kGZ=n9pst7Q8UK;p4|PTT{apKXU%vo2|m;C%zqd!)B{CHLUMpb(^i_ z$2>au>t&m*g6z{1-znW}-SY01*Z-cq*?M#F>)(8mvDw=3Nv^ML(q?P=Zx49~j@oQp zcFITn3t~50vra#2z*EL%>lk___H@e>^+0Si~`xv30S-ULh)cZDBdFMyQoOtsl>+0}= z5BgpO;dCG4ChNC}Z@jmldXtsf<;zW16>qZI2HlzU&Y7F67i$LZIC1tSYf{gahnG&; zWIgfhX$!s^waNPZq=mnpF=UhVLd4*y-}c*N{pIH$GnYhevg+USh8=(SCM)}pR|c&O z+hi5dg^U}aecyf8jGs5keT*BehV$GM;#h*4>JsazeZmipAO@HUEq~FioXbl^9!J72Sjn=@h zkI#9sXrr~^x>|qVvo=~!EV=f)+cP%GeT*Be1=+{l^jCAE_0_Yt)XYoVXbn2Lp>Nor zjaJQ$J{SD;l#SN+b5m=V_S$HD(p1=Ea`%mLALB;LPZu(7u+r9?KW6hU8?34|*64qI zv%z|9YFy!#bsMacF1Y)V&hKupPH#DJXWv&hSkb>uN}2k%4c52MY%DzI@eS6E%X{ZM zeg6jQj-y(R54&T7b=%!n)@EG4!TM}){Y8yeY>@jHH&_>ce8TZpEZJZ!tsHlG=duk} zSi;WqtMWHkhYzgII(fkc>y3|g-ShOU4c6$lyB(30y1_bia^h7-SR1UP)((Sz8?1+$ ze!YA}%m!N~-v%#v32z!1<7r?E%BU*REc&Go9zyG?W)vCYk z`$b!RX|;~ZzHn~m?^>-JCtb7J_^j0$b;q!I6W(vNMt}P3%(LHUway;9;?nz@VBBl3;+6BQmfVbtW%!4*4t|R7`_c2<0 zA0y2d!B9}SupbCt65)xA)MuMs>0b{UQXT&IQOAh$vAd^rD; z3V5}KrvPpgJRU+b05@sjNWVTHJmM6V5BXvIB*7Se4&ZFTN}gK5Du1grjPf^WI1O-% zhEe`D4P*Wc!_g0=ui>c>o~dChO239Ne+?Q&dDm%pGT>GXV|j%4aneI<2%ZEbi}Ivs z80F2@Fy^OD!W77*ENq(JMtv1&7|Xj}!#MBMsNs2l z*9p$>%!B>EV6TEzd373~(x2hM{PfT;@{bI_D5L%u5{@VIFw84>GL#m|n<5zNALc*Z z#`9^PadrT`KLFPY#`=oo(;zq%+AfrLjU7H8C}1)-0Iw6Q(r*pG;R8AU=^!nZhanjC zH4U&=@O;P}>MvdJG_l{JfbhD2@CLziz<$yGl)jaI)=Id->jf))s`5}+?T62y(|ve8 z2~W$F0cU;!{S7#OgWrC`^K_Na2dF2IF1B4dK1*5wsUQ!P7M>+70lvzIrNDD<%7;_J zldPC3y2ZB3=XY__F8eDS3siX8uMobV$1ZaTro%I8rEtawWx_Lue9Aa99rDBTMCEig zk2waWi{IE|>D8$&%rBl_#hVe3I+o7L>Ul;^Ztcbb4?J}lTrRB3^rEb7~U({%>K$J3ZOP)_9%F;Kp0un2sD{ZWgd{d2${CBiuEm7qI3*oxiZ_`O8D zJsHnZW4;;NILTvqOIv}%+X&l{EzrH{1cf%J4f z?aSk)3zi4%fLnynH6PDCIyD~8KjNuECr4$F{|fN)fkb+Z5BA4;Qx2tv)`c~SpHOsV zU<>SDDWwhlE2V?yISb(rPub$x;#^2O2P_iL8tbXU861d#8dZ72)AgteK6{AY)Z{0S z4rN4Mi-}(_A8s$4?_vhV$J3{Hf)gzRB~ni)IzE$WPzj*L;S)%Q=T-SzqN;^Qdc0$R zzt4%jq2lqmRjgT9KEZsk)ixkCEDQVsXnS<1Z9av|<)(5JC?~hq*h*rFa9s=~7q*Hu zpc&PE1@cj6Me)0*q2gnSVq8pxWh1g6y>aPtTNa8BhC4je>6u_X`9WU1ok2Z;@?tq4 z1-4wOB(d!Zq(i;1?ehH*f#HjR3-*4?h+hdv#}C#w?9-GTV;@%rWrntm2gLOHsM<#E zQ8+&SMqcjz2==6cJY2VtpVMEebn~d^L2Ks+rNhyKO1BW=d#{XdUVV)p2x<14sB7(4B?XXn>2i zXRtqxufyOEpZeiEEB0!RkC~iePo#HC6EOLZ2?Ux8O{{>ilrFV0FH>NU%D8>=%5p#IF&2ir`wohTuBE zeFWDF?kiZmr}PuNQo>Ia+#tBW;MIZ$2yPTSQ1BYT(Sn-<4-&jq@L<8sf@1`)6C5kJ zMeq>8>je)N+$wm4;5NbP{HrI4?O~*ZhYMC47a|0!jSi85Q-t0SJXUa&V4PFH$151? z6h29UvF_oMA{gIc@kteo@1Xdk3&uGkd@==3W9Z2i3{{t&BEd5S`vt4{zZ$_fCxB0_ zU^U-YCm81(@TnKfZy_+RAy_s#cp3zUNdvH2@F9ZN2tHKsTEU$Jt9i=91h13u&Vttq z?jpENaJb;`kz9UV1*`kLx(kk!@E(Gr1RpLqN$?SZQw1L>I8$(h;3C0C30Cv3M+;W- zuRR6V2>mgF>jd`_yi)M7f>#TU6ud_8@q*V1?k#wo;1dL|7kr}NHo+$e4j;w(I$3a} z;8O%g2{r^L3GO2}Rd8RynS%QXE)smI;2OdG1=k54Ab6$Vfr3{HjuyN|@F2l!1rHXy zPH>Fi^@3vsdq#79hX{@koFLc`oG92Uc$nZ6!NUco3mzdjTX2$Kzu=LAYXy%ITrYUE z;0D2_;6}lg;3mN-f|~`872G0tyx>;B69k8k;rve&94UB`;3&b91t$rfA~;p>RKb~o zrwJ|+oF=$N@C?Cqf@ca|DL7s5YQeJwuMs>?@LIvA30^07zTowOeS+HrFA^M{%=s@7 z94Yt$!BK+4WB`&RxRYSDuF^$ts)TnHoGG}Q;3C021lI_T5L_p?r{I->j}g3D@Ueo| z2<|O-t>BXcw+N0A+$wmq;Bb@kZwihSJYH~=;6;K{1c%9hDqV0V!P$bl2=)u^D!5i~ zH^KFSdkAh2+*@#?;L(ED3SK05onZJ720iNqcM{wtxQpO$i}Tx6aHQaFf};fY5S%2q zx8PL4qXlOQ4wC_1k>E~(YXo-@Tqn4z;FW^A30^I@hu}4WdkbDGc(mXa!C^9Bgq6cu z9GiDl1IQG{-2_Jn?jhI^+*`0$@MyuQg2QA$nJKud;3C1@1lI`eEx1nbXu%DF!wf1e zPov`oX)sbaHn$^*9-0~xIr+^uHcgkZ?E{M`7O2n z%&WNQ&u^|c3ycrm6NV4YPqAAjF4N)s2R``bjZcx#^R1#D2xU5ahsFozv+==qaeQ#@ zgk8qCa)6It=5P2kKG=M+OR zKR9p0YlMi=K4M{wP`&@4oy5u-GKQml;C==5K7w`<3oC%?{Riy@@kAtshi{piOlyva z(OzO<#ZJ9Xq1_;!je+o>{lr3O8biR{4&T9 z;+YbT_7w{=GAbPH4D+kfM|+C}r0CJ^5YLtPXn!b=qDMPK{i*z;J;uVCq~c!*+Qx9D z546u%kXEWUq>lXN*!<95Q9i{F?H2PV%>zh->CL4zT@(rJ8Rb7+4~XZ(|7n1##Qv~;=yrqk zBo<<+d?8&d#2U+NU=AAf;$WP2)iKsD9b-L<1uIqg;#)B%+2w}y4)dYpE~R`nC{Y3ec9ho?_+dSbwc9P$6Ym8=3f9wjyZ-6<)a79L zoqQ^})VB~=t~9&euv{6ooGe$GCI^a^E?e>n-cjU#ph|zk-!vA{vRtY^X%Arb@<(O{E$@-sS+aafu zZijO^)1`E=f5v(mIvuRB%0fAvIkx?9I!?RE=}fTmuk&@6E3O{~%0Clo5yiz6L)SA4|d=U$r8YP3Zi`YWc_Txpuwa^v4Cn zPY(#6W!neKqgqXr7y04tCw>_7-YxWD%zOJBjJv1!amM+qA+!tqQS-*CT~+h+F+$Xu z&hI%q+IH5VY#y^Xe4Thi2>w*CA^35@Ucn85Qv_clI9>3&g0lsGB-k(beZjSY9}rwG z_-Vlnf?pBbDEM>1O@h@rL9^huB)moN3xZn(uNAD;L81kFX0twS6&xvek>HiG?$JlE zSHkmDxU7?f2~Lr4H4aP{e6ECN3;wHMwGMcQ;2H^6^+&A(c9QTq30LErm4YvmaJ5c& znBdhCuG(p}Zm8B3*GTx?Lcdnb5`K^1B*AYBP8IyH;7q}92rd$Qo!}b5&j_v){HoxUg8wXdwcw8h zuMylVc&%X7zpoSAB;o4?e;`<`!*&(iCgJZ14xhvN`a*D|;C~2?68xs%B*9M!P8Iy3 z;7q|E3N8|SuizTNj|i?4{FUI9g8w9Vwcr-PYXtvI@LIv|2wo@nYr*RUezZm^G)clsBwVeV4iKCw;YEVgx_CFinG&8R*dyy` zae|8^yi%}QNAE7UM#8TbTqpQG!7BwnDtNVE)xWP1{1*vdEBIN#Y8_IoyRMV)Itfn| zc}ECdFX3t(Qmym%knlDMSMM3&5`TzsS>_WaJ|GoMR2Bs=Lim$@FN5lNw`eIc_JkINC~fz@EZiz37#c5Qs^TD zuat1rU$;qktc0(YaMf!^ivHpye2s+H2+o%9QG(Y>_=SQE;eV9iI-$1&uM_&q1+N#J zq2ddDg5Wj@Un+Qw@b51;{4_4#Lcxs^eyZR|3Flcfk0(m-)e^4u5eycbB;lokQw3in zxJKkt7aC+r_@xqFB;lhKmhg)OM@YC=@sse|1=k5)B6y|XYQd`o&lMasg7bg0;58C{ zqu{lI=LlXW_$I+#iQiN3dI`TuaEiz~TyUF&pC>p;;vXY8Jd@>_r{YU^FTs%#ewyGY z!7BwP3BFQrs^B{XX9`}e!iE2_f{P?PQ*gS3A1Am*!g*E!=7W=1-Z2thC*hX}UMcu~ z!K(!?7Q9CAZGy8Uz2gP1mGA|E8zj81;B^w7FL=G+=LNS3epzt%=`3%f;7Gx11V;(} zyWk|juL~}c^m_|VmGCnJt9kuz1!qe5OM?A^pA%dsc$JDT_+~{f>75{WjfCGKc&*?w z1xF=u{)P%(C*jKkt9>ddg4av<6@t?xev;re39l8LDd8gphtKEqE)ZNJ@}4L-Qo_#? z93{9+aIMgvBsfXJvlN!}h6zrU@N)#KeOHFyObO2wTqpcb7F;CZ*@C^oKT&Xvgx?{! zUhs0kYlYuH!K)>_SnwLb<%(YLp@P>5{zmY6!S#aM1m7h%d;#nC3Bi$q9~2xVc#_~G z!G6I!KZ{?6;)maNbKt#H$GI@etK)oG^-%BIxNBVxFP7CE6~0hbRTN$%t0xMVzx=+IzBrfocHP?1?LB6J9TfDmzh}e`uixau zY`4NVzl{8J?Cd+{`851r562z)Zmjx2H6L6mt4_Qggu9jb;dvE2ccJ54TV4)VtCecr zCeN0i!=3yv#&btHzlC-=bGX{gtoZqDyX0`S3a7%I9o!u5*tx=L9KiE1Xe}yzoVUSK z3_8w(GIQg=aCdw>4WQHGX#zJ^<<03A+U3W%2&_k^FQxme(1*iukFy@GRv%S3?z(q} zyXEuScFX*5c3h{g4hYBH^(q|KM|>K_^$+C253fhzsThTEy+Exx<2*L5*QwQ3HLtB! zc@=i-hv!`#duELPEB-hSi|2QATx#o^*Fzlnc)iA{m%M)Id>4|}q4aR%kM))xp5Ioh z+PMCS`B$swyzY$kQMFUN9;jBc)q1E}Wk-zqbn?d-|L2F#pD%>wS(q zyq@FKAI4687~}scKH7uYZNd8{5UchA=kc)*QXCXk91!C=i5`wv4@ZqEiI5&O>R?-{17*fFU`}c6A3)k%MdtPde18!;9qw>S9x}Q+_wgrTTs{qd)HLw?- zFgt{QuwIUI`?dyPhn?q$e-7xi{O|OA3p-AYhKJp7cGQRmR-1Mp9DV3H;R8$I{$}o% z*1rzb!!amDg|qA2kHT2p-v=l#14NK*^ADuw`z}8U2yeDA-^WGYk)fz^Kc*c{o^97O zF<*~oR~Pk5cN^XGp5Fp6-T$jah_HXFdkdAv_j6E!r|kG2zV^(`H{X1@jqjYbp-aCh zxi)UybLQH_+A%gpKFCw?Lvni|gT^eAF~{%hnmK6=?>h?}BLrSfhaa51^{?|)0KH)j0f z7@m@NH@VqAd!8VEv$M!;DSD3FbngjIqJPWk8gjiKd_-=;V+nso|7P08hIGr5gl9PwAgo@0v1%?^8+T<@wA*O33Ai^=syzDsV( z_XD3s|N7EeavL69M=t2+8T4<+sw3Cm{1v&4JBR-b{hPnLid^sI-;ta0)2L_B-yeQ0 zxe?!ePj17xW1d6*+K;X!*YnHwvpX;a;a+|i~k=ydpW#oF6 zK143qAGr+;8_D$_eJr)Vjin>Wt$pGQay?(4Pj345yUF$Mc$M77AJ&uG`doMV&R6Yu zapY!4&myFF%p%oz;WB8@kVmJqgRpJy8J0} z)BpSmx!K=+z~MczSEMZgX-Pxecc-AlHBB zLUPkTtsyt%fy>Cv_TNZu!;t&Ph4z8mrW;=(x6yo$+}1C@BG8!mr<+?J>R z%I-I>lH1tnLvqtk`G(x4gjRA5Yd5+62|Z}M)i|y}+s}QvX2r}OlY4o`{cByF$9!bz;8i_4g`2N@@LSVyHyvgk zGUdZZmP~yl`3UcbR%`JQ=F3|l*U85`JN=Zm!aAET{B!H9mQ6n;|GcU9$=#QA zHD5oZ$$$AhP06!fhn1wb2=j=tw}102=w&|k)S>?9OTS7ky=VB7PoEZH&itwK)V0%k znvXnt*BzgZKh_-d)3!g~UvQH7ubtbHTAtXNT-WM#_$#NWPE;wsp#MTj=&1t#kZ0Nc0Xmb=?tNMi5)%^1M zUO&F)J;sc0xF#ZE(Mjgmjn8zy?XqLd!OyNbD=d6Za!KK9ZzumH+KhSVm1koP8Ej7Q zeQ|E{aodyc7;)%n*(tru>=TwSL~nk3T)-xFP1Sr2PIX-aWyr{dL7jtFulqzxyP5`}C=& zn%DQ}yUtj7wAuCBPJc@6KFHkdTlLVq>8F@^vxXmE-=mK?eBkN3YmRJ7e)Gh&{p)5& zmq! zxuWa5ia2x5!^?IKJ#m0J`|g}~2Ny(}-hrY=oS3r3qKF24Hng?(F-f9*Xg{vT7vn8#gJdCvO$US?#$6&rrJW~f=Pc*&MKu1hx8 zG+fm>I(4KuAoIcBj`(7<`OJtzPXFSSk>=}f{@n88rrzemhY!3k>fxf9?<8t!j9G<2x(fgZx!@>k${#$9(ht(}!;I zA8z(fS>5xz^9P$JU*6~CGWh;gdi4tIKF$1-{&D57M$@di{*u0H7mqT(z4Xi3uN{$W zK9+fD%UkyjG4JTs^#0u!k2c?1@Y2S{`wa8utqb~Qf1GTNXub84BOebpzy5puQ~l~p zbL)*KZ#t^yaPyWU?>^(QQ{v3~o*p@+;)WRWn@n@r4TmL}iHF|#(|`>_%&zmUK7C8Z zNHg`7d2Qt{4mUUFY&^2>-%mB~&Pe{q_K_S5*2E1k-))QN{fYT&@+EIiJ8!D5pV{Y;+9@>) z4m0!19{(_QNFTGumXV)4^2!KvXYJX!7atd8=1lqe_1sxMCA0m-n{|ut8a#c>2=jvE zA6xEQKgfKn&#|qqH4ZWh7JN~);$*LR{hYu3Qf|bWp0{RJtoU88LUi*sJ@VJo!h+Mk2Xh^ zeA4>W&Hc>_8n1c$lDCGNYgeD_DV>~Xp7O!5chp%U%*zHXJv`#Hq2|`GoJW_wH`@GW z>&x>Z?&)Ff2)`}YAC+uch40rUJu}K&b#C~{AcpaQ_OE~SX%vN_O|57 zvuZy$uV80#`Bw{%-#T=Jx#%KuQ^a3~m^~x%pDC*wY4*PIvF4(T9m!`$Uv)z9mBT=e z(!RdycPHQEu{xiZIn<22^XNl3NrqOEgz~@2Bw({-u?L4xSFYEYQd*V&q$wO z_IZ2yPai&zWk!e0KX8j~nI}i{H&N7Q~yW10US<{YBB{^*`>}oS$Zy zN6ue=&NI)$cYs#S*j0SnX!D_avo5-C;b8N}E0mYFH9q%}pGx38;SHmx$n zJo?y{S2|5N!Mr~8otJ#CrkHOJ`(*4fuMah6j9xVNx_c{<$A3Qd(5}B5=H^en?drcK z&YXBfrxjaIm}bs<;Pro_BT(O+Pm9J?~FC?yfvj;*4txEfBJy6^M+3}v-?I3 zTX)_F^Zln&yw4tYs=4uBOPBxa>J;@nRbOz3+k)jozGJ{&JxG@tf==gG1L24p0_a-CoLGze zn(jH4+(vQJ?qb|<{2}C@o$RKoZ-*|@WV)0-{4J5i^wswkgj%wGN=xZU^|7oSl4JA*&&`Pvu$U4ahwD|UxJ+{bq~{Gogp z_Xzk46^=8GD*aI5Dn5{flnp7%T=dRrkKN8Csb&ut&=J4=0`XR=$!t%%bFM0FlOKM9x)uLZYDZ8kX zj{Xb?_rhN`{NdW3avR`xBm8v~_dvqXM)B`J;vPtx)&XIpj{|iZQV*l}4O7@PlslDi zi-fm`f3|WZ{6N$Fzlv8c^4E&nUb>AFIlmrp8zxBp$FrLvZtFP4&EnRItN1pI6?$=7 zQy3fKwpffC#5EK)*}pZJUB9^L;u_-CkLGaCC~?8o0^2jRKLh?AFPx{g6}pL3g~LjP zl?x3ou(E@f;*0h1@uef~81nOn122O*h`;k5ec~mokK5rlrt>QNVR$n51G#6W{BDLu zvJ+I~FsSIAYN0M(2=y9%4+M8G{CNg)I4*X02t!qolH+dyhDL@=A}U3h3r5${*3@Wn8lQRO>*eO;8ztp= zIVC=$ET_~5#PCfu1J0-W%6t{Yd7k3(%Bl)qPALVze+nDyZTKoG%5lvb{Iha%Dt)6y z0mt0pDg!!4jN|whNs<2eeD06^;?|1WxP<+U8g`om zuN=$qj9T_jIh)<|it;>PW#xpl;>s%Q0|n2Xkj_4{%S*?Xlvn!lF%TZWGyT3YL7+!} zeomDyBd@~8p5u#h$_jm_6_@3gFF~Rqu%gO${#JUjV2u}V;l$fi@m@oGhQMld4(;Pm z*iDlK=fbODt=v!4u>Y*0IHx48s;WS63CJC4&@pdH*1W8Y(`Ss&nmutcsV}#<5CmGB zlUG%|*jG|q=BqSHAm_dcqY7j;yqu*4lhcaxeKUq9o;ixk(ug&x#a62G%JY4F`t(7{ zv~n<%(&9W&A9xy7OZ~o4M*n;xuOe@h;jQWKO{y^}%1hCPz`v52L%bQ~RmP<9>au+J zodHutlM8A*aWl$iV0PkW`xc@*Y3KxxH*O?t(FAw6_)SWKO~ep3eMt%) z9)%?wl2Kk=kq4%t=)qnKE1)_8|Ej8-ydo!lT5;JT6^it8D}4?GJlR(@x2(9JyrMJ> z>bq(JfQ~)mi%~@wPcU1YjS~WK0DWR04xk@eKwHObeu)ZC@VWCb!B^tb^}<+Xh4LX_ zN?Ad9T6v+!4f$hb=-!-f_Af>O^!VseSTeCJC%42m&sS09s{x%>6z7husK{ALTrqq? zab*Vtg(Z5-^z!1eDlATjHxAka=I7S8P9LwTHPGw+iS7E65{dr=Xvd3YW9x&&U>_yE zoC@+}JfR|I$++r*0$)X?Ezcw{9bYbaf*(GRKhn1rg5=;o*;f|mN&cFr7&lZgpa(Fe zG^fy)FkyOiNfjuq)L(*j5B?cdlBvFAP^U~4ys%_S+2Wj%V(bNVttdHFi4>Mh@|ETJGM1L*5o5H^VqaO+ zX*tDJwkL!rxs)HJCr!{e7?>=Y0;W-ebh;zJ_44_FmL=a1g( z?}}F`?E~^=EscZm3=tDO`(;$;Qc)0JX@?+2PK7iWg(YrJ8>i=B-GjzKwUc_iKzXDX z?7G4!JO0(VQoSg^@ef_M?C?l)UoNTo@zeXXRlJ9amA9%Y2}d&ad*-c$JUfc!jIeD~e00S7#rX zFLJS{o>;b63-(lxhphW5bT3M%Is?bxj(31ORQHh(_z#V;h02L$Dc%0@aRL6CkSc`u zIKnD#=I;pY_Ae>V&nl?M$%9lWKJiT}&sW$RH_RAp!2g3P%gT!@eNoYF`KqTSDi4l7 zZI}zgK+T1{4tBE4Ikw9|G^1xx^d#lL1X`AefvX&VMAtvYP+8^FARNmXvZ`=!R)J<( zBK!@*@g|ICy&eOIqu>wo6boQ5{6&MY#Q-iXuE8MBX#5YJev6@>hSxG9-s|n!wQD!_ z1^?m#BPuIv-o)7%Q)bS{$}&tNKEWH^wOce|IYxPP75Vu} zDt#ELheMPc8tGJ5L72k|<1L1!44PK-hF%#`A2P(S(+6J=%xl2Aga~NMt*{bHWDswU zTU^i;k22xibBQ11uQIB~m%xZ&I=ozvO3KRppb$UIzQWs!fy|1E3yb_lK}mT|m9cpK z`110Ke4y+H<7;0TX>M{_){J>sl{BEva>dW0QJKHIgoeEayy?)G4`uTjdF2&8Ly74D z)o?;!povCKdU<6r4wXl<3cGfLa1xn=slKW(3bZ397&*{lv6z98ITJZEs!P)#Q&p9U z19G<+Kt^N9B{s3+GnCz)T|89HAjEt}gW( zkjVt28mOpoVybqC_>GvdTWM3bBY>MdNNz^}`%<|IBAQuH0CNfp63!$!+Myc{uSD>6 z4o&I45bg)dqT+%oov)ofYm+rasZ$ro{SHft#_QP3VtN^I8BRCHyot|ZWjJ0{Fzpe< z>jW;1ErzyAvC)Z05UE7L_UB>&TFg@{qKeDd8mh#mW1!Mfy)DkKiH2fZ?y^k)-3)jr zJ1WY|>MA4IP-sv!mzASf;6!ChF%=m`icL1E=lE)*v=kX8NTd}$7|)a$QOr=Ig1$&& z6Fmsp7{@$_O}BG{#18UUTwV+_A34QkQPHljkXbG)$x=-QK!5~(UR*gtfND6xo)E$lZux&7slMSyiV1Q~|pqh{u^t4Wbzz_Pj z(I~1)*b7p)3_>LyV|b&Lfob&d?bFBW^qQGM48>F!VlGe!+fY#zHgFSRPNl&#`Xr;} zB}U=+A=+?E6L_&o6y*Z%nbAm%gn@L1p%rFa%~D7^zyk~_sM!OXL!*z1g+V}!fdiV+ zY^6c$K*>74B`P~4WT0IJOCIk?PK7PH!W`;sml++VgIcqdF|>V_t|9{60CuD4+SYgYf)tSbBXw>GN*?dfcIA=cYekipeJ zYHyu(AKe~-dU*(Zuk5g8!%QE9_Z8LPI`2i*m^FPU9J)~q7JcN9{+8+qI{CxVM^Z*)2LNB zFw+l1X;6z+7;#HrDOtzMpriGG8hP#}fOwfP#6=9lVJKS~^4JqYG&tnZw2LpWq9G~H zO`U7-)R{dm1@md><(?;+m^nvH6u~P8z8q!2gr7Yz1QFcyGbd(bVK(z~D)O^nsj7G} z%p@&_Suiz~B&oJPU#HEofr;>ho#uyij%VyNPZ2F)0=^fakWlsdX+uzF;tp8a^L82o z;L1i8Vk!?N^{^`Qs14>jbCyE-QU2l@UkOi_;o?gcOtSeZeEHEJG0#-G^#b#4Fdtlq z)A>rDG}VT2ZQW23?s%I1A--CY%qs9zXfW>yI-jaI|t zR#swy*Pqj|JSv{ABC8nJFu@vf@}b0WYETt%d+F_)0^D*=nK5T#T9E2U*|_^fOVTh( zt83DybM2yc1RrlAP|X9kCQw(LrgX8tqCD3JwL-lF(~D?~k$^82L+O>2W7$<~QaNlg z;0+2(^Gba2^iHh55rd`RnWu8GI-7lf1i(b4MF8Dfp&RN;LZ8Wm*dN|A+g6aWPNQf$ZJNBVSQP)8}k41klO zysHOrO4v6}3GH#>*BX!oU#dh6<2qCWyoozPDK$7!!G49ZeC&l#p_tP_q?2fPb7h|d z_Q{o3H!2a`cyO%>qVqc^b3?D-cTb3Uu7ORCHajA=!%Elf?vJY7V1dNIMMh?dKr3<- zONrsQ*qH5meF4T$uW&-Zt|!i$E-{5vbP&iy)Pgga@Nu zaPNinBg8b4LCIi8MgwqF^I(b64It#nU@$ zjjx1Bw?Ijw$*Uw57iRcML_SysfmNf$g_)E(t%J~d0Ywr`DG|MK@d?B1E{G^X^o*fm zaxbfN>zdtVHck%)zsL&(rU;z+7}mU<^JpW#xH1pkMNl4y;O-0UF+CQ$dWS-5m{43* z_HE-9fB;5{W)i#- z<`c(Y8k}eksQRIa>`Df~fe9fKmYC{hFooonXzV%=lqY0E+h2Lhw2O_tcZ9S}gu1Bi zr2(G#SL>+(iV0X<(5>0AXR=JxbE4tA-slN30rPSVFXKn+6SdI?PWIS7h*C@vY3=Z`@zoU-Fn=%y z_P$e@5gYqIH$S$?=^2oFW(zH#EgG@3^)x-hs3t;aOZG+rZHm%4%%l(>DmiU@0~Gqy zUV^qVKDxaSC`pLp(wJ*o28L2%Y~cDLkrGGE%fN&R?_Gkau4vj0* zaqb4DcJz%!`M7m_en@iY6+)B4_T{P^jKf9ao+Q>qu#1jK!~a@pD!c!+)I|rs zr4F&LP+ti4;Ql_R<^^WxSyYDxRw7kWm+^CaPf?Er5-biN^{;>VWZryO7E$siKb^)V7 zyFNX`mRWDhOW_TwhUB(4NIE;Docy3#3bbKOV2CrA5h++-IIz>lu5PWtW>Od;BP%_l zLk(6LFd`;7_)@c9Ojw6m6j3Q9x4gUrro5qj2JZAW6s22CUUkKM96)Pi(0Rffy^Cso zjLXbaBy5nSgMhv6cz^<4y%J)KilGSw(Go)$Sp~dh!THZBgXY6=SWbpbM-ZSFuzMPZ z(a`;8r1dE(U9tx#}7=!XSNO6s2t}vJ4 z@IfXL4>nWMWCYAhKm{dUaWyb0BR`kwX+xe|Q!O~9?p8EN5~veL_JG(pH=@O+yxRi6 zBujB&85ReyjH`j^9$TQ`1Ogc2bYFXn9X>dZqb0F48qxrr(SK|uqanXa?QRznEG~!& zeAmGlgLvbdb6{hsK8X+?z1)e8QDIVt4v^qpJopu`c!9J+MaN2r3eIpiid5W$ismGV zDxrNUG*{3|o)^kCC%4kk?4YQ;_}DxcMY{Z#MuUF>`j3{4FPs>%q4~fe$#g(GM1n}@ zo`KNirNx7TAWY~K?0!#;I`xYCpKT9V3GKEDD)^7I4ejvYngfNuA1#E#N@DL#KOC}jJ%55;wW&7@OOhJocwZ4NY-^gBdTXlEVBp+IeN{Jj@)@7Z=U z3*19Cv~KPWIViUS?wp6v|8r~V8V0~9$5){aB~609yu1SHi_=!SdSc|tJe(TlpF$k6 z$e!^)8EGqq6oRAGAokGF+s!+P*)B)4A;l3U{?V%ThoiLj%)yot_^99Qa9bK6pJaI- zIw972`(2R}jvbQLKXZWd|Njc=Y#10GP(iiRMU!sN2tI1#=p0@r0{idT6UR=-fYOs2^+)3|XC1=Pe7z%*)96A}2 zV%0tHHzv%=aEz4R8(58WO2ZqMxcV28AmR(U`B7saJ5U0eO@KxGK-kh z`0_G1ZXAkKbx^W$A%t{SfPG5Uc{@IR?!56cXTaIyIZ{pWcA1>2Xj=!E7dOjdTEmv= zlt|GAB@7$pY)Z5BMXXp;Hb4A<1fWvl1KmEJ4vbGoLR+?ukg%; zHzQaU<^aw*?1UL4p@k3%=|vAo7&e?O5CVvI98RZnz$4z~Q2{&x5=gKEJ4gWcY;};p zP@4xP(2kI}6;JWdm4-Ug>$S=iW)zA?Bef?-oZ`op+S^W3?U)26vD_{s`JtuTUW=xp zAgPmPJ0{moHEc)d_>P2zZm`0)I2w{~S8~0f7K@R+1)@vjpmc{^^w;6N=+~PBt!kK}`xw&0qY#J^qo(vzH1&)iS87#A*|2^zpxO3(VwU>;E4ax2X2WscQdc zO$;Tiov<`$qF%NF8m^TRT*sz$4p5V8HP3!Q(dSyA7V{DiHSl0|lsR72p+y}&8>9k& ze5mX;#FoHbSED9iALR(zz!*{<*uLeu&IsgFLg>=ThQ0)s_%11FkOiafKxtKJ+WS3W z)R!o`?P1~o0PpMvQ-dKpwstfH2pdS9ja1rhQW(lB`H&VFjfE0W@ifY~9AKyKI;A%Q ze)|YyG0w$;);s7w6iRi;cDbq?>H2gQGUXSSXP`3SeiW6kiYm#NB^MNulyStav%uhXrBT$g}?{!1HGA76-Z%eJm?E zgB%^i+_2t5lrvaBD0!T`{-L54`*QMIRqBWG0Pdy*p zXhSB*=}{u~`)a8C2HPK5fHSn`*9j#~XtRQxIWN6v?{=0{RSwdJVi+p@{j36z7}bJ< zX*JCA-%<~dHLGPG%i|zd2$ee8e?Yy6r(*+lnT3!K=c2Lbpv0+uz}&Ij6vA(JQy3rA z6vB}*Dsa{QI`u>B0r>~odte%3ZSramWc`?`vMxx?w*HXyUG*Z$U~QKy%3TZM)m?v> zQ4pdXx#0XBbh>apNE3tDYLc{D{_V*F;skdJa)FBbY@j;_fpwxC(Oo@Q$YN7$K@fMX z&@9649RfA8clO*21ZXIf{k7L#9OR6WB!)p-dn${{t4rXhF>mt+11-pbWed%+fX-J~ zTn3l1%Fa+)S;2F+aF!LepD7z`pKiuHjST7~@x!@oJk3i(tcsa<`WLnd(Q#F#7Msv_ z2dl##WG#Jo?~-gv!tpe1Hjb-+NqaT8hBFpH`Kzj^_Kk*OhO)NjkA;`o2el9JvA>7y zPRri>tl6Et zQUZJH(14XGKzk3xj0zNo8Yb=4N$sz+FO>uNGIl?>FX){=mUnm=-8sj!)(ZFs8M zb_>PZZd;bCU+h9!YQmZdq>8tOK?V>;4Nru(hZtj6l6r{Sk1Y4A`@E7qX~3{|OJf^y|ocwU5HlYuNbR)8vjEwYN5V3dk3 zBMYP#igUQ`4z)=J@$S*+0V6c#oF*I9&?t@?Fwq`Z++7dKF4Mi}hGz#LcXWybl|%Cw z?JEZ+l#3NDY&gJN6J*7(;)MV;qfrFvg=slGNSGvv;;4Jo4499;Nmie^>565ec4j)Z z3e^`(R~kXPF$X@XK2e)dt+guiORB4A_v`3x?WRQrhY8|iTOa;V61Y4W=&57BM4g4b zvzr#c@CLgmb#DrE9Wa66ZqIdzCfWUhI^b_dg-?5=>zm4>;TW!*nZh$XeDxi*>C{fe z!QM`4?l3`V+1>M0A<}X+d~i(`o%W3-nfE_6)CcDcOvfmm4~F3+30DQijT|`=&WI)q zPl!((3MWL-z`%0KE211Skbr_wY21)%l^eJ&#XV(wMzeVSkYVw-*bFUvynRijU1nfD zsu4kPYA_an&1}NPe_y!64dxo2dey(5IP|7tOX*U4ctG|2X z<$8^@$@x8)Gb)p!Vtvpwa=*?(K*D995|v-2N7d8V*dFjGjZuF?`s9O+qAwNfR+N)K zh(kf4%ERFf12a?(esrg}1ln{Z5xf6g1p+#Ni=sl!`N-%yP_KN{6z2?JRQ*aMH-j9pKW3ZQ03`4QYs)9qZ#FL|0*gZqH2kAkVS5jV>AiW=O z!|RjqZJJLC(IstoXav*2PY5JIL^!wrkeR|eq|z2xg`*ieD{6_OfKHu2ydnPbB~jGv zC?=>Th>Dd(G8Rn0XXGfauVMQl|r&W_rM z%$`69B?V}VRScx=CQrmrWkQ!jxT*_}#qhXCkoVB&Xf^>9Q)LqJ43fe4KzT^nN711Gs3Odvu?K7JH^KltD_EtM&(HcCit3e*gdvMg7{3NRNjm>|Q1b3P&M zf@~(l9#pX<>hRpmoGB}zu`LeA!B`M(YYQ+*B*^mHbIroTWp*qRD}<12@g2$t zEF=k47XpP02*;8OkdY}uq#v3y7)784G}XHlB%GamvbZj7AWf+H#*x|^QK$if)8mI4 z52${RTX$_Z;gYE9zjZheyw=Ih0%e;9b6RBz9t7CLWCnIeuQyY!Zb4M(c<>8c;tIqx3j?eb1K+?+dgUiI;j1k-?xD}*20;qFjg0RBR zgKH{PumDB=zk%8R24>h0YF!^qhLP<#FEYjeTu;FddHi3D!vgzd7B5&NIPai_O?G>x zdLtSsV;5-;R{PkaRYe1}Lv z<==T-jIkUHOTRz{+B4TiQhNj@?}0e|RmL~e5UHBWms@L~k~x=J0BdZ@Y;tV+6+hcX zc+6)H$|*cpCe|LSMfmYI=9rJtG>?@*M*Q4hmGf0TYM9~RlK}??V2uJKhb^7O@CGNm z01O@+ttK+4uGvh0xD@Ay;MAL@8JHXiD9~cOh?ge4D85UngK1rjg&L&irC4$SQOwBEE=Isk$-`6lge- zmaH`>N+=Kgzz#Mg)IV$C(x<>eJ^XTA9-_=k84RxIB+6MUv}c5TT?_1pa2O5Q(Z|B4ta0p5^=)fB$Bl$ki^KLqef5&k*o&N!zcGFq3ci0VR6RSC5Z}Xmq&aM50~WoeFF*zvETQeKpdy7fqQmbmk=>Go}}Qcxyf-@qS*kN zjeSKA6uN#>k$y>sOtEX}9_ZyqJZhF&Z~(UiVWxt61oU(&2mA^#UU5z=|F3@hKT|(C zybUPeU6bmItGcvz^H00=3-5&a12v2!aQ_!5Pe&EFqg#9e-&POig*|YIpj&9ANmt{D zqtAW1cgCINDF=AjOlU5szWupi2DnIDb-_cm%k7w~^82Z>6uc|fg!16&uw(1Tnx z2+%Xh!&ZCD4aw5bN{InGkYya9l0@kP8Mtl;A?auYK>4RDo`~zdTodA?TbQe@OY2v~ z1V|iw69;Bfj83t0kA*NP1`zXdu3jmBxN zKR>5RW-e?>)zrzZ2X*_j*tvG4wmNa9Z}z22w7HbsO)}OS8i{GiW2w{58(LSRvuzyJ z1GLoAs&hgewBNwj?wk_&PH@}+PZx5h!S^Yn^eeezh#@qLA!2bx+l$JfD!x8;!54WY z1M4iex&TGUr|(C|xg^M#ohDP|FN4jF%V2+>DokF#$=79q=Ht$emJF zP*Dz}H<%}f8`xoTA2p$}XH!keslYER0TrbW3l@~0Xgr~3N3f}9_~2Vt4som^9utZf z_D29))<114REeWjSVs7`n(YbVgMa0cV*H@07z)-NZ9D~7D~wp?jz`f zxx*y(!XIvfk{>L>xXyd854GP1z-gPSkj^oep}S*XQY*YuhP%P_E&m|0zgwUov^ zXs+`4SJ)0Et2z9=zYx*vmV)A9HBpgVF{ug4z^~)F+aPt|l-dWB0tafO+R!ni=?RR+ z-q@C5`vZ-FG&hhZ%#LiGAYWC1At-+tMhH=Z1C=|TzpKDYKWz9UqrB>&t~G;(AoUK2 zN0gbK{ttZjqoz~qMfUN-3?jjDjWhg&WcR0|=rE6}kwpPfpMeFxFTIMgIwyWdJpz|G zF0)~4DXkywM5X>v&az{MfiR#lsD#7~mR7g!VACd+ff2 zS=2;W7loH5I0VD7qxqxXBro~kYJXu^bi3@l^AhZLRTi^L7( zrIa=PHfE7*{>~eMd{9)ibSOC--s6OnZs4?TH%@^qL^kcRYESUQm=-%i9f3%}B1 zf9X`2o(KrDE$U#rB2^#wCd~wom*K7t{af7$tQa>PHs8*7=a58~58tfd1;mRnaRgw0 zEXer+nfsP4`ZTn*K>=h3y*f9Tf#mw7T==bKDOR8ZS==V3MRX?vpN90TIqSsQFo;}x z@*(854hVC(wI{H@avP3!;}i+6@6G^AQba!}osv9?->BiX^ZtTx;<09b~A@Z%A;SOJUnj3op(od26)qlhC zVL8>oU*j3>cuh0i*b@-GIzaC5JU9LNX>QyQC}%o{N1Vdtv|jY4^y)v|9X~ao93myY zqE8K=uL+Q+b&8u`!)!Nh4$ym(@b|~CeCs6t{u3E1dr@wEFZTC}tL&=j81`?^F8w_@ zy!L2z+q27vG`GAf1MDJIaHH5=l$1}V$iF(EJl5ngzkCT#4=A720d}1okbZ4IcxHgT zM9yOV&7ZQJ`2)%i?QSLfH4C4{byD8~%VnxN-`;FDj>vK2m6I8#NxoVG>T_E_{SD7& z`X-@oj^%P_6*oJMv0vO;aT~;K6t_v-W^w((w_f z(#p9IaQPsD9pBz7%|2=;3m;O1c%WOHAy4;JRQi#RU}rtf9S^b(H+4C5a-$f^N&B_< zzHtcWbSYQ(&0AX@@`2$Me8n35oG(vFI(7{DbhOxqQzF850=`mFd~McBUW|y5PRDPf z!k=Q|RDzEALyp7`zjbVL2l;s1>#5eSKLWz)@#@=!!pC(n1%z|?jK>>{Djo63zNkn! z8t{SJs(cl;7sP{`ENm$Dr(yM_W)0^X$6uX%!UEv=wmi_&OOdla~*3V@BBH^Dd z@l$57|GEm1NBGo>{3!wS*&~^LeG$_)34MyVkt$z;TP8ETq4Xx{ddIW>8p)SO=$j_6 zf1}VhioVjPv46`Vx10?o``1dk4WdWY-_#3#C1_i+mOP1R!hEAxi?9`j$#_C(270Dr&mYZm&}aZJ}N{Kd>Yu$?!r zxDqzS+glrH-eR<|w}+-M_C^#kyxS1G;EP`WE8(rS6fS!9<-_X|ya`o60DXQjWJCjF zmK!;=DIaD7@WY-k=L~VMhk@CXoczkr5shy6J!W{*g6~pi!RyzI)ApW0;S?Bi;(^A@ zIN&rh4mi!}`z$O^dA6gyj=k;mBhs(x;ITv4Tk5V4gC`m}*tevY!|4IA$ByIv0qb*a zI>%oyYus_}oKQ#;_7N!g;GKS-<^2QF8peeM>av}?^oWeT;olL?n6_Y1kV0?ko7r+JX!h+5lt6FV*W}K{Q*@Bx%f*!aO@&F$-MM_P6zv2RDH4BVM znPbOh&7L@6?)ZsW)8Vt*2l{~e4MTmDBbX_c{1CoQC3@eI=++O+8K&zG+S4s$mglA& za02aTnV4dh!PemdnSIQ$@o&y@M*7$pS<}a69&m=Kk_D8qiz!}~vwzRQ&+`7Izjx|x z2Rt%rhc|Y12Q&g{ho2F^aNh?B`^IoT#w+{C@L)^0AETRgC2TL?K>ZJVFw{M zP3VT<4CMhn)O;Oa+>p__fmJ6O1vNQ2_)(JtS+K!XZ!N2^L%JH zP=g_@@s336d_zB1|76vhm z4dCj=9k2~xh_Vhc?92yEMszG4h6XU)dxX7F5JT*ka43Rbg@cX>WQ^KdymrHtghAtl zkW&?0w3r~9!BD!;lkOqGUKfJxEblKvxH}a_WC0BA23BPmzhXx@r#zRj)1G3W!?QLx5nSo{|JZx`_{graOz^hdb`-~U%CU*% zq-|fv?nF-PcDdblDvsMOb*sD8q(3Sx*;Y(Lms(P{6sx6*KJ4nmkP0y%AR!7dK?DO8 zAQ=H>C?J5?WtM{RE`l{PHM`kG3}FyVh7k~$nwjj3n91UOo^#Gy_pMXswiL(g?jL#k zr#|w?nm7_9t}sM(O5Kt?I_wEO(MO=rBQSwIu;#@1_(8BGAaQ(Wy)C~ zc;Y4u&xz=PXkWAkHQ6W^mCY78S;ExHlVG{%a6#?is(WOO__5FL$9 zAb$!a15rO}`%G>C`Q6~WH#&!Ow_}Z>Lo+jY#njW|d;vJW(|~&*_=wgpzRwloM;_zx zlVcb8w?A9noxS&g$suWY4BE*3O7#xR;kM(2cuc9E#BYz3`Vl_ha9eDjE{G>)@dl;o zv%_a6FUC{TbMe`U^Z3%%^!#}|ZL%8=$c!C|qEaD>aDifYasoGZ=J*GhPzRbg~j^2{vS$FB?2ixt4 zzNbB3e8%RpF1`}CZ`A+tcU#`t`<-70ULF6+7u)Uc{;2l+~BypA0J%|5F=a-D* zSt{E&XJ6%bWL-S6ukwD=@aDlDHxJY%UfupIdGpKKceU@Yb&1=nt@j`Kc!HaP>epCp zPiZ8-rL(Ugy)cX`kz1cP1=fmJeJD`)brfO6dZ{O0TEEQuMo%}eAiQKe+MXBM8xIfi zBnvm1_{9=)BGGn_r}YtJRO<*DbCcJ=Y~>v46DF+J+qJfSo#&piX#1T}%J=b7F@woB z^aP{s`kAMOkMbvVbXNe$xf35PH|LzKfdiW+hc8ag&-LJ!Y-UZmKgKV>X71aIH!9j; zCp0s7hI(dVWG=>Xc653Qt5fr1zrB6@l{ub;HhTGsZs(^g*&IJUtUJu7wh$lON8`hG ziCwLe9dtt{9Pc8T!1{Mi?*@3bZ*H7F`ir7eDj9Un9;41)&p1CeXFrqJbEkk{_J@*f zv*p^!?_nOMp~(?K=i= zPsx1T&KmgY=retp_D%%8r@%#n{sqjn{n3V#{uex7LSeo?XhL|&PY)VI+gAq>B-wMx zv(*;|J$Tx823w(jrC%3p5!k+)vY#ikKUXwGJrk)P7;LpQfx#nJyfeZ(MtkqSpYJ=H z>mi+c%dLH1PpgTw*Zfccjr3S)O%U#Lh}f&~lHJw^5y2ooA;w84-kEGT9)39Iy|~r? zWp?NE=ysOQy{7%zg}Efxns@jHvb$on`x(DFmC4v)dOMydh`H4SIXC_FO@_{hX0zUnnLg|q0fWat`NJnR+soH_H@p;H4#Po6k) z#(d1H?bX+69=Pgu{C55ve&ieDuro2GYT7pw9H%2pR_)bE4v#ejU)9<|Buso7$Udvt zs%+m#pitUgrE>Bh)jjvbEw8bq5PDO+{|k>P%-SDvV2qi5#M?pc!RX{$5OC>THgQ>B zHq8sR+vw!zVP;>BboaBE){ksjhoWFJ+3BIa{iUbjX7ZS!dM_+qBl~r|8@OeLiUf8r z`)j1|s|?$W1lFuL?rafZqhl}8mHZuiaxCO`-oU|!Xj9*kq*|jb$1_@)cLci*OMV=# zpsh{U#_tLHvJAe{qh|!K^5YEM_LbaLd$R!&-)}zj3+vmS;cahZTL#KnMLsRMZ+47t zjlteNg0CaH=)N5rM%~@!i8J}KC; z0UKzXbV>NltH~!y6NO2et>0$cQU_fIJ%W2=W;YxA!2IxJ&j^f7c0qHC6fg(Dg~3BX zRI*>RxiE66m#uE`w&X1h#ZUQtL+|Z0)I+5i%J&zj-IqIl>$T3U-n;0Tj62Bo2x)C) zM9Jev6f0Zb(7m08dZ;!-<%C@ciBFp!(JYk`U9Y?%Y zj7@D@&dapcVRDQN&w1wlQu1*s@vvqtrINUV#3g$Rcxz?{>l4I*+#@gmA*WM^R&3U6E8GP+~0jd5mWZ`R*&_(&*|i=>yDfZER=w)5=; zVP#8)_YN#9?O4AWsDE(jM9Sf%?STJ{ec_?aVEe5I-(Zw>8cb-1!5zq!!7Vj`jdpLc zAGp+ke(O^Q9yCH?J0x(VN0_~%IF9u!?DVe#+44`Xz+T-CS=fNl`g=`eI(sKzJ)wc# z@sKU+1D(<;g66iBGA{mX@1q%-Az7Z5j=rL=XW*)rZ8$xN*BQ^^2hgQ>X8LJd%ZrEj z$g%z2-yZLbzom@bzWtAE_{z>s&&^F=24 zsZP3aN|CyL44qwuG`SK&zNnQ9M!Y8Ps|ZslFAYWp17rM)puSaRQqj$*C~8o-?7!>b5|K&*}+qBVU)KX(9p%Qed%EHAS!pb)N>ev z{Pndkn3T_@wDn5zz(^Y~^xpU z>zQ*rZjWXyiguGj@oTLvwi_RbqM2~8RJ`PU!q%fL`bmWO)_e1`dFre_x%3ZT%#D_9 z-_N`X>#J>bA0Jam=FD)wQtzd+E7Q7%3(W`noup8S!_-feukJhcNzGT0&?zbzqI3zCJBU{fbt=%PU zirRA4@ve2G^q=2(SG`ud=WdOt_a9*Hu@C2&Nk^uPt^Kj1WlOINtc5bez&@rke`NT= zh2ewKGw$r~*w|BJlS$0CjD{tC1#@u6EbQ*`qvun1V_uSIh0%S%uQdI%djl4K;bxwx z!F+a~`+;T9J>DO+5q_29yXE6|j8@8kv4Q-MN!tIzPOsd?&e1t~cw?BqD8&;1t%0-$ z-xKdB!&*&#NX`gs?SE^`r0y?mM=KsmV*8fd)*#w)486iVYOA2MB7p}4aU#&N3XadW z9u2cIy?U(B6mSsAtJ_!*97ZfRPmo4Y+mpyB9~Ry2g~Y9V7Im%-d57iwc+5bC@haSj za~GrG6Z03$t5e+%!CLJtEb2LW^v-x-Y|i{}>#2#+vFZ2%UZNZC9xd-4-Lq$p%pc!& z9^ZxBdjvm?8pE@9-~M2H1`m+*&f(eBvv`fnHd|yf(6lm z)y40#&%sAi_Idl_2W(oIvFV~q<##ud#&ZroYf~xDy7GogqXo-fymGmJ`BxIZTv~DV=bv?Uf7GTK*MIAtJ zy+w~74}YFKG{AQz<@n!l&h0?1+&=p`XXh|ht;x7~&g!fEtb33Cr)|FQBQ`DluK&erqSnYT5)OBrFEA! zU7Gp4#T8vzb7|A1rGH}UGe2k3_~&h!b!ow+RhQOWT6bx~rP*Jw?Fud}xpdK`b(c0> z8o%K5xU}HXMVD58(b?nDf=g>ItxNqsb+})$Y3-M7x-RLj*nHEa*` zek+9s^Aml&rw*KPM;_y~A#{31XNI44%4W})Ut^3h%ElkIyA&_&bU$_w`pIeA8vQwY zacabV^NU}##IGQbDNW!WCq9a4-W)JHUn))Gh3TWQ`R&A^fxR40$4>UeV;AOeJCr}E z;2Q?;>VVk^{7{0hxpBOIU=+*M5w0C6@Pq!(&f!hc!!x7!k;Tl!Q)v9um|duwxNY}G z8I}+IF7dM;ybJr(7{a4&5gX+#y!d~1cxGl|jNf2z{nb(NzUldy_(L;P&v z!??XXjq87AEDrN?DySdEyDg@o`H0xFlfzSHV7u~?dB;W+jZDqWn2(VV1N<;r5XZhA z!S)>9!NK~`iSrZukO|8%5=;C5$td2gaUOpx$3+ek8*HL%20YY&_eEg;kPo0tM$^&L z=B*wmpPw3$@)Gb9Mi<`wQ5qh>u4|+O+oxa!aqRI~a1JBSdJHh5kL6F}k1~&Xz6peV zRCWfluH0s66m|coTj%|*J#O|qXY=*C&6A6=`rU6f$Bm{-uRz&rc0|#J%XfX$*0cO_ zlz+{Y$Ev&^bvL+tR+Yynzsu$OTndV4C;lFC`GUf;yx--=Rr!r*blT-Bs{AtG=UjeC zmH!d&A9MMdD$fA_vo2p(<+T5|T>gtLrJXE)$>rA-o^@+3|5b&5`Q<43ipy`h^h#hW z_)C+#^waOyep&pq?WccV+xK*&Vvi}zli!Qzr&*G2R_~l)EV;5hkUtY5H z8CSpV@U`78{$BqSf70T!@3i%@ero)LEib&=me(J&>4xjSipyu;Wy^~$pL^c6t3A-p zS9k47o}Nvor+-lA()b-eLUIlm5CzN$;3 z!#2Nu#HK?I7rT1l_0w$C@+}^>?V3Y2tqs~V^Mp+wo#ktI9nAxdKb76T zd*ZHm3jdp<>TvXq*2uaCGxel>WNd0| zW_S`u{Hb#j=jUha!F<*}&19+DfSo)?j=?@2_tGd_dk2f6!>ubzmj6+F_S(DJ#K&p| z@%kt{Y{!=>VWIjo4zT7L8fp#?}uV@VP9Xo>+z`*0Z zg);|Fo)|oJ@>o197ZHsiHf~_!VjU&!(&VhH-}l6Q(^GH5$7iPJ@dfdTxjm*;6dlKB zuqOuaLDNaQX0@LWyQgnrmOoaF+p6Q9?0)kw*514J-IcrR-Us&cM_&_j7w<%W;QI`u z^x7ZB&(h=G5|*lEti|C?@6_DH-My0&!)AO+E3O~8>^jAf<1Dj@jc+_`s&Qh2dYXYB z|MNGtxW2w0D<-_jbl-#b;b)*ObMFHW;*H1m?H?X}|NQJ6tc#)pW=%Tq^l<5T>sx0m zX9@3U;8y~6**Z)5lNi}YuSzyI?cWDA|Cx|Dx3j%2)WO)b78`Wm{32668L(UUikSl_7HX9=oISDj?F#I>*D+n&K@)7_?Y9p`+Mi-ra7$4cNOoH_{vanb|fa)&+x@~ z?*&dhXv8e9yLSv5+Hh{7jC1o@?6K#k%+&%hp)@>$X6SFQm@{U0?)qu${P4&{^C?Hy z2Yu7#BxW9AbYUX3?cy;rWHD{ncXx37;cmm@(=$)bVpt>KGd!o8#c2W0i1x$>hp`_G zlj=NX5xjM7c8}AGy~CVTo3o(D@p?Qi?~S7_a6KH>$_cK};jl7i3PQAsk1o zgBAzjc}^kjwoBs2fkSd`Yt5JOZf6{v!#;x}i@8`VlStd%BK>d>J7@2F8T&ZS^arO; z^_}WHZV6cv4@*^R4nv<>;^N6U!kWRofIHU26gq4eC+p{8cWp>! z4s_z!p7>B1UQciwA##}iISU&dcBVZziOC84ro7$55mxPq`>`+ViBBY_y@w{AoSw(% ziU;uGARINOaLMRtgwlvRARRt%bn2WwLdbziChr;8d=EzlUaQFWDB1>lV)hq~6fwJL z_Ab775r;uHGM>f=Z9~&;qv#aa%+11s0i}AiE&*Fdp1P&hVwKV6Z zCppg14~Gw!Havh$oWr4>gY8bmZ#$-q-}b~e#BckRqr=$W8Z)lHNBE%%8FIK#bCH&s z5yPp-#f9aZl1x2j6?2J)do|~$zUg@`5NvPrU^_T7QEC;qql=6$+F|@`*b(Kd zW>1kHcuJ_M(;@opCX04AhK7 z%X5-fMMs9GTJ3Ov#zG3m4l{qoBRHDI7#M=v6UkO#c=FiTxw)v&d(0f5Iq96kYc;3m z@liDHYb|CQA<3iNDOqE(CTVYqQwdc2!ReB2hissg!XGfd7jPYw=(ELvrUohPPt47Z z7)M?E6N3W>x8tyGuN_wHFX^yuPlr{zu*1$i-A+5M+F#P~IrmNuS&uo|2nTFF#^9D^ z9LrOfKDk#7T$rB51eL7U@F?!y&QkpT|Gv&rEOz&GmhQVNzJEW~JTq9*ww8gQeW0Uo zuk4_6;vLm`}dX)oO%LL$?m_;ZQZ+npWE8I|9)=a5$AjF+y4MJVb@$4^T{;V z6j(bWuX0=onV6p)!;H`4dCS2)XlEC)N6+IX#n^!((ogp6$VM$bi$l}-8M8||E;$UL zz5M{N)r#{6F5S5bG4aL(APumx!HR~9u?tv4oxO-PAt#WzazB3NGi#?2b;pC(J%8C zFweN-%qTK6fVW`Kl*xo`G>WjI zbL>3U<9rkAP8{a?&El9tqScMiJAk#G=}Xc?%(WWZuEPtJ&{HSBt=JKR$+$TAG~ax#cWuNocGw7+=PE8{Za9haH_f z>;lzm&Y*KRJvo83kZ~UWVXwe#8m?i{TfAx#4_+*d#fJeiF=SjZl4tp8ct(-!Irdxa z3FLV!>JHq0=z)9P37#RaM^$)s>c|1tGZGimn_QJ$7{;`Ce# zyS_A)$rF@pGBA$S*WtndNauMUNA!76^RQ(L|Jc!c{08I!jpf6NcZ6q+ij(z^9d-5Q zjuFlz0_W?*6>M|kk+IJ%P;h3|*?{#&X*lRkwa)&d=%956Z{>Dx*v5w}_Rrx^K8a-n zr(kZ=$gvsDz|75X-N4EAto;F?MdIp>%M1Fxy;5RY*dqk(u;-XCQyC)XK6^&YsnMQ^ zsR`qk*oVjJqTPGniNCBVHw(4X$u%^&V&<32l{i~2SM3Ci`&(S_otAPzOF2%q=5U7F zx|${BiQZFV=dh2CM{b@tjZdz$u5$4DhviSMO9{?C#fE6iVZ>r)F;3w>srRqPoVS-m zTc>}g$IMw}>%vD$ed|I>N`1!#jTBtRg_9KAiL?s~9eB5M4tf_tI&jv{)D!p={4xJR zgE>LACl^T!?NvY%`e41)onCLxsM;<926^nU52HP~WEaHY;1WFPg#|%;;50ml;|Z5{ zrj&}qWdRLM#d&8usW|U6Er>gJmS^FeC&y`iTf93}A5HHcyJ(Q5csef8Z>(*doTup* zMs*Su^h@F7++{1AoGWaF!^uawKcbf>P41-Ul6>mqYD=6ma7&ys(9LI94&VrKy7TP7 zueZSD#35XtthW7nwQe`@@$1`H%dPpgWuIA9sf9>Kd(8I9>bA3ecs1RLGwYPrsE76A-|*ZpmvALnptkDS zjYaP@7e))j;o=7MD03L8*1B*v|3d6XgBJ6&-u>0l0?w1R@lpn%NU%3)v z9E_Pxuat{^1kc^zd2C`7m1mAlnI~j?o`aLqvv%q1aK~^zg6DL0nZe!3jR05w-g(F4 z@(A3)VRPNun#1Sgs1N1X8k=tIkggoZGOW!XH#b2|3s*ikeI7qhpk{lcO?Y^-QT5<-1T%Mh6jZ??RcDSQv58SLw%F(X%y9Zo{GN(EyOKw?eyR04=GrU)3 zkKN`gJ4d6zD8|=zP9iseuk6IgABu+X|D*W+4!;7l2W18GMW9}XcpP8NVY@x%U-G>g zJis-4@u9)H;u879E|&VPZ)k2M)XQx#PX3j-FKYgJb^@Z8$^94A3gBs;J~9N zP98sb>L{*rum$2r8{_vrdT3zK&_>`qc?yrc&A52>o;Z3Omy8deJY^whVfydDByOys z$$KB|eb1rzC>XIlkDHQ~Cc+(hiRGCQ#PZC$Y+R1?K6(NJX3!aL#s-_5M0fU@06%{8 z#DQKJMiFwc%0{Ng-_v_)(Dg$rUMG4ByQi1-yqo?qkr8%$SWvF31ksO!#Ul0DCJllGg zD4vW!P~7vPyiT!aZjQIAjqIMihnFN~?{SA%oUcxfnp>LYc^1OW!^}xJ&TMfB1ixXL z;{}n)iL*1f2j|#veH70Ymhm*=Jf1Kd!>luEo~u&s=#4Kf@@*MU&E<56a(b(vj z3&W*{-g8$x_%OfowI$Et=&)n@+RHoO$>kBBo@?SSf}Tv2$Nxoq$?U5rxdHio$PXg_ z4?zFJ%m08c!hce4^Dn>r!~mWF z#$gdXTrw{~itXCaJX{Wtt(Uw0$Glpp$FXT({%oJBw(TAtp1@V9^SlJpPV0D&4-TC= zF;GyIqHpR+kI*?_>yJ-AHFkXLLj357_nbKS_z4U;8349^0JprudZpz_Oan6)a9mfq zslv2BaB^Va%%Q2#dCb9Om9wl{mH$19fgoVw?6KHYzpz5mCCyR$j`bX90}XZMxgjq6M1HvpDJ+nvOm z3KILsk9+^vJ;gZEYWqms$v22!FU;cV))+b~?!kZ7A_qAhj=bes(C zzO8X4F1X_0ewLcjAhF-@-kSnbc0OvJaymXd`(%vIe9u0awa#$_Fnh0L{kUQuG=rK; z%`?Z)7O8HFtk<@Eyc_%WJs2M~ADeK$Tru}S+sBc`ZS4o{KjV?C$uXQvUBH7Ccnkf7 zQEU5NxMH4Zvcr512bETzCGk2uIX^pos;_YHc%R#=^c0fd+WhYS`u*1Jx7GT7JQ4i> z{@#iB;ox0)@bf?3_im)`{z#?r?wyzIc<8D>y8R*K@fYpyx^3rvZ14ZWmtH~|J&f&# zANn^hAdMb5{fWyS`OJ^q^a!@2yASUAo4y8GBS`aZ8zt-0*sdh`sEO^k7iIXvw<7=W50P$i`vCsp zGu6wGu5ugqo<5Af%E6ER{ZAwP=lH`%E~B_Fs(-le^vfT{cBKyovco7p621Ik+_$Un zuOHhdk)A>MZ=XAN?zgdxzo-to@K<>e+rNju4tb4N@_LuQ4(S{4cQ^iaxH6`f;qP+% zy%m2w_~ZKgZTO4v$H&J%i9i0-d@ug)!yi|t=r}w<8%3_;qIY4Ni(v@>m(BR?Sm9oad=dFrKuE>D7e1fxF|O;#ZwI%Mf~zP#`n#ZTw4ZvBvuh*`6}}LByvLgsOO76pWqnJ2)LN3 z6XLGM_DesP;5cTpXcs#S6XK{pr*PyeBELw06XNJ+q;Sl4As@5c32}_eiZ@l-l;4&!x$}c83c4X<0ivzf_;-kNn z0FHiS6^{1h131Rn_hU0K4s=|WzF^~0M{3W=Kmw6C%lO;;Rf~&(iw(m5=i{DrxEfN< zF(N)L<8V2ov4D{JxazOCenaZxR5P>5_>~n-#y!h(C>P;=o)6%pUQ)J;132>b{c^&` zIeZ*>-(U7qqn6;f|7{{4BNY*U?@&0}ms2?LgYAn7$NZwgk&}G1`(wYB=q2Cs?<9JK zkMm-sp5U%QzJYuXQW3FF#zBO7>g_=q3kWH3Dr+`rNAsU0IMK`U2FgWf-`Z~{IF^ea zK5kjzgpcF7h;k9ey`*p~Cm;1J{!ey3T}FB>@(rZ^xcBX2el6e!^<0f|*6%~g^a8OmBc+Jm5N;JyPj&_P7_YfsPyFS)SwlWXN)bNdUQ+We=Yx#G5i9eW)=PV9XcrRz5k8jt zxTO@_kkZS3D=Hj0)8^;A!iiquwa|`uo4Bq3j_n&b{)o`N(mzl9Wx2$~$MtU$7jF~S z{N3&8jkbwf-6pQOOJTG<7EkXf1K*^Qur5kyp)l~z>E0fse~{>9e>9Mfk%|yUyZ!Uu#Q@Iqo5z<6;J6+g z{ryBQ{jDM&BNd@u+Vg^%hqw+~SM!VX8~v^S%Y={T0a2rqkN8EDi;%yDyg&Y=UQ+tM zq4-3v9;f9$vE#3bG?s=)>4(PcbhzvmxM%;h<*Om}`4qj`qRO_g;~*2jg~nfn z?P!1#@^QSp^nWINJWtO2QDPsV#L+(g`pW{^#RNDJ+~EI_@X?Pl^8ErrN*v?0@x=tk zd<0y~)QRwYOySHpMLre~QsP+NrEr{Iv&iR>iU{A&{_lxiwp&F$77$Y6Lh&mCm-lcx zkoV_<;{Vo(qn^2cmFVSuSw+6b@yR%#-dzgE`5}vZ>~KuPkF4r9@)wXF3g9+jj|g$y z0e?9TnqNwA9B0`-4eRy$V;SvY;6-R3`8Kg%i;yoLz?nGXIv(R#S-1Q7GSXNYB5n1D z!(|*Uw*~IGKeK#wq&}abH=ER7RygSomJgv^g!y6sM?YeP<9N;na4c^it|DeX2*jD? z&nq1Dt^{y8elPu{^>-7gj4SG4{CK=v`ge(5UeAtziHihS%q(jW9!<5)hfaDYk#A`mIP#SOIQn<&@|(?ge({Q%BhIHyr2cW0xG(RtxT{gmc|4EQ z?>Fk%1)K=&%OUUMwB9-BCtnq*ua|MziE%?B-Vd*pBf-(k8?$ z2XG<2g>B--12_{Gl#7`D4d6n0qX15LBxSpG_#e9h@t5PTU&V!bhg4p0Y=5;^-W}lM z_=uy#k1pgFk@x!p#ce|V2)Nj!$$5&)wi4pjUrxrowy*xz$^JoHJ%Ho*seUcN@!o6v z51o83pnUv4Cb$*k8~>$qJ;~!)qnY41zeH%~k5gV>TK^9TE`xj)?Ml{hwld?7@gG+> z9``HAXFVMI?S-!-d~DZ498wXP4}4tn?>cd$ul{X2-%0=%(p%Xkt`NY5^mcC(w+?%K ze?xrB0UYDCPx;G!EFkaC_aT2b5qDp22v-l_c-$KNnqrZ)xjCXA zHKZ|85gDg~%Q##vfTNx-UYX1LwPQSZ*KL@)Dow2LjI#TUXYZxdGszt2be%2y?NIgeD47aX#!^?|=`&!*sfKk@;+ zAwM#TPvRHC^#u5cpL}iN2mM+@K1M2%7UxWWFQj)PfD7qe+@{`sg%f|7`sWK7g`+QN zek=v-qaS|1l@w0+IKH#5OXBw^^3AI|kE`U<^El(&eRt=&iO1#WwuF!K!{S|?d>n7j zzTNJ(UqpI6^3`{A_8a38p~Q2EALI4>+Y&ymI~&O7k%~zF#=8?7=b<8SzJ2Tu z9~W;ExBk}c@m05pD{d3l1HXJfy5Pt1?TNn}FHPiokcu!a?58ih#m=W+M#}2~8Q>}c zLMpfyG5#2zuOcO141CGMQLjHv^T7LhIo@({VjtI`736)KJ|5L?wc~mNX$-uG^sj$^ zdJ(t~pB`5n2jhxQ#ud}mTN3+B{E+wkB`)@GdE|>I7fG|Pc5|nFjBke@+r*UuxX^wy z1YGQl6Mq?p9+ZpFj(h;ea(({Bc2Phtd0%{U!e`Dyk@w?AzU++&j(jEH`jLuA{Cr$b z0H?=GYk z@jBKEO-^}2+Qde@OJA{7yT`#oF{`MiLT z5*OMpyMc=xPV^GzKj#rCevPZ&o7l&AHjoeTEqS=*6rARx|M~r4J|CCaCT{(q?eW#N ziK}cAS4hE?ytq_UUgFF++@;Eyj{|%el)v;~(jVME3h(aRFWJ9-{1(wJMma_F@_F^0 z_a}Va$k*SsJ-!NXG4Pa2@zrvjd_leM?8Jrqr~nrmty}1QV0(Ne;I_k8MV$QkFJ#~9 zzD_=_myg|-#F-Zuo5=fop>dD_&bN>8esOQY$95aY`#6?AKy%x2SNaZXG}RJiemB$#|w7 z|N2k_9M8ih1^ z%0b@3+VPZ1us^8pdo~gelVX$ zK1NE>aoNl#IF@%Q9I=cG*FUEf&YU+Q9~0n2`eXT#gwN*E?JINy(23T|BKO&Z`^yIM zF;a^7!Su9;s|0YgJEw5W=TmUq9xe{x*iS_@A8?+lBcDYoBKz<27)K(E%d#3*;s@>V zam{Vu*e>o5$7ShwyWYxsJ8|r{hfpp;dkV<=eh~N7LOZT21^0r7t0N!c8})GI6x=Qk zmkr<;hmDhoeT;Jxd0#JaD;};Mz|r41g=1V6QgA&A$Kyv1`537P#{tLh$4(^nne#W~ zV*w$R{rn+?GyM_3vE1+974)~y_jcgczBSRyeD+u;j?W*=9ZhgtH^yieBc)Iu?aLrN zhVdrC^>jmxKbDIhGM`@kq@AyFNMiz=5XXL6L%9go2TkPjQh-$W78Q=|ssTR6f9U-Q zAFuyakS`z=As=z;NYvSgJ`)?L$EFh%B?LfK=oCx*SkdLJRsrYe+!jUf@z;RqX zf8OImK1Ml3;>`Y-JeT13Ti*-2 zr2uKjU&f_to45wz(ImvJcqpP`{nh-0>@ zaLg|wA3KcL$MTAYTL|E2-;jqJ58$}J%{`vj$9b)RynkLxKL5T(4!9WQ6m4IZ;$yo^ zfY12%SfZEt8uBqxitw?0#ltNIaJ(K~do%zTA>>_DQI_B?Yc z;bXpkV0*YK+J*SK(O!gl<8AUaQ~0!frT!u8_4_nCD#{UP=3V7 z7Y1+c_#Hj_P3FnMl-2d8 zL%~tcg2FMs7{GO*{A()C9M5^+{Np8g{p*BlPbGR$-5P&|XA=9kzYHNC6W~O~ssB63 z1>k(WwA;ruzjJ$h^=;yofXj< zT_0(;ukbyceAK`GY=YxBjTBDoVTUIz?MQ>5z=x+)6(0=LnTP}s~OO+&k^rMM#80F;6A?5y7R5)Z)`MMNN{AGX0asRmmcbq{QlgLS$ePx9c zKH4>eauMc>0UY(l3P-=P0UX;$3dej`0LT5X@O_D19#0mLkCBSd560`R?@e%APZyC7 zjjJa5Nrd)oBEKjFNXbV%b;ZYg6wu4~bpJrYXZCyKW8$5Vk2wFmTWjby-#*=MrBB;_ zTS6KO8B+2Qr>`rMKd*4oZ>pKuWSqMLIF@&e=O6CWOJ4tXHkA~d|2xB63hs-aY>(e2 z@_t+x*V78eaj}4Wj8sJ8?5`urKh%li`s^kAK39bEa}>at{=n~PMQBIucjYD+h2Kmpgy3JuWfwG0G{@zh<1mZV?`z8lOmTEN_ix4;KY+^lx10CEp_Q(jTHX zBNRddc_DbM3ey^072TNc%Hn7e2i3tIO?e@K8}}-03YM$ z{|;^aQ;EOi6uubcBIN5wz9I!kiSzw1de#0$IC1RXeLrgF`(sFHM+IpQ0ZxQ(d@0du z;)i@uKuC$x^G5wMcHY=P8hbd}=kFic9}DBYfN~M)T|<6I3XqB)4P~G47x}7(WBY#C zBSKsW`Ee;g>ibdp2{->CjXm5BnAe2U&|l7Cs@gfFCb`Nund zm%#qWqFjXiJ&t@V1xUp{AD0i{sJ8@rL}*VL`DH0UD*f>#rI*LWP2~OcIPLM@OR|ah z`TeWMRqgXOerrf$v=TSvJFajO9w^^PhW<5>>ighx{HEeCKc_kTya^4Y{b zwx=K5Z<;@q*vJ0usdnPXS5-LE-^j-(7m+wWq;O{4sc> z5_sCXgfu3=iI4m0FIZd*oIj6C8%b%$8t}0zkT`cC|I*JT_VIbb%+Gh8H?p7BmJ=MW z2WHT&fmFn|Z{M$3`-(_?`*fVY@CA!oN9yBf_lv)p=wzlc<1cw~C^95PS- zi;v)4(^2%A(>L7r*3W^ZUQ_+(QpvbL(S|d~W*VkNnB&f1mG$#_y8)2LJnQ ze~rNBH_44!R{HuR@S9JArZhgFiHLt#`*KetWsC#zb zXv(uL?a&-*)B$?+3RXYozANL>@q2DH_Vv8g+G#Z|K(RkVsU7v8o*uGRe$QiPOdbDUeDri#zZ@8x1jX+SgrvU zRs9O>IIs&}PC)#6+qrdHa+|(Hp^gjng@kr(s=BUkX~$*$?3PwD&9|=F5TN}lqRkL^ zvL0892pf!9N!2f4+t*DzxrAHmC%+cKu&jnQYpAbz7>%d?rmF9HV^}}Agj?$;zZSum zvUT_mzAXOI#Q3l37gF>`;1X`FpZp;qc2(7_scqs5;1kh&H4i5`iLIhd&yCQ>zZ9WA zc~w7zZC^K=l1sR?e#5W01;e5y+AM>wqWBfmY*K$+)vu-KCzo(*{p8mo7?$P#9R7Es zo_{G~{8#lu*bezmF5%Yt4Zq?R42u@fW*K}H#jl`dllZ!-Z>Vho$RVQjl2?n?yNovR zO}nB^52Nv%YjVJd3}HKMEkO)987qpmgL<@RJJ#qw>MI_`$JbSTLv0gB4iT-Fyjry0 z%wNF&H^F}oqw(}52aHGo+rDnrkxRI>e)4M(49f~=Q$>B*!)QG9uc-P4wnO^KCEQv+ z`Lzg!WsCIx&G6sDXuRovU_^$non`|ulU5F7s!1pj#CORJd)C%ZeT>R*bc>$T*9sGB)=BHu&f(xDySdwFd9$&ORBzx?T~(Q z3Affy{*Vyc)OE3k`*-2Eujw|5n0$G~QBd22HzHYK#FqQ2~5SSP~xtf=}1 zw^d$nlz7SskcR#SP!V8b2JT4SfeFfWTKCuls83T%r z7xie-b}XSygS;L_<7vl+s_(k}(sqzDWC!(V(RQq%%@BCA_)8OVmQ?)$wreUc?Z_qE zIu7L5lGzCN@0y2`HsoxoI$w7_g|Fw1cDQ8VmvC!4$*)B)EUTeS34HyE zUt_sV{R^tTitSaE7d*LyTk9u(oBUOHzi9e6*NB{5Z%a6Q-J+B50=VWb>infD#v}ik)V0(WL z#y|ejgq%fHU&eN5{F6(#wSMwz5e&=L&}J3&RS%=_)W5FkH?bYkPcGrs`pK_FFf7ab zHT=I5{^KuAjQ^^>jO~zqatXKAPkt?eVObt+R#9K|FdA?CSM{6N4(TVCaBKbK*CH5} zRp|fQ;XnS;#Q3l3%h(R-Czo(*{p8mo7?w5YKkBOdV*;=_i+PYyITcA{dsH&}J3&RS%=_#(!16iS3YnatXKAPkt?e zVc81(zYG53FHMa9s=kcvs>(|{atXKAPkt>;;6yZT)x!yfoa?I2*DX4UCpUST3a@!& zJN^ph|GP2&<1bC<_mHYDVLKFea)}MvAM$G%2Tnxe>K;xoo#fXd7?#mD`Z4ZdSf_DK;8uWH4B&{R@VM7d^-XN2 z*-AV)=^I7cOFde&9fiL||KEfD$6uNdKcwo%)i&FZLqzK(uNJL$8EsZjzvy8!p1w3x z{RXx(*>+Ci$tB!cKl!z6q}Z7YaIzga3#!i7Ejo#f|L&G(0obC#vs?@PsjB)FY_F@l zV96!i+8^?3DFP>=ab5Se;{-#_Sk?KuMJMq~;2r`ttMI}jDaU6?)h}Xu1%H{nVg2L` zjZf;)vX)Ey zu%zni*xtZj?tb(G{?dfp>^q9Khx)Xvq}ZKF;igSJs*bj3k@X9oiPU=2)-OKJU%yZv zF%*f{g3@nm+K-R)iT2mFz^&o@k=F^=w!lR=Co<>D548JA-MT-U&|3heCx8<>*(c+w zegWHQYeBXlXJ~(-9xd9A?0>}dCDhkEjNpmoxN55U?ssB+fWJljt>7G2)TgBc zoQNI=<0;&wrGazYa)!GOi?E>z+>P*Kws!w7)CYZkvy*0yhLq zHh>c>pE)k6`YN`!yKj?&I@pI49bf9zqWu)RRy_>y+Rt@xcfSkk{{T+7IR>)8h!n70 z#-G2=k$Q55#xeD1iT_jhxKQ|YY_~~dj2!+ zf4&>zAAe~={r#%Gi0#n%9=U{D>nFb!!LV$T{-b`u!)QEXzpCmtu$^XuaE8Vu^=Q#{ z6kvPqA&hnWr3pC;s(u{Xp*WCBxOE)J9};4hRo#l(CcX?l5zV*g;Y25~HMHs4kM)m- z5gw-WCk93&hizXs>&PYCT0i-<2!>^uuVS5s`l5%?cm#Tg3{)x>zK9#{GvVr!Y{UqC)V5F_IsUbd@Ls+Xm(vI7ft8q4m%&EnD>!`&vZvu>ZA)E|xLo zjBgoZz!!~U-?AU80UUi6tk%moXc+=dMB^4xVr7p10eviAQ`{?#m%n||yiJd{ihOW> z^mK?Xw6%i1DI$JLN*~L$aLjhAF_D3uRd5!({*yL-Irpj1xaWSRrH=e|_gUSJ`&m|T zmC=uR{B@zM2|F+KtheT2TozOu7@N@gkn!?`ZOw60jeBBPPL3WGtF+j09}dNd`*lc& zEd}bRb5oTwFVfF_2z|Mr`cvvOj&lR&fm#43bZ zL;JO?dHF8r3iaD&U`{6wu@zOvF{5RxaismEZtB?x_$i$1w;ol$-Lblc@hGC>QS$uX zU>`ftxHUBfSzY$>+7EINU-K}+%ar)4SI_?9Z!$CA)*eF?nK(C3B;|`|v7Z)_JTa8b zzYov1l_xr}#511NfuyeTe}~&|1awLJNY$7{B-(;qu(!aCzoyVZS%OJ<&xQ*l#><=eTb~w?=DcF#jKE$Dk_e84By^J{c}& z8w%sG2^&T9xT?O4^MCMmsdx!aQnoL@Cuy(C*B(vE>+cKO(e)4EI5Zzi+LAL1Txfpj zQnnLUPT{K!xAU#1#J}4cH{+Wr_IZ7<{@=s6SnWf`zLfF6Itt^tqV^9{=*mm)ZTEq7 z#1E-hE&R8z9h;tCx}UqT57p6EP3#M4LOorcFT}FEnqpT&jf?#8aQ~BoLY`8wQ$NdN z)yKsY|5i`6x7GfwVNCR63^%+OP_GE}wn^7SC zIqaLExMnU3kC!EH-qCt`U|SXTjtBH;9LGGz_hJB7LLZ9gIIMVasHGfdOWt^HVm}G_ zCpx&FFn=)Cg4On$_={4cf??4R#>hC1lhpv9#+7jVT7ury z0Imu@dvMI|NB=AY#-XUrryM7^--U#6sAG*FqU~8n9}J;ihB&r7sich4nm10%DgD!? z2m8hX#!Ee*N7T~JhFaH*r>yTZFV}ip*LAD)m+)0_oD|XhSn}q9BG#H)jjs*NeIi@Cf2(301nkg=>NEmEyh#GF0H@DxT62M)p5enMXTTnwa;K* z36-yaBUCPYv~N-EXN43Vj&ZS3$DQL|O9_3wo$)ShxYimPNjO9Y>$%3_dMft%mUV@c zc_xc-8xr!?)i@N4*^g4@6CRs+9IgiR>-Gijn87;J?`mDzowB}LRv6)w_EB5^hv%=z zYp>(ijrnUGYnozUomYa-p>Z*EI$XYnxhsU%`pP&q<hVLo7QwKr2gjp+ ztQ%rA&k0uJx-k~2@Uwp_9QuIqE(LJal=Vd!bGMc<=J-$?sww9Kxxg`jd>kJ=>NuB7ENgg@P0-?E*?t>BnZ!}!bxaJiKJVjJPm{Xm|O(9W!yCk121x0?6Xw=u6*Fdi4t zpUr^1YbopPjM_IvH&f~#Qu{|`8|R;^>R8HiT+Tfm_p@={8xqrB>RJQWRG~O>ofQ(c zUslISj_pu;j(06(91B9Yre|k2$ARh(;SfKW*Zs}&do7}aWjv?g`NL9RzVvleQjTX0 z#KFgsTkGMq33D9+=l;H|r})kFhL$XB4CxUJR981nWXs7NM|NLVU{)YV1_BAkHWVpr*?57&XIgayLDS&IF9G@1{K1N%4 zOc73PH;*%If_)`qcRoc=#T&a7%n_mXqMN#S&7{fWnA$JJhNTq!Qg7xDHMelhCEVIC zuEVtOT2%sML?!?GIo^*Z*qjewn9;P=lF7BGgso;8%#%WEv6Tl>N5E+MJmIPq%R zKt1)8_=|1CaBeg6n70OCU5t2z`k!?a_FqM{<1tgXwck9BYS~OVuU_58`A!+J-M}1P zQ+kD4bTiL=iTll30GCf$2gTl+iF`}=<9PAH7Fhk2V50;by-rc)qfZ<$1L~@*Iq1B8)=;e>^YKqV;nP z#`RXgTeE3AISa}@&Yi-c zFI;c(-Jgpo>k(et=XLyy+FymE%R6T4^(QfmdmexO`cv;m+CG0jLQ^C3yXdV!S;6up z)!*wlcL~Kci*xxm&d927i6D3|m9`cupAV7oI0-;Wla(7XVt^9j{TlhZL~eqN&YTX&o-1Q%0s$pXd|M> z^_r(!>tP$#mjZfLuM8g-dp^+a=jsKFx0&`b+Oe@S+nBqd&Dqgr{-;-&qWqe{9p0rsb)%lR-a6`gp(=l&v<m8e+bT*enNl zHEtYZy@>cW0=Siwd1}M&x0L;5&Fh;y@>|7eS@i>b5L@+rL%%{|#)E3lIWN?n^Pm>N zu#Cq#9@o|bV~+cjV6{Em&$Mt(4&gXYYhmm|IQBSBUfn)@wX9J3rPFA8Y`KU@zCShBrzZd z=Pu4uO%KC5jpMP1$DM99?-4`cnnkdB+;ANe62@a()k#}oOX#Bp?5PCwXdGk3xGV>7 zP1qUgKi!^lG3VWlK>P8O{aCkWtQpsyK))_+LqEqh$MJZeeSgYvawuh9>`Ez*w=s_M zYHTg1%=6msJo+aC|6;YDN*}XMuzDO2uSGB{eaH5GCsJ^is<&-kF``%)>S+=3hC$hQboLs@eTpgKz_U24aA2W6dlL1=S%e|%s;q3x!wCaHN+(JJo2K)o86|Z(ucH@ z+~lb!zgbS%uJ7F`_Qmj13-#9U#~3kIjLT*~FWX3eEUS8LcLD9Q==YqbgKd|-j`2WF zj)!Fx%RKxE^&`in7TO>->Hel&zKB0XWv{d)b^$t@sOt)}6)x^ibyc6aDm*SKfw3(d zOR#wXdP<5%>S#k~oY5{VtH}HJvRSYF;h13muLbn1A&&n2PR;LcYhLkuuPIPcPM!a(sjQS3vmdoCwdU?P`U7Pjwzr|Mb;3DkiLE|&N<*D20G5Ak0xB?6b!f7H|&R^ z>Q|Oi8t_xFns50Me5;6i9s5-+z?b=MtXojNReZ@2nrF$|CWzy9#_ssFVLyuA*jRvV zp?;AVP&c{QZV_W8O}L+QeQ#2)+izfgu3?-s0`0Tl4*A_g+_a2i%!cgj!aNshU-a4w z7qLBlOi@Prdz5`u_G0bx zcw?3I+?TRyUa7%`P&~E0JcjUiv2Y1}BnNgPvX0jebtnCLEDjo9V_UYjGni^ zqlN3WuJ21?UjRPjANxSKb-%G+v~VsC;W$5sgnq56eQP^&DtXv0R&iQO*>6`o``DJk z_UlToDa3zf9I5$Kd|^G;5LwKlMQ<*ZwoJ*}NEwG!*f@kZR4>t<`Wpe8xu4}!Kjl*9 zpG?YpxTwZ3s3MLH>Z0iWuNuj zb{fY%W`Ax3aDr#wmQ=%S#={de1_F z&4N!v^W_zW^`ev8Y-8#@4C@x4H%&L|$x~CdY2KdeF~9#1`ai&{af{Gj{RH|yfXks= zO9uJu$J)zSA1~rK;$d0dNQrOH$J;q*tJtLDM*Fq&-w?(XJ>7NK6S7mdsB2x>(EOHg zzpW~av}MZn%Yk^YyrSZ>0l!4FUp+t2?w4TLJ|ED@@(uVT!n_D$LjUst&P(Ge)^@Q=Z#@I z$GyH9_uA!PgI`A8A=tfc7~^=V2Yi&65z9Vie{KYD!o_&3sPUuAE2_UYJo_`? zz103r-X+~0I@SXHyo@;c++qV$W1rXOET^9Z#pln3Iu1?5i}OlT*+UMB#<4HiZ{1$s z`M71owFa(y0B1xinQ$qfiX%P^(-pCSD;5kw=Z9!eM7}%6MgT`HRRLr?B~7;osGaaVP6SW>u3M9 zNlHA}Pg;bFW%P}H^sBfER^vEFaXu<-f#b28$LXa2jy?*f_Je+F@#l^V?DNZr7cOq| zn8D*iM$LaLr}+DyTmtxAiy5wxbIeV+AeajT}jnTJB?chZVi~F0IrF$ke$Lq{dLuj zT*9r#3;9FB_Cuda>f#&2`|Xm#kY@w=tXIZz(amjgv0W*EV?BlVHC3Nbv0FQ z8sR@*H?h)I`_1+tq2C*yPU@sBv8&y;Muq2a{)@jfVf(Ub-$>EF{$uSNn<=<{4<~x5 zr}3lh9IRvciqc<6;a%~3SiC75r=q97fEY+jbUZU2pI~TH6>Z|rVEy+ao%S|U_!=Hx zV+rdc{P{8tT&P^@XCE-$>jC}3$GF8RZks9kG%x#%{gYGegl`k&A-hV5L#SNyGRBPO zVt{u6K7`t@r0C0~;Kfe*T~l$Mkk zF~BEnh%X|RA{*Nn2egHHHv+tiDecFB-R`qDw1x33s(vfe7bkjuS@CShr1X=H3%S^C zIj|ovW`fmv7)LGRDf@YsvYB|{;x^l`KKA;Ibt3dT6R?Zri>h4n#^5cWuAIV4EU$0& zsP>#oghTtu`6VROzpBPJb%xs0j*zf@L&Zkg63e-j^Jp%h+uuid?2xwF?gH9t>3(w< z*Z-64IN@U34fvG#37r20?9e!JlV>AXm6bN@%x) z`XLX)cAK!xZ_9EK^7IGVF&-6FP8}k8d{VELu4-6cBPAX~z-!Tdu?_399!BG7XH(m- zD{N=?XWR9}z=#8n` z_9EKPWrdM?rpDi&PGXe@t`flNxX?!0vlhVVwnq*Q9^(tRim!>HJ#%B_xjRNDsIzz@ z{`>SBUD<^xQ}&B*jMkyV;x0_xkk{n~~>x2KF30HF(F+!CqqWDCd}Z=vYTt4t2KeQKO^#t=g8Orfu9-cFeTxX)iOlY+G5u z;BxI{2WU$kWqj|M)mxzXQK20-#KuGIWkyG_t!&Wf7;i5#xDv`T8#|*tGmJatj%%^s zQm4t^F-V;?l%4)mt89j4S7WR_j}sS%```yZIC>Uc6fJ)a=L1Oh%*>74akSUyt+kas zVf3!(vO$Zhx0PAkD$2OV-7_~iizIqUhE~MwpmA6_kZ0H?I~NIHlN4) zieCo~lfR=(p7mvvVG`OiW-+V3a7*+M%H8@vexQP-f|)(jViUA%|T4j+tojmRqA|ukMZZoSij(;bke&S9ihYl50>H zj*6h!Gc!9ga!2-FQWjBG+0iO9HnMyhQt>f6ZofRbef+X$=UL1h*{&$Na9MO?`SR#> z<2$1(fB3TOj@z$|ZeO}Ax@G)|=*Gbtq8s;JAKmyX*Eg?gyuN-->FVNbJJI&bZ@}Cd zMc>Y8=kvRw+mN*7uiY74yKs4QMR{kmGsdwTfBPIx=dbJD8FlY_ZFJSCD@!+QTp!hc z?ak&{9nKqhkaGUJ?)I+e_PI>-=F!(jZ`^ln^x9v!tU&CN!xn(0R2@Fc!2vmd)U<#7 zWzm(VF3Yk_32ln5{I4DEYl3^nHPJifZjRnI`sV2NeQ%0x+;Ky6b@QtAuEv%1orNf3 z`+ldh=yWc+wBphdQtD*=PT0VDrmSbm`pj-?*LPv^V%cYrVtS4K%;mp=lpNi6q7d?K zq}bh}i!T4YNLhc~omWM-?YJ)bmge>A(l@WmUS(nvdv?~Kmr`{p?Wj7QFLS4dT#J!L zJ!j2`i=t_yM$a`n%vhoSn_sZ~Q+GTKq!owzSFYW47@ZiZ(LHXIK7`cgX*eFX=P`lx zJFeOpUA6Bu(N%k|EZ%m-WziLLSK_;{m~XJBm6z=p)A{R^T|K{H?OJzsHIbIkj=aBP z_EgLlNNLwsT>kG}z2=D=58GFrUDvh7#V(ACHwVYX+OJ#vQO(9VMoQfU@JI^PMq(V{ zST=8tbW!wCq_pd5%pNTN$h&MmdMM@#{znXb zbPy@|FSz{2k+S^?QrbV5xA|eDlMCC=ogRPxrI@98z!=!OGU|IZz?`TvHL_8#xE`2nP~cM>Ui ze*)!2jPrpSsEerxb@A`m3p_X^vJQW^ zmZ~`3w;Z;0??g%t)>Hl#Dcj$4)n%Lu%zQ?D+P)3WlH`yqMly>U*qT6xDjw_3_;BcRH z?dnMB&+obX7hS#PX}Wob?He-hyrnC8%iImoEu+^*Z^Hh4?SI;7VzCM=rRjLqzSU%- zzeY;?ZpvK~y?y+R(OdWBqBrf>6J6W9di| zO1*!FlzMg@i=r!$?ncV|MXcmm|9wbl=iebE?;9SAqSqsR0x9$7k+S}iNGZRDl>Pdj zT|Ro;)?b5^@&=^j|9_Z!_i#C<^N)K?viHu;J|weq+>_(%93&zbX%KZ9hoY!X)6l43 zL=fsQB8WP4N|7ox;?QUvhL&GSwIg+i79ASIu~X7Y9ft;Ks|*d&gL*&TXWdWo%-HdJ zuiy3l@viII`Q%>rTK9dg^{i(->p9L=Q1jBRCLagYz9q07K5O!;rVr+ydF?JStF3PQ zEwb&UlMux*=TIt>E{2MuV)DyS`o!o~H)LkKHlW&3X)Cwp`ej>EI`(ElJJiv5(qHKp z_4`;nWuWHYoaJXN-q(%@in;$n`ThQpz8w!km45@OPd=CR z`H3x>-Oz>mxuLPWT?_m3PX=@Br(jQOAAZYyUza_~xjW}NSG;qS^J}VB&7-+sO*OBd z%OA_QK91uu`W|^`$V=!r%6y-g)t`2?Zk$K+v`eW>UG-UXOw6`6s~V z7Qfa{MAmL8vzt8L*NY8oaRZ5IAY*UfwDw$LP|WqGJ?h(5D=WL|EB)QIe3ZnEDNp}u zA1Io=hoI6^CQGk$8C3n~_?P`ecON%!W_z&DRhi$z6#AR+%X)uB^H($bBTw)(ra|?S z^h$U1;!pPd@v1}PCpccM=*8#K2A^eY?dRRNwD~#Q{Ek1-`#lgUJstHs(;rXeBYHe7 z^y0JQuKIS?u%mv>n*DE^{i{uuUg_hgKRbTQz8$CiIAq%vsrM*hIy{PQ_B-p2d zKAGQ3d_QZ5FaAs4Cz(@x`%i{SD|23!UTHMkxZSNkWIx&;rSeEuv3k+5x|saWCeV69U1%A$)flgx~jqj4_KY&V~g!UTFh2vHyV{yk9nBU0$u-8kBu^mya_JWj_gJKLwT2X8$m=e-xDd z45;$og^KSwD0{zvvi~qt`U6ya(fKS#Of}1&ve1{C4ppwJi}`4rT@SF>)5KCVeRRAe z(O1HH(PQX?e%oZI7eD>eb}OdOqL)wE&xYk9c9vPWoRyQkqLuUWXe;w5b1Cy^F#peD z3!LHH7W}Qc*Y9_Avd+6HlS6+^q)b$9+s$a2cy*e8o45y$kiuh3~KyAlLC@=E*)lm5}&hp#)WGMM< zs5JYVUOoaUCAQ=`7e3p$-qXZBFMlcgEkUQgcX#`35QnmpGA1owjHVoRRqsBt|B%V6 zq3XAt?c*8(H9pUTD*q#s8~eA_`ZsOfYF{ z73h~!SN_zVAQ`hz`-j>mhV2TOAz$^xXiA&E6;SC}sCK?+@_SJBCY|f|!|kB<&l{lD z*Z+dDJLWtuPk_=l_CtZ#RW4_7H1;&zZa56$X_)U;S)H=AV{`3EhV>)!eUZBPFu%d> zBD1UUA-`e&g!bi6sbuxvg-ZX-`|Z{KZNHs{Ld}`v~*uIiVp{JT);pD+g7&o?`f^9zTKWH0$^em&AovL7tk#+(>ID6GkMGYElwYNgp*_znfBpzSr7Gsd#~p z`)#Q7FQ__wzvFFe10^2=W&cW(Wkcy@C_h7qM=82~Rm{=xzu4N4p={OcMUPKq&c~7$ zdOxv2t!@zKu7kLCGH4oC4RY=NI_%n3SE0<;F5=!a?drj2y-dp+$^>)zJipctjys%3 zBroPCtohsfL2n}}Cwlt1p6T3=iVbr8tNn5 zQb&DW#i#1*zu0RpfRcXK&8)r&-*zDs?2FnDY`z1W2a*JH%Mu8Y>rMWb$zQz8`%`(PXurr$ z*U%Q%5lgt}wb2~;YIDl!WQF49Z9BI?ARj|3WKwX)op0aE@29{C?MZdjnu# zZ+si~J=+_v#RS)w3X$!qvf92OQ&#`y*ZFaMHHZTHvE?H8k`&S3FK?YYg*~Yu=G(mS|>UdNl((b5_sY=ldWImC{!J zFsO8m$io2AyvLukvPrX_GG?r9-sGy)Z@St0T?B)6N7lm|e(SfZ z{1$uBS4=OPl~5nK_P7jv{KsZDlAk9()l2?t@-tz6B#spMVT$n|{T=w&s4y#Fff#1+ zzr5AI2`Vi!S$d`Gq3TDEm$DyS*R}TI@BRjVCG%G@`@c7TFPSX8(gVHtll`c_D)UX4 z!uCyFRo}jf`OEyo_vfilX_3j&E4|!{KiQA^TVeBCjj|=HpXh1|_vw`O>GWfM+v`4* z#>Hnba2)<~i;u5-t3S>^2UY(+P-)=*czI{2wjN~iH(?*-%S^rx_C*o$PXi0mfYgDTnHLIO#3vI6d%;sv}T%X{)qI)xOXSwew`>9`fCXL~JX;eYV{M5&n zyUoXQE>!$KflBw7T!o7NeUnGs?#u59H6O*swz;uuhq|%cV;svp# z^+Q*(jb{rw-ALNgIg?d+rMVooq4wyf`@ZsXAIDQA@Anm`xSH=&RL%{Dl4EDKxHFl& z+opH9wr5*%U1M8`VGz&vbkSFF*Z!>C=fsCno(mSLx6@sL=njCAqxY4H7LWQ$x-@+! zW?+1{pNGdnrF~330IGjxncTHShueZ@jCyGEDB3(=W^fIv(p2`>8&rL4t2_ijJ_E`t5Yf7ImXpkn_RD)rps$JtR(>0~JV{}ylN|ATnt zNA1!2R_zhh9x-fB&Eh%nUNT81L)ANag_neiJ_ei};u5mXxaE8pJ3 zpwfIO{pluu)8s3m`t@F@{`<(}reFK=T~Mh@ez6QGXC9KhT9z%1;Wcny+ z<&S^B+q(?P-jgP;f%4zy!N8o`0&2gXXY#2~`b46Idx7=$%pCR$p+0iFSYvCUx^em& zZ)Y2*G~MLryjZe&8rPXnA31IV$b9ffJIz}m#&CUj>^ohwT zqjVCKo#=5&KBDI-GkWnk@0og^dGnbp`}U`y(iLSdORscUFaBgdHni0Z}*%9nS2!U;8$Ob~neG*>C-m_jl$C z-rw(`(%+!^`@bf~U-bH6P$>l!&t4{<0vU$xe3O3;)qf9}99+v|EH_V&xmZuT>sdS8 z^(-9bdgcw~n%xkdK^^3VW|(Iuce=?76FigH&AMSY$54*Fx}H~KzAgLlx#kJx+gE%% znb&YanhVumc7HhAqx0^C{qWb~^60+wI%~*h{r(e`W1TIob9%e$oYudrD~3H|Tin?7 zZ7#mHKi67XU6FdH|C#l*)s4zs!MXha*RtG>?Y0fVah9@eku>U9S6yrU_@WB{ z%;XMd{QR;YUah1xFhb!KN|E5|Hb z6D{9#%vy{Ml@DXhSd8gNtg>7-J16|r`&kMV?`tN%17)XcWD9=$bKdRm`{QEPd}s`Y zz7(5$iSi|?U)(+X-e%|C;yIc(kIJZDE3@)6F-1&co)w!`M?_&U(Gl$W-%p})tfSd=?8z9^N;bvuW(d!At#5Jz z7k0Qdu0!a$WcptmYxt{J{ivMShV?o7dSr~`)V2)!%z}otrEG3YhVwIR%m3TATxcS1OyINimIh=XQd!yA~?vLzDN{u^)L3lzv2CAMb9kh5SoQ{sEMJ z8=hCy@h}Y~C&n}}U-r1>R8vOJbXC#y#2IVr$GDEQyl1{}qHCHr!R0CcGyWDm&$doB zx#a4kYhAfTkTD9@Q0Wq=@$-bq&zrt=IQ>KZRH*HIqRD4L)$a<< z7xb*?rfbZ}#<*>cD28(d@zkvTNeS6M}V<&Vy?W>!03^wQ6IyzeumKoi%EI2~*nQsg3pHe@N1g|5;FV zj)JoFJ*e~xsPX%*$^S8Z@O&+?#%BiawdgtM;9CAFVpWRwcsm{Ay`3GQ?Bq?p49ZW} z7HwSD>Eyaj$EUV+F>JRTgVWZBDdWcTC7Ty?tO(|ZkmMK5&%qOY`|?ox`{O465h@P1 zg^zP9s5l=pc{P+iF|M!citXb1Wc)L|6^cjKEUBmcKAI;smCqS77HesUKVC+Uqpem) zWukRtqipM%7j2!hWw*VD)f!x9%?9&+a30&n!#goIgFp8Q^F7yLyHrlSl`D0ztytX;W+n)TS@^w@sU*$ICaSt?Fm;Q+QNKE9p^VpWL;NEbmPjEa;_2+mv zxXBG(KRMRAcDq>hu$Y@UC+5B*AA0tAV|B7@zC6-&RoRSd*jIZB|%4mCuLz$b48ppFY~gLBo7FA6=N_L4V6$ zt)Gty*bV2ytl3!#m2NayWt6Um(nRM6`RMINBgO}7k^hZ_^X(|irIhL{0%zB`;%VjBeoSL}ddzi=YvbIbgL98|&OL(r zQyb4cHrRfn`7THgc-G9e=DWgi-rpBb@a;VbYQMh6t4%qoU3`3pZ5)#xkfGB_xa09kKabQ zu0DGC+~@;28b|EZHh1b;uF-JbJfCx${)3upT1)wTJr=~6JcV^9f9uU(RQBiMow`q; zV@k%iwS#AYFuD00uiqBR-obD%Tw?N# zrvDjKy3^z*O#T3BzqsmLufGY(-;+@N@E+9h^1}1HyaY;rKUDi)hwajT%galk^j&)m zcYCd9;asC1=Nhe?YxL(_qm6S7-qW8qnsbd&ysJweHN3;UEZknUZ>McLrNZq+zU+r< z9qARP^kQRwmMos1T;Sth1=XI`?|6AAl)c@d($P@;@ne%qruXMF1GwK7>_;`O_*BC4 znS4Xc|CjYy*rs4iv2GK!ehXyl3&mHlc*+<0cprwU`?rgI{|{X3x5t;E>dt}EUj)@Z zw?Vc4uO@$F`lj!Cd;Ouxk2856sQ$Rf*t1Y&2s3pu4>~mc>6tLYd5o1fVrE@A5^*r>VMB! ze&gCBi4CRH&A#3NP^n<@D<-csIX0rrjab;4%*w0@9# zb8VL!u*BX?W{nlBp;pJa-yU;M-x71xxBOfjmAi&Dxna7_vcNxAle2aeX;11_AJ-vJ zDYneZ(KT$@%9pGk%CKhZ){mi5>rh+AM%G75sh76(>6f59oC1|Dvi!uJv*i*TS@qBm8CI904FDfT?>hC5`Pctvga9mxf`X`i_ z>$wI}!Ve(?V=noipMxs&kJ?&=y0%n<+E*NU$tkFN`B@m2)4mr+*1oCok_*VJ;$0c0 z@Ad7t6{^n675=)_QBbx|f!dG%V)FL)dHqj*<*#E+_%-VR^v6KOa3_?V`=NY21LgZA z$dcV1a=(|CLFrFCk``sOu|4XR2?t}982$cONO&>jvUQ8dV zuKKTvUjL82*OfJW4ZTwQH@=@!P_{EB=V0bHzW()4>3>XK4OMo7$$p#e!Zw}$sckv~ ze@mzy#w7k>LNx4+YD=1}d)W zp!_X^vj20_cLmSOb+S(HV4c3{{kFJm%YtpQJX9)EPxkvi>HVGcjF&fOXWest|1Mg& zzd*$~{aIfxv7Mg7wK0-!;S78>*mE=5XUo(*fwJ4s z=lbWoyvu6u=NKq`VrxAQ)5Y^JdR}3GYhT_J_*#muubZz5wo6v;Ur=e6H5Tt?>gTL} z$;$l;D$RM}v+M0=^(t0w#EZV(H(v7f{P%e{K65UWVEeQ$=odVrnxvjm)yhqI*|%@+ zs?`g=D^b5qH$2Pp$EN=Yl&8~P|LpiG)KR|_tlSGwskYYqY-ao{qn=Xs4PWl3P&MCq z>$B_StzLYcFLx+Zz3>0k%ZVM@nd5ihI``B~YtLNYtgh>5%*qc@7Y2%tV;x~m~HepaFgCC_V zl(iDnn5-IemM?0q&qLkAD8S(O@{pg4lCWTLjDOF^^<$|2&HB*q*RMm_p8S!YceaJH zncm>%n=_$oE{59gUxm`o{inBcKU8`Qs=b+idHo?!n#A_~SnKcP2FIqk=<&3b_MT4x z)kzVjQUrA-INF{k=aLPOnUX1^rH02uaU2F zCh2ufC%q`W^4-J3f^$6Shm0w1`tLeoG^6n;!HRL@^ z7URDi=JqmqZ>aW&vZwqM`h86=W{|&V^8QfeMU_{64*i!*e~{@#>6KqV{}t)sOw)_f zE5Abi!P2um4l%tbz4B}54>i5!V)+-PSAKluFn750lsm%oqV&p7p+8D`?9Vm5D82GC z=#Me|v8ETLSAGut@uok)^rH02FQ7lk^e3BMls?Euf2#Dvx4`tG^vbWGKi%|am|m1# z`8D)sNl*OWG`%Rj^5c&TbLX1=JkyKPD?f$)+ol&Y$QPLW9jN{kRbKfy^cS0cvFSzW zm0v*rJ=0%mdQtiyAN}Q~FPL7GUilUDSDId|Azy9sHBj-0DzE(bqr=>_rvIVoMd_8F zLVvyV^zRL(7o}Hz2K`Oa(|IrO)fUMwL0kI4a%e~Mgzx4{|=Q`Y9?n`~Zw z2=+nwisios`y#&wn_$0>?K}r6e=_U`XF$!d2f;RYyyc$+HK(2nHOF2F2f&i$-vu?N zu7sLnUx0()2bTX&s5!O&e`CQMI~FSX&qL+!1~sQ11U1LbgCpR#EdK(iIrU1YIrgV; z3|wjXtDxr8H82U^f#YENCq9259FIH}PJr9PE#Og>e+-<2d>Wh#zh&|Ta7*N?;1qZp zoC*)3ca=XAZViuy+rYD63SMLRKZM&M-wvn2hv0Phisio!w@3a5+yVBF^$D)kYyp)& z1?~iQhM$LDfxEzyEq?*r6*&)ggO{3oCDfdI6HLQ9Ouh^5f&4Js6Fy_|AK+fdZ^FId zf8aha(Z}Z};l9Y*!2RIoP2K~35qT!uAI^sd!V4|`QmDE2dUz20CCtEzP6nPQ+I{ZGI1GnV+oyt$a!{Ki52>2D4g-2Tc zvG6G5GvQo#8Jq`yWBHFl&Arb<&BY(U`S4ZlX(<0qcs%?Fo&bmP-NF;0>*w?PLCwA0 zP;>G2Fb5B_{JBtbZw_iMz5p(SS6Kd1cslZ}@C7yKcNxA$?^!L6b4r$f!fd%_#w!LSIAw)_*|O~_}%o8cAkC-5oD ze-3JHehuCV|8DYns5!b%M<2Hg4uFz}!k@xX@HV&<-VT3c@_kTi;pp|96}E0paa>SJ z!x+rKJ}?XW!W?XZdDsjKumu)jKUjjTunhad3T%T_sJXlbJD^)N%yoh|8~~G0b9oBJ zVFq@=92^7-P;+((4uKUo6xN_3jz4beW2m`20~0U@N5BFM*3EDfas`ftH8=*wpYZGB z6igy#U=Pf}aj*c#!xEeTD{vyL!7X6?NxyDR!O6%OxFyWNDX;*yf+aW=R-oqa8r%lP zpW?cjZI=(>w&YFe^z-{3P-PE-s(Toet@%*4Plxh#K9ujv;Ust+RBS(miuE3-*nbPv zmI_qcUWRJxUttn{1a(|%8o;-TVHZ?ije+XBt)TjH22|gE0jjTOLiPQTP{-91p|;Ig zP}}MvsBL#8)V3@_ZQDDbw)L-|w*6yJV_`Ma*mwnMtgM3?JMTk{rT;*Utrnh}(pZZ_ zjlB_2V{w9>r-Iu+jnx@YV|P!ev3wxZ*ggctU=}K!0E7JlhTk_XuzwW8{9fKinU6lj z$Krx|L-d`@P0yaC(J56;-!+2!1zgXuXVruA)^6MX@{9x7NI}J<6jCuOMOmPn+Ncy| z(duWR`lw{g!7!z}e7sjcr5{20dIic>-$A}#$3xke1=a7zK*bn*&yZ&q2QKW(y>ox> zKi18=w+mZb_dLFlGfUr~?(4d1!>ZA_rdILi=w*wgINaMSL#40sojBRQ87f7;3$@DX zR;+FfmaP0=tbAv};?w&pyf-wId+$TJ_pbX#!TodMt5D`c{&L*=>cK~y%yCuUNG^=% z-+mY{#%0n+m>-Rgy-Of zaBX$S@_5d_3lRBUF!j~0_|w*|9&hJ&P$@Ca%U^_nJh9bHjTsZXybx+0xd_V7eU>j< zN?(HVccIDA`c zCq&P#>$?5>t-j|j%|6}>Gt@O0T-~2l-N8?wFoBMu2k^8Z- zm$Z5*V|l9g^Bz=ugSPhZUJh0M5tF<0p7`?MN^nZg0W30mX|q$=#+M(rt*^fxs(x?Z zxz5#y}?J?R*z1-C%OY{2mTfKiUtnuWwHcof*8($FD2+?~YFH z#qV_ueskuxvYq$)qiNpn{ZQ?ZUg_Lk{K|ez_wr{B%5`Pqspxxdv!D0bp5-*%P6CI;WLJMwpdB;p#=PeXZ8!;&i?y)f2Tvu z3lEz7Bnf;fuc9ulDzL-h#3-@c=JRgN^N|(x;^_S$@NMv0(k3 zKFI5j{Ia)mDh%vwKgeyrlyAr^ZgN{KYUW+97B`;b-u79>QSXa)+ zmg;0^v#37NzEWlkiY23-y(*afSjPL~Ipv^EewLpXehxJ+tv5M#u-9(|m3B3Gf0Ki? zAkQFnvwgZ*4|h)+QX5p|o7da(ej4|E$8+CT-$od`eB)iU;C^h5F&Q2cE5xT1|Gkf2 zvb=?I4OuZoWvyL9IbN~*H&#D|thH>YSACsRL}i_GgmQ-RIwuKb`PVs1DCf}YoFA3~kCJ!$!!v;BEV9P0dT7F79bpw9cQg*p%X$nvKi>d#xYg*tD!8LIpnP}_VR z)OqF9ulxLyp|<_0Q0Jd_TYk%7{=Bq5)OqUlPOA@#%is4%f4;px)RFORC_7tb{dxCPsG0OasQh0+ zjh#oJ&fm8<%I6;jlgLNF9(cLsuY?*)kHPV9_qo3OccI4Ar7*Z|VEG%M#@4@~t}i@v zv@ic}s4@0msOu1W&NDkuW9?F?>lOD{e&1vKb&M9M>l!Jj_>X}ad-I{Le=M>5$DqdG z6L35DZ_7^|>#uKr4t|dOU5@j17D0{4v*Gse2Frg9YHY5BJHqmOUp{)Q>t?=;AOGq6 z8prjFR{z+0c zx&|(o|5YdW{mFg9?@yDUQXcAmcbFVM(eGEgLZ!J-vB|E|)=<8q>n6n?8{Fy!^X}^4 z>HXc{X~FY&_C74{eq-Y?{+1D|#!^&{4Qh6S<_^epW;-(N^hfl(eMOb$Pfq@HzZS?Z zTYh5Kb~kl;k>@Oy_WGQ~e9A5-V6`FqE?a>%sPBp}eu}q0KIi-8YN(cPd#abuf~q@s zf$xtIQ1Vt#HWE9xyD9T77&;ay78qlRrBMX-E>VLPkHH{hDtA(ocQWc zx95so+^)-Zbu*Uk=03N0cYdEO&2N_M!FyWYbK|C8!fzXV#|3Y^TbpXH(x=v@BtDe1 zo>zaQkmVsA<}dPoTh8)+`+U>KKM*SCWT^4{Pm^Ci+n1Ysj<0tvRL%uZsVjKKm~S5N zJ%gd|Z|dz}KO!!*F=M{7P%-H_8P$$+KU2PvFiZvWGvZut|0Jk7*Fxp|7^==cOn>5e zKCWk>QsPU4-7fUqj`ZC$`fh9bZcF-Z;`B>-=IA?a)0eYdFdmA;_^|a|j`*r(Z|=9e zy+^<8?GHNN><`>@J#mq>FK_KDLbX@dd~%f6{~xe=Pnew8r^`)Wwu{?#>8@_d;@#ZD zMZ3G6`DwoEz1R(io$vgY418=E?ElhYtC06`lG;|6ewwehw;AcR%u# zQWyBRo`6d4nB4a}zMr>)ihCcE7nppp$@fFm{K(`lU+BxvgUWvnDu%5t^7(0~{4ZbZ z^Y4I4k3snvyx8YYfRYuf($i4wdEMk-ezV^rP`^a?v&qQ%oj%nM-Y4R^Oz_<-zT4oR zN!;|^VrSbdOaG~S90vV~uPD>xYhKM6Gf=5?iTCp{ROLy`Rgk@^N)t?d9{K(%UA#Z*q8zw|Gq-en*{e1@U`XJsL?|(~agO zMm6y)`_PTgvM<6`@T@-PC55H<;IA;;ALr_2Y&DdLUf*6!{7S_i`Z&u_spUsr?(Lh{ zS?Z{i{=$86dUyT4Sfwwb>w&D4LgkFO&dXnc+I~kv_30IsFMCRVhw?db zwU?vo0mY^D&iHvFIaf>YETH{%W6rO4W}uhN5_QEQR19UK?1%eCSWdq5rt6O_QuP&s{;nEP-|rdhX?&G$@_xU5vyb~Es5qoo zIvlEgbezb3Vl>}rW_l|HVT(251Em*l^dgipaIn2QmR&pp?G~WB!kN!*l%Ex^JRC?Lu==oQY za%x-hkG3AV%TvF8$o{$YF{~lE))c-oscn^U!8&p_zHXyG z6ide1or2o-d1D%89`y0npwjr?c=@YPWxofd`L)UGpvKV=E4}_UC?7qKczG(6es7a~ zoJr#B?lsO7asG<(vQe=(OBSDd-sXMeFlDf-veO>*@g4&uUkw%S(=gCH=H;!S;(7f^ zFK_ddFMkVE`4W`=Ig=aT<7*{8rK;8I_q6vr5z23L`&VCN`&$0pRxZ)Q@BYpk$h*h` z!ta(;n#%UuVU!P(V$t8~vGwz3iayZ%Su?w@KjZ!P{LcHAUTIhBtLXf>0{i~E{X<>! zyZr_76?@j|=8Xj?>m{f@acewlCReST^h!CHwKxh;>DN&0c+upU6~8^sfwFly)N!&1 zbv(KaYTb7iRC*ffy4xpEF^>GbmwRi+{QpBcHV=XbHz*^+hX1m{=(eyx+XHstAR)yqNo zSCZvIM3!FVl&@IAwNC4}`Y{uyjOI?In#Hr%b3V>lQ1<6Q<@^B3)|A!OPAL6%p#0r$ zvTQ1ihVpx`$-#JA;J@{vwj{RHJHUh8#QA({aQe2icS>D*yRE&cKl%11VYI#Jh%Emq z*Vx_-4ec#Q+ME1?kNZrhv>3{M0V?N7sP_KPAHDoIls@*nueTGF{zRyBDwJM6l%BTs zHxrjqwEb#ZZ{xJ~Lht)q&f2E&D4!17Vy&0`OlqZy#p%}g__l(I?*Nk@hSIzZW$P2D z?G^u%AForO(q2&G^>nCyzQW|*eg~t7?iv2V-@&Mt*<07+f$z(Nzk?Cg+wW}DnyY>t z5!hed#P4kI&E}PS_hDAMOTNf6wfq$)_~Tr?jD5;G$~x+}hVqFi{0`2h>pWR~2S;nG zRrL7++NZV^=;z8yzMW%U_U&H?rHgg&eNVm<(eZ3+E-|**b;izcE!pNwQ_8R5a&%%3 z_Zg?ppW!C)BY7QbPjjuS7rLgEr@Q2gwSuD(fBW-hTI5{a3X9%l_H-(+a56yw=N~ zRdildm3lDmaP4>hAbvuur(-*rrh7X{b!(3-*>z` z9V%x9RQ>q7e*eA-2KH*c+^JCe`+X*V_@38C*C{39i@$H}2;P6(g7q2SE$n3-xtOxA zV^3|!Tg>4(N(ouMvv+T5L)PrR1eLn~;r;9bRrU}l&BZ2v;HD4V|_?cV=Ps5*J5?Qkbl*~tU?2FHu(aW9V?;mchCrPuR6 ziJ3!dgR5PYf#uGP&%Uf%w3gJL?%Ar`Lh`hp)L)pln7nAp(_h+l(ez95!ZlQwAAjl7<#r@*zp#Mu ztVp@^NZ*gAj`F?mFjW6f8twakM=1FasJM?YSurVHX4_KnDE$_y&96gQR7^^vq547b zD18B{&Bs9Xt71~R2&x~V<4xNz(aEuI&-(9^2l$NK)+14`EQl;F4LHa*`Fob~FMwUijX zuF9m0)q55yZ9C4}xfLo69`EIzCgw}s*xj%JT&F| zcc1ON{C%kLb+5^d=eH}cC4HG##fnj}D5XE=>mLVYf3eB_TFj>BjSJXODx3b7Jfp2t zh5Fx?+k1HjC_jyH%(pnIn~5W1_0EKfV`*q7_(sby+&e$wQ{VGQWAm>JHu+O~#ISue z{Ae6zUiM5I9n?6CL+y|HmW#$+4q40^lMQmH5Ba~9D_H%!F$ML^PZ8?*j*8K}V(*|p z`47vhzT!_CGf=5w{j$vtzQ1Qc_1B(ImN_c)%0%AdN6 zFCW|0+c^{}o_SF5oeUNC!%*ArZzjJ7<@aMKJAHTacKSo*H;%7v8(-S)(Qy!t^W^T{ z{=QIYzRA&jKl!?y$FVJBLvujU%0=(hw7%xc>DwYIr*Dl^LVJ<@zH0a5!!fB?(&^s! zkJ?&qGiSb|brf&G>fH;qz1M8U&MLE$-;AC39^U_sP zjGaYhr)YLIw|#PZ`nY}o71s)rqy3)2R&p<2E)A8AGTDFk=V<1MIiH#*CR2~gB*C_F zulj9Pvv^8S<1b0R7&n&5*Z52$iz#D;d>wbIP{-L6&k|@q%AnWtVtHc;>N&Bh)eGy( zUer$#Ihyj;p4Y8?Z$tIRhfwu)+}rQpM?%H57;1kgLB;hesJJ#j#g+a--{85mXQ1Ny zBh>zV`aXSw`0j_wAGxnDe;QQ%^Puc4hVoN|@;`k)-~We0$wx!gKOV~8DNyC3+s)Dc zdGdpO3MxHh@@H+gHGl4XyQx3aZ(`i2?WK87{VS@!gLMb_>K|<{wMW}a?aQE7ym?~@ z>iNE^)eGy(Uer$#Ihv~0jy=EV+jSsR`OBbk?uLrv6{vZyWq-fD;!yD%1QpLUQ2jXJ z0N;;Op~laXP;m`9(C42DRsM0P`m3SZ_X?Ds9lqrKUjo(Nzcl$isP_H_s{SKT<)hoF zM1NPvSG^ik>N?2FpS7J9+jdgajAeBhDt}7{8{}mBhnvvEC0IHe;X>Et!MfEI2g+Bc~JdvD^&a?sQ!2dD!v^K z_WiLED(U;cQg`U|1#od@OTk5K-n%=Yd2DwKRERQ)5N{2c>> z{s`7zz0a%hNIR(#q#X6sU(Z0LHBk1u5B2R$L)kqZ2JMAGdtuOCDE||_?%TT@Dz0Ba zwfE4&e0y(%%KtA^`9tRT`bR<8`v#Ps-$MBxezSPx{$ zS9|hM=_ZpuYx|d}r{j%M*~*VQ!q=Y)<^Lq8oU5VyJ_ywxZ$iaigX)iMj`Z=J0kuCg zWqsToQ2lW`)co+i<$vWUU;d|1_3whR_aKy?VROCz6QJ64rODSq^~a4+{c#Iy?2o0i zt3<}(LVkYq0$*p_w@ja8T zfU5rksPL?Cs4-fCnpVn|pM@G5HDlG7hoO(G+5b0GI{y?u?!F6UYblhC z2cgE>b5M1o*E{yJK5(zuJ_M^)Zo8bfyCYPLUod$lY_yZNcEzbLT@seU@5Sog%=D4m zpXqk`&1-!pwuHTyeq(@pCW99Ytb1o{@?ZRRNn1?iGe6yr&dOvclUwBVy}ehsW}UZ{ zrCjkWU+yWW^kR#eAz3N)Eg$F6Q0XzK z?S59?=idxfzyG)WeEJfU-M;7hadraKJhb}vlO5wIOG6#+ZVNy<#jI zOHgxm&g7yo4fE#zw@@~J2i1btp=`x3^z;2FsN>2uP{;W{U*y~M9+VuNlV)4oRqVTq zt^JWXD`ol``lRU_=f_qn>G*llXjg>one%k6E29LPn$m0pZB&FG^cv>9qEPKXXbmSRdnZkm+Me_ z>E0}(mVEcAeAWt)a*gq>uy`BeOJCySI}9paV{&8tg4J*A$C8zQ((1Q-&)aMKzV&?S zD(!EeMqWz?HHjckyFWYCoed^m$ z!&bO`s^+)*N*~Wys6JB}rH^6b_K}Z9zl(bDTW;_hU%Sa~%KXeXzo(e2GD@RiqhI-m zUa!dX;&b}G^=(a=&%D_$n!kHYmR@PsUi``a=Dv%t%;wLG)h}J;`|UNTl(^c<{(WZu z8z|kZ9l96T`^*jBNvU8@sd$aA_ZU?AyUCwgZ(8~MQu7o1?s5munYQ!Ynl{I8FIS__ z1T1>T);Jb#&f1%Y8h-^Sk432CeF^ILRE9c#N&mv1e^romtgAvDuWC@|J?;&E{WA`A zKAMC&KTSbhZ%jj_!nHo$5>zTfZReFxajb&UJOvd;1uBl!P;sn*TBp7QgE*k#SPK=$ zI;i92+fZ@TpyF5$6~_js_jJen(8uBXmG7AI{Q^Dnp85YtKV|5zIB{l;IqSc?5mk_K z){d*8+V@ka_C5~P{+FTp<2|VUY5tM#uLM;8Z4K3*dqDN?!BG8uJXHUm3$;D2fZ9H{ zKy9!4pweSdasJWd_o3#G;CJ5njh>M_do^&u#`pC6@4QlX zB&Q;>VpdXqntY9cyy>%0Z4TwIobuI21uLg~#jd1xw3QmEdv;2V`SM%Dj_!GtBleVE zF}Z4#U(HIjhH}bJlJDN~?Ug(ZF>Z1Zc>;3Mg1+Mj-I`KzJ&WF6Fd=^tDE zoE!Q&&2Yy;*}Vqp8wN#_ABF0p=b_$5f5YakLUAH>2RnxZ@2u$_Ldv$6wFT9%Kz2ubl&6bd>^VG z8|^G@uv0WUMJxXVRQkKw+4o*U0KLZ~0@eGD4dkED2@omdr1C_q| z8(%K?PTRs(*UbAwS@O=~Z_%^7yV}h2;Jj}n`Fj46GyOSVqa3XhT`w*rUinWEn^L;$ znm=Uv+`=)WRmR`8eks_(0)oY=k7 zZL^Sf=;!Uiw;p!pXPc*QdTujA|L}a;I^y~v8&v(4v3|?KK>n*8MLLN!~7Joj>l=JwM`L5Q{lJ1f8Ji{`)kr8ejFVNm2QC=Zy!S0 z-S<&H|6U9g&!3>;8~&JIKYkrb{w0)tCDdAM&?+zQ2GzbFK-pUcwT}4ExWyR z;>|qiN$Di`~TR^SBUNL$5r@elQijR9LR2%*$C26L2`?jopksmWbi_IF!O?{TBKP91zXEBJDWzgLhqd&$4qameVP`ZR0I7}HR( z=AinnVEL(tUiDNyOcjfx`}aPs?V!pmg337u>bQ9`l;dIx7S#5f3$;DZh4OPbRQeaxem8NAxBqo0`6#Fqy?$Jv zooZu|7{wCIS-ohv`BqN)qUodiPulcl^yRSr_o+7>G1L>nF^(Wt7 zmqVqip#FCwl->KG`nwF}?{O$U&qB>(-7om_?GvEvm!SOp8p{96mfzcbr`kXKSfzL{ z1~d-VA6kF?Do4D!R#!87@fUrZIVk%VnEZW{RbJ^_D0|WCh4L5OeyfmWqiA(XR;LUL zX75%gJO4F5tuJ}MLt$V)a^IzB_Nr#D24&y9cxL_EIkM}l{kjgIl(BwHLCx8roJH0g z5z2XFjoBhBzvkOB>2=?py`kbi2x{A00cGnaP$llM{3U<(^Um#1`@wxs<+obv_lGY) z%|Bm*%J1#GY|Z$iQ0e$uvA%9y=<-tzI~q2f{*r3avFME5KC zh>hYLU@h-~FXZ?Y#KF12lA#%Y-#vMPOta=z5$gkG}-^| z^-zBIdI)VC?BbF4BQ#dBW+(ox?Q_N&@hbkRF_c|c4jG=6`v+FG0yF zqqH?_?0@-4jBn+*)6VZ6^4=cjAMG>yRn;%+-uv{vKl{jf|CxyY^vB-cB~a-$lT}9P z@Lv4ON8|evW%HZE5;ct}WVmo@)%xbB%VxVjNo|-?dY}=FD~t zTk=sgR*WU67MDXkbANE0Miy0GOx8Rd)bTZLa?$k4*Ksz?56g%CFF>`Ut;y%_2sMZ94i(pdP{;i*H1j?&yd0|jEhgU%Wv6Sa zPPf&4cb=%e+t2zgPut`(XUrPYP%&mqPDSz+Q@>=Cb#$izn+}@}oBX&(=DEov@)!NqS-vjMxu_hyHa6SZ zT(-7qZc!@meKfW2E~r$2>i738-_Mhqe&-}*cEam@snNdv524cSCU*tjFAvWTJHumq zrK#+%$+w!Fs>PFj&yIso>zk-7%b~3DiZ{93pSOkilC|G&l(D1zUve~6Exyyo_;{~? zYVVJr?A{LL|3Rqzv10jEs2cx(+CN*z`tsdS`{gu~cZXVM9SU{7?l{YjC;hxM73zM? z=b`-V4;ANWQ1jH)mftm1-$@);|s^{I5&@)cK@AC?dO$&cpI&`;=J`XKfAcFuxIbD-in3ChnZsQ#-! z`F|OzKl+UK`n{p#qoCsWh2=j4<+pu;x4$!#ya!ad#_J3#tiLvnd)lQ`n&|644V9iZ zIo#*sTQs?&Ce`nA^?9^CQs#df_XUfiYTG4e+f7u;O!n~%+tSA~32K}?1T{`qnLK5R zAE(oy^shsuwI+8Z+gN)J;JQhtz7bdBx=ERPRl)t-`H>jhR=)mHsPt2l6T@5h{p>c^ ze#ysfYDSL}iZj;5cf6N(mV1&dF1eohlxxOKt6N=}`oHIIG4b?_Zgr#i zR@yMupaW;M^WO1*K=(2Fg7nx`*{EDsUsn#W?Xc~z?Z2VM-iMl_op0 z)X7>;&hO(^?Aqj>=dWUAqH;9O#pd7r!~0L}=KV*@WUWk`GFj8dN-eImu*2QXHf>qZ zC%d_42WMD6sBP+3{ats`r=JZhkrz!#e1&5#%-_G4yz1^g-oa_V{nkPC=gE8c?VH}y z%LhQEc~IN^ILntGrLCc2lMkh@LG6dp@vOEahV%QkbNw+s-b>r&om}6J0(R7nqWOEs z;&{zu>6NaB@*njl`_b(%*~VdsvYEYnyJEvy+_3pPW5ThZZ2@D8Ig@AAY6GjC<><57 zg@5{SRyKbX^Os)l{icjbsGicZ*NP`@`8BJT-rxH@0V@3ks@&iM{Jb<4YTfWTsCCxa zU-IRn*CFRyEE#N9Oy9U3NL!gKWt8GPH>vIF?(>X8rJB`mKgh>32ddmLP}}($lkYHn zf_2FdzM08yf8~Pt8$VyAoa*GvSKiuOG?roR%iiuSPtW^<8v4%SYpOF81PgS%Y8q!6v`u!@ZvkQ0WtsRYs{3D)y*f`Pkh2w5S*V zyDa$h{FEUtnv#*2!uF8=%HfF6-s9q0&`Q`9H9H`BB>1+9e-K zUxSVFliCuUpEA9)t?9J-b`-FqZCWvZ?^zseNBOvW^jue zyx6(6MX}(xRy(%I?Rp%?KC=;(W9`JUu+_Cs>sJl-HSU)tk8g7G_afi)g4YE8~bEkUZoYSly6=Fp%eO+E^Pm zb1cc8*5qF1ujzCjbDbP%cjk;H_dEW2Yq#?EJ+sN}Z8jR^y1EgY?yM&FE&h75sr--l zTWU5Nzha)-*v_@Ib0zKM*_!M*#LwT`VLKyo@Ga#9e)jGe$TNlO2k;w? zyc@&1r}FJ4H}w1_H}wqqr;}%17HQqZw^hjd0e>@;&$e!qqxJk6lIH?B-_UQ>4w)JE z_x7<>y{O4Oba9ir)a*p%=yjtN9KVz*m-zj4{H1;#IS6WgxYXopq2}k<7dqV+*3q|X zn%%HjJ#N_aB-f)yIR6VX>~C)ka&K+u>t0*Y&%L;;)jhkkzk7Ufn=3DBcPr+1xLfCq zbuFt{`(f`#-^bUPqh0VEWo)qjjms6>-F)GTRokMcJQeb4!A?)+8!4*IetmtNZJ zCNAbW=%RjsK7M7Bo1-$ss`62}&W6qt7xPpjk< zVcm$F*tN@Tv#!-`v8;o+xRZN0Q~CblIRA`ICH!?d|6XX0zSsHLtTp}Jo~zniY6bUw z77uVk7Y%f+^W$99X>xbm#e8XgqH^MM1KorbO>XS6W;bF{E3x%=gQkz|=JO_3eXz;> zo4*yoZ%lA)EFuTj}GwUv~(7au9vEC+*yUc21!$$I_Q0x$iM@R)Xt9 z-TWrg5a-`^VSU4Xc<=^}E$dp`7uWQ2d#!49JFn>PKDVsRZMBqpO^Z8R&!SGo+yJ)y zmTdbmy>9z7+uq+(<+mhfaUFbGd#*?Q%{3DpD{FsXy#0|i^Vxn|MdjF}HaCg5#}V@g zVje)uZLy)Q=im-^Fm2g~HttLtx226kX=5wx$-mg--skT?vlo>UBeZ>z!S>lWX0~f{ z+bw21t{>$Ft{u(x7|ZsU$oC95rt^25?3^~lowlOYov^IGJ8DsfJ9K`h+iydY+i6`h zzL_^x^>bZI+xXt>n4r!%uQGp_f7#e1GxqRRXPf?s%F(&EYUd~=)<%`r{rtM!pZ)y% z6x4j1;2eBh>?>|$Zba~%-PV6`y#hB?(+_*YmmdvPzVW_i^51st;a-2&$K602N(C$TC5{P7vtUqfAm16E>7T!@ zP&Q}zk6F2A!gA63E|jZT{w{y<_V$8-J>Ab{oiv>5ZvB^Rx@MWTII>pmu)q3xb75l~ zvniXm{O7IQD`B}I^}qL?GP~|?-p(0N>0Fb8>w5EMxCzsDZ_iT?9}YN|Bs>4af#u9y+@(aQzl2BS6XWJRKIL-`*rvigLQa{ahlk<(`~(Q zhTC%9j{J7W4qOLKZMqI>*FbZTzRFrm>3{lucmpbR_G=E}@pE>oD>BxS+B7!j5Plb7_`v>yh z$g3)kn52)&b#>6o&qlk*b-oX1bqB1j|1NjAtJ%H7U-(__db!m#ewRC{Pek^k^nXXX z;xOM|(fn@mD`9>x-uc$X5`Vw0_OYKQa@PNOqZ{t+jDt!k$gp<%nEYkaH_kh&%wECl zjbX8LIM|h0;aG^&+dM^3v5{H5{*z_q8)t zPWrU@-}t-hTo3Niz2voR+?(ysJ@r=i|8Vv$@NpJZ1NV8_TsFI#WRoUoHcgwPl(s-y zmUIi{CZSveEU?sw1-UF3uqeV3SMAHiHzK|kMU6$VD!fMUQWZ7U3l&jU-Y6AOV~tu6 zb;YO^;WgHXmFxFEGxH?#Z0q}dzi)rPlan*g%$fVlnKNf*3i!DV7=OF1?LasN)m_1hRYsGeyQ8knFDETeEVFs({-^DS8E`6X%jKgT zw!Bv_u;o1j*5A%fS8mJn{oNKhWMCe4KGFAg)uut;LtJ@*^*07)7?Np6pSq;ltZRy3 z{e2XyarYf+>GQx!54*J81=h3}eUN*1LGxqYaVs_>Uo|l&r6jSt%Ge&}U0yT$ZJqXk zm0t?1>F9Q}cZ@2TPRH{{auJ(s?}fVEr_OKrZEfHi&BfR)e9V2$s6VCC~s zFe8V2$dwl{f)TqyTJPET5kCTZS30>Sz`_$KlY=i$j*_rGHs%RJ+@*k`)u^p ze%1`xD(RSNFSnJLD|st^QE?t_&3e|y)W;^qJpB!?uzbI;%Et2@u%^37-$g5?rHgm$ z7NBEl)VHtbqgo!_oQPCE1)cuz{-0RtZ6ENmFGBE(eT z0#+Wu8tbnCY|`V)g|3V=9s1LBC@)Qi^3rrDFO65RrbDr&EBtkLSUKfLuzouptTCSK z=vRW3*PFr0`!=xt?g49hj4cjhXfthwcP$F(#c|F}vF@Qh+u55kIxZv$Z4cXBdQ-&T zeT>bIFAoj5@0w2Kt?4W~f6svR_k0-6o0m4aaOyv`*75b`^9=({OP6u`#IZxhoOgE zxF%Dtjnr#B<%j-m5Z$G#*KK<8`8XTzvta!#I^MS9*Ms%2HH{qKc@Qv}v z^Xs?qU31)+=;~nzto1YO=&AKKUo~gjdb<*=zw5!8-;X$VeMe?Ne=~DulO%T7Q$MYLj+v!6EVc#gX`rW{T^Yvb$&k2t)&_uYgBNu}j`#coz0K0QlQ+<}b6$O0l^n9AS{7}_wq{c;db)Y+zayLN zOBRBawX$*xZ^om4Y}|xi{BGu}-jwuin~QsuEZ`YdZxrJbrz?#s-Rh(n&vQr=KLZ8hxqBU(V%E-eA*zJ6M08a`f-O z+HU{u=%(%%mVmxp{zXy&M^Ex*;*S-I-fV6|WSkfZMgYk55a*54FZ z%X8JBrH=>e_bb3UKi&#fIqe}wPq^>?zP*r!kvG|J4MoQXtbE_$=wYz(HTQhbjuxPE zoX@$0#BSTSv>mn6x71JmOLlz9ebbFs4i|6_ziZm`yW&2F_4}xc=j(5=>HjrY)4$-Y zmR=549vi^=`wy_D^FBw9x$ma#NN48&ZN0w<*(oKl-BqUUhAYz9M?cqJ#$ioI+3}fo zy^ZH&u*UOlM}HWs>1bLWryta~e$YhyvM07XY2ulpTr)RVfAep$>3cac9Ip@MS5*e3v%=WWQ)Rq25-f7F>4~&2Mn|G@% zr&ogYmj`P(MenniwL9L!yF2>&(L|=lp&A12){lVC6G!tEIcahL0ydt|eTb zbHC$5*57up`b)p1OE&FKNPcfpHtwmH+^z;WV`roEZBNPCZB4RzOS7!veZj+dUvOzQ z%Q^eQ5Bm1+#;VSl_fNw*9Qv~Dw}lY9@kQ&fLLp z>-XU32KG0YZ<$9AWgcxUvd@IP-il1uy0xjCK5d>Hy}eeB+7^=)Tk6<1iSrg@Lc01F zvA$c#8RK@bBO?6?c_Tx*FE=r`Klj*pUigenSI>4k9$X66vG8iJrsEE<{_Y2B`R{jh z^=IvObB`5sRw$?M497GlBj)aRW3R(1BkHf)h5sU0f8TWUZyX)}oQ*H&PD=L}=g-gq zY2WNd&gkBqo|<27%|-jz?Af*$dDXOQ`72g=Rp&rWi{d_qjl8%*@9|Pd_-Tr!TwwhjITqtZ7m{8PcM-+hI+U#;4)@U*c_iIQ0$4;BB_kcCrKfsKtQu_@{UkBEDdxxXn{!N?yPl0v(KlK4ip9j|PkAYQ> z@|2_f^-zlbHS}%k@88`|w^!E~{8Hbs{?>r?_hm=#cC>%qzvRNGKP_X0TkeRin+ng` zwO!fq2}+i446Nza@A|t5tl|CjlJc+A%M8&*^p|qsFa56NcNtjuy?4yg9|bEt=IFnI zwLH!Fovrpw$nEfY1#aq3dHT3~-)udGdCPw|nzvz>Hw_#9M!sj`eF&_-Upcz<$F_bu z!5YtDVEx_Y^8HCy4u1YMea40Yxwdft8_0fS*K8ocLbbg?2f2y$EpptJR#~&TO^(_$pS`YQ+3Q-%Ue_@P-Rs&$n&!~pl~*_h zYTC39j5<8xZ~@%s;{EnBwjTZr)^YK$e_Hxzu=2`-^*89~+4~LHQ+Im&{j{y{7xuY{ zk4F2PJZHy~VaMl3j&Iq~`dxqZVCCWWC*|+!8%Jww`^va5ec%GYHN7{v?!U#+ez+}! z8+ZD-Upsx>w4<9=vY&_@(P7yo-1*XRfK7t7>pbD}`)#?bdBK*;%fT9N8a;4Fc9qlx zD@6APwVg<9r)&u8gfyx@;e4#-ui(<2cj33ZX!&getG^$C)!!6Y`^6P6xp=NzARG55 zxvvacf;|n=x2qBRiWIU*6S7G&vdKJT6ZUU5wMtjYg=Cd&t8M_-PzN zq+!(Yy-rvQ^ZQy&jrn#-t)>0>Xf0t2xNF#h-5H$Xd-&6|D?EN@v>gl+r_mY4ET4~n z^>?qM^}GJ=0&94`9VmZaXSA0#KkmYvRcHBJ3^wWeKi+FE5ib0N>AdBxXgW(Sow>N> zcVfcwzYVPX^}GIlbdYo^|McoQ=_x+N`0*F)T%KgTwpXglwhorlE_ziM;FnKYerID7 zsK0)&@?X|aWAeWWtn@#@+74cDbWvnjG^l7*uXvGDG zb6{<8c}Mp-EMS#KN)C@YJOWmIMBdTE4yVBSo5BuJ)A_QLP3H|@<^Nu==IkD@@-2gv z&pxo8w~IB^n0r)C1#5WU9)F|D(>QVD-1ka5?TqtNcIgQ1@u#4bpS)nxS8(Cq1J>W; zj{XB!%cYI8v+92(SbzSw5p!{*;FV%8SN&ZE*5B(K9W1M7-}I?q*}z|dW!Wc#Wx-@H zb5k6B&!4}_F#9}gVYb!X?T{CdS@PYbg^MVe}ud%l1U~QrMX&w7gIrH{I zus~?bxgOrKUV)9%|JE-9Q`Bew(3kEnhFdp+#{Lnn zVa&Z9=tDZ$i|gFSjb7soB`pcVi#sfbPOp&?kaxU%x@m#xln>N(x^D8mozGqD4yhdG2iPbs(;E4|bQqN-^v4{G6QD%SI};NA-r&E2MoQ zi_P_F%Ai-K&a08LHq^*|mqwos=uauutSRCa{M0=TGJT@6Ma-I!N62 z61R?x3R=d>uT+tqVV530&HU~^h?~5@rgt@1f3d4A{XVer&%e>qZvgA>7O=X%%eiYj z`n${JOXJYrLtsstpHI!pzsu*yLGt;*PaT-g?YKpLFFLu!b3EL0E4y^gyT+z}FId~* zHP_mF^c5`q3b6hLz?#3;Id_4V{_4S6&dOVV$AByIr+M((&E|vTssGc_^cUcx?WW-3 z8+PgVf}{1j{%!(Swj1T|$Co=ud}9^y4ZHYCj(^$3_q3z+yZ-JvNPNoQj5FCP-t(!E zj{>0$wNIxPa^~>~JD26*6^1Fjr$)}cZ8l7VHv33OBEyWkfaOa~U~3g|Q-7@A-;JLU z;Kt7|eySUHttwpthC{ckrT>Q8C)JI#=y#uvgyDOHFSOu)COta#V2e`C*f#pH8u=>_ z-ZSRYK@YanjN3izJ@=re?AfqzYC$SrA)^?fvlI=H7 zeZ!9X7u|2?g`a>`?z!(P2NsFYMyt$3VADj@Uj&maVlUwo9lplHfXt|0b~V*YEm!<3aMF{L_nS^n8<^ zTQ4N@iH!E~@q@%WRuS*8i+9S!^Z2BV_a(5#tKao^*FoY{{=rrCa@9mk&K*n1$;C!F z7TG*;vun*6>baA%eLL*^ETJrE_I(Lch3#PzcAH{tz}cS|XDF+%*HHJR zz^VF;G*r@&u-fb4srJaed%C+$nx1fX0G81G=Jn=_*||7q=8Wy#X0@4*<8J28Y0hvx z#TidvT;pC6W1WW$$yk#)t16Y>Nt^FK(DS>j-xlpQmYL%%rRG9Yp7moZbu`#C-dHkq zlnc}bp0g#Vvu@=cEVakVnfTc^oBA8F!M++<|0SDupAO>Oh4x^$S|QD6$K-6%bnGPO zd?u2N5$x+tv*rPAap8SB_*lJsY&t3bHBm2xu?Beqb7}kuPTCc0+1PavcRCIpcn9cc z!p@Z?+Jm-_5RZJzwv)c9TI1eUQ)|ZE4}jI*akaIk-=7_`^e|X|A9D299DQq@{T{TN z`_QMF%c)X>xzjpf*K`w&GLo#7{lKPCTQ(6|Wgq0ROiQf{0HHkQ)4>fXxqcs{^*ej&CraoSyccTGXhap+krZL^z6r`6AMPNa?dgy+}FUX6QUjVvs-Ad94# z2ilGMO1|yaZ|Rt%r&H28Njs+PRE^CO{gwlgU)FTfUimJ3kGj+U)E&M8UyW;qr-nJG zJL9*PuBHy!{LKfpc^wnBxcVD+{d#<%E$=UKPqO~L3D)`w8oAFc=+?LEOJTd{xilr0 zaz^ZI&Vn7!Ij>&MiY?=;SQqEYQWJ|Phc4+}S}Uh5qkK#rB|_V|E*;KwnV$EhP+vWb4&U&porp9b=DM-F^eysP5#Y zl8%JqdxW>zcR4%3scfy(uc?)dU$u8#Mrid%KdbIX?{RdktOhpi#NVPS(Q{&I`=xGg z2jnX@9hI~nE`5aRps>q9j!@gH&cPXNTtVBO&Z|M1^Jl?AiPR|aaX>wHEN+`>DL0SL z_7Y^kL)h~#)?=5QWKYPw6*D-eto5Jw`Y)_y^bA|y$DL{G|DRw}|0d4X1LJJv9PK(Y z&x|K#G)6kkYk!$%`pXb}%@|*t&p3{petxZd3~2u<u)t~_iwC~Uuxq&9<1@JAN|#XE92KV z0xiECRp>;Ma>!(@bTJn$7^{u?)UHyyE=Gt|$l z8*c_iX#BuG!i#kIbZ||hT(b*VaAzRrG0v`IoL$X0yOMFXn{l@43EDK{#L_La6VCj0 zZkl86s`!7qTW)ibeXTdx^7!l3wtPC@SZn0`0kHnA18aE&3G5R4xz8fYnbn04|T znYyM{K6q`dZ2!7#Up{T`gE4IA(no>yyR~CUl9xo}j=bez zdR@H#&c-QBuYT8bs120Cgj4?d9cfMUyJG!ru=ic}UG%$R{cf;}7bo+}x%B?&KW+N| z3|9V$x7++43Dz%fboBLL{r*X?{&s;i|1~#TdLCH6cRTt}NB4m>eFI?K7rNWgUvl4n z3)b|_eFyU<_++rs=YW-;y$_lD&d`5^XAUJSOY9l+*XR0p#$m1df(!qJTWtF72P?lx zM>oFHrvG64_b@J$_^$qI-(|zMfR%okqpt#M{)48NGzDq#Z(K5S>%@G{eYbPLaIKs@ zTq}FNLBF}EK`z==#al(y*vZw%>TTMWxqoAG9rJM9_`CQ6wepnug|~+DX`h$w&xUr( ztbdKZS;t~CAN0?YDR^K1QRJrk;iYpg<61T2n!4TeG3H)%$A2a5hYJpAkVCi=WYH$h zQ8CZ9WgDbzaCR+j`g%Y5vrpH`(?EE~wND3$KoWP8uBF@w!5F!KF)&3ssu*8~KU0f7 z4Y^O#qIWK`2AW4Y8_{`HQQ!LQNkG17(^^SK!V9t={Acc5Bn}}CftSEn;OF}fx{$xP z7rU!}p>$BTF2I5=SR-w9qcJ9c8|P zJO@-gV9O#xYyDDBdJjzMKIDL%wem>8`txb~hG~j@AZz#DzSZ99VA{uKd%sEM+sL5b zsg+y8csx427#$`$#CgajoJ}Zez6#n0ROZD_NYB98QJef-(JWW&tdjG$SIhcsHFDw> zbTXS`=oRbO_v(PGr1=>x)`hb{boxeXZkxs_cbw2@soAIJHfzK3h&)qvS2 z)xA#E-Hp?ff6?xv>bJK654gB1X+L~$e2VpewMp&T#Q7}NQI&NQoEMk#w#~tImGd5( z@w2H~?~uy`M>SwK#M_JR97894)0crwSlU9o;w z?1xXe?~3)iV*k6o(W>DU>vzTaU4K(9|GS>7HSSM=RkC0E7fYW8)^uD8*5B=5E$^Q> zy6nEkpR(n<3amb_ar6yf4gV>y=IaMwE#JDQE!_sz@9V&tuPebSuYB6kUvb}m57vCu z{x9bzz%K_Y-4E9Are9{!H~+0xia=;@;nPh=B)qo=((Jvo*u9sWJ)bz`>a<`=fObl| z)V0kpwBjL$wLR-EM;Z3*v+)mu_4nwsrBD8cr7r|)*jvC_?+c%?^x*q<(<#{pbZ>q}*Prb^BeEG~b2q<~-p6 z-zDPTe=pUn?{%$md1zTde5c3cbk^@DGk(=iGafUp6dGf)9q9ibJN`vzqw}hfa&JuL zu8z6)%;q2~MBVKDe!NA}TU$2u$NW>OiOG+E2b8bjQ)}qo;S>Ys6ZbVW?YfSEniN;mb#-1!225-Z7rONURJwV}?}z2W3_ ze7+yOM{kUDxUws?#N;u+>Z)k*eA71Qy9dqO|3djRQ$EeTR@ZInYZ|{s=wHE@GS?ipfKOsqbpeMh9ah8)D7u|*$1R_tdiq+PW1rV2*)MPEoeT~?YhOAoe|ZJzY5H1g*1p6GqiZ(bI(zF@cV>~9G0*r2tVu{cu@7%>#8)GRGwky_e z9&PNZD6e^x`@CLzJD_Rv$n$EaCW)Bz0m~l>>z#6oxDlyG8{4(nd+u|#|ETPU9n}l9 zaz3zGd1>0vkt>}Cwiy1{dsWbW7}K`J2ymOanYCk*wPV7#Ej=Y7oXYR|< zy;>tr)1HfQ8DiY{1Ry_f@l(f2{}D*48+@X)uJM?e39J1j5?*I6_buv9JM`i)ZG!e| z-ao*e(d3(OLvv&D7vMG%FJ)TkX4-F@H-uvHT42` zZCMwo?}nHx1EyU#pEhs%q7$#Tn(|z@C)CKEPmJ>#RoS!@x?^$=u;PcBUii5^A>q3m z@SV2k`>#T8nnk9>4tC8F#;TvV{R*FMsFDWPpNE#lnB1l=dOcEJEun6Ri3B_YxdyK z=`sdS#mdMs*p)Ypan}{|uI_2|9T$_g040+a!s8xwqfYT}?jtzBKXafLK0pp^W8cBk zwP8bzy>UN!7tZF-+ik5CY?)9;z1TVHUBHvHJIZC0G3Gl!|Bqc=G4?3^D zn2v1R&~wQDQ!X9)-KYI90r$Xeo{r0#CK7VZSW>P+p1EwGK`x{W+MZyCoApp|QN3J5 zzj`%u_Xhgb%jsKgO)>?MM>cZ)hE%{cDskY3%M=f+M1PfTTvh_XVWc$O?=F$i%i@k#{JY=opDi zel~ZD0`22AEm4{_Mm_j$hHsXA7?ritHRx7m*IiQ=aJKwH?#yt!eA?RV>p24SSy}GK z>eYK=w7;3QW$$Ixv9P~JhVZlC3g#KdCrZ<2@uzPZ`tHVdoiaD~igSm8XK!xjgMRwT zl`;7=ko>8u3;M0n-vrv#jdHD|4+ulsFTIXA9I$#k?S~a^IxaAW4&&z|KxpR>q18_j z`_D~`ZGeBLi|-b!s*zQcm&$#nE@Rv^yO=fCIPFaB)26vUevJF$DYK~`lD9_~?=>%+ zL1`||k$U8HUB{{WHekx-GfI;O_(Z}}7Cs%cFjfz+U)@i;qt5g`?_hqN%)fiyR8zTe zeD*~S+MZd{)T``2l`I>bU!lj$b;x*(Z&M$P$t546{qMGA?$d#eFJgjl|B-aM}Z|j zv+45bfHM;trnw(~t35Yv<|oFl;UC1L_hIHW4HILZmpu%nPXMlVd@5-_jA^GE%==gw zJAWgqvlgpnO*Q&~nEW32s`4>&P2A8g-^v`|ca2`(e9^n{g#;bi1`=*R7TV%3P=Kn9F|A24M zqHU4;SvEvpsWbDaokR6jOWXfxcjfoR=8MS7p&5^wyWnT$SfMlD7S6yA~P$1a1HBnB3xc`*gaCwjUfXXtMKK-Xo0T zJ!XA=v~*7%gFL-f+Bw79*nb?dWuJ_HEhfi&owgA2@@Z`^^qcW-f2 zHtTYi$_#NCnT$H5otV9b{st+1J|@osnP1rOJ{@R3B#uVUoCHHCebby_PpN>_mVc^-3aOU3pb>@DWl93ZGsF4ebNjaB!xtg)H@9nJ3ff41U@lNpW2K3i&W`1z| zD``JW@VSJ14te?(?caAJLyphdhdCWZnQ^tGd%0$QU`(jz&ZKH&tK1DS`3BIr$CiOl z2aC98pMIe>ON;ukV$?)zYS5SF zXR#34Fgssr{_6wUY1y1@GqPJj+p3vIdZo<$2)AU{hQ1HC7ImW@_4_QX<#eDQpO3K_-a7LhnQb={j3fQX z=-|4aGX~DY$9e|(T42bZj?Qg5FHn5k1Hzjdyct+&VHk9Bc7pwX zx2h^M+5vYFD?0Yw*AB^?Pvo_xMmhD@SEPDt|xs~0zN!r-i&VB%){%)GHq-VW@& z$L7hWgA}q2?Ns+Q;$=HV_2~FLVfBsUtLkKF26^_^t~@;2+KM;IqTUKyac%n>>^);< zEH(XyF?2>}yK1{lAZL==p4we0Fl4X-E097z2RO zkSFfGTe=Nh?}K`(c6Q%8Kwoh*?&Eg)dHuee??ImTznSA}dgm1EnPTdIahf_Pn>yoLcXORw z34HK3w%jAMmM4DlFU90tKxpgh(=&X@-wa>!JXJ&6tYy4&d?U1(x6xnpV@va|n5=v@ zl=W4o%iLb+?$YsI{M`<${jE)FB&_mubI>U9{uOxS%U0Lt)4>;F@&)pgD$bUL*@N1R zej_pS&KUDDcTY~Dzw2+5a*VOGu1aN+@7FbVJ$!k44VZTMjMDm+Fgg|O1B5j?M8XPTr82Cm!~7p(at9E~_&#m*#r9p? z9%RLyUhhn)meW?FEy(mNK+iMHI5nYrrmEv?kjxo%@_OKtPq?z1tTlAknT%QLM*j7? zPy1m4m6N#dzUQqC^44kg4yltC#`+X{x5*+pIc$5Xvb<^c401Y9^?S=RLL2=8de@?+ z37PWAm|P5Otg?QiwCd5(x#CwU{2Cca=LsF((ao8*Fo{LSE2(o}SmV}x*$K-30C(Ca zdd55PHwt{!rPHU)I(NhD>kU@t(}*2}-FqybSI1kMoL4eoNoSF``KER1e>3_^Jr`DT zdxpC9n!qN7avD0jPJRoloz%3FCgfj1ixlX+WY=-fK_39wUnYyEQXhtl=AIvIEIRnmSKD@!0p&=!qOs=%0L>>YHC zf;_gqPQC=R|G}m`O6%O9eIn{Fn6L6#Bl3JyKC^l<-6uz`WXv-A*h(&*xK!qkNmnw(vh&*ZU!j7kJZU%0AtUhW1t(?)oll`&GD+F{cyTwGH+#%qb&HP8-sw$?8`v>^;yo*Qu`LrKa&%D;@9g%r^)}11< z^DKQx$J3F!r~_dApKShpdPeuG>+Cl6S*8`~5Ao?Y-#xvEHw1(A z!fgUGva7zy)bsMVynOl$Id1Yy=@>hUw~<~!d)pwTFV)FmqpSg4nxZu0FJXi*LKq>8 zRD`kRaiLgA+qU-+jZg1jo<1MF(5t0=Vk7g!1;m$^sV~zucCeQEvn_)tt?`{te6MD{ z+(?`k5MMM*x|=uSg5!iywcyvmXh59v(5p@yOC79}!i{xu=uPM)G#(w>Cb^#vx)0dy z;;y9qFjfaQBdc*XQsq(JO&P2yXq_8-eKTh>m%pt}P6Mi*w0ZJr!)MUGYFL}A$r#%$ z=4LYwj5SH$f7Zz>htPu%)~vBrM_;D)w2do&+F$A&$Tz?y<*$1DF{__fw>yB%F5XHy z5>9UrAe^z+W4!dgrKzh9&hK#F(-bShne#j0y2QLGN#E4BB*SyOCT-J6$$z{~7L72D z|HbA#LaU5fB(1C;`tD&&20}fOPp5lWOJ$$I27PMA2HnI>a?^`hhh+cB*fb?}C)~EN z0^dx%_CF)TpQ@9WfE!&Jd^&v?I_Tg9F*_gHV%$7f3d2u6C-Rv(xfFOn!)sd^d*0A3 z+v{YH8o1(C6!9E71KEyv;lxH}q4utxz|{ z0sZdNewg3{_B@I@$0bx3Jf+%PBj>7Ir*j?S$!hxWjgD7@Htmyoe=quiVdiG#$PT9=H2^3yt515BGZ8HaFJ-Lvm*?-}E4C$eW}mh+w) zX4kvvl?hoea2WS?Etdt^WxP?jc;<~tjbF4cYuafyBfn(r4}`i(pLX^eW}NG}J}K8D z)4mxwtk7RCr_jf;6V{fayr)hUKFU1!v@P!_P5;I3?Aa41%fTb+4?pS;o-)Q7GQyJq zufolpe<+#rBD$YTSaXhtd9LrVI=KPJ{x9hjN_%Oj14@54B%cp>rzq)ul+Q`T2%>F*39bwcigLPWG$l8kb-u;TWoC9ohVWYH`g|MxQRM{De zZo&v*H2=OIV*`SYHQkThXcpTq?7pxCDcQQmj^yX8i-A$cKSG;52G`GNg3d^i%ZBw56W`GddcNwl*o)v)XiwN9K?$Z~DF}E?WTKPA=+(9lY;Hbvekrs&DFk zvQAD1tZf8o#9j4GQFnBpzCTT~*6;ebd=3ch?tI$qAD4CIX5@-~UGKBknd5F7&h>)LH6ZhYy5-M_%UX4(|5nm|IMZ%eXX(AZ zc5I~n*2ZNIaElA?(?J*dM#hLPWR@<*->%v5H)qyZxX&j~^LuCaO$=Y+7&(b}`rqA@QbpovS^>NO*Z@En<*P}KIuVo8$cnJ*V1)-C$RneTb=xC zANzC4SIc}XY3SRh8S`CS`rW7fFh)-};LZr>cw9tpLL1V#ZuGBpG69qgAI2QMY5UUo zF8Yo0FP>k!2iFzZgWIe5=s?y&chbR}-a(ulS?qQ;v`x+E3d*`NB5xhs@kv~&D=0Kz z+XM_u+j8@1voF5Gl#8+7(lcOA<}|W`ITNP3p<)yBDe}mixO^8Fb-a8!y{c9gX5X4z zh!MP%2JCn~^jgwwWt>8_*5^4%Ifr(A8sov53HGVSu=`-FsYZ^F{m8RG)jw=necJ5P z-i+SHjDGMrlKtmNYzSFHwvsm0QGnI z#;G>OK;T~Gw|yg(4r}eE$wusv zkSVFha#LJh1O}ebGS)e#IpU_aZH?%18gbWm!&IiC+Qis@P|oux=Xrz9KHrpSQpzu| z??l<}Ql6#{)f@UU+#Waa(Cqo&r~NQ#_842(H;dfYk+XJl+JDoB=vnKPde(Z}=%bkN zHC=rw>lvNV5v&hauvZ_Kr-4)dY1@xa2hFvN`@Bb=?cuHXMUp7M*W|UHye6e_(B^e^ zZN`4dTjO#)5Za3Qw9zR=_W|vgjT|;|3+>^ZjIS;oQJONZ@MG7(hwD0+T-$!rt$8~Z zo6G5?=#Q64&%|-S~QHaLCRR$ zAU%VEKJ{AUCE$a~Q|plNMd?A{PIWW;G}tB3FVyWFz*k-Tm2@N=_2=`pYpUmTJy!B< z3`Q9it=#vlq^@Ib15*DYUR_g7|I5&G2Dw96-QcO;ecBHbs4PgGHVxW)qfCD2L*2JC ze*mF9w@;h1FoT>4=*Hg!;fp$F$7KlryMXN)ua*n)lhVh0ka1Am^o}azsfIDed}Jwg zUk^Ou(pgDI!jcc4f4bAy+)T~xrrNg9hd)zS6Ud|bhRYpsc^|OiSz8u9ZQA+GGb?dB z*Xg={n)!f!J^mHy`Kz4&aA6~~=8tkJ?chCY{Du1nJ{>U5wJ`>?WjU9%VfIddK?px&kpH9x-ckZ5D3mbh-k#@&g zH&=?wB|xYn@oCG$zI#`BUOZ?)A0C`LBWu|Hwq8cY{Q#kE+w2JX_{ZoJ0FN z-?;ySZ=?E+wyFMn+7BBv&^OfX$w;-7;o=y)YNc%g8&Bp_wS~!lFD}LJGj6>Q+7EK? zN5vdx=e`zc*-c_)61yMi8z%SFH=j(3!%z9&+Q#TEWkwxVCE?D8C8 z-~X$)RJ~}^=F?Ul=GbpH0*|=#SJHkMvq#4G(O~z2hy)Q$8VJpMp&*x?CCf#cG{Bk{=*wan&-sS{)!y;u* zfA4-aF4q9Jgz+->8TvWyDsk~v(teoq0@a&0i?27&lZGC(Wu8V}LiUPbyD>B!mluG^ zFdpPGrQh(6xIC|JI)<_rs`NcTyP#u$PbD1*!}kbZtyAI@;*^RwgNC`>t4#YPan^=4 zjx5W1f;CTT5qlikq27g9dWQQU{u!6sT>L(5Y#i=p=FWuekGD$x9+!6mPNI23f_>J&pPV3{1 z@>_sHVB2_vHt{njFF=0)gt|(5hEobdN1J%au zG2ACy8q|+Z`{9he`_1fesRlyF6z!}1*f^Y=kS_w=)$pFrcsjmn@J4{T=L=q}eY)hSFPNX)~JNVeMx}>77^$urKUD z--n$cbJ?tv>GU{SE}B2mF>+=?egK5JPoMt3`t*p#g)KuOI70M>3XR{abG6R1M{(#r zAr}CtTJn))t;Ra`u!&{Z9xq3a&f2&CaP$2#{47yFW}ka0vK4Dx{0M$D{Oork^m&@} z$7J|bw0|JHs~|!45Puiwtli zef{wMdhVZh@64CxwpmQ2yej$x2FBL9K$cKUL zj!%R(`9=oedm7lhUF|M)Jgao0ZahCTI&(B2W=%bvlm_BfSt4^$LUO?JI-6ggHv4#& zTfIq754MDi6Z4Tr!?44zNyuk_ybBwl^$bwat)Dg~ae$uR#CC+>Ewc_aDqS zF-r2y*&OaOYc6(ho_+!AUEW>ip5F(6u`oWL*0MqNEM3icJ0QF_&!>%DR1sTy>fEfZ z$CD*ve@eYq_gBmKl?kbR9b;eImW5B-HWNo5O1nWe(LML*n@#b^n@v6Qxz7$AYBPGl z_<+@+j=r8b=naV(9jZ?U3*w9;^^7A)S+HULRBL%&si~042W?f-w!>IZySah-x{3RR zfk~52>Yuel)Qx=^&yTq;@IlJ7J0;!l@5FyQb>BiCNR4rpa01&m%C2gW%dUHa43`{wGJ{{Bs*p3r6#=RZ= zNn;l|GDsT+GD*_3fU>8J>wN>M3Cd-RJ0y$9&-8iq^JQSI`qQxyKX%U<8w>nIza#&6 zd;=btGJk)fpq$!gY%A}F} z#wimcgZ@WCb^{kVo-$GaTZSGrcv}y8b zr*9dL?Ag(#M@k9V3!I=~RR2nU&@m#$IHvCNzMGKsj$bA1hc)Hh@6DB3=Zu|0W5}J~ zOURv$hfkZm3hJX}Fsg^reCggnz~1|77&FfAH|w#f@ElqC2=;M`eeC6 VTMgm3kY z2ZYhH2K^O#hy!-bl6#st6j+jS`36H`JZY_$|>`?H`TcRM_JH=l>=>>_u5>`BP2k22;r*>dn{ zvo~18UX1%ElV#eL8^gNG3Aqj!aABe}?VWMXcQa{N=kGGX%cMc|0*#XS5`AnmA@@3d zK5f=^ManzNoMqQ|B@>pi(*2cG9q&f~dtF$ccJY?|em1k7BHodQ67uF!H58@}dHa^sx8j*|o2-`F287wJ7LoCgM` z9Iptib=gl_|6M{}05YdqeUMMP`@jl4hqCuQiG9uhcYX9b{l=55nSor3mKk~CduY=# z68Xm5@6l#`uX-SzT~z)y;~-^7y=M0%@x9UwpBqZ zkC`xxkrBQ|Ux_Ued~`3!{}#0a%Z7E}4PaidVU;CMl{zYH=nU+2JW!%+XqZDzM2py;#&6_au(LK&* zZkWH1dpKSllULL3&DkGu#;(e6_&I=&#(RH4P64bPmX3K*w?M}?Yg1o#PaxwjN zBjbeHG3mEwfqPxrDrrBwwT~ws%!lo?|Mp(1eK2R#k%v?L*e+n}qxuNb#wL+Hx&QG7 z&OElyw|Vzz(^e^;P-obKoY_NJq_r%wyq9no`Vb)J!bWH#dp1e#$fSG^Fms8vYt|J? zPXM>MaFw(l#=IwVGh>(AuQ&H^=sF6WyV}X*c%$U=z=Y%F(?(a@YwTDG#!kB#z0M?O zqsP>KkF_rEQQQTj+HKyWwDxKG3Vx-+ueFooP5Z&9MWQ*A%ow(?KY@J?=aV<2r{+%dcR7~BHFn&O6z!8;m7IFbFar{ z90={3eLCI2IiClOZ8F+&PoJiJecG){X@e!guX_V!;nM8W0cV}svFXC{z|O~$oWmSS z%C*4SPV$J2WgqkL(h2M|8FyM)`{*49`u!`wsp^MvsHA-!X3d{><1YPo^vb0C1h`Yf znsTi&^sjLHWa!pESCl^GbxGOj;;5vR$4nT~5aDa=36ZCXZ)hMX9|vaQgSXO$TtR&- zwCRu1)CY2YBpm!BwDMmv*X^mjPCW zl?a_)gzWO*%x)k%g*Kjzq{Ygougf@&HevdP*KkDI$7)y{s5`!dMm z`2CD?-(>yYZOh-MgNx&G@j%7PCI(cb|@gF*?*$l=G34F#~xe zPaRWevm+l(%7Z|7Mk+$9AKJZWl_#0@=;+gf#_4)wcFN5b&k=Np_Am$Qnsa-y!ykS$Wo@8(Vm$Gh**q}&JG z#(GhCM``*j@%wH~jpjao^L}jZv+d@shhc0Qe)C8AD8ICh!NgIsVNOBcD%p%5{T;U_ zY5X>=sFOn;?3!9wUND|6%`dd&TXQXxk9pU`@hiFa9>(4K4rPahcmjBJgTvoRKSz#+ zxB^US<*kl>|1Xk)*@Qd{*6+UuQ?t_jOG}>%)^{q>?D?gGWi#um&_=hftyy-Fp2Y-K ze;focxZvX6_*)yk;R&1X^TFybn6&gNu+oEIjem!u?L7e8OUYas-YGP5H{TdGIDbmY z$AIobZGHH(o=@rsa{l~e<^)aa6loo#05r}%()h7o+4!FU>+i8&Te`{UXVB+nk)L)~ znL29!oUO+ZSMG&p>^mDnVEv6c_cNZECtn%2eBwW~eAj?Ae;0tY{O<&7x&PFCe-W(Z zez17^i1(GdEx*r!_4jkI^7|K9`JM1H%kMg{{{9047G+Um-pSOPWyQWEDa_J)J1BbuvIrFhwBYaID zHO$Z2jx}6b?-fDDz)on&Nyd5ow(}r7*Dj0l?1QK78JIUDH`L_9aA{qapqEIqu28)z zc`xg?@3oW5S|(?cp3L3!n1+2HVmR!D%a%HrePUwiwBadq1i9kU?n1rD|YXJ zWwM{R^jG+m#UsSE*0^wPf7+FAocBL_ZC;dzd1HKVju}TX2jRJXd6egn<9Xyk_-Xhw z@2XYoQ5fDE55jvpy!%}G6phedw7m7#@uY1pSAg|*$WxZyiyy83bb|LH*I8YvmWT3B ztIZ4L*R;W{_qiKdzYQHE?j?ss&R=aaJf#pH}1pEh@z^{2(WfxXY{tB>oxdMLkk LqtLkOR;g)}tCQrz?zMCDx zyAC>rZ>OxDpnP=KBhvh?f0S`T+Qx@lg$8J}`s z<@t87j(b0J^uflvanhoG$4Q6&D#zKfbJsEKo@Z?RKLgfZ&p++Bcp8`zkS$=1@4I0A z{V(|6jkEiS_musX-yLB6eHX0x`2$$_E&rG0cNtiJ?*kufobCRC?f<=vwtQ{}Yo02{ z*E5{I#m`!PdY4H%^Ov5<)V{IPeb=}&9SVIbqJ2ZEX2+4QblP~9;HG~4_jQ$*=?^NK zcGSxcfbhIqgx0o+pYB8J<#ZtQ>g#@D&@O+#0vPx++h zG5(=9Gh^r%4;({JSQ*WG#^wDv$G86=`HsQI=-81dxx09(=hap6YVxP|V0166m(@T4 zzILqOEo$grE~=Ls)r~T&r2Q~vt{Ff!LT2>kxr|Hu50|)lH+Q@gB6phPX_%%jPhP{@ zO7-$rU`pfE^=bdLhJNG9dWo&F>Co>!?T1M(!*(SoiaR4Tvj!g0ICRami91ZDZ<67| z>gA}zx$DsJ^ywzGiDWFRyrbES-{eQz?=bbIzY$k|qhRe9CFi~(ZS#9ISlzz@*8cZ4 z+M0&9_cXT1q8%0YH0piEtX0jMBGe7%y15?(%-q_-+#1R+LkDRSxg(=(qCi^0dFs%1 z+yCC~((B6#%FAzW+YiF~-U{9+_~<A?Z-WS zkhqs;qWS7`aTC4#!o`2dLE=|l=585e=lE88w@e>lg63-UHZ4-4XJwJWtgS{0TMcAf zY+n10=Iw-I>RHm#-n7jW^$xaq#_b!p-=gmDQ9nNIhYR%1an|;WcH1>e`ViiLBu*nS zxih+|&l-Y{iJv%9#1X^BG}lX8UtKSIT|5z5$0XXv@Wy(%7clqZ>e_UgGs6Ac%a7Z) zfy_}hjg@pHoY`AcJ&o0k_}|he*2{`bn`C+R*XXZy%j~WAdWx2@mo>z;FR_N8YPCI2 zG2WP8_3T

    W&;d%3s^Nm>`M|He+e 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

  • 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 z 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

    public virtual IJoystick[] JoystickCollection { get; set; } - /// - /// Signs whether the disk motor is on or off - /// - //protected bool DiskMotorState; - /// /// +3/2a printer port strobe /// @@ -153,8 +148,8 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum FrameCompleted = false; - if (UPDDiskDevice == null || !UPDDiskDevice.FDD_IsDiskLoaded) - TapeDevice.StartFrame(); + //if (UPDDiskDevice == null || !UPDDiskDevice.FDD_IsDiskLoaded) + //TapeDevice.StartFrame(); if (_renderSound) { diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ULA.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ULA.cs index 00a3be3bef..5951326a93 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ULA.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ULA.cs @@ -785,7 +785,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// public int GetContentionValue(int tstate) { - //tstate += MemoryContentionOffset; if (tstate >= FrameCycleLength) tstate -= FrameCycleLength; @@ -801,7 +800,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// public int GetPortContentionValue(int tstate) { - //tstate += PortContentionOffset; if (tstate >= FrameCycleLength) tstate -= FrameCycleLength; diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.cs index c27f74a265..f681ec3bd0 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum128KPlus3/ZX128Plus3.cs @@ -18,8 +18,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum public ZX128Plus3(ZXSpectrum spectrum, Z80A cpu, ZXSpectrum.BorderType borderType, List files, List joysticks) { Spectrum = spectrum; - CPU = cpu; - + CPU = cpu; CPUMon = new CPUMonitor(this); CPUMon.machineType = MachineType.ZXSpectrum128Plus3; diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.cs index 1f2508dd63..3291f5c20a 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Machine/ZXSpectrum48K/ZX48.cs @@ -22,8 +22,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum CPU = cpu; CPUMon = new CPUMonitor(this); - - //ULADevice = new ULA48(this); ULADevice = new Screen48(this); BuzzerDevice = new Beeper(this); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.IMemoryDomains.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.IMemoryDomains.cs index 16b439ed71..5a645c8d71 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.IMemoryDomains.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.IMemoryDomains.cs @@ -92,25 +92,10 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum SyncByteArrayDomain("RAM - BANK 7 (Shadow Screen)", _machine.RAM7); break; } - /* - SyncByteArrayDomain("ROM0", _machine.ROM0); - SyncByteArrayDomain("ROM1", _machine.ROM1); - SyncByteArrayDomain("ROM2", _machine.ROM2); - SyncByteArrayDomain("ROM3", _machine.ROM3); - SyncByteArrayDomain("RAM0", _machine.RAM0); - SyncByteArrayDomain("RAM1", _machine.RAM1); - SyncByteArrayDomain("RAM2", _machine.RAM2); - SyncByteArrayDomain("RAM3", _machine.RAM3); - SyncByteArrayDomain("RAM4", _machine.RAM4); - SyncByteArrayDomain("RAM5", _machine.RAM5); - SyncByteArrayDomain("RAM6", _machine.RAM6); - SyncByteArrayDomain("RAM7", _machine.RAM7); - */ } private void SyncByteArrayDomain(string name, byte[] data) - { - + { if (_memoryDomainsInit || _byteArrayDomains.ContainsKey(name)) { var m = _byteArrayDomains[name]; @@ -120,8 +105,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { var m = new MemoryDomainByteArray(name, MemoryDomain.Endian.Little, data, true, 1); _byteArrayDomains.Add(name, m); - } - + } } } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ISettable.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ISettable.cs index 5d07d4fc07..1e8e491ca6 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ISettable.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ISettable.cs @@ -242,6 +242,11 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum Dictionary Data = new Dictionary(); + /// + /// Detailed info to be displayed within the settings UIs + /// + /// + /// public static ZXMachineMetaData GetMetaObject(MachineType type) { ZXMachineMetaData m = new ZXMachineMetaData(); @@ -345,6 +350,11 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum return m; } + /// + /// Returns machine metadata as a formatted string (to be displayed in a textbox) + /// + /// + /// public static string GetMetaString(MachineType type) { var m = GetMetaObject(type); @@ -410,8 +420,6 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum sb.Append(builder[i]); sb.Append("\r\n"); } - - //sb.Append("\r\n"); } return sb.ToString(); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.Util.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.Util.cs index d5a46ca3b3..21fd979f96 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.Util.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.Util.cs @@ -35,7 +35,10 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum _machine.WriteBus(addr, value); } - + /// + /// Called by MainForm so that the core label can display a more detailed tooltip about the emulated spectrum model + /// + /// public string GetMachineType() { string m = ""; @@ -59,17 +62,31 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum case MachineType.ZXSpectrum128Plus3: m = "(Amstrad) ZX Spectrum 128K +3"; break; + case MachineType.Pentagon128: + m = "(Clone) Pentagon 128K"; + break; } return m; } + /// + /// Called by MainForm - dumps a close approximation of the Spectaculator SZX snapshot format + /// DEV use only - this is nowhere near accurate + /// + /// public byte[] GetSZXSnapshot() { return SZX.ExportSZX(_machine); - //return System.Text.Encoding.Default.GetString(data); } + /// + /// Utility method to get MemberName from an object + /// + /// + /// + /// + /// public static string GetMemberName(Expression> memberAccess) { return ((MemberExpression)memberAccess.Body).Member.Name; From c76d850687f320cafa6b174b6af98fedd3a63d3f Mon Sep 17 00:00:00 2001 From: upthorn Date: Thu, 3 Jan 2019 05:52:31 -0800 Subject: [PATCH 050/301] Working types now allow implicit conversions from longs. --- .../Api/Libraries/PluginLibrary.cs | 52 ------------------- .../WorkingTypes/wbyte.cs | 24 +++++---- .../WorkingTypes/wsbyte.cs | 20 +++---- .../WorkingTypes/wshort.cs | 20 +++---- .../WorkingTypes/wushort.cs | 18 ++++--- 5 files changed, 45 insertions(+), 89 deletions(-) delete mode 100644 BizHawk.Client.EmuHawk/Api/Libraries/PluginLibrary.cs diff --git a/BizHawk.Client.EmuHawk/Api/Libraries/PluginLibrary.cs b/BizHawk.Client.EmuHawk/Api/Libraries/PluginLibrary.cs deleted file mode 100644 index ca44e44a3d..0000000000 --- a/BizHawk.Client.EmuHawk/Api/Libraries/PluginLibrary.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; - -using BizHawk.Common.ReflectionExtensions; -using BizHawk.Emulation.Common; -using BizHawk.Client.ApiHawk; - -namespace BizHawk.Client.EmuHawk - -{ - public static class ApiManager - { - private static ApiContainer container; - private static void Register(IEmulatorServiceProvider serviceProvider) - { - // Register external apis - var libs = Assembly - .Load("BizHawk.Client.ApiHawk") - .GetTypes() - .Where(t => typeof(IExternalApi).IsAssignableFrom(t)) - .Where(t => t.IsSealed) - .Where(t => ServiceInjector.IsAvailable(serviceProvider, t)) - .ToList(); - - libs.AddRange( - Assembly - .GetAssembly(typeof(ApiContainer)) - .GetTypes() - .Where(t => typeof(IExternalApi).IsAssignableFrom(t)) - .Where(t => t.IsSealed) - .Where(t => ServiceInjector.IsAvailable(serviceProvider, t))); - - foreach (var lib in libs) - { - var instance = (IExternalApi)Activator.CreateInstance(lib); - ServiceInjector.UpdateServices(serviceProvider, instance); - Libraries.Add(lib, instance); - } - container = new ApiContainer(Libraries); - GlobalWin.ApiProvider = new BasicApiProvider(container); - } - private static readonly Dictionary Libraries = new Dictionary(); - public static void Restart(IEmulatorServiceProvider newServiceProvider) - { - Libraries.Clear(); - Register(newServiceProvider); - } - } -} diff --git a/BizHawk.Emulation.Common/WorkingTypes/wbyte.cs b/BizHawk.Emulation.Common/WorkingTypes/wbyte.cs index aeabe1ffd6..621ea82131 100644 --- a/BizHawk.Emulation.Common/WorkingTypes/wbyte.cs +++ b/BizHawk.Emulation.Common/WorkingTypes/wbyte.cs @@ -7,14 +7,18 @@ namespace BizHawk.Emulation.Common.WorkingTypes { // // Summary: - // Represents an 8-bit unsigned integer, that is capable of arithmetic without making you weep. - // Also provides all the base functionality of the standard C# Byte by calling its methods where relevant. + // Represents an 8-bit unsigned integer, that is capable of arithmetic without making you weep. + // Also provides all the base functionality of the standard C# Byte by calling its methods where relevant. public unsafe class wbyte : IComparable, IFormattable, IComparable, IEquatable { private Byte val; public const Byte MaxValue = Byte.MaxValue; public const Byte MinValue = Byte.MinValue; - public static implicit operator wbyte(uint value) + public static implicit operator wbyte(ulong value) + { + return new wbyte(value); + } + public static implicit operator wbyte(wushort value) { return new wbyte(value); } @@ -26,33 +30,33 @@ namespace BizHawk.Emulation.Common.WorkingTypes { } - public wbyte(uint value) + public wbyte(ulong value) { val = (Byte)(value & 0xFF); } - public wbyte(int value) + public wbyte(long value) { val = (Byte)(value & 0xFF); } public wbyte(double value) { - val = (Byte)(((int)value) & 0xFF); + val = (Byte)(((long)value) & 0xFF); } public static wbyte Parse(string s, NumberStyles style, IFormatProvider provider) { - return (uint)Byte.Parse(s, style, provider); + return (ulong)Byte.Parse(s, style, provider); } public static wbyte Parse(string s, IFormatProvider provider) { - return (uint)Byte.Parse(s, provider); + return (ulong)Byte.Parse(s, provider); } public static wbyte Parse(string s) { - return (uint)Byte.Parse(s); + return (ulong)Byte.Parse(s); } public static wbyte Parse(string s, NumberStyles style) { - return (uint)Byte.Parse(s, style); + return (ulong)Byte.Parse(s, style); } public static bool TryParse(string s, out wbyte result) { diff --git a/BizHawk.Emulation.Common/WorkingTypes/wsbyte.cs b/BizHawk.Emulation.Common/WorkingTypes/wsbyte.cs index 183f4af48e..187cf46c39 100644 --- a/BizHawk.Emulation.Common/WorkingTypes/wsbyte.cs +++ b/BizHawk.Emulation.Common/WorkingTypes/wsbyte.cs @@ -6,14 +6,14 @@ namespace BizHawk.Emulation.Common.WorkingTypes { // // Summary: - // Represents an 8-bit unsigned integer, that is capable of arithmetic without making you weep. - // Also provides all the base functionality of the standard C# SByte by calling its methods where relevant. + // Represents an 8-bit unsigned integer, that is capable of arithmetic without making you weep. + // Also provides all the base functionality of the standard C# SByte by calling its methods where relevant. public unsafe class wsbyte : IComparable, IFormattable, IComparable, IEquatable { private SByte val; public const SByte MaxValue = SByte.MaxValue; public const SByte MinValue = SByte.MinValue; - public static implicit operator wsbyte(int value) + public static implicit operator wsbyte(long value) { return new wsbyte(value); } @@ -25,33 +25,33 @@ namespace BizHawk.Emulation.Common.WorkingTypes { } - public wsbyte(int value) + public wsbyte(long value) { val = (SByte)(value & 0xFF); } - public wsbyte(uint value) + public wsbyte(ulong value) { val = (SByte)(value & 0xFF); } public wsbyte(double value) { - val = (SByte)(((uint)value) & 0xFF); + val = (SByte)(((ulong)value) & 0xFF); } public static wsbyte Parse(string s, NumberStyles style, IFormatProvider provider) { - return (int)SByte.Parse(s, style, provider); + return (long)SByte.Parse(s, style, provider); } public static wsbyte Parse(string s, IFormatProvider provider) { - return (int)SByte.Parse(s, provider); + return (long)SByte.Parse(s, provider); } public static wsbyte Parse(string s) { - return (int)SByte.Parse(s); + return (long)SByte.Parse(s); } public static wsbyte Parse(string s, NumberStyles style) { - return (int)SByte.Parse(s, style); + return (long)SByte.Parse(s, style); } public static bool TryParse(string s, out wsbyte result) { diff --git a/BizHawk.Emulation.Common/WorkingTypes/wshort.cs b/BizHawk.Emulation.Common/WorkingTypes/wshort.cs index 7e0808471f..aa66438db3 100644 --- a/BizHawk.Emulation.Common/WorkingTypes/wshort.cs +++ b/BizHawk.Emulation.Common/WorkingTypes/wshort.cs @@ -6,14 +6,14 @@ namespace BizHawk.Emulation.Common.WorkingTypes { // // Summary: - // Represents an 16-bit unsigned integer, that is capable of arithmetic without making you weep. - // Also provides all the base functionality of the standard C# Int16 by calling its methods where relevant. + // Represents an 16-bit unsigned integer, that is capable of arithmetic without making you weep. + // Also provides all the base functionality of the standard C# Int16 by calling its methods where relevant. public unsafe class wshort : IComparable, IFormattable, IComparable, IEquatable { private Int16 val; public const Int16 MaxValue = Int16.MaxValue; public const Int16 MinValue = Int16.MinValue; - public static implicit operator wshort(int value) + public static implicit operator wshort(long value) { return new wshort(value); } @@ -25,33 +25,33 @@ namespace BizHawk.Emulation.Common.WorkingTypes { } - public wshort(int value) + public wshort(long value) { val = (Int16)(value & 0xFFFF); } - public wshort(uint value) + public wshort(ulong value) { val = (Int16)(value & 0xFFFF); } public wshort(double value) { - val = (Int16)(((uint)value) & 0xFFFF); + val = (Int16)(((ulong)value) & 0xFFFF); } public static wshort Parse(string s, NumberStyles style, IFormatProvider provider) { - return (int)Int16.Parse(s, style, provider); + return (long)Int16.Parse(s, style, provider); } public static wshort Parse(string s, IFormatProvider provider) { - return (int)Int16.Parse(s, provider); + return (long)Int16.Parse(s, provider); } public static wshort Parse(string s) { - return (int)Int16.Parse(s); + return (long)Int16.Parse(s); } public static wshort Parse(string s, NumberStyles style) { - return (int)Int16.Parse(s, style); + return (long)Int16.Parse(s, style); } public static bool TryParse(string s, out wshort result) { diff --git a/BizHawk.Emulation.Common/WorkingTypes/wushort.cs b/BizHawk.Emulation.Common/WorkingTypes/wushort.cs index 57851100b6..427a414c6f 100644 --- a/BizHawk.Emulation.Common/WorkingTypes/wushort.cs +++ b/BizHawk.Emulation.Common/WorkingTypes/wushort.cs @@ -7,18 +7,22 @@ namespace BizHawk.Emulation.Common.WorkingTypes { // // Summary: - // Represents an 16-bit unsigned integer, that is capable of arithmetic without making you weep. - // Also provides all the base functionality of the standard C# UInt16 by calling its methods where relevant. + // Represents an 16-bit unsigned integer, that is capable of arithmetic without making you weep. + // Also provides all the base functionality of the standard C# UInt16 by calling its methods where relevant. public unsafe class wushort : IComparable, IFormattable, IComparable, IEquatable { private UInt16 val; public const UInt16 MaxValue = UInt16.MaxValue; public const UInt16 MinValue = UInt16.MinValue; - public static implicit operator wushort(uint value) + public static implicit operator wushort(ulong value) { return new wushort(value); } - public static implicit operator ushort(wushort value) + public static implicit operator wushort(wbyte value) + { + return new wushort(value); + } + public static implicit operator UInt16(wushort value) { return value.val; } @@ -26,17 +30,17 @@ namespace BizHawk.Emulation.Common.WorkingTypes { } - public wushort(uint value) + public wushort(ulong value) { val = (UInt16)(value & 0xFFFF); } - public wushort(int value) + public wushort(long value) { val = (UInt16)(value & 0xFFFF); } public wushort(double value) { - val = (UInt16)(((int)value) & 0xFFFF); + val = (UInt16)(((long)value) & 0xFFFF); } public static wushort Parse(string s, NumberStyles style, IFormatProvider provider) { From bc4330a9d1df1ed8cf84fa1ce4b5bbe1a86b1e44 Mon Sep 17 00:00:00 2001 From: upthorn Date: Thu, 3 Jan 2019 05:53:26 -0800 Subject: [PATCH 051/301] External tools no longer crash on loading new ROM --- BizHawk.Client.EmuHawk/Api/ApiManager.cs | 52 +++++++++++++++++++ .../BizHawk.Client.EmuHawk.csproj | 2 +- BizHawk.Client.EmuHawk/MainForm.cs | 2 +- 3 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 BizHawk.Client.EmuHawk/Api/ApiManager.cs diff --git a/BizHawk.Client.EmuHawk/Api/ApiManager.cs b/BizHawk.Client.EmuHawk/Api/ApiManager.cs new file mode 100644 index 0000000000..9dd5b71087 --- /dev/null +++ b/BizHawk.Client.EmuHawk/Api/ApiManager.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Reflection; + +using BizHawk.Common.ReflectionExtensions; +using BizHawk.Emulation.Common; +using BizHawk.Client.ApiHawk; + +namespace BizHawk.Client.EmuHawk + +{ + public static class ApiManager + { + private static ApiContainer container; + private static void Register(IEmulatorServiceProvider serviceProvider) + { + // Register external apis + var apis = Assembly + .Load("BizHawk.Client.ApiHawk") + .GetTypes() + .Where(t => typeof(IExternalApi).IsAssignableFrom(t)) + .Where(t => t.IsSealed) + .Where(t => ServiceInjector.IsAvailable(serviceProvider, t)) + .ToList(); + + apis.AddRange( + Assembly + .GetAssembly(typeof(ApiContainer)) + .GetTypes() + .Where(t => typeof(IExternalApi).IsAssignableFrom(t)) + .Where(t => t.IsSealed) + .Where(t => ServiceInjector.IsAvailable(serviceProvider, t))); + + foreach (var api in apis) + { + var instance = (IExternalApi)Activator.CreateInstance(api); + ServiceInjector.UpdateServices(serviceProvider, instance); + Libraries.Add(api, instance); + } + container = new ApiContainer(Libraries); + GlobalWin.ApiProvider = new BasicApiProvider(container); + } + private static readonly Dictionary Libraries = new Dictionary(); + public static void Restart(IEmulatorServiceProvider newServiceProvider) + { + Libraries.Clear(); + Register(newServiceProvider); + } + } +} diff --git a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj index efbb0d391d..e149f0bf88 100644 --- a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj +++ b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj @@ -664,7 +664,7 @@ - + diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 626e98fe2b..5ac22ab9f3 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -3793,8 +3793,8 @@ namespace BizHawk.Client.EmuHawk } } - GlobalWin.Tools.Restart(); ApiManager.Restart(Emulator.ServiceProvider); + GlobalWin.Tools.Restart(); if (Global.Config.LoadCheatFileByGame) { From f47c2d15588be661fde2a2b66dd0edbd47027364 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Thu, 3 Jan 2019 12:10:53 -0600 Subject: [PATCH 052/301] GBHawk: Start link support --- BizHawk.Client.Common/RomLoader.cs | 19 +- .../BizHawk.Emulation.Cores.csproj | 25 +++ .../Nintendo/GBHawk/GBHawk.IEmulator.cs | 2 +- .../Nintendo/GBHawk/GBHawk.IStatable.cs | 4 +- .../Consoles/Nintendo/GBHawk/GBHawk.cs | 3 +- .../GBHawkLink/GBHawkLink.ICodeDataLog.cs | 186 ++++++++++++++++++ .../GBHawkLink/GBHawkLink.IDebuggable.cs | 77 ++++++++ .../GBHawkLink/GBHawkLink.IEmulator.cs | 128 ++++++++++++ .../GBHawkLink/GBHawkLink.IInputPollable.cs | 24 +++ .../GBHawkLink/GBHawkLink.IMemoryDomains.cs | 129 ++++++++++++ .../GBHawkLink/GBHawkLink.ISaveRam.cs | 34 ++++ .../GBHawkLink/GBHawkLink.ISettable.cs | 91 +++++++++ .../GBHawkLink/GBHawkLink.IStatable.cs | 63 ++++++ .../Nintendo/GBHawkLink/GBHawkLink.cs | 88 +++++++++ .../GBHawkLink/GBHawkLinkControllerDeck.cs | 84 ++++++++ .../GBHawkLink/GBHawkLinkControllers.cs | 94 +++++++++ .../Consoles/Nintendo/GBHawkLink/ReadMe.txt | 1 + 17 files changed, 1044 insertions(+), 8 deletions(-) create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ICodeDataLog.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IDebuggable.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IInputPollable.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IMemoryDomains.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ISaveRam.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ISettable.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IStatable.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLinkControllerDeck.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLinkControllers.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/ReadMe.txt diff --git a/BizHawk.Client.Common/RomLoader.cs b/BizHawk.Client.Common/RomLoader.cs index ef007eeac6..3a4b1d69a6 100644 --- a/BizHawk.Client.Common/RomLoader.cs +++ b/BizHawk.Client.Common/RomLoader.cs @@ -14,6 +14,7 @@ using BizHawk.Emulation.Cores.Computers.Commodore64; using BizHawk.Emulation.Cores.Consoles.Sega.gpgx; using BizHawk.Emulation.Cores.Nintendo.Gameboy; using BizHawk.Emulation.Cores.Nintendo.GBHawk; +using BizHawk.Emulation.Cores.Nintendo.GBHawkLink; using BizHawk.Emulation.Cores.Nintendo.SNES; using BizHawk.Emulation.Cores.PCEngine; using BizHawk.Emulation.Cores.Sega.Saturn; @@ -630,7 +631,20 @@ namespace BizHawk.Client.Common var left = Database.GetGameInfo(leftBytes, "left.gb"); var right = Database.GetGameInfo(rightBytes, "right.gb"); - nextEmulator = new GambatteLink( + if (Global.Config.GB_UseGBHawk) + { + nextEmulator = new GBHawkLink( + nextComm, + left, + leftBytes, + right, + rightBytes, + GetCoreSettings(), + GetCoreSyncSettings()); + } + else + { + nextEmulator = new GambatteLink( nextComm, left, leftBytes, @@ -639,7 +653,8 @@ namespace BizHawk.Client.Common GetCoreSettings(), GetCoreSyncSettings(), Deterministic); - + } + // other stuff todo break; case "AppleII": diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index f57d61d6eb..744a7d8c27 100644 --- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -789,6 +789,31 @@ VBANext.cs + + + + GBHawkLink.cs + + + GBHawkLink.cs + + + GBHawkLink.cs + + + GBHawkLink.cs + + + GBHawkLink.cs + + + GBHawkLink.cs + + + GBHawkLink.cs + + + diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IEmulator.cs index be2812ef86..01f04f8338 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IEmulator.cs @@ -159,7 +159,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk } ticker++; - //if (ticker > 10000000) { vblank_rise = true; }//throw new Exception("ERROR: Unable to Resolve Frame"); } + // if (ticker > 10000000) { vblank_rise = true; }//throw new Exception("ERROR: Unable to Resolve Frame"); } in_vblank_old = in_vblank; REG_FF0F_OLD = REG_FF0F; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IStatable.cs index 161f06c92d..5091c6ceb8 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IStatable.cs @@ -107,9 +107,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk ser.Sync("cart_RAM", ref cart_RAM, false); } - - - ser.EndSection(); + ser.EndSection(); } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs index d7c8edcf4f..00e89a039e 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.cs @@ -3,7 +3,6 @@ using BizHawk.Common.BufferExtensions; using BizHawk.Emulation.Common; using BizHawk.Emulation.Common.Components.LR35902; -using BizHawk.Common.NumberExtensions; using BizHawk.Emulation.Cores.Consoles.Nintendo.Gameboy; using System.Runtime.InteropServices; @@ -275,7 +274,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk private readonly GBHawkControllerDeck _controllerDeck; - private void HardReset() + public void HardReset() { GB_bios_register = 0; // bios enable GBC_compat = is_GBC; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ICodeDataLog.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ICodeDataLog.cs new file mode 100644 index 0000000000..cfc841d321 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ICodeDataLog.cs @@ -0,0 +1,186 @@ +using System; +using System.IO; +using System.Collections.Generic; + +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Common.Components.LR35902; + +namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink +{ + public partial class GBHawkLink : ICodeDataLogger + { + private ICodeDataLog _cdl; + + public void SetCDL(ICodeDataLog cdl) + { + _cdl = cdl; + if (cdl == null) + this.L.cpu.CDLCallback = null; + else this.L.cpu.CDLCallback = CDLCpuCallback; + } + + public void NewCDL(ICodeDataLog cdl) + { + cdl["ROM"] = new byte[MemoryDomains["ROM L"].Size]; + cdl["HRAM"] = new byte[MemoryDomains["Zero Page RAM L"].Size]; + + cdl["WRAM"] = new byte[MemoryDomains["Main RAM L"].Size]; + + if (MemoryDomains.Has("Cart RAM L")) + { + cdl["CartRAM"] = new byte[MemoryDomains["Cart RAM L"].Size]; + } + + cdl.SubType = "GB"; + cdl.SubVer = 0; + } + + [FeatureNotImplemented] + void ICodeDataLogger.DisassembleCDL(Stream s, ICodeDataLog cdl) + { + } + + public void SetCDL(LR35902.eCDLogMemFlags flags, string type, int cdladdr) + { + if (type == null) return; + byte val = (byte)flags; + _cdl[type][cdladdr] |= (byte)flags; + } + + void CDLCpuCallback(ushort addr, LR35902.eCDLogMemFlags flags) + { + if (addr < 0x8000) + { + //don't record writes to the ROM, it's just noisy + //NOTE: in principle a mapper could mount a useful resource here, but I doubt it) + if ((flags & LR35902.eCDLogMemFlags.Write) != 0) return; + } + + if (L.ppu.DMA_start) + { + // some of gekkio's tests require these to be accessible during DMA + if (addr < 0x8000) + { + if (L.ppu.DMA_addr < 0x80) + { + return; + } + else + { + L.mapper.MapCDL(addr, flags); + return; + } + } + else if ((addr >= 0xE000) && (addr < 0xF000)) + { + SetCDL(flags, "WRAM", addr - 0xE000); + } + else if ((addr >= 0xF000) && (addr < 0xFE00)) + { + SetCDL(flags, "WRAM", (L.RAM_Bank * 0x1000) + (addr - 0xF000)); + } + else if ((addr >= 0xFE00) && (addr < 0xFEA0) && L.ppu.DMA_OAM_access) + { + return; + } + else if ((addr >= 0xFF00) && (addr < 0xFF80)) // The game GOAL! Requires Hardware Regs to be accessible + { + return; + } + else if ((addr >= 0xFF80)) + { + SetCDL(flags, "HRAM", addr - 0xFF80); + } + + } + + if (addr < 0x900) + { + if (addr < 0x100) + { + // return Either BIOS ROM or Game ROM + if ((L.GB_bios_register & 0x1) == 0) + { + return; + } + else + { + L.mapper.MapCDL(addr, flags); + return; + } + } + else if (addr >= 0x200) + { + // return Either BIOS ROM or Game ROM + if (((L.GB_bios_register & 0x1) == 0) && L.is_GBC) + { + return; + } + else + { + L.mapper.MapCDL(addr, flags); + return; + } + } + else + { + L.mapper.MapCDL(addr, flags); + return; + } + } + else if (addr < 0x8000) + { + L.mapper.MapCDL(addr, flags); + return; + } + else if (addr < 0xA000) + { + return; + } + else if (addr < 0xC000) + { + L.mapper.MapCDL(addr, flags); + return; + } + else if (addr < 0xD000) + { + return; + } + else if (addr < 0xE000) + { + SetCDL(flags, "WRAM", (L.RAM_Bank * 0x1000) + (addr - 0xD000)); + } + else if (addr < 0xF000) + { + SetCDL(flags, "WRAM", addr - 0xE000); + } + else if (addr < 0xFE00) + { + SetCDL(flags, "WRAM", (L.RAM_Bank * 0x1000) + (addr - 0xF000)); + } + else if (addr < 0xFEA0) + { + return; + } + else if (addr < 0xFF00) + { + return; + } + else if (addr < 0xFF80) + { + return; + } + else if (addr < 0xFFFF) + { + SetCDL(flags, "HRAM", addr - 0xFF80); + } + else + { + return; + } + + } + + + } +} \ No newline at end of file diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IDebuggable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IDebuggable.cs new file mode 100644 index 0000000000..e9b191d02a --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IDebuggable.cs @@ -0,0 +1,77 @@ +using System; +using System.Collections.Generic; + +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink +{ + public partial class GBHawkLink : IDebuggable + { + public IDictionary GetCpuFlagsAndRegisters() + { + return new Dictionary + { + /* + ["A"] = cpu.A, + ["X"] = cpu.X, + ["Y"] = cpu.Y, + ["S"] = cpu.S, + ["PC"] = cpu.PC, + ["Flag C"] = cpu.FlagC, + ["Flag Z"] = cpu.FlagZ, + ["Flag I"] = cpu.FlagI, + ["Flag D"] = cpu.FlagD, + ["Flag B"] = cpu.FlagB, + ["Flag V"] = cpu.FlagV, + ["Flag N"] = cpu.FlagN, + ["Flag T"] = cpu.FlagT + */ + }; + } + + public void SetCpuRegister(string register, int value) + { + switch (register) + { + default: + throw new InvalidOperationException(); + case "A": + //cpu.A = (byte)value; + break; + case "X": + //cpu.X = (byte)value; + break; + case "Y": + //cpu.Y = (byte)value; + break; + case "S": + //cpu.S = (byte)value; + break; + case "PC": + //cpu.PC = (ushort)value; + break; + case "Flag I": + //cpu.FlagI = value > 0; + break; + } + } + + public IMemoryCallbackSystem MemoryCallbacks { get; } = new MemoryCallbackSystem(new[] { "System Bus" }); + + public bool CanStep(StepType type) + { + return false; + } + + [FeatureNotImplemented] + public void Step(StepType type) + { + throw new NotImplementedException(); + } + + public long TotalExecutedCycles + { + get { return (long)L.cpu.TotalExecutedCycles; } + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs new file mode 100644 index 0000000000..790ab1fa06 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs @@ -0,0 +1,128 @@ +using BizHawk.Common.NumberExtensions; +using BizHawk.Emulation.Common; +using System; +using System.Collections.Generic; +using System.Runtime.InteropServices; + +namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink +{ + public partial class GBHawkLink : IEmulator, IVideoProvider + { + public IEmulatorServiceProvider ServiceProvider { get; } + + public ControllerDefinition ControllerDefinition => _controllerDeck.Definition; + + public byte controller_state; + public bool in_vblank_old; + public bool in_vblank; + public bool vblank_rise; + + public void FrameAdvance(IController controller, bool render, bool rendersound) + { + //Console.WriteLine("-----------------------FRAME-----------------------"); + if (_tracer.Enabled) + { + L.cpu.TraceCallback = s => _tracer.Put(s); + } + else + { + L.cpu.TraceCallback = null; + } + + _frame++; + + if (controller.IsPressed("Power")) + { + HardReset(); + } + + _islag = true; + + GetControllerState(controller); + + do_frame(); + + _islag = L._islag; + + if (_islag) + { + _lagcount++; + } + } + + public void do_frame() + { + L.do_frame(); + R.do_frame(); + } + + public void GetControllerState(IController controller) + { + InputCallbacks.Call(); + L.controller_state = _controllerDeck.ReadPort1(controller); + R.controller_state = _controllerDeck.ReadPort2(controller); + } + + public int Frame => _frame; + + public string SystemId => "GB"; + + public bool DeterministicEmulation { get; set; } + + public void ResetCounters() + { + _frame = 0; + _lagcount = 0; + _islag = false; + } + + public CoreComm CoreComm { get; } + + public void Dispose() + { + L.Dispose(); + R.Dispose(); + } + + #region Video provider + + public int _frameHz = 60; + + public int[] _vidbuffer = new int[160 * 2 * 144]; + public int[] buff_L; + public int[] buff_R; + + public int[] GetVideoBuffer() + { + // combine the 2 video buffers from the instances + buff_L = L.GetVideoBuffer(); + buff_R = R.GetVideoBuffer(); + + for (int i = 0; i < 144; i++) + { + for (int j = 0; j < 160; j++) + { + _vidbuffer[i * 320 + j] = buff_L[i * 160 + j]; + _vidbuffer[i * 320 + j + 160] = buff_R[i * 160 + j]; + } + } + + return _vidbuffer; + } + + public int VirtualWidth => 160 * 2; + public int VirtualHeight => 144; + public int BufferWidth => 160 * 2; + public int BufferHeight => 144; + public int BackgroundColor => unchecked((int)0xFF000000); + public int VsyncNumerator => _frameHz; + public int VsyncDenominator => 1; + + public static readonly uint[] color_palette_BW = { 0xFFFFFFFF , 0xFFAAAAAA, 0xFF555555, 0xFF000000 }; + public static readonly uint[] color_palette_Gr = { 0xFFA4C505, 0xFF88A905, 0xFF1D551D, 0xFF052505 }; + + public uint[] color_palette = new uint[4]; + + #endregion + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IInputPollable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IInputPollable.cs new file mode 100644 index 0000000000..021a1ac3a0 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IInputPollable.cs @@ -0,0 +1,24 @@ +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink +{ + public partial class GBHawkLink : IInputPollable + { + public int LagCount + { + get { return _lagcount; } + set { _lagcount = value; } + } + + public bool IsLagFrame + { + get { return _islag; } + set { _islag = value; } + } + + public IInputCallbackSystem InputCallbacks { get; } = new InputCallbackSystem(); + + public bool _islag = true; + private int _lagcount; + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IMemoryDomains.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IMemoryDomains.cs new file mode 100644 index 0000000000..d28fdaba55 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IMemoryDomains.cs @@ -0,0 +1,129 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink +{ + public partial class GBHawkLink + { + private IMemoryDomains MemoryDomains; + + public void SetupMemoryDomains() + { + var domains = new List + { + new MemoryDomainDelegate( + "Main RAM L", + L.RAM.Length, + MemoryDomain.Endian.Little, + addr => L.RAM[addr], + (addr, value) => L.RAM[addr] = value, + 1), + new MemoryDomainDelegate( + "Main RAM R", + R.RAM.Length, + MemoryDomain.Endian.Little, + addr => R.RAM[addr], + (addr, value) => R.RAM[addr] = value, + 1), + new MemoryDomainDelegate( + "Zero Page RAM L", + L.ZP_RAM.Length, + MemoryDomain.Endian.Little, + addr => L.ZP_RAM[addr], + (addr, value) => L.ZP_RAM[addr] = value, + 1), + new MemoryDomainDelegate( + "Zero Page RAM R", + R.ZP_RAM.Length, + MemoryDomain.Endian.Little, + addr => R.ZP_RAM[addr], + (addr, value) => R.ZP_RAM[addr] = value, + 1), + new MemoryDomainDelegate( + "System Bus L", + 0X10000, + MemoryDomain.Endian.Little, + addr => PeekSystemBusL(addr), + (addr, value) => PokeSystemBusL(addr, value), + 1), + new MemoryDomainDelegate( + "System Bus R", + 0X10000, + MemoryDomain.Endian.Little, + addr => PeekSystemBusR(addr), + (addr, value) => PokeSystemBusR(addr, value), + 1), + new MemoryDomainDelegate( + "ROM L", + L._rom.Length, + MemoryDomain.Endian.Little, + addr => L._rom[addr], + (addr, value) => L._rom[addr] = value, + 1), + new MemoryDomainDelegate( + "ROM R", + R._rom.Length, + MemoryDomain.Endian.Little, + addr => R._rom[addr], + (addr, value) => R._rom[addr] = value, + 1), + new MemoryDomainDelegate( + "VRAM L", + L.VRAM.Length, + MemoryDomain.Endian.Little, + addr => L.VRAM[addr], + (addr, value) => L.VRAM[addr] = value, + 1), + new MemoryDomainDelegate( + "VRAM R", + R.VRAM.Length, + MemoryDomain.Endian.Little, + addr => R.VRAM[addr], + (addr, value) => R.VRAM[addr] = value, + 1) + }; + + if (L.cart_RAM != null) + { + var CartRamL = new MemoryDomainByteArray("Cart RAM L", MemoryDomain.Endian.Little, L.cart_RAM, true, 1); + domains.Add(CartRamL); + } + + if (R.cart_RAM != null) + { + var CartRamR = new MemoryDomainByteArray("Cart RAM R", MemoryDomain.Endian.Little, R.cart_RAM, true, 1); + domains.Add(CartRamR); + } + + MemoryDomains = new MemoryDomainList(domains); + (ServiceProvider as BasicServiceProvider).Register(MemoryDomains); + } + + private byte PeekSystemBusL(long addr) + { + ushort addr2 = (ushort)(addr & 0xFFFF); + return L.PeekMemory(addr2); + } + + private byte PeekSystemBusR(long addr) + { + ushort addr2 = (ushort)(addr & 0xFFFF); + return R.PeekMemory(addr2); + } + + private void PokeSystemBusL(long addr, byte value) + { + ushort addr2 = (ushort)(addr & 0xFFFF); + L.WriteMemory(addr2, value); + } + + private void PokeSystemBusR(long addr, byte value) + { + ushort addr2 = (ushort)(addr & 0xFFFF); + R.WriteMemory(addr2, value); + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ISaveRam.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ISaveRam.cs new file mode 100644 index 0000000000..e8a6a9d0b5 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ISaveRam.cs @@ -0,0 +1,34 @@ +using System; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink +{ + public partial class GBHawkLink : ISaveRam + { + public byte[] CloneSaveRam() + { + if (L.cart_RAM != null) + { + return (byte[])L.cart_RAM.Clone(); + } + else + { + return null; + } + } + + public void StoreSaveRam(byte[] data) + { + Buffer.BlockCopy(data, 0, L.cart_RAM, 0, data.Length); + Console.WriteLine("loading SRAM here"); + } + + public bool SaveRamModified + { + get + { + return L.has_bat & _syncSettings.L.Use_SRAM; + } + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ISettable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ISettable.cs new file mode 100644 index 0000000000..dd2711ded1 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ISettable.cs @@ -0,0 +1,91 @@ +using System; +using System.ComponentModel; + +using Newtonsoft.Json; + +using BizHawk.Common; +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Cores.Nintendo.GBHawk; + +namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink +{ + public partial class GBHawkLink : IEmulator, IStatable, ISettable + { + public GBLinkSettings GetSettings() + { + return new GBLinkSettings + ( + L.GetSettings(), + R.GetSettings() + ); + } + + public GBLinkSyncSettings GetSyncSettings() + { + return new GBLinkSyncSettings + ( + L.GetSyncSettings(), + R.GetSyncSettings() + ); + } + + public bool PutSettings(GBLinkSettings o) + { + return L.PutSettings(o.L) || R.PutSettings(o.R); + } + + public bool PutSyncSettings(GBLinkSyncSettings o) + { + return L.PutSyncSettings(o.L) || R.PutSyncSettings(o.R); + } + + private GBLinkSettings _settings = new GBLinkSettings(); + public GBLinkSyncSettings _syncSettings = new GBLinkSyncSettings(); + + public class GBLinkSettings + { + public GBHawk.GBHawk.GBSettings L; + public GBHawk.GBHawk.GBSettings R; + + public GBLinkSettings() + { + L = new GBHawk.GBHawk.GBSettings(); + R = new GBHawk.GBHawk.GBSettings(); + } + + public GBLinkSettings(GBHawk.GBHawk.GBSettings L, GBHawk.GBHawk.GBSettings R) + { + this.L = L; + this.R = R; + } + + public GBLinkSettings Clone() + { + return new GBLinkSettings(L.Clone(), R.Clone()); + } + } + + public class GBLinkSyncSettings + { + public GBHawk.GBHawk.GBSyncSettings L; + public GBHawk.GBHawk.GBSyncSettings R; + + public GBLinkSyncSettings() + { + L = new GBHawk.GBHawk.GBSyncSettings(); + R = new GBHawk.GBHawk.GBSyncSettings(); + } + + public GBLinkSyncSettings(GBHawk.GBHawk.GBSyncSettings L, GBHawk.GBHawk.GBSyncSettings R) + { + this.L = L; + this.R = R; + } + + public GBLinkSyncSettings Clone() + { + return new GBLinkSyncSettings(L.Clone(), R.Clone()); + } + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IStatable.cs new file mode 100644 index 0000000000..e078e962a9 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IStatable.cs @@ -0,0 +1,63 @@ +using System.IO; +using Newtonsoft.Json; + +using BizHawk.Common; +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Cores.Nintendo.GBHawk; + +namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink +{ + public partial class GBHawkLink : IStatable + { + public bool BinarySaveStatesPreferred => true; + + public void SaveStateText(TextWriter writer) + { + L.SaveStateText(writer); + R.SaveStateText(writer); + SyncState(new Serializer(writer)); + } + + public void LoadStateText(TextReader reader) + { + L.LoadStateText(reader); + R.LoadStateText(reader); + SyncState(new Serializer(reader)); + } + + public void SaveStateBinary(BinaryWriter bw) + { + L.SaveStateBinary(bw); + R.SaveStateBinary(bw); + // other variables + SyncState(new Serializer(bw)); + } + + public void LoadStateBinary(BinaryReader br) + { + L.LoadStateBinary(br); + R.LoadStateBinary(br); + // other variables + SyncState(new Serializer(br)); + } + + public byte[] SaveStateBinary() + { + MemoryStream ms = new MemoryStream(); + BinaryWriter bw = new BinaryWriter(ms); + SaveStateBinary(bw); + bw.Flush(); + return ms.ToArray(); + } + + //private JsonSerializer ser = new JsonSerializer { Formatting = Formatting.Indented }; + + private void SyncState(Serializer ser) + { + ser.Sync("Lag", ref _lagcount); + ser.Sync("Frame", ref _frame); + ser.Sync("IsLag", ref _islag); + _controllerDeck.SyncState(ser); + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs new file mode 100644 index 0000000000..c4f2ffacda --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs @@ -0,0 +1,88 @@ +using System; + +using BizHawk.Common.BufferExtensions; +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Common.Components.LR35902; + +using BizHawk.Emulation.Cores.Consoles.Nintendo.Gameboy; +using BizHawk.Emulation.Cores.Nintendo.GBHawk; +using System.Runtime.InteropServices; + +namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink +{ + [Core( + "GBHawkLink", + "", + isPorted: false, + isReleased: true)] + [ServiceNotApplicable(typeof(IDriveLight))] + public partial class GBHawkLink : IEmulator, ISaveRam, IDebuggable, IStatable, IInputPollable, IRegionable, ILinkable, + ISettable + { + // we want to create two GBHawk instances that we will run concurrently + // maybe up to 4 eventually? + public GBHawk.GBHawk L; + public GBHawk.GBHawk R; + + //[CoreConstructor("GB", "GBC")] + public GBHawkLink(CoreComm comm, GameInfo game_L, byte[] rom_L, GameInfo game_R, byte[] rom_R, /*string gameDbFn,*/ object settings, object syncSettings) + { + var ser = new BasicServiceProvider(this); + + GBLinkSettings linkSettings = (GBLinkSettings)settings ?? new GBLinkSettings(); + GBLinkSyncSettings linkSyncSettings = (GBLinkSyncSettings)syncSettings ?? new GBLinkSyncSettings(); + _controllerDeck = new GBHawkLinkControllerDeck(GBHawkControllerDeck.DefaultControllerName, GBHawkControllerDeck.DefaultControllerName); + + CoreComm = comm; + + L = new GBHawk.GBHawk(new CoreComm(comm.ShowMessage, comm.Notify) { CoreFileProvider = comm.CoreFileProvider }, + game_L, rom_L, linkSettings.L, linkSyncSettings.L); + + R = new GBHawk.GBHawk(new CoreComm(comm.ShowMessage, comm.Notify) { CoreFileProvider = comm.CoreFileProvider }, + game_R, rom_R, linkSettings.R, linkSyncSettings.R); + + ser.Register(this); + ser.Register(L.audio); + + _tracer = new TraceBuffer { Header = L.cpu.TraceHeader }; + ser.Register(_tracer); + + ServiceProvider = ser; + + SetupMemoryDomains(); + + HardReset(); + + L.color_palette[0] = color_palette_BW[0]; + L.color_palette[1] = color_palette_BW[1]; + L.color_palette[2] = color_palette_BW[2]; + L.color_palette[3] = color_palette_BW[3]; + + R.color_palette[0] = color_palette_BW[0]; + R.color_palette[1] = color_palette_BW[1]; + R.color_palette[2] = color_palette_BW[2]; + R.color_palette[3] = color_palette_BW[3]; + } + + public void HardReset() + { + L.HardReset(); + R.HardReset(); + } + + public DisplayType Region => DisplayType.NTSC; + + public int _frame = 0; + + private readonly GBHawkLinkControllerDeck _controllerDeck; + + private readonly ITraceable _tracer; + + bool ILinkable.LinkConnected { get; } + + private void ExecFetch(ushort addr) + { + MemoryCallbacks.CallExecutes(addr, "System Bus"); + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLinkControllerDeck.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLinkControllerDeck.cs new file mode 100644 index 0000000000..fd2e5c7ae8 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLinkControllerDeck.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +using BizHawk.Common; +using BizHawk.Common.ReflectionExtensions; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink +{ + public class GBHawkLinkControllerDeck + { + public GBHawkLinkControllerDeck(string controller1Name, string controller2Name) + { + if (!ValidControllerTypes.ContainsKey(controller1Name)) + { + throw new InvalidOperationException("Invalid controller type: " + controller1Name); + } + + if (!ValidControllerTypes.ContainsKey(controller2Name)) + { + throw new InvalidOperationException("Invalid controller type: " + controller2Name); + } + + Port1 = (IPort)Activator.CreateInstance(ValidControllerTypes[controller1Name], 1); + Port2 = (IPort)Activator.CreateInstance(ValidControllerTypes[controller2Name], 2); + + Definition = new ControllerDefinition + { + Name = Port1.Definition.Name, + BoolButtons = Port1.Definition.BoolButtons + .Concat(Port2.Definition.BoolButtons) + .ToList() + }; + } + + public byte ReadPort1(IController c) + { + return Port1.Read(c); + } + + public byte ReadPort2(IController c) + { + return Port2.Read(c); + } + + public ControllerDefinition Definition { get; } + + public void SyncState(Serializer ser) + { + ser.BeginSection("Port1"); + Port1.SyncState(ser); + ser.EndSection(); + + ser.BeginSection("Port2"); + Port2.SyncState(ser); + ser.EndSection(); + } + + private readonly IPort Port1; + private readonly IPort Port2; + + private static Dictionary _controllerTypes; + + public static Dictionary ValidControllerTypes + { + get + { + if (_controllerTypes == null) + { + _controllerTypes = typeof(GBHawkLinkControllerDeck).Assembly + .GetTypes() + .Where(t => typeof(IPort).IsAssignableFrom(t)) + .Where(t => !t.IsAbstract && !t.IsInterface) + .ToDictionary(tkey => tkey.DisplayName()); + } + + return _controllerTypes; + } + } + + public static string DefaultControllerName => typeof(StandardControls).DisplayName(); + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLinkControllers.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLinkControllers.cs new file mode 100644 index 0000000000..b1617ce740 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLinkControllers.cs @@ -0,0 +1,94 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Linq; + +using BizHawk.Common; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink +{ + /// + /// Represents a GB add on + /// + public interface IPort + { + byte Read(IController c); + + ControllerDefinition Definition { get; } + + void SyncState(Serializer ser); + + int PortNum { get; } + } + + [DisplayName("Gameboy Controller")] + public class StandardControls : IPort + { + public StandardControls(int portNum) + { + PortNum = portNum; + Definition = new ControllerDefinition + { + Name = "Gameboy Controller H", + BoolButtons = BaseDefinition + .Select(b => "P" + PortNum + " " + b) + .ToList() + }; + } + + public int PortNum { get; } + + public ControllerDefinition Definition { get; } + + public byte Read(IController c) + { + byte result = 0xFF; + + if (c.IsPressed(Definition.BoolButtons[0])) + { + result -= 4; + } + if (c.IsPressed(Definition.BoolButtons[1])) + { + result -= 8; + } + if (c.IsPressed(Definition.BoolButtons[2])) + { + result -= 2; + } + if (c.IsPressed(Definition.BoolButtons[3])) + { + result -= 1; + } + if (c.IsPressed(Definition.BoolButtons[4])) + { + result -= 128; + } + if (c.IsPressed(Definition.BoolButtons[5])) + { + result -= 64; + } + if (c.IsPressed(Definition.BoolButtons[6])) + { + result -= 32; + } + if (c.IsPressed(Definition.BoolButtons[7])) + { + result -= 16; + } + + return result; + } + + private static readonly string[] BaseDefinition = + { + "Up", "Down", "Left", "Right", "Start", "Select", "B", "A", "Power" + }; + + public void SyncState(Serializer ser) + { + //nothing + } + } +} \ No newline at end of file diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/ReadMe.txt b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/ReadMe.txt new file mode 100644 index 0000000000..bc60bf4b01 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/ReadMe.txt @@ -0,0 +1 @@ +TODO: From 42764f0019990c93d3eb61719c97f03ecfb68a71 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 4 Jan 2019 08:50:55 +1000 Subject: [PATCH 053/301] Add preliminary Unix compatibility (using Mono; resolves #1384) (#1380) * Move PlatformSpecificLinkedLibs and implementations to common and rename * Specify file ext. at LoadPlatformSpecific call site * Move Client.Common.Global.RunningOnUnix to PlatformLinkedLibSingleton * Inline var Resolver * Use PlatformLinkedLibManager internally * Move plugin load check to LinkedLibManager, use LinkedLibManager * Interpolate * Return exit code from dlclose/FreeLibrary * Skip all calls to externs in BlipBufDll when using mono * Use PlatformLinkedLibManager in SevenZipLibraryManager * Add expected return value to workaround (from testing on Win32) * Remove ".dll" from DllImport attr, remove temporary workaround, see desc. The library can be built by changing the output file name in `.../blip_buf/Makefile` to `libblip_buf.so`, and running `make`. It will be loaded if placed in the `.../output` folder. * Remove unused code, add TODO (this class is req. for Waterbox.PeWrapper) The TODO is to [rewrite with C#](https://docs.microsoft.com/en-us/dotnet/standard/io/memory-mapped-files) instead of importing from `kernel32.dll`. * Update OpenTK again but better (for #1384) * Add Mono run script * Add libblip_buf.so (temporary) Temporary because it should be a separate package which BizHawk depends on. * Add distro detection, add "already running" and "unknown distro" messages * Gray-out Lua Console on Unix * Extract superclass from EmuLuaLibrary, add shell implementation for Unix * Specify libdl version, Fedora doesn't have the versionless symlink * Remove empty `ToolStripMenuItem`, null `Text` caused crash on Unix * Transform OpenTK keyboard input into a `List` and read that Also fixes crash on rebind * Remove debug `using ...;` --- Assets/EmuHawkMono.sh | 18 ++++ Assets/libblip_buf.so | Bin 0 -> 16840 bytes BizHawk.Client.Common/7z/LibraryManager.cs | 18 ++-- BizHawk.Client.Common/7z/NativeMethods.cs | 12 +-- BizHawk.Client.Common/Global.cs | 2 - .../BizHawk.Client.EmuHawk.csproj | 2 + BizHawk.Client.EmuHawk/Input/Input.cs | 37 +++---- BizHawk.Client.EmuHawk/Input/OTK_Keyboard.cs | 38 +++++++- BizHawk.Client.EmuHawk/MainForm.Events.cs | 1 + BizHawk.Client.EmuHawk/MainForm.cs | 4 - BizHawk.Client.EmuHawk/Program.cs | 80 +++------------ BizHawk.Client.EmuHawk/ScreenSaver.cs | 3 +- BizHawk.Client.EmuHawk/Sound/Sound.cs | 3 +- BizHawk.Client.EmuHawk/Throttle.cs | 3 +- BizHawk.Client.EmuHawk/config/InputWidget.cs | 6 +- .../tools/Lua/Libraries/EmuLuaLibrary.cs | 56 ++++++----- .../Lua/Libraries/NotReallyLuaLibrary.cs | 60 ++++++++++++ .../Lua/Libraries/PlatformEmuLuaLibrary.cs | 45 +++++++++ .../tools/Lua/LuaConsole.cs | 47 ++++----- .../tools/Lua/LuaRegisteredFunctionsList.cs | 14 +-- BizHawk.Client.EmuHawk/tools/ToolManager.cs | 8 +- .../tools/TraceLogger.Designer.cs | 8 -- BizHawk.Common/BizHawk.Common.csproj | 1 + .../BizInvoke/DynamicLibraryImportResolver.cs | 56 ++--------- BizHawk.Common/BizInvoke/MemoryBlock.cs | 29 +----- BizHawk.Common/PlatformLinkedLibSingleton.cs | 86 +++++++++++++++++ .../Sound/Utilities/BlipBuffer.cs | 24 ++--- .../N64/NativeApi/mupen64plusCoreApi.cs | 91 ++++++++---------- .../Consoles/Nintendo/QuickNES/QuickNES.cs | 4 +- References/OpenTK.GLControl.dll | Bin 28672 -> 45056 bytes References/OpenTK.dll | Bin 5525504 -> 5525504 bytes References/OpenTK.dll.config | 41 +++++--- 32 files changed, 455 insertions(+), 342 deletions(-) create mode 100755 Assets/EmuHawkMono.sh create mode 100755 Assets/libblip_buf.so create mode 100644 BizHawk.Client.EmuHawk/tools/Lua/Libraries/NotReallyLuaLibrary.cs create mode 100644 BizHawk.Client.EmuHawk/tools/Lua/Libraries/PlatformEmuLuaLibrary.cs create mode 100644 BizHawk.Common/PlatformLinkedLibSingleton.cs diff --git a/Assets/EmuHawkMono.sh b/Assets/EmuHawkMono.sh new file mode 100755 index 0000000000..45298de879 --- /dev/null +++ b/Assets/EmuHawkMono.sh @@ -0,0 +1,18 @@ +#!/bin/sh +cd "$(dirname "$0")" +if [ "$(ps -C "mono" -o "cmd" --no-headers | grep "EmuHawk.exe")" ]; then + echo "EmuHawk is already running, exiting..." + exit 0 +fi +libpath="" +if [ "$(command -v lsb_release)" ]; then + case "$(lsb_release -i | cut -c17- | tr -d "\n")" in + "Arch"|"ManjaroLinux") libpath="/usr/lib/wine";; + "Ubuntu"|"LinuxMint") libpath="/usr/lib/x86_64-linux-gnu/wine";; + esac +fi +if [ -z "$libpath" ]; then + printf "%s\n" "Unknown distro, assuming WINE library location is /usr/lib/wine..." + libpath="/usr/lib/wine" +fi +LD_LIBRARY_PATH="$libpath" mono ./EmuHawk.exe diff --git a/Assets/libblip_buf.so b/Assets/libblip_buf.so new file mode 100755 index 0000000000000000000000000000000000000000..9c060d4189a81d6404d0cfaa8cddccffd5375194 GIT binary patch literal 16840 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 y?D@g(Thrm. */ +using BizHawk.Common; + using System; using System.Collections.Generic; #if !WINCE && !MONO @@ -87,6 +89,8 @@ namespace SevenZip // private static string _LibraryVersion; private static bool? _modifyCapabale; + private static readonly PlatformLinkedLibSingleton.PlatformLinkedLibManager libLoader = PlatformLinkedLibSingleton.LinkedLibManager; + private static void InitUserInFormat(object user, InArchiveFormat format) { if (!_inArchives.ContainsKey(user)) @@ -148,16 +152,16 @@ namespace SevenZip //{ // throw new SevenZipLibraryException("DLL file does not exist."); //} - if ((_modulePtr = NativeMethods.LoadLibrary(_libraryFileName)) == IntPtr.Zero) + if ((_modulePtr = libLoader.LoadPlatformSpecific(_libraryFileName)) == IntPtr.Zero) { //try a different directory string alternateFilename = Path.Combine(Path.Combine(Path.GetDirectoryName(_libraryFileName),"dll"),"7z.dll"); - if ((_modulePtr = NativeMethods.LoadLibrary(alternateFilename)) == IntPtr.Zero) + if ((_modulePtr = libLoader.LoadPlatformSpecific(alternateFilename)) == IntPtr.Zero) throw new SevenZipLibraryException("failed to load library."); } - if (NativeMethods.GetProcAddress(_modulePtr, "GetHandlerProperty") == IntPtr.Zero) + if (libLoader.GetProcAddr(_modulePtr, "GetHandlerProperty") == IntPtr.Zero) { - NativeMethods.FreeLibrary(_modulePtr); + libLoader.FreePlatformSpecific(_modulePtr); throw new SevenZipLibraryException("library is invalid."); } } @@ -431,7 +435,7 @@ namespace SevenZip if (_totalUsers == 0) { #if !WINCE && !MONO - NativeMethods.FreeLibrary(_modulePtr); + libLoader.FreePlatformSpecific(_modulePtr); #endif _modulePtr = IntPtr.Zero; @@ -466,7 +470,7 @@ namespace SevenZip } var createObject = (NativeMethods.CreateObjectDelegate) Marshal.GetDelegateForFunctionPointer( - NativeMethods.GetProcAddress(_modulePtr, "CreateObject"), + libLoader.GetProcAddr(_modulePtr, "CreateObject"), typeof(NativeMethods.CreateObjectDelegate)); if (createObject == null) { @@ -525,7 +529,7 @@ namespace SevenZip } var createObject = (NativeMethods.CreateObjectDelegate) Marshal.GetDelegateForFunctionPointer( - NativeMethods.GetProcAddress(_modulePtr, "CreateObject"), + libLoader.GetProcAddr(_modulePtr, "CreateObject"), typeof(NativeMethods.CreateObjectDelegate)); if (createObject == null) { diff --git a/BizHawk.Client.Common/7z/NativeMethods.cs b/BizHawk.Client.Common/7z/NativeMethods.cs index 02ef5e7eb4..33fbcd9998 100644 --- a/BizHawk.Client.Common/7z/NativeMethods.cs +++ b/BizHawk.Client.Common/7z/NativeMethods.cs @@ -35,18 +35,8 @@ namespace SevenZip [MarshalAs(UnmanagedType.Interface)] out object outObject); #endregion - - [DllImport("kernel32.dll", BestFitMapping = false, ThrowOnUnmappableChar = true)] - public static extern IntPtr LoadLibrary([MarshalAs(UnmanagedType.LPStr)] string fileName); - - [DllImport("kernel32.dll")] - [return: MarshalAs(UnmanagedType.Bool)] - public static extern bool FreeLibrary(IntPtr hModule); - - [DllImport("kernel32.dll", BestFitMapping = false, ThrowOnUnmappableChar = true)] - public static extern IntPtr GetProcAddress(IntPtr hModule, [MarshalAs(UnmanagedType.LPStr)] string procName); #endif - + #if WINCE [DllImport("7z.dll", EntryPoint="CreateObject")] public static extern int CreateCOMObject( diff --git a/BizHawk.Client.Common/Global.cs b/BizHawk.Client.Common/Global.cs index 3631df9a7b..c233e7a7ec 100644 --- a/BizHawk.Client.Common/Global.cs +++ b/BizHawk.Client.Common/Global.cs @@ -159,7 +159,5 @@ namespace BizHawk.Client.Common } public static Dictionary UserBag = new Dictionary(); - - public static bool RunningOnUnix = Environment.OSVersion.Platform == PlatformID.Unix || Environment.OSVersion.Platform == PlatformID.MacOSX; } } diff --git a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj index 646beb4e11..2587f62945 100644 --- a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj +++ b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj @@ -943,6 +943,8 @@ + + Form diff --git a/BizHawk.Client.EmuHawk/Input/Input.cs b/BizHawk.Client.EmuHawk/Input/Input.cs index a812d55017..0727baeffe 100644 --- a/BizHawk.Client.EmuHawk/Input/Input.cs +++ b/BizHawk.Client.EmuHawk/Input/Input.cs @@ -2,11 +2,8 @@ using System.Linq; using System.Collections.Generic; using System.Threading; -#if WINDOWS + using SlimDX.DirectInput; -#else -using OpenTK.Input; -#endif using BizHawk.Common; using BizHawk.Client.Common; @@ -116,19 +113,17 @@ namespace BizHawk.Client.EmuHawk private Input() { -#if WINDOWS UpdateThread = new Thread(UpdateThreadProc) { IsBackground = true, Priority = ThreadPriority.AboveNormal //why not? this thread shouldn't be very heavy duty, and we want it to be responsive }; UpdateThread.Start(); -#endif } public static void Initialize() { - if (Global.RunningOnUnix) + if (PlatformLinkedLibSingleton.RunningOnUnix) { OTK_Keyboard.Initialize(); // OTK_Gamepad.Initialize(); @@ -145,10 +140,11 @@ namespace BizHawk.Client.EmuHawk public static void Cleanup() { -#if WINDOWS - KeyInput.Cleanup(); - GamePad.Cleanup(); -#endif + if (!PlatformLinkedLibSingleton.RunningOnUnix) + { + KeyInput.Cleanup(); + GamePad.Cleanup(); + } } public enum InputEventType @@ -331,14 +327,22 @@ namespace BizHawk.Client.EmuHawk return FloatValuesCopy; } -#if WINDOWS void UpdateThreadProc() { - for (; ; ) + while (true) { - var keyEvents = KeyInput.Update().Concat(IPCKeyInput.Update()); - GamePad.UpdateAll(); - GamePad360.UpdateAll(); + var keyEvents = PlatformLinkedLibSingleton.RunningOnUnix + ? OTK_Keyboard.Update() + : KeyInput.Update().Concat(IPCKeyInput.Update()); + if (PlatformLinkedLibSingleton.RunningOnUnix) + { + //TODO + } + else + { + GamePad.UpdateAll(); + GamePad360.UpdateAll(); + } //this block is going to massively modify data structures that the binding method uses, so we have to lock it all lock (this) @@ -441,7 +445,6 @@ namespace BizHawk.Client.EmuHawk Thread.Sleep(10); } } -#endif public void StartListeningForFloatEvents() { diff --git a/BizHawk.Client.EmuHawk/Input/OTK_Keyboard.cs b/BizHawk.Client.EmuHawk/Input/OTK_Keyboard.cs index 2c8faa7cbb..200c970e6b 100644 --- a/BizHawk.Client.EmuHawk/Input/OTK_Keyboard.cs +++ b/BizHawk.Client.EmuHawk/Input/OTK_Keyboard.cs @@ -6,18 +6,47 @@ namespace BizHawk.Client.EmuHawk { public static class OTK_Keyboard { - private static OpenTK.Input.KeyboardState _kbState; + private static readonly Dictionary KeyEnumMap = new Dictionary + { + // A-Z + {Key.A, SlimDX.DirectInput.Key.A}, {Key.B, SlimDX.DirectInput.Key.B}, {Key.C, SlimDX.DirectInput.Key.C}, {Key.D, SlimDX.DirectInput.Key.D}, {Key.E, SlimDX.DirectInput.Key.E}, {Key.F, SlimDX.DirectInput.Key.F}, {Key.G, SlimDX.DirectInput.Key.G}, {Key.H, SlimDX.DirectInput.Key.H}, {Key.I, SlimDX.DirectInput.Key.I}, {Key.J, SlimDX.DirectInput.Key.J}, {Key.K, SlimDX.DirectInput.Key.K}, {Key.L, SlimDX.DirectInput.Key.L}, {Key.M, SlimDX.DirectInput.Key.M}, {Key.N, SlimDX.DirectInput.Key.N}, {Key.O, SlimDX.DirectInput.Key.O}, {Key.P, SlimDX.DirectInput.Key.P}, {Key.Q, SlimDX.DirectInput.Key.Q}, {Key.R, SlimDX.DirectInput.Key.R}, {Key.S, SlimDX.DirectInput.Key.S}, {Key.T, SlimDX.DirectInput.Key.T}, {Key.U, SlimDX.DirectInput.Key.U}, {Key.V, SlimDX.DirectInput.Key.V}, {Key.W, SlimDX.DirectInput.Key.W}, {Key.X, SlimDX.DirectInput.Key.X}, {Key.Y, SlimDX.DirectInput.Key.Y}, {Key.Z, SlimDX.DirectInput.Key.Z}, + // 0-9 + {Key.Number1, SlimDX.DirectInput.Key.D1}, {Key.Number2, SlimDX.DirectInput.Key.D2}, {Key.Number3, SlimDX.DirectInput.Key.D3}, {Key.Number4, SlimDX.DirectInput.Key.D4}, {Key.Number5, SlimDX.DirectInput.Key.D5}, {Key.Number6, SlimDX.DirectInput.Key.D6}, {Key.Number7, SlimDX.DirectInput.Key.D7}, {Key.Number8, SlimDX.DirectInput.Key.D8}, {Key.Number9, SlimDX.DirectInput.Key.D9}, {Key.Number0, SlimDX.DirectInput.Key.D0}, + // misc. printables (ASCII order) + {Key.Space, SlimDX.DirectInput.Key.Space}, {Key.Quote, SlimDX.DirectInput.Key.Apostrophe}, {Key.Comma, SlimDX.DirectInput.Key.Comma}, {Key.Minus, SlimDX.DirectInput.Key.Minus}, {Key.Period, SlimDX.DirectInput.Key.Period}, {Key.Slash, SlimDX.DirectInput.Key.Slash}, {Key.Semicolon, SlimDX.DirectInput.Key.Semicolon}, {Key.Plus, SlimDX.DirectInput.Key.Equals}, {Key.BracketLeft, SlimDX.DirectInput.Key.LeftBracket}, {Key.BackSlash, SlimDX.DirectInput.Key.Backslash}, {Key.BracketRight, SlimDX.DirectInput.Key.RightBracket}, {Key.Tilde, SlimDX.DirectInput.Key.Grave}, + // misc. (alphabetically) + {Key.BackSpace, SlimDX.DirectInput.Key.Backspace}, {Key.CapsLock, SlimDX.DirectInput.Key.CapsLock}, {Key.Delete, SlimDX.DirectInput.Key.Delete}, {Key.Down, SlimDX.DirectInput.Key.DownArrow}, {Key.End, SlimDX.DirectInput.Key.End}, {Key.Enter, SlimDX.DirectInput.Key.Return}, {Key.Escape, SlimDX.DirectInput.Key.Escape}, {Key.Home, SlimDX.DirectInput.Key.Home}, {Key.Insert, SlimDX.DirectInput.Key.Insert}, {Key.Left, SlimDX.DirectInput.Key.LeftArrow}, {Key.PageDown, SlimDX.DirectInput.Key.PageDown}, {Key.PageUp, SlimDX.DirectInput.Key.PageUp}, {Key.Pause, SlimDX.DirectInput.Key.Pause}, {Key.Right, SlimDX.DirectInput.Key.RightArrow}, {Key.ScrollLock, SlimDX.DirectInput.Key.ScrollLock}, {Key.Tab, SlimDX.DirectInput.Key.Tab}, {Key.Up, SlimDX.DirectInput.Key.UpArrow}, + // modifier + {Key.WinLeft, SlimDX.DirectInput.Key.LeftWindowsKey}, {Key.WinRight, SlimDX.DirectInput.Key.RightWindowsKey}, {Key.ControlLeft, SlimDX.DirectInput.Key.LeftControl}, {Key.ControlRight, SlimDX.DirectInput.Key.RightControl}, {Key.AltLeft, SlimDX.DirectInput.Key.LeftAlt}, {Key.AltRight, SlimDX.DirectInput.Key.RightAlt}, {Key.ShiftLeft, SlimDX.DirectInput.Key.LeftShift}, {Key.ShiftRight, SlimDX.DirectInput.Key.RightShift}, + + // function + {Key.F1, SlimDX.DirectInput.Key.F1}, {Key.F2, SlimDX.DirectInput.Key.F2}, {Key.F3, SlimDX.DirectInput.Key.F3}, {Key.F4, SlimDX.DirectInput.Key.F4}, {Key.F5, SlimDX.DirectInput.Key.F5}, {Key.F6, SlimDX.DirectInput.Key.F6}, {Key.F7, SlimDX.DirectInput.Key.F7}, {Key.F8, SlimDX.DirectInput.Key.F8}, {Key.F9, SlimDX.DirectInput.Key.F9}, {Key.F10, SlimDX.DirectInput.Key.F10}, {Key.F11, SlimDX.DirectInput.Key.F11}, {Key.F12, SlimDX.DirectInput.Key.F12}, + // keypad (alphabetically) + {Key.Keypad0, SlimDX.DirectInput.Key.NumberPad0}, {Key.Keypad1, SlimDX.DirectInput.Key.NumberPad1}, {Key.Keypad2, SlimDX.DirectInput.Key.NumberPad2}, {Key.Keypad3, SlimDX.DirectInput.Key.NumberPad3}, {Key.Keypad4, SlimDX.DirectInput.Key.NumberPad4}, {Key.Keypad5, SlimDX.DirectInput.Key.NumberPad5}, {Key.Keypad6, SlimDX.DirectInput.Key.NumberPad6}, {Key.Keypad7, SlimDX.DirectInput.Key.NumberPad7}, {Key.Keypad8, SlimDX.DirectInput.Key.NumberPad8}, {Key.Keypad9, SlimDX.DirectInput.Key.NumberPad9}, {Key.KeypadAdd, SlimDX.DirectInput.Key.NumberPadPlus}, {Key.KeypadDecimal, SlimDX.DirectInput.Key.NumberPadPeriod}, {Key.KeypadDivide, SlimDX.DirectInput.Key.NumberPadSlash}, {Key.KeypadEnter, SlimDX.DirectInput.Key.NumberPadEnter}, {Key.KeypadMultiply, SlimDX.DirectInput.Key.NumberPadStar}, {Key.KeypadSubtract, SlimDX.DirectInput.Key.NumberPadMinus} + }; + + private static readonly List _eventList = new List(); + private static KeyboardState _kbState; public static void Initialize () { - _kbState = OpenTK.Input.Keyboard.GetState(); + _kbState = Keyboard.GetState(); } - public static void Update () + public static IEnumerable Update () { + _eventList.Clear(); + var lastState = _kbState; try { - _kbState = OpenTK.Input.Keyboard.GetState(); + _kbState = Keyboard.GetState(); + foreach (KeyValuePair entry in KeyEnumMap) + { + if (lastState.IsKeyUp(entry.Key) && _kbState.IsKeyDown(entry.Key)) + _eventList.Add(new KeyInput.KeyEvent { Key = entry.Value, Pressed = true }); + else if (lastState.IsKeyDown(entry.Key) && _kbState.IsKeyUp(entry.Key)) + _eventList.Add(new KeyInput.KeyEvent { Key = entry.Value, Pressed = false }); + } } catch { @@ -30,6 +59,7 @@ namespace BizHawk.Client.EmuHawk System.Console.WriteLine("OpenTK Keyboard thread is angry."); } } + return _eventList; } public static bool IsPressed (Key key) diff --git a/BizHawk.Client.EmuHawk/MainForm.Events.cs b/BizHawk.Client.EmuHawk/MainForm.Events.cs index e47ce7a138..583898ae0f 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Events.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Events.cs @@ -1386,6 +1386,7 @@ namespace BizHawk.Client.EmuHawk RamSearchMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["RAM Search"].Bindings; HexEditorMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Hex Editor"].Bindings; LuaConsoleMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Lua Console"].Bindings; + LuaConsoleMenuItem.Enabled = GlobalWin.Tools.IsAvailable(); CheatsMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Cheats"].Bindings; TAStudioMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["TAStudio"].Bindings; VirtualPadMenuItem.ShortcutKeyDisplayString = Global.Config.HotkeyBindings["Virtual Pad"].Bindings; diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 5eb4a1d93d..9684d7b21e 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -1118,11 +1118,7 @@ namespace BizHawk.Client.EmuHawk private void OpenLuaConsole() { -#if WINDOWS GlobalWin.Tools.Load(); -#else - MessageBox.Show("Sorry, Lua is not supported on this platform.", "Lua not supported", MessageBoxButtons.OK, MessageBoxIcon.Error); -#endif } public void NotifyLogWindowClosing() diff --git a/BizHawk.Client.EmuHawk/Program.cs b/BizHawk.Client.EmuHawk/Program.cs index 8321603006..cc970daf55 100644 --- a/BizHawk.Client.EmuHawk/Program.cs +++ b/BizHawk.Client.EmuHawk/Program.cs @@ -17,26 +17,25 @@ namespace BizHawk.Client.EmuHawk { static class Program { - static bool RunningOnUnix = Environment.OSVersion.Platform == PlatformID.Unix || Environment.OSVersion.Platform == PlatformID.MacOSX; - static Program() { //this needs to be done before the warnings/errors show up Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); - PlatformSpecificLinkedLibs libLoader = RunningOnUnix ? (PlatformSpecificLinkedLibs) new UnixMono() : (PlatformSpecificLinkedLibs) new Win32(); + var libLoader = PlatformLinkedLibSingleton.LinkedLibManager; //http://www.codeproject.com/Articles/310675/AppDomain-AssemblyResolve-Event-Tips //try loading libraries we know we'll need //something in the winforms, etc. code below will cause .net to popup a missing msvcr100.dll in case that one's missing //but oddly it lets us proceed and we'll then catch it here - var d3dx9 = libLoader.LoadPlatformSpecific("d3dx9_43.dll"); - var vc2015 = libLoader.LoadPlatformSpecific("vcruntime140.dll"); - var vc2012 = libLoader.LoadPlatformSpecific("msvcr120.dll"); //TODO - check version? - var vc2010 = libLoader.LoadPlatformSpecific("msvcr100.dll"); //TODO - check version? - var vc2010p = libLoader.LoadPlatformSpecific("msvcp100.dll"); + var libExt = PlatformLinkedLibSingleton.RunningOnUnix ? ".dll.so" : ".dll"; + var d3dx9 = libLoader.LoadPlatformSpecific($"d3dx9_43{libExt}"); + var vc2015 = libLoader.LoadPlatformSpecific($"vcruntime140{libExt}"); + var vc2012 = libLoader.LoadPlatformSpecific($"msvcr120{libExt}"); //TODO - check version? + var vc2010 = libLoader.LoadPlatformSpecific($"msvcr100{libExt}"); //TODO - check version? + var vc2010p = libLoader.LoadPlatformSpecific($"msvcp100{libExt}"); bool fail = false, warn = false; warn |= d3dx9 == IntPtr.Zero; fail |= vc2015 == IntPtr.Zero; @@ -66,7 +65,7 @@ namespace BizHawk.Client.EmuHawk libLoader.FreePlatformSpecific(vc2010); libLoader.FreePlatformSpecific(vc2010p); - if (!RunningOnUnix) + if (!PlatformLinkedLibSingleton.RunningOnUnix) { // this will look in subdirectory "dll" to load pinvoked stuff string dllDir = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "dll"); @@ -90,63 +89,6 @@ namespace BizHawk.Client.EmuHawk return SubMain(args); } - private interface PlatformSpecificLinkedLibs - { - IntPtr LoadPlatformSpecific(string dllToLoad); - IntPtr GetProcAddr(IntPtr hModule, string procName); - void FreePlatformSpecific(IntPtr hModule); - } - private class Win32 : PlatformSpecificLinkedLibs - { - [DllImport("kernel32.dll")] - private static extern IntPtr LoadLibrary(string dllToLoad); - [DllImport("kernel32.dll")] - private static extern IntPtr GetProcAddress(IntPtr hModule, string procName); - [DllImport("kernel32.dll")] - private static extern void FreeLibrary(IntPtr hModule); - public IntPtr LoadPlatformSpecific(string dllToLoad) - { - return LoadLibrary(dllToLoad); - } - public IntPtr GetProcAddr(IntPtr hModule, string procName) - { - return GetProcAddress(hModule, procName); - } - public void FreePlatformSpecific(IntPtr hModule) - { - FreeLibrary(hModule); - } - } - private class UnixMono : PlatformSpecificLinkedLibs - { - // This class is copied from a tutorial, so don't git blame and then email me expecting insight. - const int RTLD_NOW = 2; - [DllImport("libdl.so")] - private static extern IntPtr dlopen(String fileName, int flags); - [DllImport("libdl.so")] - private static extern IntPtr dlerror(); - [DllImport("libdl.so")] - private static extern IntPtr dlsym(IntPtr handle, String symbol); - [DllImport("libdl.so")] - private static extern int dlclose(IntPtr handle); - public IntPtr LoadPlatformSpecific(string dllToLoad) - { - return dlopen(dllToLoad + ".so", RTLD_NOW); - } - public IntPtr GetProcAddr(IntPtr hModule, string procName) - { - dlerror(); - var res = dlsym(hModule, procName); - var errPtr = dlerror(); - if (errPtr != IntPtr.Zero) throw new Exception("dlsym: " + Marshal.PtrToStringAnsi(errPtr)); - return res; - } - public void FreePlatformSpecific(IntPtr hModule) - { - dlclose(hModule); - } - } - private interface PlatformSpecificMainLoopCrashHandler { void TryCatchFinally(string[] args); @@ -258,7 +200,7 @@ namespace BizHawk.Client.EmuHawk } } } - private static PlatformSpecificMainLoopCrashHandler mainLoopCrashHandler = RunningOnUnix + private static PlatformSpecificMainLoopCrashHandler mainLoopCrashHandler = PlatformLinkedLibSingleton.RunningOnUnix ? (PlatformSpecificMainLoopCrashHandler) new UnixMonoMainLoopCrashHandler() : (PlatformSpecificMainLoopCrashHandler) new Win32MainLoopCrashHandler(); @@ -323,7 +265,7 @@ namespace BizHawk.Client.EmuHawk GlobalWin.GLManager = GLManager.Instance; //now create the "GL" context for the display method. we can reuse the IGL_TK context if opengl display method is chosen - if (RunningOnUnix) Global.Config.DispMethod = Config.EDispMethod.GdiPlus; + if (PlatformLinkedLibSingleton.RunningOnUnix) Global.Config.DispMethod = Config.EDispMethod.GdiPlus; REDO_DISPMETHOD: if (Global.Config.DispMethod == Config.EDispMethod.GdiPlus) GlobalWin.GL = new Bizware.BizwareGL.Drivers.GdiPlus.IGL_GdiPlus(); @@ -371,7 +313,7 @@ namespace BizHawk.Client.EmuHawk goto REDO_DISPMETHOD; } - if (!RunningOnUnix) + if (!PlatformLinkedLibSingleton.RunningOnUnix) { //WHY do we have to do this? some intel graphics drivers (ig7icd64.dll 10.18.10.3304 on an unknown chip on win8.1) are calling SetDllDirectory() for the process, which ruins stuff. //The relevant initialization happened just before in "create IGL context". diff --git a/BizHawk.Client.EmuHawk/ScreenSaver.cs b/BizHawk.Client.EmuHawk/ScreenSaver.cs index 70aedf1540..d362b4b2c2 100644 --- a/BizHawk.Client.EmuHawk/ScreenSaver.cs +++ b/BizHawk.Client.EmuHawk/ScreenSaver.cs @@ -2,6 +2,7 @@ using System.Runtime.InteropServices; using BizHawk.Client.Common; +using BizHawk.Common; namespace BizHawk.Client.EmuHawk { @@ -40,7 +41,7 @@ namespace BizHawk.Client.EmuHawk //TODO implement } } - private static PlatformSpecificScreenBlankInterface screenBlankInterface = Global.RunningOnUnix + private static PlatformSpecificScreenBlankInterface screenBlankInterface = PlatformLinkedLibSingleton.RunningOnUnix ? (PlatformSpecificScreenBlankInterface) new MiscUnixScreenBlankInterface() : (PlatformSpecificScreenBlankInterface) new WinScreenBlankInterface(); diff --git a/BizHawk.Client.EmuHawk/Sound/Sound.cs b/BizHawk.Client.EmuHawk/Sound/Sound.cs index 93abdb7f40..1edaaae699 100644 --- a/BizHawk.Client.EmuHawk/Sound/Sound.cs +++ b/BizHawk.Client.EmuHawk/Sound/Sound.cs @@ -4,6 +4,7 @@ using System.Threading; using BizHawk.Emulation.Common; using BizHawk.Emulation.Common.IEmulatorExtensions; using BizHawk.Client.Common; +using BizHawk.Common; namespace BizHawk.Client.EmuHawk { @@ -26,7 +27,7 @@ namespace BizHawk.Client.EmuHawk { if (Global.Config.SoundOutputMethod == Config.ESoundOutputMethod.OpenAL) _outputDevice = new OpenALSoundOutput(this); - if (!Global.RunningOnUnix) + if (!PlatformLinkedLibSingleton.RunningOnUnix) { if (Global.Config.SoundOutputMethod == Config.ESoundOutputMethod.DirectSound) _outputDevice = new DirectSoundSoundOutput(this, mainWindowHandle); diff --git a/BizHawk.Client.EmuHawk/Throttle.cs b/BizHawk.Client.EmuHawk/Throttle.cs index 3ae65cdc70..5eb8fcba22 100644 --- a/BizHawk.Client.EmuHawk/Throttle.cs +++ b/BizHawk.Client.EmuHawk/Throttle.cs @@ -4,6 +4,7 @@ using System.Runtime.InteropServices; using System.Threading; using BizHawk.Client.Common; +using BizHawk.Common; //this throttle is nitsuja's fine-tuned techniques from desmume @@ -159,7 +160,7 @@ namespace BizHawk.Client.EmuHawk return timeBeginPeriod(ms); } } - static PlatformSpecificSysTimer sysTimer = Global.RunningOnUnix ? (PlatformSpecificSysTimer) new UnixMonoSysTimer() : (PlatformSpecificSysTimer) new WinSysTimer(); + static PlatformSpecificSysTimer sysTimer = PlatformLinkedLibSingleton.RunningOnUnix ? (PlatformSpecificSysTimer) new UnixMonoSysTimer() : (PlatformSpecificSysTimer) new WinSysTimer(); static uint TimeBeginPeriod(uint ms) { return sysTimer.TimeBeginPeriod(ms); diff --git a/BizHawk.Client.EmuHawk/config/InputWidget.cs b/BizHawk.Client.EmuHawk/config/InputWidget.cs index f02130560c..79167ea11f 100644 --- a/BizHawk.Client.EmuHawk/config/InputWidget.cs +++ b/BizHawk.Client.EmuHawk/config/InputWidget.cs @@ -5,6 +5,8 @@ using System.Linq; using System.Runtime.InteropServices; using System.Windows.Forms; +using BizHawk.Common; + namespace BizHawk.Client.EmuHawk { public sealed class InputWidget : TextBox @@ -69,7 +71,7 @@ namespace BizHawk.Client.EmuHawk protected override void OnMouseClick(MouseEventArgs e) { - HideCaret(Handle); + if (!PlatformLinkedLibSingleton.RunningOnUnix) HideCaret(Handle); base.OnMouseClick(e); } @@ -262,7 +264,7 @@ namespace BizHawk.Client.EmuHawk protected override void OnGotFocus(EventArgs e) { - HideCaret(Handle); + if (!PlatformLinkedLibSingleton.RunningOnUnix) HideCaret(Handle); } protected override bool ProcessCmdKey(ref Message msg, Keys keyData) diff --git a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.cs b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.cs index 30b1c40f7c..08efa298d3 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.cs @@ -13,7 +13,7 @@ using BizHawk.Client.Common; namespace BizHawk.Client.EmuHawk { - public class EmuLuaLibrary + public class EmuLuaLibrary : PlatformEmuLuaLibrary { public EmuLuaLibrary() { @@ -82,16 +82,6 @@ namespace BizHawk.Client.EmuHawk } } - public bool IsRebootingCore { get; set; } // pretty hacky.. we dont want a lua script to be able to restart itself by rebooting the core - - private readonly Dictionary Libraries = new Dictionary(); - public LuaFileList ScriptList { get; } = new LuaFileList(); - - public IEnumerable RunningScripts - { - get { return ScriptList.Where(lf => lf.Enabled); } - } - private Lua _lua = new Lua(); private Lua _currThread; @@ -101,9 +91,7 @@ namespace BizHawk.Client.EmuHawk private EmulatorLuaLibrary EmulatorLuaLibrary => (EmulatorLuaLibrary)Libraries[typeof(EmulatorLuaLibrary)]; - public GuiLuaLibrary GuiLibrary => (GuiLuaLibrary)Libraries[typeof(GuiLuaLibrary)]; - - public void Restart(IEmulatorServiceProvider newServiceProvider) + public override void Restart(IEmulatorServiceProvider newServiceProvider) { foreach (var lib in Libraries) { @@ -111,7 +99,7 @@ namespace BizHawk.Client.EmuHawk } } - public void StartLuaDrawing() + public override void StartLuaDrawing() { if (ScriptList.Any() && GuiLibrary.SurfaceIsNull) { @@ -119,7 +107,7 @@ namespace BizHawk.Client.EmuHawk } } - public void EndLuaDrawing() + public override void EndLuaDrawing() { if (ScriptList.Any()) { @@ -127,34 +115,35 @@ namespace BizHawk.Client.EmuHawk } } - public LuaDocumentation Docs { get; } public bool IsRunning { get; set; } - public EventWaitHandle LuaWait { get; private set; } public bool FrameAdvanceRequested { get; private set; } - public LuaFunctionList RegisteredFunctions => EventsLibrary.RegisteredFunctions; + public override LuaFunctionList GetRegisteredFunctions() + { + return EventsLibrary.RegisteredFunctions; + } - public void WindowClosed(IntPtr handle) + public override void WindowClosed(IntPtr handle) { FormsLibrary.WindowClosed(handle); } - public void CallSaveStateEvent(string name) + public override void CallSaveStateEvent(string name) { EventsLibrary.CallSaveStateEvent(name); } - public void CallLoadStateEvent(string name) + public override void CallLoadStateEvent(string name) { EventsLibrary.CallLoadStateEvent(name); } - public void CallFrameBeforeEvent() + public override void CallFrameBeforeEvent() { EventsLibrary.CallFrameBeforeEvent(); } - public void CallFrameAfterEvent() + public override void CallFrameAfterEvent() { EventsLibrary.CallFrameAfterEvent(); } @@ -164,7 +153,12 @@ namespace BizHawk.Client.EmuHawk EventsLibrary.CallExitEvent(thread); } - public void Close() + public override void CallExitEvent(LuaFile lf) + { + CallExitEvent(lf.Thread); + } + + public override void Close() { FormsLibrary.DestroyAll(); _lua.Close(); @@ -187,7 +181,12 @@ namespace BizHawk.Client.EmuHawk return lua; } - public void ExecuteString(string command) + public override void SpawnAndSetFileThread(string pathToLoad, LuaFile lf) + { + lf.Thread = SpawnCoroutine(pathToLoad); + } + + public override void ExecuteString(string command) { _currThread = _lua.NewThread(); _currThread.DoString(command); @@ -232,6 +231,11 @@ namespace BizHawk.Client.EmuHawk } } + public override ResumeResult ResumeScriptFromThreadOf(LuaFile lf) + { + return ResumeScript(lf.Thread); + } + public static void Print(params object[] outputs) { ConsoleLuaLibrary.Log(outputs); diff --git a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/NotReallyLuaLibrary.cs b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/NotReallyLuaLibrary.cs new file mode 100644 index 0000000000..e47b7e750b --- /dev/null +++ b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/NotReallyLuaLibrary.cs @@ -0,0 +1,60 @@ +using System; + +using BizHawk.Client.Common; +using BizHawk.Emulation.Common; + +namespace BizHawk.Client.EmuHawk +{ + /// + /// Methods intentionally blank. + /// + public sealed class NotReallyLuaLibrary : PlatformEmuLuaLibrary + { + public override void CallExitEvent(LuaFile lf) + { + } + public override void CallFrameAfterEvent() + { + } + public override void CallFrameBeforeEvent() + { + } + public override void CallLoadStateEvent(string name) + { + } + public override void CallSaveStateEvent(string name) + { + } + public override void Close() + { + } + public override void EndLuaDrawing() + { + } + public override void ExecuteString(string command) + { + } + private static readonly LuaFunctionList EmptyLuaFunList = new LuaFunctionList(); + public override LuaFunctionList GetRegisteredFunctions() + { + return EmptyLuaFunList; + } + public override void Restart(IEmulatorServiceProvider newServiceProvider) + { + } + private static readonly EmuLuaLibrary.ResumeResult EmptyResumeResult = new EmuLuaLibrary.ResumeResult(); + public override EmuLuaLibrary.ResumeResult ResumeScriptFromThreadOf(LuaFile lf) + { + return EmptyResumeResult; + } + public override void SpawnAndSetFileThread(string pathToLoad, LuaFile lf) + { + } + public override void StartLuaDrawing() + { + } + public override void WindowClosed(IntPtr handle) + { + } + } +} \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/PlatformEmuLuaLibrary.cs b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/PlatformEmuLuaLibrary.cs new file mode 100644 index 0000000000..93c99a0427 --- /dev/null +++ b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/PlatformEmuLuaLibrary.cs @@ -0,0 +1,45 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading; + +using BizHawk.Client.Common; +using BizHawk.Emulation.Common; + +namespace BizHawk.Client.EmuHawk +{ + public abstract class PlatformEmuLuaLibrary + { + public LuaDocumentation Docs { get; protected set; } + + public GuiLuaLibrary GuiLibrary => (GuiLuaLibrary) Libraries[typeof(GuiLuaLibrary)]; + + public bool IsRebootingCore { get; set; } // pretty hacky.. we dont want a lua script to be able to restart itself by rebooting the core + + protected readonly Dictionary Libraries = new Dictionary(); + + public EventWaitHandle LuaWait { get; protected set; } + + public IEnumerable RunningScripts + { + get { return ScriptList.Where(lf => lf.Enabled); } + } + + public readonly LuaFileList ScriptList = new LuaFileList(); + + public abstract void CallExitEvent(LuaFile lf); + public abstract void CallFrameAfterEvent(); + public abstract void CallFrameBeforeEvent(); + public abstract void CallLoadStateEvent(string name); + public abstract void CallSaveStateEvent(string name); + public abstract void Close(); + public abstract void EndLuaDrawing(); + public abstract void ExecuteString(string command); + public abstract LuaFunctionList GetRegisteredFunctions(); + public abstract void Restart(IEmulatorServiceProvider newServiceProvider); + public abstract EmuLuaLibrary.ResumeResult ResumeScriptFromThreadOf(LuaFile lf); + public abstract void SpawnAndSetFileThread(string pathToLoad, LuaFile lf); + public abstract void StartLuaDrawing(); + public abstract void WindowClosed(IntPtr handle); + } +} \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs index 881e32d219..c84ad96923 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaConsole.cs @@ -7,10 +7,11 @@ using System.Linq; using System.Text.RegularExpressions; using System.Windows.Forms; -using BizHawk.Emulation.Common; using BizHawk.Client.Common; -using BizHawk.Client.EmuHawk.WinFormExtensions; using BizHawk.Client.EmuHawk.ToolExtensions; +using BizHawk.Client.EmuHawk.WinFormExtensions; +using BizHawk.Common; +using BizHawk.Emulation.Common; namespace BizHawk.Client.EmuHawk { @@ -78,7 +79,7 @@ namespace BizHawk.Client.EmuHawk LuaSandbox.DefaultLogger = ConsoleLog; } - public EmuLuaLibrary LuaImp { get; private set; } + public PlatformEmuLuaLibrary LuaImp { get; private set; } public bool UpdateBefore => true; @@ -154,15 +155,15 @@ namespace BizHawk.Client.EmuHawk foreach (var file in runningScripts) { - LuaImp.CallExitEvent(file.Thread); + LuaImp.CallExitEvent(file); - var functions = LuaImp.RegisteredFunctions + var functions = LuaImp.GetRegisteredFunctions() .Where(lf => lf.Lua == file.Thread) .ToList(); foreach (var function in functions) { - LuaImp.RegisteredFunctions.Remove(function); + LuaImp.GetRegisteredFunctions().Remove(function); } UpdateRegisteredFunctionsDialog(); @@ -172,7 +173,9 @@ namespace BizHawk.Client.EmuHawk } var currentScripts = LuaImp?.ScriptList; // Temp fix for now - LuaImp = new EmuLuaLibrary(Emulator.ServiceProvider); + LuaImp = PlatformLinkedLibSingleton.RunningOnUnix + ? (PlatformEmuLuaLibrary) new NotReallyLuaLibrary() + : (PlatformEmuLuaLibrary) new EmuLuaLibrary(Emulator.ServiceProvider); if (currentScripts != null) { LuaImp.ScriptList.AddRange(currentScripts); @@ -188,7 +191,7 @@ namespace BizHawk.Client.EmuHawk { LuaSandbox.Sandbox(file.Thread, () => { - file.Thread = LuaImp.SpawnCoroutine(pathToLoad); + LuaImp.SpawnAndSetFileThread(pathToLoad, file); LuaSandbox.CreateSandbox(file.Thread, Path.GetDirectoryName(pathToLoad)); file.State = LuaFile.RunState.Running; }, () => @@ -306,7 +309,7 @@ namespace BizHawk.Client.EmuHawk LuaSandbox.Sandbox(null, () => { string pathToLoad = ProcessPath(file.Path); - file.Thread = LuaImp.SpawnCoroutine(file.Path); + LuaImp.SpawnAndSetFileThread(file.Path, file); LuaSandbox.CreateSandbox(file.Thread, Path.GetDirectoryName(pathToLoad)); }, () => { @@ -552,10 +555,10 @@ namespace BizHawk.Client.EmuHawk var prohibit = lf.FrameWaiting && !includeFrameWaiters; if (!prohibit) { - var result = LuaImp.ResumeScript(lf.Thread); + var result = LuaImp.ResumeScriptFromThreadOf(lf); if (result.Terminated) { - LuaImp.CallExitEvent(lf.Thread); + LuaImp.CallExitEvent(lf); lf.Stop(); UpdateDialog(); } @@ -786,7 +789,7 @@ namespace BizHawk.Client.EmuHawk SelectAllMenuItem.Enabled = LuaImp.ScriptList.Any(); StopAllScriptsMenuItem.Enabled = LuaImp.ScriptList.Any(script => script.Enabled); - RegisteredFunctionsMenuItem.Enabled = LuaImp.RegisteredFunctions.Any(); + RegisteredFunctionsMenuItem.Enabled = LuaImp.GetRegisteredFunctions().Any(); } private void NewScriptMenuItem_Click(object sender, EventArgs e) @@ -840,26 +843,26 @@ namespace BizHawk.Client.EmuHawk else if (!file.Enabled && file.Thread != null) { - LuaImp.CallExitEvent(file.Thread); + LuaImp.CallExitEvent(file); var items = SelectedItems.ToList(); foreach (var sitem in items) { var temp = sitem; - var functions = LuaImp.RegisteredFunctions.Where(lf => lf.Lua == temp.Thread).ToList(); + var functions = LuaImp.GetRegisteredFunctions().Where(lf => lf.Lua == temp.Thread).ToList(); foreach (var function in functions) { - LuaImp.RegisteredFunctions.Remove(function); + LuaImp.GetRegisteredFunctions().Remove(function); } UpdateRegisteredFunctionsDialog(); } - LuaImp.CallExitEvent(file.Thread); + LuaImp.CallExitEvent(file); file.Stop(); if (Global.Config.RemoveRegisteredFunctionsOnToggle) { - LuaImp.RegisteredFunctions.ClearAll(); + LuaImp.GetRegisteredFunctions().ClearAll(); } } } @@ -879,7 +882,7 @@ namespace BizHawk.Client.EmuHawk ? item.Path : PathManager.MakeProgramRelativePath(item.Path); - item.Thread = LuaImp.SpawnCoroutine(pathToLoad); + LuaImp.SpawnAndSetFileThread(pathToLoad, item); LuaSandbox.CreateSandbox(item.Thread, Path.GetDirectoryName(pathToLoad)); }, () => { @@ -933,10 +936,10 @@ namespace BizHawk.Client.EmuHawk foreach (var item in items) { var temp = item; - var functions = LuaImp.RegisteredFunctions.Where(x => x.Lua == temp.Thread).ToList(); + var functions = LuaImp.GetRegisteredFunctions().Where(x => x.Lua == temp.Thread).ToList(); foreach (var function in functions) { - LuaImp.RegisteredFunctions.Remove(function); + LuaImp.GetRegisteredFunctions().Remove(function); } LuaImp.ScriptList.Remove(item); @@ -1052,7 +1055,7 @@ namespace BizHawk.Client.EmuHawk private void RegisteredFunctionsMenuItem_Click(object sender, EventArgs e) { - if (LuaImp.RegisteredFunctions.Any()) + if (LuaImp.GetRegisteredFunctions().Any()) { var alreadyOpen = false; foreach (Form form in Application.OpenForms) @@ -1209,7 +1212,7 @@ namespace BizHawk.Client.EmuHawk private void ConsoleContextMenu_Opening(object sender, CancelEventArgs e) { - RegisteredFunctionsContextItem.Enabled = LuaImp.RegisteredFunctions.Any(); + RegisteredFunctionsContextItem.Enabled = LuaImp.GetRegisteredFunctions().Any(); CopyContextItem.Enabled = OutputBox.SelectedText.Any(); ClearConsoleContextItem.Enabled = SelectAllContextItem.Enabled = diff --git a/BizHawk.Client.EmuHawk/tools/Lua/LuaRegisteredFunctionsList.cs b/BizHawk.Client.EmuHawk/tools/Lua/LuaRegisteredFunctionsList.cs index 2a53a725e9..194c940646 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/LuaRegisteredFunctionsList.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/LuaRegisteredFunctionsList.cs @@ -17,7 +17,7 @@ namespace BizHawk.Client.EmuHawk public void UpdateValues() { - if (GlobalWin.Tools.LuaConsole.LuaImp.RegisteredFunctions.Any()) + if (GlobalWin.Tools.LuaConsole.LuaImp.GetRegisteredFunctions().Any()) { PopulateListView(); } @@ -46,7 +46,7 @@ namespace BizHawk.Client.EmuHawk { FunctionView.Items.Clear(); - var nlfs = GlobalWin.Tools.LuaConsole.LuaImp.RegisteredFunctions.OrderBy(x => x.Event).ThenBy(x => x.Name).ToList(); + var nlfs = GlobalWin.Tools.LuaConsole.LuaImp.GetRegisteredFunctions().OrderBy(x => x.Event).ThenBy(x => x.Name).ToList(); foreach (var nlf in nlfs) { var item = new ListViewItem { Text = nlf.Event }; @@ -76,7 +76,7 @@ namespace BizHawk.Client.EmuHawk foreach (int index in indices) { var guid = FunctionView.Items[index].SubItems[2].Text; - GlobalWin.Tools.LuaConsole.LuaImp.RegisteredFunctions[guid].Call(); + GlobalWin.Tools.LuaConsole.LuaImp.GetRegisteredFunctions()[guid].Call(); } } } @@ -89,8 +89,8 @@ namespace BizHawk.Client.EmuHawk foreach (int index in indices) { var guid = FunctionView.Items[index].SubItems[2].Text; - var nlf = GlobalWin.Tools.LuaConsole.LuaImp.RegisteredFunctions[guid]; - GlobalWin.Tools.LuaConsole.LuaImp.RegisteredFunctions.Remove(nlf); + var nlf = GlobalWin.Tools.LuaConsole.LuaImp.GetRegisteredFunctions()[guid]; + GlobalWin.Tools.LuaConsole.LuaImp.GetRegisteredFunctions().Remove(nlf); } PopulateListView(); @@ -109,7 +109,7 @@ namespace BizHawk.Client.EmuHawk private void RemoveAllBtn_Click(object sender, EventArgs e) { - GlobalWin.Tools.LuaConsole.LuaImp.RegisteredFunctions.ClearAll(); + GlobalWin.Tools.LuaConsole.LuaImp.GetRegisteredFunctions().ClearAll(); PopulateListView(); } @@ -118,7 +118,7 @@ namespace BizHawk.Client.EmuHawk var indexes = FunctionView.SelectedIndices; CallButton.Enabled = indexes.Count > 0; RemoveButton.Enabled = indexes.Count > 0; - RemoveAllBtn.Enabled = GlobalWin.Tools.LuaConsole.LuaImp.RegisteredFunctions.Any(); + RemoveAllBtn.Enabled = GlobalWin.Tools.LuaConsole.LuaImp.GetRegisteredFunctions().Any(); } private void FunctionView_KeyDown(object sender, KeyEventArgs e) diff --git a/BizHawk.Client.EmuHawk/tools/ToolManager.cs b/BizHawk.Client.EmuHawk/tools/ToolManager.cs index 05d530176d..e26c0930ef 100644 --- a/BizHawk.Client.EmuHawk/tools/ToolManager.cs +++ b/BizHawk.Client.EmuHawk/tools/ToolManager.cs @@ -8,9 +8,11 @@ using System.ComponentModel; using System.Windows.Forms; using BizHawk.Client.Common; -using BizHawk.Emulation.Common; -using BizHawk.Common.ReflectionExtensions; +using BizHawk.Client.EmuHawk; using BizHawk.Client.EmuHawk.CoreExtensions; +using BizHawk.Common; +using BizHawk.Common.ReflectionExtensions; +using BizHawk.Emulation.Common; namespace BizHawk.Client.EmuHawk { @@ -730,6 +732,8 @@ namespace BizHawk.Client.EmuHawk return false; } + if (t == typeof(LuaConsole) && PlatformLinkedLibSingleton.RunningOnUnix) return false; + var tool = Assembly .GetExecutingAssembly() .GetTypes() diff --git a/BizHawk.Client.EmuHawk/tools/TraceLogger.Designer.cs b/BizHawk.Client.EmuHawk/tools/TraceLogger.Designer.cs index c129113c37..b9afaa15a2 100644 --- a/BizHawk.Client.EmuHawk/tools/TraceLogger.Designer.cs +++ b/BizHawk.Client.EmuHawk/tools/TraceLogger.Designer.cs @@ -39,7 +39,6 @@ this.SelectAllContextMenu = new System.Windows.Forms.ToolStripMenuItem(); this.ClearContextMenu = new System.Windows.Forms.ToolStripMenuItem(); this.menuStrip1 = new MenuStripEx(); - this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripMenuItem(); this.FileSubMenu = new System.Windows.Forms.ToolStripMenuItem(); this.SaveLogMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); @@ -149,7 +148,6 @@ // this.menuStrip1.ClickThrough = true; this.menuStrip1.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { - this.toolStripMenuItem1, this.FileSubMenu, this.EditSubMenu, this.OptionsSubMenu}); @@ -159,11 +157,6 @@ this.menuStrip1.TabIndex = 2; this.menuStrip1.Text = "menuStrip1"; // - // toolStripMenuItem1 - // - this.toolStripMenuItem1.Name = "toolStripMenuItem1"; - this.toolStripMenuItem1.Size = new System.Drawing.Size(12, 20); - // // FileSubMenu // this.FileSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { @@ -371,7 +364,6 @@ private System.Windows.Forms.GroupBox TracerBox; private MenuStripEx menuStrip1; - private System.Windows.Forms.ToolStripMenuItem toolStripMenuItem1; private System.Windows.Forms.ToolStripMenuItem FileSubMenu; private System.Windows.Forms.ToolStripMenuItem SaveLogMenuItem; private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; diff --git a/BizHawk.Common/BizHawk.Common.csproj b/BizHawk.Common/BizHawk.Common.csproj index 8b9b8cac99..bc85c00225 100644 --- a/BizHawk.Common/BizHawk.Common.csproj +++ b/BizHawk.Common/BizHawk.Common.csproj @@ -84,6 +84,7 @@ + diff --git a/BizHawk.Common/BizInvoke/DynamicLibraryImportResolver.cs b/BizHawk.Common/BizInvoke/DynamicLibraryImportResolver.cs index 5749b6b362..842eedb9b5 100644 --- a/BizHawk.Common/BizInvoke/DynamicLibraryImportResolver.cs +++ b/BizHawk.Common/BizInvoke/DynamicLibraryImportResolver.cs @@ -8,41 +8,24 @@ namespace BizHawk.Common.BizInvoke public class DynamicLibraryImportResolver : IImportResolver, IDisposable { private IntPtr _p; + private readonly PlatformLinkedLibSingleton.PlatformLinkedLibManager libLoader = PlatformLinkedLibSingleton.LinkedLibManager; public DynamicLibraryImportResolver(string dllName) { -#if !MONO - _p = Win32.LoadLibrary(dllName); -#else - // TODO: how can we read name remaps out of app.confg ? - _p = Libdl.dlopen(dllName, Libdl.RTLD_NOW); -#endif - if (_p == IntPtr.Zero) - { - throw new InvalidOperationException("LoadLibrary returned NULL"); - } + _p = libLoader.LoadPlatformSpecific(dllName); + if (_p == IntPtr.Zero) throw new InvalidOperationException("null pointer returned by LoadPlatformSpecific"); } public IntPtr Resolve(string entryPoint) { -#if !MONO - return Win32.GetProcAddress(_p, entryPoint); -#else - return Libdl.dlsym(_p, entryPoint); -#endif + return libLoader.GetProcAddr(_p, entryPoint); } private void Free() { - if (_p != IntPtr.Zero) - { -#if !MONO - Win32.FreeLibrary(_p); -#else - Libdl.dlclose(_p); -#endif - _p = IntPtr.Zero; - } + if (_p == IntPtr.Zero) return; + libLoader.FreePlatformSpecific(_p); + _p = IntPtr.Zero; } public void Dispose() @@ -55,30 +38,5 @@ namespace BizHawk.Common.BizInvoke { Free(); } - -#if !MONO - private static class Win32 - { - [DllImport("kernel32.dll")] - public static extern IntPtr LoadLibrary(string dllToLoad); - - [DllImport("kernel32.dll")] - public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName); - - [DllImport("kernel32.dll")] - public static extern bool FreeLibrary(IntPtr hModule); - } -#else - private static class Libdl - { - [DllImport("libdl.so")] - public static extern IntPtr dlopen(string filename, int flags); - [DllImport("libdl.so")] - public static extern IntPtr dlsym(IntPtr handle, string symbol); - [DllImport("libdl.so")] - public static extern int dlclose(IntPtr handle); - public const int RTLD_NOW = 2; - } -#endif } } diff --git a/BizHawk.Common/BizInvoke/MemoryBlock.cs b/BizHawk.Common/BizInvoke/MemoryBlock.cs index 6f353cbc70..fd8e57181b 100644 --- a/BizHawk.Common/BizInvoke/MemoryBlock.cs +++ b/BizHawk.Common/BizInvoke/MemoryBlock.cs @@ -9,6 +9,8 @@ namespace BizHawk.Common.BizInvoke { public sealed class MemoryBlock : IDisposable { + //TODO rewrite this class without using the external functions in Kernel32 - this may help: https://docs.microsoft.com/en-us/dotnet/standard/io/memory-mapped-files + /// /// starting address of the memory block /// @@ -442,37 +444,10 @@ namespace BizHawk.Common.BizInvoke private static class Kernel32 { - [DllImport("kernel32.dll", SetLastError = true)] - public static extern UIntPtr VirtualAlloc(UIntPtr lpAddress, UIntPtr dwSize, - AllocationType flAllocationType, MemoryProtection flProtect); - - [DllImport("kernel32.dll", SetLastError = true)] - public static extern bool VirtualFree(UIntPtr lpAddress, UIntPtr dwSize, - FreeType dwFreeType); - [DllImport("kernel32.dll", SetLastError = true)] public static extern bool VirtualProtect(UIntPtr lpAddress, UIntPtr dwSize, MemoryProtection flNewProtect, out MemoryProtection lpflOldProtect); - public enum FreeType : uint - { - DECOMMIT = 0x4000, - RELEASE = 0x8000 - } - - [Flags] - public enum AllocationType : uint - { - COMMIT = 0x1000, - RESERVE = 0x2000, - RESET = 0x80000, - RESET_UNDO = 0x1000000, - LARGE_PAGES = 0x20000000, - PHYSICAL = 0x400000, - TOP_DOWN = 0x100000, - WRITE_WATCH = 0x200000 - } - [Flags] public enum MemoryProtection : uint { diff --git a/BizHawk.Common/PlatformLinkedLibSingleton.cs b/BizHawk.Common/PlatformLinkedLibSingleton.cs new file mode 100644 index 0000000000..9a9ed2baab --- /dev/null +++ b/BizHawk.Common/PlatformLinkedLibSingleton.cs @@ -0,0 +1,86 @@ +using System; +using System.Runtime.InteropServices; + +namespace BizHawk.Common +{ + public sealed class PlatformLinkedLibSingleton + { + public static readonly bool RunningOnUnix = Environment.OSVersion.Platform == PlatformID.Unix || Environment.OSVersion.Platform == PlatformID.MacOSX; + + private static readonly Lazy lazy = new Lazy(() => RunningOnUnix + ? (PlatformLinkedLibManager) new UnixMonoLinkedLibManager() + : (PlatformLinkedLibManager) new Win32LinkedLibManager()); + + public static PlatformLinkedLibManager LinkedLibManager { get { return lazy.Value; } } + + private PlatformLinkedLibSingleton() {} + + public interface PlatformLinkedLibManager + { + IntPtr LoadPlatformSpecific(string dllToLoad); + IntPtr GetProcAddr(IntPtr hModule, string procName); + int FreePlatformSpecific(IntPtr hModule); + } + + public class UnixMonoLinkedLibManager : PlatformLinkedLibManager + { + // This class is copied from a tutorial, so don't git blame and then email me expecting insight. + const int RTLD_NOW = 2; + [DllImport("libdl.so.2")] + private static extern IntPtr dlopen(String fileName, int flags); + [DllImport("libdl.so.2")] + private static extern IntPtr dlerror(); + [DllImport("libdl.so.2")] + private static extern IntPtr dlsym(IntPtr handle, String symbol); + [DllImport("libdl.so.2")] + private static extern int dlclose(IntPtr handle); + public IntPtr LoadPlatformSpecific(string dllToLoad) + { + return dlopen(dllToLoad, RTLD_NOW); + } + public IntPtr GetProcAddr(IntPtr hModule, string procName) + { + dlerror(); + var res = dlsym(hModule, procName); + var errPtr = dlerror(); + if (errPtr != IntPtr.Zero) throw new InvalidOperationException($"error in dlsym: {Marshal.PtrToStringAnsi(errPtr)}"); + return res; + } + public int FreePlatformSpecific(IntPtr hModule) + { + return dlclose(hModule); + } + } + + public class Win32LinkedLibManager : PlatformLinkedLibManager + { + [DllImport("kernel32.dll")] + private static extern UInt32 GetLastError(); + // was annotated `[DllImport("kernel32.dll", BestFitMapping = false, ThrowOnUnmappableChar = true)]` in SevenZip.NativeMethods + // param dllToLoad was annotated `[MarshalAs(UnmanagedType.LPStr)]` in SevenZip.NativeMethods + [DllImport("kernel32.dll")] + private static extern IntPtr LoadLibrary(string dllToLoad); + // was annotated `[DllImport("kernel32.dll", BestFitMapping = false, ThrowOnUnmappableChar = true)]` in SevenZip.NativeMethods + // param procName was annotated `[MarshalAs(UnmanagedType.LPStr)]` in SevenZip.NativeMethods + [DllImport("kernel32.dll")] + private static extern IntPtr GetProcAddress(IntPtr hModule, string procName); + // was annotated `[return: MarshalAs(UnmanagedType.Bool)]` in SevenZip.NativeMethods + [DllImport("kernel32.dll")] + private static extern bool FreeLibrary(IntPtr hModule); + public IntPtr LoadPlatformSpecific(string dllToLoad) + { + var p = LoadLibrary(dllToLoad); + if (p == IntPtr.Zero) throw new InvalidOperationException($"got null pointer, error code {GetLastError()}"); + return p; + } + public IntPtr GetProcAddr(IntPtr hModule, string procName) + { + return GetProcAddress(hModule, procName); + } + public int FreePlatformSpecific(IntPtr hModule) + { + return FreeLibrary(hModule) ? 1 : 0; + } + } + } +} \ No newline at end of file diff --git a/BizHawk.Emulation.Common/Sound/Utilities/BlipBuffer.cs b/BizHawk.Emulation.Common/Sound/Utilities/BlipBuffer.cs index 5454adf67c..42d57dbef6 100644 --- a/BizHawk.Emulation.Common/Sound/Utilities/BlipBuffer.cs +++ b/BizHawk.Emulation.Common/Sound/Utilities/BlipBuffer.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Runtime.InteropServices; // ReSharper disable StyleCop.SA1300 @@ -17,12 +17,12 @@ namespace BizHawk.Emulation.Common /** Creates new buffer that can hold at most sample_count samples. Sets rates so that there are blip_max_ratio clocks per sample. Returns pointer to new buffer, or NULL if insufficient memory. */ - [DllImport("blip_buf.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("blip_buf", CallingConvention = CallingConvention.Cdecl)] public static extern IntPtr blip_new(int sample_count); /** Sets approximate input clock rate and output sample rate. For every clock_rate input clocks, approximately sample_rate samples are generated. */ - [DllImport("blip_buf.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("blip_buf", CallingConvention = CallingConvention.Cdecl)] public static extern void blip_set_rates(IntPtr context, double clock_rate, double sample_rate); /** Maximum clock_rate/sample_rate ratio. For a given sample_rate, @@ -30,20 +30,20 @@ namespace BizHawk.Emulation.Common public const int BlipMaxRatio = 1 << 20; /** Clears entire buffer. Afterwards, blip_samples_avail() == 0. */ - [DllImport("blip_buf.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("blip_buf", CallingConvention = CallingConvention.Cdecl)] public static extern void blip_clear(IntPtr context); /** Adds positive/negative delta into buffer at specified clock time. */ - [DllImport("blip_buf.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("blip_buf", CallingConvention = CallingConvention.Cdecl)] public static extern void blip_add_delta(IntPtr context, uint clock_time, int delta); /** Same as blip_add_delta(), but uses faster, lower-quality synthesis. */ - [DllImport("blip_buf.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("blip_buf", CallingConvention = CallingConvention.Cdecl)] public static extern void blip_add_delta_fast(IntPtr context, uint clock_time, int delta); /** Length of time frame, in clocks, needed to make sample_count additional samples available. */ - [DllImport("blip_buf.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("blip_buf", CallingConvention = CallingConvention.Cdecl)] public static extern int blip_clocks_needed(IntPtr context, int sample_count); /** Maximum number of samples that can be generated from one time frame. */ @@ -54,24 +54,24 @@ namespace BizHawk.Emulation.Common the new time frame specifies the same clock as clock_duration in the old time frame specified. Deltas can have been added slightly past clock_duration (up to however many clocks there are in two output samples). */ - [DllImport("blip_buf.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("blip_buf", CallingConvention = CallingConvention.Cdecl)] public static extern void blip_end_frame(IntPtr context, uint clock_duration); /** Number of buffered samples available for reading. */ - [DllImport("blip_buf.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("blip_buf", CallingConvention = CallingConvention.Cdecl)] public static extern int blip_samples_avail(IntPtr context); /** Reads and removes at most 'count' samples and writes them to 'out'. If 'stereo' is true, writes output to every other element of 'out', allowing easy interleaving of two buffers into a stereo sample stream. Outputs 16-bit signed samples. Returns number of samples actually read. */ - [DllImport("blip_buf.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("blip_buf", CallingConvention = CallingConvention.Cdecl)] public static extern int blip_read_samples(IntPtr context, short[] @out, int count, int stereo); - [DllImport("blip_buf.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("blip_buf", CallingConvention = CallingConvention.Cdecl)] public static extern int blip_read_samples(IntPtr context, IntPtr @out, int count, int stereo); /** Frees buffer. No effect if NULL is passed. */ - [DllImport("blip_buf.dll", CallingConvention = CallingConvention.Cdecl)] + [DllImport("blip_buf", CallingConvention = CallingConvention.Cdecl)] public static extern void blip_delete(IntPtr context); } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs index c1fdd04a45..c499855ae5 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/NativeApi/mupen64plusCoreApi.cs @@ -3,6 +3,7 @@ using System.Collections.Generic; using System.Runtime.InteropServices; using System.Threading; +using BizHawk.Common; using BizHawk.Emulation.Common; using System.Text; @@ -26,17 +27,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi bool event_frameend = false; bool event_breakpoint = false; - [DllImport("kernel32.dll")] - public static extern UInt32 GetLastError(); - - [DllImport("kernel32.dll")] - public static extern IntPtr LoadLibrary(string dllToLoad); - - [DllImport("kernel32.dll")] - public static extern IntPtr GetProcAddress(IntPtr hModule, string procedureName); - - [DllImport("kernel32.dll")] - public static extern bool FreeLibrary(IntPtr hModule); + private static readonly PlatformLinkedLibSingleton.PlatformLinkedLibManager libLoader = PlatformLinkedLibSingleton.LinkedLibManager; public enum m64p_error { @@ -506,7 +497,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi } this.bizhawkCore = bizhawkCore; - CoreDll = LoadLibrary("mupen64plus.dll"); + CoreDll = libLoader.LoadPlatformSpecific("mupen64plus"); if (CoreDll == IntPtr.Zero) throw new InvalidOperationException(string.Format("Failed to load mupen64plus.dll")); @@ -605,41 +596,41 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi ///
    void connectFunctionPointers() { - m64pCoreStartup = (CoreStartup)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "CoreStartup"), typeof(CoreStartup)); - m64pCoreShutdown = (CoreShutdown)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "CoreShutdown"), typeof(CoreShutdown)); - m64pCoreDoCommandByteArray = (CoreDoCommandByteArray)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "CoreDoCommand"), typeof(CoreDoCommandByteArray)); - m64pCoreDoCommandPtr = (CoreDoCommandPtr)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "CoreDoCommand"), typeof(CoreDoCommandPtr)); - m64pCoreDoCommandRefInt = (CoreDoCommandRefInt)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "CoreDoCommand"), typeof(CoreDoCommandRefInt)); - m64pCoreDoCommandFrameCallback = (CoreDoCommandFrameCallback)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "CoreDoCommand"), typeof(CoreDoCommandFrameCallback)); - m64pCoreDoCommandVICallback = (CoreDoCommandVICallback)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "CoreDoCommand"), typeof(CoreDoCommandVICallback)); - m64pCoreDoCommandRenderCallback = (CoreDoCommandRenderCallback)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "CoreDoCommand"), typeof(CoreDoCommandRenderCallback)); - m64pCoreAttachPlugin = (CoreAttachPlugin)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "CoreAttachPlugin"), typeof(CoreAttachPlugin)); - m64pCoreDetachPlugin = (CoreDetachPlugin)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "CoreDetachPlugin"), typeof(CoreDetachPlugin)); - m64pConfigOpenSection = (ConfigOpenSection)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "ConfigOpenSection"), typeof(ConfigOpenSection)); - m64pConfigSetParameter = (ConfigSetParameter)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "ConfigSetParameter"), typeof(ConfigSetParameter)); - m64pConfigSetParameterStr = (ConfigSetParameterStr)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "ConfigSetParameter"), typeof(ConfigSetParameterStr)); - m64pCoreSaveState = (savestates_save_bkm)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "savestates_save_bkm"), typeof(savestates_save_bkm)); - m64pCoreLoadState = (savestates_load_bkm)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "savestates_load_bkm"), typeof(savestates_load_bkm)); - m64pDebugMemGetPointer = (DebugMemGetPointer)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "DebugMemGetPointer"), typeof(DebugMemGetPointer)); - m64pDebugSetCallbacks = (DebugSetCallbacks)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "DebugSetCallbacks"), typeof(DebugSetCallbacks)); - m64pDebugBreakpointLookup = (DebugBreakpointLookup)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "DebugBreakpointLookup"), typeof(DebugBreakpointLookup)); - m64pDebugBreakpointCommand = ( DebugBreakpointCommand )Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "DebugBreakpointCommand"), typeof(DebugBreakpointCommand)); - m64pDebugGetState = (DebugGetState)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "DebugGetState"), typeof(DebugGetState)); - m64pDebugSetRunState = (DebugSetRunState)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "DebugSetRunState"), typeof(DebugSetRunState)); - m64pDebugStep = (DebugStep)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "DebugStep"), typeof(DebugStep)); - m64pMemGetSize = (MemGetSize)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "MemGetSize"), typeof(MemGetSize)); - m64pinit_saveram = (init_saveram)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "init_saveram"), typeof(init_saveram)); - m64psave_saveram = (save_saveram)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "save_saveram"), typeof(save_saveram)); - m64pload_saveram = (load_saveram)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "load_saveram"), typeof(load_saveram)); + m64pCoreStartup = (CoreStartup)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "CoreStartup"), typeof(CoreStartup)); + m64pCoreShutdown = (CoreShutdown)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "CoreShutdown"), typeof(CoreShutdown)); + m64pCoreDoCommandByteArray = (CoreDoCommandByteArray)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "CoreDoCommand"), typeof(CoreDoCommandByteArray)); + m64pCoreDoCommandPtr = (CoreDoCommandPtr)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "CoreDoCommand"), typeof(CoreDoCommandPtr)); + m64pCoreDoCommandRefInt = (CoreDoCommandRefInt)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "CoreDoCommand"), typeof(CoreDoCommandRefInt)); + m64pCoreDoCommandFrameCallback = (CoreDoCommandFrameCallback)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "CoreDoCommand"), typeof(CoreDoCommandFrameCallback)); + m64pCoreDoCommandVICallback = (CoreDoCommandVICallback)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "CoreDoCommand"), typeof(CoreDoCommandVICallback)); + m64pCoreDoCommandRenderCallback = (CoreDoCommandRenderCallback)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "CoreDoCommand"), typeof(CoreDoCommandRenderCallback)); + m64pCoreAttachPlugin = (CoreAttachPlugin)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "CoreAttachPlugin"), typeof(CoreAttachPlugin)); + m64pCoreDetachPlugin = (CoreDetachPlugin)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "CoreDetachPlugin"), typeof(CoreDetachPlugin)); + m64pConfigOpenSection = (ConfigOpenSection)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "ConfigOpenSection"), typeof(ConfigOpenSection)); + m64pConfigSetParameter = (ConfigSetParameter)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "ConfigSetParameter"), typeof(ConfigSetParameter)); + m64pConfigSetParameterStr = (ConfigSetParameterStr)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "ConfigSetParameter"), typeof(ConfigSetParameterStr)); + m64pCoreSaveState = (savestates_save_bkm)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "savestates_save_bkm"), typeof(savestates_save_bkm)); + m64pCoreLoadState = (savestates_load_bkm)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "savestates_load_bkm"), typeof(savestates_load_bkm)); + m64pDebugMemGetPointer = (DebugMemGetPointer)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "DebugMemGetPointer"), typeof(DebugMemGetPointer)); + m64pDebugSetCallbacks = (DebugSetCallbacks)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "DebugSetCallbacks"), typeof(DebugSetCallbacks)); + m64pDebugBreakpointLookup = (DebugBreakpointLookup)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "DebugBreakpointLookup"), typeof(DebugBreakpointLookup)); + m64pDebugBreakpointCommand = ( DebugBreakpointCommand )Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "DebugBreakpointCommand"), typeof(DebugBreakpointCommand)); + m64pDebugGetState = (DebugGetState)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "DebugGetState"), typeof(DebugGetState)); + m64pDebugSetRunState = (DebugSetRunState)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "DebugSetRunState"), typeof(DebugSetRunState)); + m64pDebugStep = (DebugStep)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "DebugStep"), typeof(DebugStep)); + m64pMemGetSize = (MemGetSize)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "MemGetSize"), typeof(MemGetSize)); + m64pinit_saveram = (init_saveram)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "init_saveram"), typeof(init_saveram)); + m64psave_saveram = (save_saveram)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "save_saveram"), typeof(save_saveram)); + m64pload_saveram = (load_saveram)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "load_saveram"), typeof(load_saveram)); - m64pSetTraceCallback = (SetTraceCallback)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "SetTraceCallback"), typeof(SetTraceCallback)); + m64pSetTraceCallback = (SetTraceCallback)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "SetTraceCallback"), typeof(SetTraceCallback)); - m64pGetRegisters = (GetRegisters)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "GetRegisters"), typeof(GetRegisters)); + m64pGetRegisters = (GetRegisters)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "GetRegisters"), typeof(GetRegisters)); - m64p_read_memory_8 = (biz_read_memory)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "biz_read_memory"), typeof(biz_read_memory)); - m64p_write_memory_8 = (biz_write_memory)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "biz_write_memory"), typeof(biz_write_memory)); + m64p_read_memory_8 = (biz_read_memory)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "biz_read_memory"), typeof(biz_read_memory)); + m64p_write_memory_8 = (biz_write_memory)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "biz_write_memory"), typeof(biz_write_memory)); - m64p_decode_op = (biz_r4300_decode_op)Marshal.GetDelegateForFunctionPointer(GetProcAddress(CoreDll, "biz_r4300_decode_op"), typeof(biz_r4300_decode_op)); + m64p_decode_op = (biz_r4300_decode_op)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(CoreDll, "biz_r4300_decode_op"), typeof(biz_r4300_decode_op)); } /// @@ -933,7 +924,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi m64pCoreDoCommandPtr(m64p_command.M64CMD_ROM_CLOSE, 0, IntPtr.Zero); m64pCoreShutdown(); - FreeLibrary(CoreDll); + libLoader.FreePlatformSpecific(CoreDll); disposed = true; } @@ -953,18 +944,16 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi DetachPlugin(type); AttachedPlugin plugin; - plugin.dllHandle = LoadLibrary(PluginName); - if (plugin.dllHandle == IntPtr.Zero) - throw new InvalidOperationException(string.Format("Failed to load plugin {0}, error code: 0x{1:X}", PluginName, GetLastError())); + plugin.dllHandle = libLoader.LoadPlatformSpecific(PluginName); - plugin.dllStartup = (PluginStartup)Marshal.GetDelegateForFunctionPointer(GetProcAddress(plugin.dllHandle, "PluginStartup"), typeof(PluginStartup)); - plugin.dllShutdown = (PluginShutdown)Marshal.GetDelegateForFunctionPointer(GetProcAddress(plugin.dllHandle, "PluginShutdown"), typeof(PluginShutdown)); + plugin.dllStartup = (PluginStartup)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(plugin.dllHandle, "PluginStartup"), typeof(PluginStartup)); + plugin.dllShutdown = (PluginShutdown)Marshal.GetDelegateForFunctionPointer(libLoader.GetProcAddr(plugin.dllHandle, "PluginShutdown"), typeof(PluginShutdown)); plugin.dllStartup(CoreDll, null, null); m64p_error result = m64pCoreAttachPlugin(type, plugin.dllHandle); if (result != m64p_error.M64ERR_SUCCESS) { - FreeLibrary(plugin.dllHandle); + libLoader.FreePlatformSpecific(plugin.dllHandle); throw new InvalidOperationException(string.Format("Error during attaching plugin {0}", PluginName)); } @@ -980,7 +969,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64.NativeApi plugins.Remove(type); m64pCoreDetachPlugin(type); plugin.dllShutdown(); - FreeLibrary(plugin.dllHandle); + libLoader.FreePlatformSpecific(plugin.dllHandle); } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs index 899ae0254f..fc632d8fa9 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs @@ -21,8 +21,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES { static QuickNES() { - Resolver = new DynamicLibraryImportResolver(LibQuickNES.dllname); - QN = BizInvoker.GetInvoker(Resolver, CallingConventionAdapters.Native); + QN = BizInvoker.GetInvoker(new DynamicLibraryImportResolver(LibQuickNES.dllname), CallingConventionAdapters.Native); QN.qn_setup_mappers(); } @@ -74,7 +73,6 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES } static readonly LibQuickNES QN; - static readonly DynamicLibraryImportResolver Resolver; public IEmulatorServiceProvider ServiceProvider { get; private set; } diff --git a/References/OpenTK.GLControl.dll b/References/OpenTK.GLControl.dll index 9cfe53e67ff8ca4ca26568fb59c9b8294527ca40..9d928cfb69790fe36c46f809547c1d0fe1af30f5 100644 GIT binary patch literal 45056 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 - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + From 12ad2d5b369354ea4dbf75e5103659faadb8245b Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Thu, 3 Jan 2019 17:31:35 -0600 Subject: [PATCH 054/301] GBHawk: Link Cable work --- BizHawk.Client.EmuHawk/MainForm.Designer.cs | 32 +++- BizHawk.Client.EmuHawk/MainForm.Events.cs | 5 + BizHawk.Client.EmuHawk/MainForm.cs | 11 +- .../Nintendo/GBHawk/GBHawk.IEmulator.cs | 83 ++++++++++ .../GBHawkLink/GBHawkLink.IEmulator.cs | 143 ++++++++++++++++-- .../GBHawkLink/GBHawkLink.ISaveRam.cs | 55 ++++++- .../GBHawkLink/GBHawkLink.ISettable.cs | 123 ++++++++++----- .../Nintendo/GBHawkLink/GBHawkLink.cs | 44 +++--- .../GBHawkLink/GBHawkLinkControllerDeck.cs | 1 + 9 files changed, 426 insertions(+), 71 deletions(-) diff --git a/BizHawk.Client.EmuHawk/MainForm.Designer.cs b/BizHawk.Client.EmuHawk/MainForm.Designer.cs index 746d1ebd37..092908ba95 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Designer.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Designer.cs @@ -351,7 +351,9 @@ this.SaturnPreferencesMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.DGBSubMenu = new System.Windows.Forms.ToolStripMenuItem(); this.DGBsettingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.GenesisSubMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.DGBHawkSubMenu = new System.Windows.Forms.ToolStripMenuItem(); + this.DGBHawksettingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.GenesisSubMenu = new System.Windows.Forms.ToolStripMenuItem(); this.vDPViewerToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.GenesisGameGenieECDC = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator26 = new System.Windows.Forms.ToolStripSeparator(); @@ -503,7 +505,8 @@ this.N64SubMenu, this.SaturnSubMenu, this.DGBSubMenu, - this.GenesisSubMenu, + this.DGBHawkSubMenu, + this.GenesisSubMenu, this.wonderSwanToolStripMenuItem, this.AppleSubMenu, this.C64SubMenu, @@ -3177,10 +3180,25 @@ this.DGBsettingsToolStripMenuItem.Size = new System.Drawing.Size(152, 22); this.DGBsettingsToolStripMenuItem.Text = "Settings..."; this.DGBsettingsToolStripMenuItem.Click += new System.EventHandler(this.DgbSettingsMenuItem_Click); - // - // GenesisSubMenu - // - this.GenesisSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + // + // DGBHawkSubMenu + // + this.DGBHawkSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.DGBHawksettingsToolStripMenuItem}); + this.DGBHawkSubMenu.Name = "DGBHawkSubMenu"; + this.DGBHawkSubMenu.Size = new System.Drawing.Size(59, 19); + this.DGBHawkSubMenu.Text = "&GB Link"; + // + // DGBHawksettingsToolStripMenuItem + // + this.DGBHawksettingsToolStripMenuItem.Name = "DGBHawksettingsToolStripMenuItem"; + this.DGBHawksettingsToolStripMenuItem.Size = new System.Drawing.Size(152, 22); + this.DGBHawksettingsToolStripMenuItem.Text = "Settings..."; + this.DGBHawksettingsToolStripMenuItem.Click += new System.EventHandler(this.DgbHawkSettingsMenuItem_Click); + // + // GenesisSubMenu + // + this.GenesisSubMenu.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.vDPViewerToolStripMenuItem, this.GenesisGameGenieECDC, this.toolStripSeparator26, @@ -4504,6 +4522,8 @@ private System.Windows.Forms.ToolStripMenuItem FdsEjectDiskMenuItem; private System.Windows.Forms.ToolStripMenuItem DGBSubMenu; private System.Windows.Forms.ToolStripMenuItem DGBsettingsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem DGBHawkSubMenu; + private System.Windows.Forms.ToolStripMenuItem DGBHawksettingsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem GenesisSubMenu; private System.Windows.Forms.ToolStripMenuItem GenesisSettingsToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem AtariSettingsToolStripMenuItem; diff --git a/BizHawk.Client.EmuHawk/MainForm.Events.cs b/BizHawk.Client.EmuHawk/MainForm.Events.cs index 583898ae0f..e9bce5e5aa 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Events.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Events.cs @@ -2350,6 +2350,11 @@ namespace BizHawk.Client.EmuHawk DGBPrefs.DoDGBPrefsDialog(this); } + private void DgbHawkSettingsMenuItem_Click(object sender, EventArgs e) + { + GenericCoreConfig.DoDialog(this, "Gameboy Settings"); + } + #endregion #region GEN diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 9684d7b21e..4c02e8bf16 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -24,6 +24,7 @@ using BizHawk.Emulation.Cores.Nintendo.GBA; using BizHawk.Emulation.Cores.Nintendo.NES; using BizHawk.Emulation.Cores.Nintendo.SNES; using BizHawk.Emulation.Cores.Nintendo.N64; +using BizHawk.Emulation.Cores.Nintendo.GBHawkLink; using BizHawk.Client.EmuHawk.WinFormExtensions; using BizHawk.Client.EmuHawk.ToolExtensions; @@ -1720,6 +1721,7 @@ namespace BizHawk.Client.EmuHawk N64SubMenu.Visible = false; SaturnSubMenu.Visible = false; DGBSubMenu.Visible = false; + DGBHawkSubMenu.Visible = false; GenesisSubMenu.Visible = false; wonderSwanToolStripMenuItem.Visible = false; AppleSubMenu.Visible = false; @@ -1802,7 +1804,14 @@ namespace BizHawk.Client.EmuHawk SaturnSubMenu.Visible = true; break; case "DGB": - DGBSubMenu.Visible = true; + if (Emulator is GBHawkLink) + { + DGBHawkSubMenu.Visible = true; + } + else + { + DGBSubMenu.Visible = true; + } break; case "WSWAN": wonderSwanToolStripMenuItem.Visible = true; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IEmulator.cs index 01f04f8338..e0aa0baeef 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IEmulator.cs @@ -168,6 +168,89 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk vblank_rise = false; } + public void do_single_step() + { + // These things do not change speed in GBC double spped mode + audio.tick(); + ppu.tick(); + if (Use_MT) { mapper.Mapper_Tick(); } + + if (!HDMA_transfer) + { + // These things all tick twice as fast in GBC double speed mode + ppu.DMA_tick(); + timer.tick_1(); + serialport.serial_transfer_tick(); + cpu.ExecuteOne(ref REG_FF0F, REG_FFFF); + timer.tick_2(); + + if (double_speed) + { + ppu.DMA_tick(); + timer.tick_1(); + serialport.serial_transfer_tick(); + cpu.ExecuteOne(ref REG_FF0F, REG_FFFF); + timer.tick_2(); + } + } + else + { + timer.tick_1(); + timer.tick_2(); + cpu.TotalExecutedCycles++; + if (double_speed) + { + timer.tick_1(); + timer.tick_2(); + cpu.TotalExecutedCycles++; + } + } + + if (in_vblank && !in_vblank_old) + { + vblank_rise = true; + } + + in_vblank_old = in_vblank; + REG_FF0F_OLD = REG_FF0F; + } + + public void do_controller_check() + { + // check if new input changed the input register and triggered IRQ + byte contr_prev = input_register; + + input_register &= 0xF0; + if ((input_register & 0x30) == 0x20) + { + input_register |= (byte)(controller_state & 0xF); + } + else if ((input_register & 0x30) == 0x10) + { + input_register |= (byte)((controller_state & 0xF0) >> 4); + } + else if ((input_register & 0x30) == 0x00) + { + // if both polls are set, then a bit is zero if either or both pins are zero + byte temp = (byte)((controller_state & 0xF) & ((controller_state & 0xF0) >> 4)); + input_register |= temp; + } + else + { + input_register |= 0xF; + } + + // check for interrupts + if (((contr_prev & 8) > 0) && ((input_register & 8) == 0) || + ((contr_prev & 4) > 0) && ((input_register & 4) == 0) || + ((contr_prev & 2) > 0) && ((input_register & 2) == 0) || + ((contr_prev & 1) > 0) && ((input_register & 1) == 0)) + { + if (REG_FFFF.Bit(4)) { cpu.FlagI = true; } + REG_FF0F |= 0x10; + } + } + // Switch Speed (GBC only) public int SpeedFunc(int temp) { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs index 790ab1fa06..3d0fa172cf 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs @@ -4,9 +4,11 @@ using System; using System.Collections.Generic; using System.Runtime.InteropServices; +using BizHawk.Emulation.Cores.Nintendo.GBHawk; + namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink { - public partial class GBHawkLink : IEmulator, IVideoProvider + public partial class GBHawkLink : IEmulator, IVideoProvider, ISoundProvider { public IEmulatorServiceProvider ServiceProvider { get; } @@ -20,6 +22,37 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink public void FrameAdvance(IController controller, bool render, bool rendersound) { //Console.WriteLine("-----------------------FRAME-----------------------"); + //Update the color palette if a setting changed + if (linkSettings.Palette_L == GBHawk.GBHawk.GBSettings.PaletteType.BW) + { + L.color_palette[0] = color_palette_BW[0]; + L.color_palette[1] = color_palette_BW[1]; + L.color_palette[2] = color_palette_BW[2]; + L.color_palette[3] = color_palette_BW[3]; + } + else + { + L.color_palette[0] = color_palette_Gr[0]; + L.color_palette[1] = color_palette_Gr[1]; + L.color_palette[2] = color_palette_Gr[2]; + L.color_palette[3] = color_palette_Gr[3]; + } + + if (linkSettings.Palette_R == GBHawk.GBHawk.GBSettings.PaletteType.BW) + { + R.color_palette[0] = color_palette_BW[0]; + R.color_palette[1] = color_palette_BW[1]; + R.color_palette[2] = color_palette_BW[2]; + R.color_palette[3] = color_palette_BW[3]; + } + else + { + R.color_palette[0] = color_palette_Gr[0]; + R.color_palette[1] = color_palette_Gr[1]; + R.color_palette[2] = color_palette_Gr[2]; + R.color_palette[3] = color_palette_Gr[3]; + } + if (_tracer.Enabled) { L.cpu.TraceCallback = s => _tracer.Put(s); @@ -36,6 +69,16 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink HardReset(); } + bool cablediscosignalNew = controller.IsPressed("Toggle Cable"); + if (cablediscosignalNew && !_cablediscosignal) + { + _cableconnected ^= true; + Console.WriteLine("Cable connect status to {0}", _cableconnected); + LinkConnected = _cableconnected; + } + + _cablediscosignal = cablediscosignalNew; + _islag = true; GetControllerState(controller); @@ -52,8 +95,27 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink public void do_frame() { - L.do_frame(); - R.do_frame(); + L.do_controller_check(); + R.do_controller_check(); + + // advance one full frame + for (int i = 0; i < 70224; i++) + { + L.do_single_step(); + R.do_single_step(); + + // if we hit a frame boundary, update video + if (L.vblank_rise) + { + buff_L = L.GetVideoBuffer(); + L.vblank_rise = false; + } + if (R.vblank_rise) + { + buff_R = R.GetVideoBuffer(); + R.vblank_rise = false; + } + } } public void GetControllerState(IController controller) @@ -65,7 +127,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink public int Frame => _frame; - public string SystemId => "GB"; + public string SystemId => "DGB"; public bool DeterministicEmulation { get; set; } @@ -89,15 +151,12 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink public int _frameHz = 60; public int[] _vidbuffer = new int[160 * 2 * 144]; - public int[] buff_L; - public int[] buff_R; + public int[] buff_L = new int[160 * 144]; + public int[] buff_R = new int[160 * 144]; public int[] GetVideoBuffer() { // combine the 2 video buffers from the instances - buff_L = L.GetVideoBuffer(); - buff_R = R.GetVideoBuffer(); - for (int i = 0; i < 144; i++) { for (int j = 0; j < 160; j++) @@ -124,5 +183,71 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink public uint[] color_palette = new uint[4]; #endregion + + #region audio + + public bool CanProvideAsync => false; + + public void SetSyncMode(SyncSoundMode mode) + { + if (mode != SyncSoundMode.Sync) + { + throw new InvalidOperationException("Only Sync mode is supported_"); + } + } + + public SyncSoundMode SyncMode => SyncSoundMode.Sync; + + public void GetSamplesSync(out short[] samples, out int nsamp) + { + short[] temp_samp_L; + short[] temp_samp_R; + + int nsamp_L; + int nsamp_R; + + L.audio.GetSamplesSync(out temp_samp_L, out nsamp_L); + R.audio.GetSamplesSync(out temp_samp_R, out nsamp_R); + + if (linkSettings.AudioSet == GBLinkSettings.AudioSrc.Left) + { + samples = temp_samp_L; + nsamp = nsamp_L; + } + else if (linkSettings.AudioSet == GBLinkSettings.AudioSrc.Right) + { + samples = temp_samp_R; + nsamp = nsamp_R; + } + else + { + samples = new short[0]; + nsamp = 0; + } + } + + public void GetSamplesAsync(short[] samples) + { + throw new NotSupportedException("Async is not available"); + } + + public void DiscardSamples() + { + L.audio.DiscardSamples(); + R.audio.DiscardSamples(); + } + + private void GetSamples(short[] samples) + { + + } + + public void DisposeSound() + { + L.audio.DisposeSound(); + R.audio.DisposeSound(); + } + + #endregion } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ISaveRam.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ISaveRam.cs index e8a6a9d0b5..1a92caf11b 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ISaveRam.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ISaveRam.cs @@ -7,9 +7,43 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink { public byte[] CloneSaveRam() { - if (L.cart_RAM != null) + if ((L.cart_RAM != null) || (R.cart_RAM != null)) { - return (byte[])L.cart_RAM.Clone(); + int Len1 = 0; + int Len2 = 0; + int index = 0; + + if (L.cart_RAM != null) + { + Len1 = L.cart_RAM.Length; + } + + if (R.cart_RAM != null) + { + Len2 = R.cart_RAM.Length; + } + + byte[] temp = new byte[Len1 + Len2]; + + if (L.cart_RAM != null) + { + for (int i = 0; i < L.cart_RAM.Length; i++) + { + temp[index] = L.cart_RAM[i]; + index++; + } + } + + if (R.cart_RAM != null) + { + for (int i = 0; i < L.cart_RAM.Length; i++) + { + temp[index] = R.cart_RAM[i]; + index++; + } + } + + return temp; } else { @@ -19,7 +53,20 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink public void StoreSaveRam(byte[] data) { - Buffer.BlockCopy(data, 0, L.cart_RAM, 0, data.Length); + if ((L.cart_RAM != null) && (R.cart_RAM == null)) + { + Buffer.BlockCopy(data, 0, L.cart_RAM, 0, L.cart_RAM.Length); + } + else if ((R.cart_RAM != null) && (L.cart_RAM == null)) + { + Buffer.BlockCopy(data, 0, R.cart_RAM, 0, R.cart_RAM.Length); + } + else if ((R.cart_RAM != null) && (L.cart_RAM != null)) + { + Buffer.BlockCopy(data, 0, L.cart_RAM, 0, L.cart_RAM.Length); + Buffer.BlockCopy(data, L.cart_RAM.Length, R.cart_RAM, 0, R.cart_RAM.Length); + } + Console.WriteLine("loading SRAM here"); } @@ -27,7 +74,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink { get { - return L.has_bat & _syncSettings.L.Use_SRAM; + return (L.has_bat || R.has_bat) & linkSyncSettings.Use_SRAM; } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ISettable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ISettable.cs index dd2711ded1..75cea814bc 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ISettable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.ISettable.cs @@ -13,78 +13,133 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink { public GBLinkSettings GetSettings() { - return new GBLinkSettings - ( - L.GetSettings(), - R.GetSettings() - ); + return linkSettings.Clone(); } public GBLinkSyncSettings GetSyncSettings() { - return new GBLinkSyncSettings - ( - L.GetSyncSettings(), - R.GetSyncSettings() - ); + return linkSyncSettings.Clone(); } public bool PutSettings(GBLinkSettings o) { - return L.PutSettings(o.L) || R.PutSettings(o.R); + linkSettings = o; + return false; } public bool PutSyncSettings(GBLinkSyncSettings o) { - return L.PutSyncSettings(o.L) || R.PutSyncSettings(o.R); + bool ret = GBLinkSyncSettings.NeedsReboot(linkSyncSettings, o); + linkSyncSettings = o; + return ret; } - private GBLinkSettings _settings = new GBLinkSettings(); - public GBLinkSyncSettings _syncSettings = new GBLinkSyncSettings(); + private GBLinkSettings linkSettings = new GBLinkSettings(); + public GBLinkSyncSettings linkSyncSettings = new GBLinkSyncSettings(); public class GBLinkSettings { - public GBHawk.GBHawk.GBSettings L; - public GBHawk.GBHawk.GBSettings R; + [DisplayName("Color Mode")] + [Description("Pick Between Green scale and Grey scale colors")] + [DefaultValue(GBHawk.GBHawk.GBSettings.PaletteType.BW)] + public GBHawk.GBHawk.GBSettings.PaletteType Palette_L { get; set; } - public GBLinkSettings() + [DisplayName("Color Mode")] + [Description("Pick Between Green scale and Grey scale colors")] + [DefaultValue(GBHawk.GBHawk.GBSettings.PaletteType.BW)] + public GBHawk.GBHawk.GBSettings.PaletteType Palette_R { get; set; } + + public enum AudioSrc { - L = new GBHawk.GBHawk.GBSettings(); - R = new GBHawk.GBHawk.GBSettings(); + Left, + Right, + Both } - public GBLinkSettings(GBHawk.GBHawk.GBSettings L, GBHawk.GBHawk.GBSettings R) - { - this.L = L; - this.R = R; - } + [DisplayName("Audio Selection")] + [Description("Choose Audio Source. Both will produce Stereo sound.")] + [DefaultValue(AudioSrc.Left)] + public AudioSrc AudioSet { get; set; } public GBLinkSettings Clone() { - return new GBLinkSettings(L.Clone(), R.Clone()); + return (GBLinkSettings)MemberwiseClone(); } } public class GBLinkSyncSettings { - public GBHawk.GBHawk.GBSyncSettings L; - public GBHawk.GBHawk.GBSyncSettings R; + [DisplayName("Console Mode L")] + [Description("Pick which console to run, 'Auto' chooses from ROM extension, 'GB' and 'GBC' chooses the respective system")] + [DefaultValue(GBHawk.GBHawk.GBSyncSettings.ConsoleModeType.Auto)] + public GBHawk.GBHawk.GBSyncSettings.ConsoleModeType ConsoleMode_L { get; set; } - public GBLinkSyncSettings() + [DisplayName("Console Mode R")] + [Description("Pick which console to run, 'Auto' chooses from ROM extension, 'GB' and 'GBC' chooses the respective system")] + [DefaultValue(GBHawk.GBHawk.GBSyncSettings.ConsoleModeType.Auto)] + public GBHawk.GBHawk.GBSyncSettings.ConsoleModeType ConsoleMode_R { get; set; } + + [DisplayName("CGB in GBA")] + [Description("Emulate GBA hardware running a CGB game, instead of CGB hardware. Relevant only for titles that detect the presense of a GBA, such as Shantae.")] + [DefaultValue(false)] + public bool GBACGB { get; set; } + + [DisplayName("RTC Initial Time L")] + [Description("Set the initial RTC time in terms of elapsed seconds.")] + [DefaultValue(0)] + public int RTCInitialTime_L { - L = new GBHawk.GBHawk.GBSyncSettings(); - R = new GBHawk.GBHawk.GBSyncSettings(); + get { return _RTCInitialTime_L; } + set { _RTCInitialTime_L = Math.Max(0, Math.Min(1024 * 24 * 60 * 60, value)); } } - public GBLinkSyncSettings(GBHawk.GBHawk.GBSyncSettings L, GBHawk.GBHawk.GBSyncSettings R) + [DisplayName("RTC Initial Time R")] + [Description("Set the initial RTC time in terms of elapsed seconds.")] + [DefaultValue(0)] + public int RTCInitialTime_R { - this.L = L; - this.R = R; + get { return _RTCInitialTime_R; } + set { _RTCInitialTime_R = Math.Max(0, Math.Min(1024 * 24 * 60 * 60, value)); } } + [DisplayName("Timer Div Initial Time L")] + [Description("Don't change from 0 unless it's hardware accurate. GBA GBC mode is known to be 8.")] + [DefaultValue(8)] + public int DivInitialTime_L + { + get { return _DivInitialTime_L; } + set { _DivInitialTime_L = Math.Min((ushort)65535, (ushort)value); } + } + + [DisplayName("Timer Div Initial Time R")] + [Description("Don't change from 0 unless it's hardware accurate. GBA GBC mode is known to be 8.")] + [DefaultValue(8)] + public int DivInitialTime_R + { + get { return _DivInitialTime_R; } + set { _DivInitialTime_R = Math.Min((ushort)65535, (ushort)value); } + } + + [DisplayName("Use Existing SaveRAM")] + [Description("When true, existing SaveRAM will be loaded at boot up")] + [DefaultValue(false)] + public bool Use_SRAM { get; set; } + + [JsonIgnore] + private int _RTCInitialTime_L; + private int _RTCInitialTime_R; + [JsonIgnore] + public ushort _DivInitialTime_L; + public ushort _DivInitialTime_R; + public GBLinkSyncSettings Clone() { - return new GBLinkSyncSettings(L.Clone(), R.Clone()); + return (GBLinkSyncSettings)MemberwiseClone(); + } + + public static bool NeedsReboot(GBLinkSyncSettings x, GBLinkSyncSettings y) + { + return !DeepEquality.DeepEquals(x, y); } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs index c4f2ffacda..3cd8412bc7 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs @@ -14,7 +14,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink "GBHawkLink", "", isPorted: false, - isReleased: true)] + isReleased: false)] [ServiceNotApplicable(typeof(IDriveLight))] public partial class GBHawkLink : IEmulator, ISaveRam, IDebuggable, IStatable, IInputPollable, IRegionable, ILinkable, ISettable @@ -24,25 +24,45 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink public GBHawk.GBHawk L; public GBHawk.GBHawk R; + // if true, the link cable is currently connected + private bool _cableconnected = true; + + // if true, the link cable toggle signal is currently asserted + private bool _cablediscosignal = false; + //[CoreConstructor("GB", "GBC")] public GBHawkLink(CoreComm comm, GameInfo game_L, byte[] rom_L, GameInfo game_R, byte[] rom_R, /*string gameDbFn,*/ object settings, object syncSettings) { var ser = new BasicServiceProvider(this); - GBLinkSettings linkSettings = (GBLinkSettings)settings ?? new GBLinkSettings(); - GBLinkSyncSettings linkSyncSettings = (GBLinkSyncSettings)syncSettings ?? new GBLinkSyncSettings(); + linkSettings = (GBLinkSettings)settings ?? new GBLinkSettings(); + linkSyncSettings = (GBLinkSyncSettings)syncSettings ?? new GBLinkSyncSettings(); _controllerDeck = new GBHawkLinkControllerDeck(GBHawkControllerDeck.DefaultControllerName, GBHawkControllerDeck.DefaultControllerName); CoreComm = comm; + var temp_set_L = new GBHawk.GBHawk.GBSettings(); + var temp_set_R = new GBHawk.GBHawk.GBSettings(); + + var temp_sync_L = new GBHawk.GBHawk.GBSyncSettings(); + var temp_sync_R = new GBHawk.GBHawk.GBSyncSettings(); + + temp_sync_L.ConsoleMode = linkSyncSettings.ConsoleMode_L; + temp_sync_R.ConsoleMode = linkSyncSettings.ConsoleMode_R; + + temp_sync_L.DivInitialTime = linkSyncSettings.DivInitialTime_L; + temp_sync_R.DivInitialTime = linkSyncSettings.DivInitialTime_R; + temp_sync_L.RTCInitialTime = linkSyncSettings.RTCInitialTime_L; + temp_sync_R.RTCInitialTime = linkSyncSettings.RTCInitialTime_R; + L = new GBHawk.GBHawk(new CoreComm(comm.ShowMessage, comm.Notify) { CoreFileProvider = comm.CoreFileProvider }, - game_L, rom_L, linkSettings.L, linkSyncSettings.L); + game_L, rom_L, temp_set_L, temp_sync_L); R = new GBHawk.GBHawk(new CoreComm(comm.ShowMessage, comm.Notify) { CoreFileProvider = comm.CoreFileProvider }, - game_R, rom_R, linkSettings.R, linkSyncSettings.R); + game_R, rom_R, temp_set_R, temp_sync_R); ser.Register(this); - ser.Register(L.audio); + ser.Register(this); _tracer = new TraceBuffer { Header = L.cpu.TraceHeader }; ser.Register(_tracer); @@ -52,16 +72,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink SetupMemoryDomains(); HardReset(); - - L.color_palette[0] = color_palette_BW[0]; - L.color_palette[1] = color_palette_BW[1]; - L.color_palette[2] = color_palette_BW[2]; - L.color_palette[3] = color_palette_BW[3]; - - R.color_palette[0] = color_palette_BW[0]; - R.color_palette[1] = color_palette_BW[1]; - R.color_palette[2] = color_palette_BW[2]; - R.color_palette[3] = color_palette_BW[3]; } public void HardReset() @@ -78,7 +88,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink private readonly ITraceable _tracer; - bool ILinkable.LinkConnected { get; } + public bool LinkConnected { get; private set; } private void ExecFetch(ushort addr) { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLinkControllerDeck.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLinkControllerDeck.cs index fd2e5c7ae8..9bc1143bb4 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLinkControllerDeck.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLinkControllerDeck.cs @@ -30,6 +30,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink Name = Port1.Definition.Name, BoolButtons = Port1.Definition.BoolButtons .Concat(Port2.Definition.BoolButtons) + .Concat(new[] { "Toggle Cable" } ) .ToList() }; } From 32e4a2d9a4762d2ac643d9fa5396b588f8c9e16b Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Thu, 3 Jan 2019 19:24:18 -0600 Subject: [PATCH 055/301] GBHAwk: Linked play initial capability --- .../Consoles/Nintendo/GBHawk/SerialPort.cs | 15 +++++--- .../GBHawkLink/GBHawkLink.IEmulator.cs | 34 +++++++++++++++++++ .../GBHawkLink/GBHawkLink.IStatable.cs | 2 ++ .../Nintendo/GBHawkLink/GBHawkLink.cs | 2 ++ 4 files changed, 49 insertions(+), 4 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/SerialPort.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/SerialPort.cs index 64de7f5457..4aa700268c 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/SerialPort.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/SerialPort.cs @@ -16,6 +16,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk public int serial_bits; public bool clk_internal; public int clk_rate; + public byte going_out; + public byte coming_in; public byte ReadReg(int addr) { @@ -84,16 +86,16 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk if (serial_start) { if (serial_clock > 0) { serial_clock--; } + if (serial_clock == 0) { if (serial_bits > 0) { - send_external_bit((byte)(serial_data & 0x80)); - byte temp = get_external_bit(); serial_data = (byte)((serial_data << 1) | temp); serial_bits--; + if (serial_bits == 0) { serial_control &= 0x7F; @@ -122,12 +124,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk // no device connected returns 0xFF public byte get_external_bit() { - return 1; + return coming_in; } + // calling this function buts an external bit on the cable line public void send_external_bit(byte bit_send) { - + going_out = (byte)(bit_send >> 7); } public void Reset() @@ -135,6 +138,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk serial_control = 0x7E; serial_start = false; serial_data = 0x00; + going_out = 0; + coming_in = 1; } public void SyncState(Serializer ser) @@ -146,6 +151,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk ser.Sync("serial_bits", ref serial_bits); ser.Sync("clk_internal", ref clk_internal); ser.Sync("clk_rate", ref clk_rate); + ser.Sync("going_out", ref going_out); + ser.Sync("coming_in", ref coming_in); } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs index 3d0fa172cf..0a95188026 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs @@ -104,6 +104,40 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink L.do_single_step(); R.do_single_step(); + // the signal to shift out a bit is when serial_clock = 1 + if (L.serialport.serial_clock == 1) + { + if (LinkConnected) + { + L.serialport.send_external_bit((byte)(L.serialport.serial_data & 0x80)); + + if ((R.serialport.clk_rate == -1) && R.serialport.serial_start) + { + R.serialport.serial_clock = 1; + R.serialport.send_external_bit((byte)(R.serialport.serial_data & 0x80)); + R.serialport.coming_in = L.serialport.going_out; + } + + L.serialport.coming_in = R.serialport.going_out; + } + } + else if (R.serialport.serial_clock == 1) + { + if (LinkConnected) + { + R.serialport.send_external_bit((byte)(R.serialport.serial_data & 0x80)); + + if ((L.serialport.clk_rate == -1) && L.serialport.serial_start) + { + L.serialport.serial_clock = 1; + L.serialport.send_external_bit((byte)(L.serialport.serial_data & 0x80)); + L.serialport.coming_in = R.serialport.going_out; + } + + R.serialport.coming_in = L.serialport.going_out; + } + } + // if we hit a frame boundary, update video if (L.vblank_rise) { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IStatable.cs index e078e962a9..ffd05ea99f 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IStatable.cs @@ -57,6 +57,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink ser.Sync("Lag", ref _lagcount); ser.Sync("Frame", ref _frame); ser.Sync("IsLag", ref _islag); + ser.Sync("_cableconnected", ref _cableconnected); + ser.Sync("_cablediscosignal", ref _cablediscosignal); _controllerDeck.SyncState(ser); } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs index 3cd8412bc7..d007d533fb 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs @@ -72,6 +72,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink SetupMemoryDomains(); HardReset(); + + LinkConnected = _cableconnected; } public void HardReset() From b82fd1fb2c403a3790a69e47c60e984bbd55b870 Mon Sep 17 00:00:00 2001 From: nattthebear Date: Fri, 4 Jan 2019 16:30:13 -0500 Subject: [PATCH 056/301] Remove bogus TODO. Absolute requirements of MemoryBlock include: 1) Ability to set and deny RWX permissions at the individual page level within the block 2) Ability to map and unmap from memory at will 3) Ability to specifiy the exact address at which the mapping occurs From the docs, I don't see any way to get at any of these from the MemoryMappedFile stuff. So that's a nonstarter. Should be easy enough to rewrite in POSIX though. --- BizHawk.Common/BizInvoke/MemoryBlock.cs | 2 -- 1 file changed, 2 deletions(-) diff --git a/BizHawk.Common/BizInvoke/MemoryBlock.cs b/BizHawk.Common/BizInvoke/MemoryBlock.cs index fd8e57181b..9c9a147533 100644 --- a/BizHawk.Common/BizInvoke/MemoryBlock.cs +++ b/BizHawk.Common/BizInvoke/MemoryBlock.cs @@ -9,8 +9,6 @@ namespace BizHawk.Common.BizInvoke { public sealed class MemoryBlock : IDisposable { - //TODO rewrite this class without using the external functions in Kernel32 - this may help: https://docs.microsoft.com/en-us/dotnet/standard/io/memory-mapped-files - /// /// starting address of the memory block /// From 9d853d200d7830239357210408bc76b0882c5fd7 Mon Sep 17 00:00:00 2001 From: upthorn Date: Fri, 4 Jan 2019 13:57:34 -0800 Subject: [PATCH 057/301] Remove vestigial hard-coded Ecco 2 tool --- .../Api/Example/Ecco2AssistantPlugin.cs | 3456 ----------------- .../BizHawk.Client.EmuHawk.csproj | 1 - 2 files changed, 3457 deletions(-) delete mode 100644 BizHawk.Client.EmuHawk/Api/Example/Ecco2AssistantPlugin.cs diff --git a/BizHawk.Client.EmuHawk/Api/Example/Ecco2AssistantPlugin.cs b/BizHawk.Client.EmuHawk/Api/Example/Ecco2AssistantPlugin.cs deleted file mode 100644 index 8764258e3d..0000000000 --- a/BizHawk.Client.EmuHawk/Api/Example/Ecco2AssistantPlugin.cs +++ /dev/null @@ -1,3456 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Drawing; - -using System.Linq; -using BizHawk.Client.ApiHawk; -using BizHawk.Emulation.Cores.Consoles.Sega.gpgx; - -namespace BizHawk.Client.EmuHawk -{ - public sealed class Ecco2AssistantPlugin : PluginBase - { - [RequiredApi] - private IMem Mem {get; set;} - - [RequiredApi] - private IGui Gui { get; set; } - - [RequiredApi] - private IJoypad Joy { get; set; } - - [RequiredApi] - private IEmu Emu { get; set; } - - [RequiredApi] - private IGameInfo GI { get; set; } - - [RequiredApi] - private IMemorySaveState MemSS { get; set; } - - public override string Name => "Ecco 2 Assistant"; - - public override string Description => "Displays a hud with hitboxes, etc. Assists with maintaining maximum speed."; - - private enum Modes { disabled, Ecco1, Ecco2 } - private Modes _mode; - - private int _camX = 0; - private int _camY = 0; - private int _camXAddr; - private int _camYAddr; - private uint _prevF = 0; - private int _top = 0; - private int _bottom = 0; - private int _left = 0; - private int _right = 0; - private const int _signalAlpha = 255; - private int _tickerY = 81; - private int _dumpMap = 0; - private int _prevX = 0; - private int _prevY = 0; - private int _destX = 0; - private int _destY = 0; - private int _snapPast = 0; - private string _rowStateGuid = string.Empty; - private Color[] _turnSignalColors = - { - Color.FromArgb(_signalAlpha, 127, 127, 0), - Color.FromArgb(_signalAlpha, 255, 0, 0), - Color.FromArgb(_signalAlpha, 192, 0, 63), - Color.FromArgb(_signalAlpha, 63, 0, 192), - Color.FromArgb(_signalAlpha, 0, 0, 255), - Color.FromArgb(_signalAlpha, 0, 63, 192), - Color.FromArgb(_signalAlpha, 0, 192, 63), - Color.FromArgb(_signalAlpha, 0, 255, 0) - }; - private int _rseed = 1; - private int EccoRand(bool refresh = false) - { - if (refresh) - { - _rseed = (int)(Mem.ReadU16(0xFFE2F8)); - } - bool odd = (_rseed & 1) != 0; - _rseed >>= 1; - if (odd) - { - _rseed ^= 0xB400; - } - return _rseed; - } - private void DrawEccoRhomb(int x, int y, int radius, Color color, int fillAlpha = 63) - { - Point[] rhombus = { - new Point(x, y - radius), - new Point(x + radius, y), - new Point(x, y + radius), - new Point(x - radius, y) - }; - Color? fillColor = null; - if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); - Gui.DrawPolygon(rhombus, color, fillColor); - } - private void DrawEccoRhomb_scaled(int x, int y, int width, int height, int rscale, int bscale, int lscale, int tscale, Color color, int fillAlpha = 63) - { - Point[] rhombus = { - new Point(x + (width << rscale), y), - new Point(x, y + (height << bscale)), - new Point(x - (width << lscale), y), - new Point(x, y - (height << tscale)) - }; - Color? fillColor = null; - if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); - Gui.DrawPolygon(rhombus, color, fillColor); - } - private void DrawEccoOct(int x, int y, int r, Color color, int fillAlpha = 63) - { - var octOff = (int)(Math.Sqrt(2) * r) >> 1; - Point[] octagon = { - new Point(x, y - r), - new Point(x + octOff, y - octOff), - new Point(x + r, y), - new Point(x + octOff, y + octOff), - new Point(x, y + r), - new Point(x - octOff, y + octOff), - new Point(x - r, y), - new Point(x - octOff, y - octOff) - }; - Color? fillColor = null; - if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); - Gui.DrawPolygon(octagon, color, fillColor); - } - private void DrawEccoOct_scaled(int x, int y, int xscale, int yscale, int r, Color color, int fillAlpha = 63) - { - var octOff = (int)(Math.Sin(Math.PI / 4) * r); - var xoctOff = octOff << xscale; - var yoctOff = octOff << yscale; - var xr = r << xscale; - var yr = r << yscale; - Point[] octagon = { - new Point(x, y - yr), - new Point(x + xoctOff, y - yoctOff), - new Point(x + xr, y), - new Point(x + xoctOff, y + yoctOff), - new Point(x, y + yr), - new Point(x - xoctOff, y + yoctOff), - new Point(x - xr, y), - new Point(x - xoctOff, y - yoctOff) - }; - Color? fillColor = null; - if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); - Gui.DrawPolygon(octagon, color, fillColor); - } - private Point? Intersection(Point start1, Point end1, Point start2, Point end2) - { - if ((Math.Max(start1.X, end1.X) < Math.Min(start2.X, end2.X)) - || (Math.Min(start1.X, end1.X) > Math.Max(start2.X, end2.X)) - || (Math.Max(start1.Y, end1.Y) < Math.Min(start2.Y, end2.Y)) - || (Math.Min(start1.Y, end1.Y) > Math.Max(start2.Y, end2.Y))) - return null; - - - double ay_cy, ax_cx, px, py; - double dx_cx = end2.X - start2.X, - dy_cy = end2.Y - start2.Y, - bx_ax = end1.X - start1.X, - by_ay = end1.Y - start1.Y; - - double de = (bx_ax) * (dy_cy) - (by_ay) * (dx_cx); - - if (Math.Abs(de) < 0.01) - return null; - - ax_cx = start1.X - start2.X; - ay_cy = start1.Y - start2.Y; - double r = ((ay_cy) * (dx_cx) - (ax_cx) * (dy_cy)) / de; - double s = ((ay_cy) * (bx_ax) - (ax_cx) * (by_ay)) / de; - px = start1.X + r * (bx_ax); - py = start1.Y + r * (by_ay); - if ((px < Math.Min(start1.X, end1.X)) || (px > Math.Max(start1.X, end1.X)) - || (px < Math.Min(start2.X, end2.X)) || (px > Math.Max(start2.X, end2.X)) - || (py < Math.Min(start1.Y, end1.Y)) || (py > Math.Max(start1.Y, end1.Y)) - || (py < Math.Min(start2.Y, end2.Y)) || (py > Math.Max(start2.Y, end2.Y))) - return null; - return new Point((int)px, (int)py); - } - private void DrawRectRhombusIntersection(Point rectMid, Point rhombMid, int rw, int rh, int r, Color color, int fillAlpha = 63) // Octagon provided by the intersection of a rectangle and a rhombus - { - Point[] rect = - { - new Point(rectMid.X - rw, rectMid.Y + rh), - new Point(rectMid.X - rw, rectMid.Y - rh), - new Point(rectMid.X + rw, rectMid.Y - rh), - new Point(rectMid.X + rw, rectMid.Y + rh) - }; - Point[] rhombus = - { - new Point(rhombMid.X - r, rhombMid.Y), - new Point(rhombMid.X, rhombMid.Y - r), - new Point(rhombMid.X + r, rhombMid.Y), - new Point(rhombMid.X, rhombMid.Y + r) - }; - List finalShape = new List(); - foreach (Point p in rect) - { - if (Math.Abs(p.X - rhombMid.X) + Math.Abs(p.Y - rhombMid.Y) <= r) - finalShape.Add(p); - } - foreach (Point p in rhombus) - { - if ((Math.Abs(p.X - rectMid.X) <= rw) && (Math.Abs(p.Y - rectMid.Y) <= rh)) - finalShape.Add(p); - } - for (int i = 0; i < 5; i++) - { - Point? p = Intersection(rhombus[i & 3], rhombus[(i + 1) & 3], rect[i & 3], rect[(i + 1) & 3]); - if (p.HasValue) finalShape.Add(p.Value); - p = Intersection(rhombus[i & 3], rhombus[(i + 1) & 3], rect[(i + 1) & 3], rect[(i + 2) & 3]); - if (p.HasValue) finalShape.Add(p.Value); - } - double mX = 0; - double my = 0; - foreach (Point p in finalShape) - { - mX += p.X; - my += p.Y; - } - mX /= finalShape.ToArray().Length; - my /= finalShape.ToArray().Length; - Color? fillColor = null; - if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); - Gui.DrawPolygon(finalShape.OrderBy(p => Math.Atan2(p.Y - my, p.X - mX)).ToArray(), color, fillColor); - } - private void DrawEccoTriangle(int x1, int y1, int x2, int y2, int x3, int y3, Color color, int fillAlpha = 63) - { - Color? fillColor = null; - Point[] triPoints = - { - new Point(x1, y1), - new Point(x2, y2), - new Point(x3, y3) - }; - if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); - Gui.DrawPolygon(triPoints, color, fillColor); - } - private void DrawBoxMWH(int x, int y, int w, int h, Color color, int fillAlpha = 63) - { - Color? fillColor = null; - if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); - Gui.DrawRectangle(x - w, y - h, w << 1, h << 1, color, fillColor); - } - private void DrawBox(int x, int y, int x2, int y2, Color color, int fillAlpha = 63) - { - Color? fillColor = null; - if (fillAlpha > 0) fillColor = Color.FromArgb(fillAlpha, color); - Gui.DrawBox(x, y, x2, y2, color, fillColor); - } - private void Print_Text(string message, int x, int y, Color color) - { - Gui.DrawText(x, y, message, color, null); - } - private void PutText(string message, int x, int y, int xl, int yl, int xh, int yh, Color bg, Color fg) - { - xl = Math.Max(xl, 0); - yl = Math.Max(yl, 0); - xh = Math.Min(xh + 639, 639); - yh = Math.Min(yh + 441, 441); - xh -= 4 * message.Length; - x = x - ((5 * (message.Length - 1)) / 2); - y -= 3; -// x = Math.Min(Math.Max(x, Math.Max(xl, 1)), Math.Min(xh, 638 - 4 * (int)message.Length)); -// y = Math.Min(Math.Max(y - 3, Math.Max(yl, 1)), yh); - int[] xOffset = { -1, -1, -1, 0, 1, 1, 1, 0 }; - int[] yOffset = { -1, 0, 1, 1, 1, 0, -1, -1 }; - for (int i = 0; i < 8; i++) - Print_Text(message, x + xOffset[i], y + yOffset[i], bg); - Print_Text(message, x, y, fg); - } - private void TickerText(string message, Color? fg = null) - { - if (_dumpMap == 0) - Gui.Text(1, _tickerY, message, fg); - _tickerY += 16; - } - private void EccoDraw3D() - { - int CamX = (Mem.ReadS32(0xFFD5E0) >> 0xC) - _left; - int CamY = (Mem.ReadS32(0xFFD5E8) >> 0xC) + _top; - int CamZ = (Mem.ReadS32(0xFFD5E4) >> 0xC) + _top; - uint curObj = Mem.ReadU24(0xFFD4C1); - while (curObj != 0) - { - int Xpos = (Mem.ReadS32(curObj + 0x6) >> 0xC); - int Ypos = (Mem.ReadS32(curObj + 0xE) >> 0xC); - int Zpos = (Mem.ReadS32(curObj + 0xA) >> 0xC); - int Xmid = 160 + (Xpos - CamX); - int Ymid = 112 - (Ypos - CamY); - int Zmid = _top + 112 - (Zpos - CamZ); - uint type = Mem.ReadU32(curObj + 0x5A); - int width, height, depth = height = width = 0; - if (type == 0xD4AB8) // 3D poison Bubble - { - depth = 0x10; - int radius = 8; - width = radius; - DrawEccoOct(Xmid, Ymid, radius, Color.Lime); - DrawBoxMWH(Xmid, Zmid, width, depth, Color.Blue); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Lime, 0); - DrawBoxMWH(Xmid, Zmid, 1, 1, Color.Blue, 0); - } - else if (type == 0xD817E)// 3D Ring - { - depth = 8; - if (Mem.ReadU32(0xFFB166) < 0x1800) depth = 4; - int radius = 32; - width = radius; - DrawEccoOct(Xmid, Ymid, radius, (Mem.ReadS16(curObj + 0x62) == 0) ? Color.Orange : Color.Gray); - DrawBoxMWH(Xmid, Zmid, width, depth, Color.Red); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Orange, 0); - DrawBoxMWH(Xmid, Zmid, 1, 1, Color.Red, 0); - TickerText($"{Mem.ReadS32(curObj + 0x6) / 4096.0:0.######}:{Mem.ReadS32(curObj + 0xE) / 4096.0:0.######}:{Mem.ReadS32(curObj + 0xA) / 2048.0:0.######}:{Mem.ReadByte(curObj + 0x72)}",Color.Lime); - } - else if (type == 0xD49CC) // Vines collisions are based on draw position, which is a fucking pain in the ass to calculate - { - int Xvel = (Mem.ReadS32(curObj + 0x3A) - Mem.ReadS32(curObj + 0x6)); - int Zvel = (Mem.ReadS32(curObj + 0x3E) - Mem.ReadS32(curObj + 0xA)); - int dx = Mem.ReadS32(0xFFD5E0) - Mem.ReadS32(0xFFD5C8) >> 3; - int dy = Mem.ReadS32(0xFFD5E8) - Mem.ReadS32(0xFFD600) >> 3; - int dz = Mem.ReadS32(0xFFD5E4) - Mem.ReadS32(0xFFD5CC); - var chargeCount = Mem.ReadByte(0xFFB19B); - if (chargeCount == 0) - { - dz >>= 2; - } - else if ((chargeCount > 0x20) || (chargeCount <= 0x10)) - { - dz >>= 3; - } - else if (chargeCount > 0x10) - { - dz >>= 4; - } - if (Mem.ReadByte(curObj + 0x64) == 0) - { - Xvel >>= 0xA; - Zvel >>= 9; - } - else - { - Xvel >>= 9; - Zvel >>= 0xA; - } - Xvel += Mem.ReadS32(curObj + 0x2E); - Zvel += Mem.ReadS32(curObj + 0x32); - Zpos = (Mem.ReadS32(curObj + 0x26) + dz - Mem.ReadS32(0xFFD5E4)) >> 0xB; - if ((Zpos < 0x600) && (Zpos > 0)) - { - Zpos += 0x20; - int Xcur, Xmax, Ycur, Ymax; - int Zpos2 = (Mem.ReadS32(curObj + 0xA) + Zvel + dz - Mem.ReadS32(0xFFD5E4)) >> 0xB; - Zpos2 = Math.Max(Zpos2 + 0x20, 1); - if (Mem.ReadS16(curObj + 0x62) != 0) - { - Xmid = Mem.ReadS32(curObj + 0x6) + dx + Xvel - Mem.ReadS32(0xFFD5E0); - if (Math.Abs(Xmid) > 0x400000) - continue; - Xpos = Mem.ReadS32(curObj + 0x22) + dx - Mem.ReadS32(0xFFD5E0); - if (Math.Abs(Xpos) > 0x400000) - continue; - Xcur = (Xmid << 2) / Zpos2 + (Xmid >> 5) + 0xA000 + (Xmid >> 5); - Xmax = (Xpos << 2) / Zpos + (Xpos >> 5) + 0xA000 + (Xpos >> 5); - } - else - { - Xcur = 0; - Xmax = 256; - } - Ymid = Mem.ReadS32(0xFFD5E8) + dy - Mem.ReadS32(curObj + 0xE); - Ycur = ((Ymid << 3) / Zpos2) + 0x6000; - Ypos = Mem.ReadS32(0xFFD5E8) + dy - Mem.ReadS32(curObj + 0x2A); - Ymax = ((Ypos << 3) / Zpos) + 0x6000; - dx = Xmax - Xcur; - dy = Ymax - Ycur; - int asindx = Math.Abs(dx >> 6) & 0xFFFF; - int asindy = Math.Abs(dy >> 6) & 0xFFFF; - int ang; - if (asindx == asindy) - { - if (dx > 0) - { - if (dy > 0) - { - ang = 0x20; - } - else - { - ang = 0xE0; - } - } - else - { - if (dy > 0) - { - ang = 0x60; - } - else - { - ang = 0xA0; - } - } - } - else - { - if (asindx > asindy) - { - asindy <<= 5; - asindy += asindx - 1; - asindy &= 0xFFFF; - asindy /= asindx; - } - else - { - asindx <<= 5; - asindx += asindy - 1; - asindx &= 0xFFFF; - asindx /= asindy; - asindy = 0x40 - asindx; - } - if (dx > 0) - { - if (dy > 0) - { - ang = asindy; - } - else - { - ang = 0xff - asindy; - } - } - else - { - if (dy > 0) - { - ang = 0x7f - asindy; - } - else - { - ang = 0x81 + asindy; - } - } - } - Xcur += Mem.ReadS8(0x2CC8 + ang) << 6; - Ycur += Mem.ReadS8(0x2BC8 + ang) << 6; - var dSml = Math.Abs(dx); - var dBig = Math.Abs(dy); - if (dBig < dSml) - { - dSml ^= dBig; - dBig ^= dSml; - dSml ^= dBig; - } - int OctRad = (dBig + (dSml >> 1) - (dSml >> 3)); - int i = Math.Max(((OctRad >> 8) + 0x1F) >> 5, 1); - dx /= i; - dy /= i; - - Zmid = (Mem.ReadS32(curObj + 0xA) + Mem.ReadS32(curObj + 0x26)) >> 1; - Zmid >>= 0xC; - Zmid = 112 + _top - (Zmid - CamZ); - do - { - i--; - DrawEccoRhomb((Xcur >> 8) + _left, (Ycur >> 8) + _top, 8, Color.Lime); - DrawBoxMWH((Xcur >> 8) + _left, Zmid, 8, 0x10, Color.Blue); - Xcur += dx; - Ycur += dy; - } while (i >= 0); - DrawBoxMWH((Mem.ReadS32(0xFFB1AA) >> 8) + _left, (Mem.ReadS32(0xFFB1AE) >> 8) + _top, 1, 1, Color.Lime, 0); - } - } - else if ((type == 0xD3B40) || (type == 0xD3DB2)) // 3D Shark and Jellyfish - { - width = (Mem.ReadS32(curObj + 0x12) >> 0xC); - height = (Mem.ReadS32(curObj + 0x1A) >> 0xC); - depth = (Mem.ReadS32(curObj + 0x16) >> 0xC); - DrawBoxMWH(Xmid, Ymid, width, height, Color.Lime); - DrawBoxMWH(Xmid, Zmid, width, depth, Color.Blue); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Lime, 0); - DrawBoxMWH(Xmid, Zmid, 1, 1, Color.Blue, 0); - } - else if ((type == 0xD4028) || (type == 0xD4DBA)) // 3D Eagle and 3D Shell - { - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Lime, 0); - DrawBoxMWH(Xmid, Zmid, 1, 1, Color.Blue, 0); - } - else if (type == 0xD4432) // 3D Sonar Blast - { - DrawEccoOct(Xmid, Ymid, 48, Color.Orange); - DrawEccoOct(Xmid, Ymid, 32, Color.Lime); - DrawBoxMWH(Xmid, Zmid, 32, 32, Color.Blue); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Lime, 0); - DrawBoxMWH(Xmid, Zmid, 1, 1, Color.Blue, 0); - } - else if (type == 0xD463A) // 3D Homing Bubble - { - DrawEccoOct(Xmid, Ymid, 48, Color.Orange); - DrawEccoOct(Xmid, Ymid, 32, Color.Lime); - DrawBoxMWH(Xmid, Zmid, 32, 32, Color.Blue); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Lime, 0); - DrawBoxMWH(Xmid, Zmid, 1, 1, Color.Blue, 0); - } - else if ((type == 0xD37CE) || (type == 0xD4214) || (type == 0xD3808)) // bubbles, splashes, gfx sprites - { - width = height = depth = 0; - } - else - { - if (curObj != 0xFFB134) - { - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Lime, 0); - DrawBoxMWH(Xmid, Zmid, 1, 1, Color.Blue, 0); - PutText(type.ToString("X8"), Xmid, Ymid - 4, 1, 1, -1, -9, Color.White, Color.Blue); - PutText(curObj.ToString("X8"), Xmid, Ymid + 4, 1, 9, -1, -1, Color.White, Color.Blue); - } - else - { - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Orange); - DrawBoxMWH(Xmid, Zmid, 1, 1, Color.Red); - } - } - curObj = Mem.ReadU24(curObj+1); - } - } - private void EccoDrawBoxes() - { - // CamX-=8; - int Width2, Height2; - //Ecco HP and Air - int i = 0; - int HP = Mem.ReadS16(0xFFAA16) << 3; - int air = Mem.ReadS16(0xFFAA18); - Color color; - int off = 0; - for (int j = 0; j < air; j++) - { - if (j - off == 448) - { - i++; off += 448; - } - color = Color.FromArgb(j >> 2, j >> 2, j >> 2); - Gui.DrawLine(_left - 32, j - off, _left - 17, j - off, color); - } - for (int j = 0; j < HP; j += 8) - { - color = Color.FromArgb(Math.Max(0x38 - (j >> 3),0), 0, Math.Min(j >> 1,255)); - Gui.DrawRectangle(_left - 16, j, 15, 7, color, color); - } - - //Asterite - uint type = Mem.ReadU32(0xFFD440); - uint curObj = 0; - int Xpos, Xpos2, Ypos, Ypos2, Xmid, Ymid, X, X2, Y, Y2; - Xpos = Ypos = Xpos2 = Ypos2 = Xmid = Ymid = X = X2 = Y = Y2 = 0; - if (type == 0xB119A) - { - curObj = Mem.ReadU24(Mem.ReadU24(0xFFD429)+5); - while (curObj != 0) - { - Xpos = Mem.ReadS16(curObj + 0x3C); - Xpos2 = Mem.ReadS16(curObj + 0x24); - Ypos = Mem.ReadS16(curObj + 0x40); - Ypos2 = Mem.ReadS16(curObj + 0x28); - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid = (Xpos + Xpos2) >> 1; - Ymid = (Ypos + Ypos2) >> 1; - if (Mem.ReadU8(curObj + 0x71) != 0) - { - DrawEccoOct(Xpos, Ypos, 48, Color.Blue, 16); - DrawEccoOct(Xpos2, Ypos2, 48, Color.Blue, 16); - } - curObj = Mem.ReadU24(curObj + 5); - } - if ((Mem.ReadU8(0xFFA7D0) == 30)) - { - curObj = Mem.ReadU24(0xFFD425); - if ((curObj != 0) && (Mem.ReadU32(curObj + 8) != 0)) - { - Xpos = Mem.ReadS16(curObj + 0x1C) - _camX; - Ypos = Mem.ReadS16(curObj + 0x20) - _camY; - DrawEccoOct(Xpos, Ypos, 20, Color.Orange); - } - } - } - else if (type == 0xB2CB8) - { - curObj = Mem.ReadU24(Mem.ReadU24(0xFFD429) + 5); - while (curObj != 0) - { - Xpos = Mem.ReadS16(curObj + 0x3C); - Xpos2 = Mem.ReadS16(curObj + 0x24); - Ypos = Mem.ReadS16(curObj + 0x40); - Ypos2 = Mem.ReadS16(curObj + 0x28); - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid = (Xpos + Xpos2) >> 1; - Ymid = (Ypos + Ypos2) >> 1; - if (Mem.ReadU8(curObj + 0x71) != 0) - { - if (Mem.ReadByte(0xFFA7D0) != 0x1F) - { - DrawEccoOct(Xpos, Ypos, 40, Color.Lime); - DrawEccoOct(Xpos2, Ypos2, 40, Color.Lime); - } - DrawEccoOct(Xpos, Ypos, 48, Color.Blue, 16); - DrawEccoOct(Xpos2, Ypos2, 48, Color.Blue, 16); - } - curObj = Mem.ReadU24(curObj + 5); - } - } - //aqua tubes - curObj = Mem.ReadU24(0xFFCFC5); - while (curObj != 0) - { - Xpos = Mem.ReadS16(curObj + 0x2C); - Xpos2= Mem.ReadS16(curObj + 0x34); - Ypos = Mem.ReadS16(curObj + 0x30); - Ypos2= Mem.ReadS16(curObj + 0x38); - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid = (Xpos + Xpos2) >> 1; - Ymid = (Ypos + Ypos2) >> 1; - // displayed = false; - type = Mem.ReadU8(curObj + 0x7E); - switch (type) - { - case 0x15: - case 0x18: - case 0x19: - DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos2, Xpos2, Ymid, Color.Purple); - break; - case 0x1A: - case 0x1D: - case 0x20: - case 0x21: - DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos2, Xpos, Ymid, Color.Purple); - break; - case 0x1F: - case 0x22: - case 0x23: - DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos, Xpos, Ymid, Color.Purple); - break; - case 0x24: - case 0x25: - case 0x26: - case 0x27: - case 0x28: - DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos, Xpos2, Ymid, Color.Purple); - break; - case 0x2B: - Point[] trapPoints = - { - new Point(Xpos, Ymid), - new Point(Xpos + (Ymid - Ypos >> 1), Ypos), - new Point(Xpos2 - (Ymid - Ypos >> 1), Ypos), - new Point(Xpos2, Ymid) - }; - Gui.DrawPolygon(trapPoints, Color.Purple, Color.FromArgb(63, Color.Purple)); - break; - default: - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Purple); - if (type != 0x10) - PutText(type.ToString("X2"), Xmid, Ymid, 1, 1, -1, -1, Color.Red, Color.Blue); - break; - } - curObj = Mem.ReadU24(curObj+1); - } - //walls - curObj = Mem.ReadU24(0xFFCFC1); - while (curObj != 0) - { - Xmid = Mem.ReadS16(curObj + 0x24); - Xmid = Mem.ReadS16(curObj + 0x28); - Xpos = Mem.ReadS16(curObj + 0x2C); - Xpos2= Mem.ReadS16(curObj + 0x34); - Ypos = Mem.ReadS16(curObj + 0x30); - Ypos2= Mem.ReadS16(curObj + 0x38); - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - int colltype = Mem.ReadS8(curObj + 0x7E); - switch (colltype) - { - case 0x10: - case 0x2D: - case 0x2E: - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); - break; - case 0x11: - Xmid = (Xpos + Xpos2) >> 1; - Xpos2 = Xmid; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Yellow)); - Gui.DrawLine(Xpos2, Ypos, Xpos2, Ypos2, Color.PowderBlue); - break; - case 0x12: - Xmid = (Xpos + Xpos2) >> 1; - Xpos = Xmid; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Yellow)); - Gui.DrawLine(Xpos, Ypos, Xpos, Ypos2, Color.PowderBlue); - break; - case 0x13: - Ymid = (Ypos + Ypos2) >> 1; - Ypos = Ymid; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Yellow)); - Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos, Color.PowderBlue); - break; - case 0x14: - Ymid = (Ypos + Ypos2) >> 1; - Ypos2 = Ymid; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Yellow)); - Gui.DrawLine(Xpos, Ypos2, Xpos2, Ypos2, Color.PowderBlue); - break; - case 0x15: - case 0x16: - case 0x17: - case 0x18: - case 0x19: - Xmid = (Xpos + Xpos2) >> 1; - Ymid = (Ypos + Ypos2) >> 1; - DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos2, Xpos2, Ymid, Color.FromArgb(63, Color.Yellow)); - Gui.DrawLine(Xmid, Ypos2, Xpos2, Ymid, Color.PowderBlue); - break; - case 0x1A: - case 0x1B: - case 0x1C: - case 0x1D: - case 0x1E: - Xmid = (Xpos + Xpos2) >> 1; - Ymid = (Ypos + Ypos2) >> 1; - DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos2, Xpos, Ymid, Color.FromArgb(63, Color.Yellow)); - Gui.DrawLine(Xpos, Ymid, Xmid, Ypos2, Color.PowderBlue); - break; - case 0x1F: - case 0x20: - case 0x21: - case 0x22: - case 0x23: - Xmid = (Xpos + Xpos2) >> 1; - Ymid = (Ypos + Ypos2) >> 1; - DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos, Xpos, Ymid, Color.FromArgb(63,Color.Yellow)); - Gui.DrawLine(Xpos, Ymid, Xmid, Ypos, Color.PowderBlue); - break; - case 0x24: - case 0x25: - case 0x26: - case 0x27: - case 0x28: - Xmid = (Xpos + Xpos2) >> 1; - Ymid = (Ypos + Ypos2) >> 1; - DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos, Xpos2, Ymid, Color.FromArgb(63,Color.Yellow)); - Gui.DrawLine(Xmid, Ypos, Xpos2, Ymid, Color.PowderBlue); - break; - case 0x29: - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Black)); - Gui.DrawLine(Xpos , Ypos, Xpos , Ypos2, Color.Black); - Gui.DrawLine(Xpos2, Ypos, Xpos2, Ypos2, Color.Black); - break; - case 0x2A: - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Black)); - Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos, Color.Black); - Gui.DrawLine(Xpos, Ypos2, Xpos2, Ypos2, Color.Black); - break; - case 0x2B: - Xmid = (Xpos + Xpos2) >> 1; - Ymid = (Ypos + Ypos2) >> 1; - Point[] trapPoints = - { - new Point(Xpos, Ymid), - new Point(Xpos + (Ymid - Ypos >> 1), Ypos), - new Point(Xpos2 - (Ymid - Ypos >> 1), Ypos), - new Point(Xpos2, Ymid) - }; - Gui.DrawPolygon(trapPoints, Color.PowderBlue, Color.FromArgb(63, Color.PowderBlue)); - //Gui.DrawLine(Xpos, Ymid, Xpos2, Ymid, Color.Yellow); - break; - default: - DrawEccoRhomb_scaled(Xmid, Ymid, Mem.ReadS16(curObj + 0x44), Mem.ReadS16(curObj + 0x44), (colltype & 1), (colltype & 2) >> 1, (colltype & 4) >> 2, (colltype & 8) >> 3, Color.PowderBlue); - break; - } - curObj = Mem.ReadU24(curObj+1); - } - //inanimate objects - curObj = Mem.ReadU24(0xFFCFBD); - while (curObj != 0) - { - type = Mem.ReadU32(curObj + 0xC); - int colltype = Mem.ReadS8(curObj + 0x7E); - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - int Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54) + Mem.ReadS32(curObj + 0x5C)) >> 16) - _camX; - int Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58) + Mem.ReadS32(curObj + 0x60)) >> 16) - _camY; - Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; - Ypos = Mem.ReadS16(curObj + 0x30) - _camY; - Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - if (type == 0x9CE3A) //Remnant Stars - { - uint subObj = Mem.ReadU24(curObj + 0x5); - uint anim = Mem.ReadU16(curObj + 0x6C); - if ((anim <= 7) && (subObj == 0xFFA9D4)) - { - DrawEccoRhomb(Xmid, Ymid, 96, Color.Red); - PutText($"{((7 - anim) * 4) - ((Mem.ReadByte(0xFFA7C9) & 3) - 4)}", Xmid, Ymid + 4, 1, 1, -1, -1, Color.Lime, Color.Blue); - } - } - else if ((type == 0x9CC06) || (type == 0x9CA10)) - { - Xvec = ((Mem.ReadS32(curObj + 0x24) + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Mem.ReadS32(curObj + 0x28) + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - } - else if (type == 0x9B5D8) - { - Xvec = Xmid; - Yvec = Ymid; - } - else if (type == 0xC0152) // Vortex Future Vertical Gate - { - Xvec = Mem.ReadS16(curObj + 0x1C) - _camX; - Yvec = (Mem.ReadS32(curObj + 0x20) + Mem.ReadS32(curObj + 0x60) >> 16) - _camY; - Gui.DrawLine(Xmid, 0, Xmid, 448, Color.PowderBlue); - DrawBoxMWH(Xvec, Yvec, 1, 1, Color.Blue, 0); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - } - else if (type == 0xC3330) // City Of Forever Horizontal Gate Slave - { - Xvec = (Mem.ReadS32(curObj + 0x1C) + Mem.ReadS32(curObj + 0x5C) >> 16) - _camX; - Yvec = Mem.ReadS16(curObj + 0x20) - _camY; - DrawBoxMWH(Xvec, Yvec, 1, 1, Color.Blue, 0); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - } - else if (type == 0xC35B0) // City Of Forever Horizontal Gate Master - { - var mode = Mem.ReadByte(curObj + 0x15); - var tmpx = Xpos; - Xpos = Mem.ReadS32(curObj + 0x1C); - Xvec = (Xpos + Mem.ReadS32(curObj + 0x5C) >> 16) - _camX; - Xpos >>= 16; Xpos -= _camX; - Yvec = Mem.ReadS16(curObj + 0x20) - _camY; - if ((mode == 1) || (mode == 3)) - { - DrawEccoOct(Xpos, Yvec, 128, Color.Orange); - } - Xpos = tmpx; - DrawBoxMWH(Xvec, Yvec, 1, 1, Color.Blue, 0); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - } - else if (type == 0xC343A) // City Of Forever Vertical Gate - { - var mode = Mem.ReadByte(curObj + 0x15); - if ((mode == 1) || (mode == 3)) - { - DrawEccoOct(Xmid, Ymid, 128, Color.Orange); - } - Xvec = Mem.ReadS16(curObj + 0x1C) - _camX; - Yvec = (Mem.ReadS32(curObj + 0x20) + Mem.ReadS32(curObj + 0x60) >> 16) - _camY; - DrawBoxMWH(Xvec, Yvec, 1, 1, Color.Blue, 0); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - } - else if (type == 0xA579A) // Antigrav Ball - { - DrawEccoOct(Xmid, Ymid, Mem.ReadS16(curObj + 0x4C), (Mem.ReadU16(0xFFA7C8) & 7) == 7 ? Color.Blue : Color.Gray); - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue, 0); - Xpos = Ypos = Xpos2 = Ypos2 = _camX - 128; - } - else if (type == 0xDF4E2) // Moray Abyss Conch Shell - { - Xpos = Mem.ReadS16(curObj + 0x1C) - _camX; - Ypos = Mem.ReadS16(curObj + 0x20) - _camY; - DrawBox(Xpos - 96, 0 - _camY, Xpos + 96, Mem.ReadS16(0xFFA7AC) - _camY - 64, Color.Orange, 0); - var mode = Mem.ReadByte(curObj + 0x15); - var modeTimer = Mem.ReadS16(curObj + 0x6E); - var Xvel1 = Mem.ReadS32(curObj + 0x54) / 65536.0; - var Yvel1 = Mem.ReadS32(curObj + 0x58) / 65536.0; - var Xvel2 = Mem.ReadS32(curObj + 0x5C) / 65536.0; - var Yvel2 = Mem.ReadS32(curObj + 0x60) / 65536.0; - TickerText($"{mode}:{modeTimer}:{Mem.ReadS16(0xFFA7AC) - 64 - Ymid - _camY}", Color.Red); - TickerText($"{Xvel1:0.######}:{Yvel1:0.######}", Color.Red); - TickerText($"{Xvel2:0.######}:{Yvel2:0.######}", Color.Red); - TickerText($"{Xvel1 + Xvel2:0.######}:{Yvel1 + Yvel2:0.######}", Color.Red); - switch (mode) - { - case 0: - Xpos2 = Math.Abs(Xmid - Xpos); - if (Xpos2 > 0x48) - { - Xpos2 = (0x60 - Xpos2) << 1; - Ypos2 = Ymid + Xpos2; - } - else - { - Ypos2 = Ymid - (Xpos2 >> 1) + 0x60; - } - DrawBoxMWH(Xpos, Ypos2, 1, 1, Color.Gray, 0); - DrawBoxMWH(Xpos, 112 + _top, 72, 224, (modeTimer <= 1) ? Color.Orange : Color.Gray, 0); - break; - case 1: - DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Orange, 0); - Xpos2 = Mem.ReadS32(0xFFAA1A) - Mem.ReadS32(curObj + 0x24); - Ypos2 = Mem.ReadS32(0xFFAA1E) - Mem.ReadS32(curObj + 0x28); - var dSml = Math.Abs(Xpos2); - var dBig = Math.Abs(Ypos2); - if (dBig < dSml) - { - dSml ^= dBig; - dBig ^= dSml; - dSml ^= dBig; - } - var rad = (dBig + (dSml >> 1) - (dSml >> 3)) / 65536.0; - Xpos2 = (int)(Xpos2 * (256.0 / (rad+1))) >> 20; - Ypos2 = (int)(Ypos2 * (256.0 / (rad+1))) >> 20; - Gui.DrawLine(Xmid, Ymid, Xmid + Xpos2, Ymid + Ypos2, Color.Gray); - TickerText($"{Xpos2 / 512.0:0.######}:{Ypos2 / 512.0:0.######}", Color.Red); - break; - case 2: - TickerText($"{Mem.ReadS32(curObj + 0x4C) / 65536.0:0.######}:{Mem.ReadS32(curObj + 0x50) / 65536.0:0.######}", Color.Red); - break; - } - } - else if ((type == 0xC57A6) || (type == 0xDEE3C) || (type == 0xDF8A0) || (type == 0xDFA98) - || (type == 0xA0BE4) || (type == 0x9FEB2) || (type == 0xA5670) || (type == 0xAEC1A) - || (type == 0xA6C4A) || (type == 0xAB65A) || (type == 0x9F2EC)) { } - else - { - PutText($"{type:X5}:{Mem.ReadByte(curObj + 0x13)}", Xmid, Ymid - 4, 1, 1, -1, -9, Color.Lime, Color.Blue); - PutText(curObj.ToString("X6"), Xmid, Ymid + 4, 1, 9, -1, -1, Color.Lime, Color.Blue); - } - colltype = Mem.ReadS8(curObj + 0x7E); - switch (colltype) - { - case 0x10: - case 0x2D: - case 0x2E: - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); - break; - case 0x11: - Xmid = (Xpos + Xpos2) >> 1; - Xpos2 = Xmid; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); - break; - case 0x12: - Xmid = (Xpos + Xpos2) >> 1; - Xpos = Xmid; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); - break; - case 0x13: - Ymid = (Ypos + Ypos2) >> 1; - Ypos = Ymid; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); - break; - case 0x14: - Ymid = (Ypos + Ypos2) >> 1; - Ypos2 = Ymid; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); - break; - case 0x15: - case 0x16: - case 0x17: - case 0x18: - case 0x19: - Xmid = (Xpos + Xpos2) >> 1; - Ymid = (Ypos + Ypos2) >> 1; - DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos2, Xpos2, Ymid, Color.FromArgb(63, Color.Yellow)); - Gui.DrawLine(Xmid, Ypos2, Xpos2, Ymid, Color.PowderBlue); - break; - case 0x1A: - case 0x1B: - case 0x1C: - case 0x1D: - case 0x1E: - Xmid = (Xpos + Xpos2) >> 1; - Ymid = (Ypos + Ypos2) >> 1; - DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos2, Xpos, Ymid, Color.FromArgb(63, Color.Yellow)); - Gui.DrawLine(Xpos, Ymid, Xmid, Ypos2, Color.PowderBlue); - break; - case 0x1F: - case 0x20: - case 0x21: - case 0x22: - case 0x23: - Xmid = (Xpos + Xpos2) >> 1; - Ymid = (Ypos + Ypos2) >> 1; - DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos, Xpos, Ymid, Color.FromArgb(63, Color.Yellow)); - Gui.DrawLine(Xpos, Ymid, Xmid, Ypos, Color.PowderBlue); - break; - case 0x24: - case 0x25: - case 0x26: - case 0x27: - case 0x28: - Xmid = (Xpos + Xpos2) >> 1; - Ymid = (Ypos + Ypos2) >> 1; - DrawEccoTriangle(Xmid, Ymid, Xmid, Ypos, Xpos2, Ymid, Color.FromArgb(63, Color.Yellow)); - Gui.DrawLine(Xmid, Ypos, Xpos2, Ymid, Color.PowderBlue); - break; - case 0x2A: - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Black)); - Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos, Color.Black); - Gui.DrawLine(Xpos, Ypos2, Xpos2, Ypos2, Color.Black); - break; - case 0x2B: - Xmid = (Xpos + Xpos2) >> 1; - Ymid = (Ypos + Ypos2) >> 1; - Point[] trapPoints = - { - new Point(Xpos, Ymid), - new Point(Xpos + (Ymid - Ypos >> 1), Ypos), - new Point(Xpos2 - (Ymid - Ypos >> 1), Ypos), - new Point(Xpos2, Ymid) - }; - Gui.DrawPolygon(trapPoints, Color.PowderBlue, Color.FromArgb(63, Color.PowderBlue)); - break; - case 0x2C: - break; - default: - DrawEccoRhomb_scaled(Xmid, Ymid, Mem.ReadS16(curObj + 0x44), Mem.ReadS16(curObj + 0x44), (colltype & 1), (colltype & 2) >> 1, (colltype & 4) >> 2, (colltype & 8) >> 3, Color.PowderBlue); - break; - } - Xmid = Mem.ReadS16(curObj + 0x24) - _camX; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - curObj = Mem.ReadU24(curObj+1); - } - //animate objects - if (_mode == Modes.Ecco2) - curObj = Mem.ReadU24(0xFFCFB9); - else - curObj = Mem.ReadU24(0xFFD829); - while (curObj != 0) - { - type = 0; - switch (_mode) { - case Modes.Ecco2: - { - uint flags = Mem.ReadU16(curObj + 0x10); - int Xvec = 0; - int Yvec = 0; - //if ((flags & 0x2000) || !(flags & 2)); - HP = Mem.ReadS8(curObj + 0x7B); - type = Mem.ReadU32(curObj + 0xC); - if ((type == 0xA1FE6) || (type == 0xA208E) // Chain link creatures such as vortex worm, magic arm, etc - || (type == 0xA2288) || (type == 0xA27A4) || (type == 0xA2BB0) || (type == 0xA2C50)) - { - uint subObj = curObj; - while (subObj != 0) - { - Xpos = Mem.ReadS32(subObj + 0x24); - Ypos = Mem.ReadS32(subObj + 0x28); - Xvec = ((Xpos + Mem.ReadS32(subObj + 0x54)) >> 16) - _camX; - Yvec = ((Ypos + Mem.ReadS32(subObj + 0x58)) >> 16) - _camY; - Xpos >>= 16; Ypos >>= 16; - Xpos -= _camX; - Ypos -= _camY; - if (Mem.ReadS16(subObj + 0x44) == Mem.ReadS16(subObj + 0x48)) - { - DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); - DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x44), Color.Cyan, 0); - } - else - { - DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); - DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x44), Color.Lime, 0); - DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); - DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x48), Color.Blue, 0); - } - DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); - subObj = Mem.ReadU24(subObj + 5); - } - if (HP > 2) - { - Xmid = Mem.ReadS16(curObj + 0x24) - _camX; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - PutText($"{HP - 1}", Xmid, Ymid, 1, 1, -1, -9, Color.Blue, Color.Red); - } - } - else if ((type == 0xB7486) || (type == 0xB864E) //Chain link creatures such as eels and worms - || (type == 0xB8A64) || (type == 0xB8C1A) - || (type == 0xB904A) || (type == 0xB9728) || (type == 0xB9B6A) || (type == 0xBA52E) - || (type == 0xBA66E) || (type == 0xE0988) || (type == 0xA18E2) || (type == 0xE069A)) - { - uint subObj = curObj; - while (subObj != 0) - { - Xpos = Mem.ReadS32(subObj + 0x24); - Ypos = Mem.ReadS32(subObj + 0x28); - Xvec = ((Xpos + Mem.ReadS32(subObj + 0x54)) >> 16) - _camX; - Yvec = ((Ypos + Mem.ReadS32(subObj + 0x58)) >> 16) - _camY; - Xpos >>= 16; Ypos >>= 16; - Xpos -= _camX; - Ypos -= _camY; - if (Mem.ReadS16(subObj + 0x44) == Mem.ReadS16(subObj + 0x48)) - { - DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); - DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x44), Color.White, 0); - } - else - { - DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x44), Color.FromArgb(255, 0, 127)); - DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x44), Color.Lime, 0); - DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x48), Color.FromArgb(255, 0, 127)); - DrawEccoOct(Xpos, Ypos, Mem.ReadS16(subObj + 0x48), Color.Magenta, 0); - } - DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); - if (type == 0xBA66E) - { - DrawEccoOct(Xpos, Ypos, 32, Color.Blue, 16); - if (subObj == curObj) - { - var mode = Mem.ReadByte(subObj + 0x15); - TickerText($"{Mem.ReadByte(subObj + 0x14)}:{mode}:{Mem.ReadByte(subObj + 0x70)}", Color.Red); - TickerText($"{Mem.ReadS32(subObj + 0x54) / 65536.0:0.######}:{Mem.ReadS32(subObj + 0x58) / 65536.0:0.######}", Color.Red); - TickerText($"{Mem.ReadS32(subObj + 0x4C) / 65536.0:0.######}:{Mem.ReadS32(subObj + 0x50) / 65536.0:0.######}", Color.Red); - switch (mode) - { - case 0: - case 2: - case 4: - Xpos2 = Mem.ReadS32(0xFFAA22) - Mem.ReadS32(subObj + 0x24); - Ypos2 = Mem.ReadS32(0xFFAA26) - Mem.ReadS32(subObj + 0x28); - var dSml = Math.Abs(Xpos2); - var dBig = Math.Abs(Ypos2); - if (dBig < dSml) - { - dSml ^= dBig; - dBig ^= dSml; - dSml ^= dBig; - } - var rad = (dBig + (dSml >> 1) - (dSml >> 3)) / 65536.0; - Xpos2 = (int)(Xpos2 * (256.0 / (rad + 1))) >> 20; - Ypos2 = (int)(Ypos2 * (256.0 / (rad + 1))) >> 20; - Gui.DrawLine(Xpos, Ypos, Xpos + Xpos2, Ypos + Ypos2, Color.Red); - break; - default: - break; - - } - } - } - else if ((type == 0xBA52E) && (subObj == Mem.ReadU24(curObj + 0x1D))) - { - DrawEccoOct(Xpos, Ypos, 32, (Mem.ReadByte(subObj + 0x70) == 0) ? Color.Blue : Color.Gray, 16); - var mode = Mem.ReadByte(curObj + 0x15); - TickerText($"{Mem.ReadByte(curObj + 0x14)}:{mode}:{Mem.ReadS16(curObj + 0x6E)}:{Mem.ReadByte(subObj + 0x70)}", Color.Red); - TickerText($"{Mem.ReadS32(subObj + 0x54) / 65536.0:0.######}:{Mem.ReadS32(subObj + 0x58) / 65536.0:0.######}", Color.Red); - TickerText($"{Mem.ReadS32(curObj + 0x4C) / 65536.0:0.######}:{Mem.ReadS32(curObj + 0x50) / 65536.0:0.######}", Color.Red); - } - else if (type == 0xE0988) - { - DrawEccoOct(Xpos, Ypos, 48, Color.FromArgb(64, Color.Blue), 16); - } - if (HP > 2) - { - Xmid = Mem.ReadS16(curObj + 0x24) - _camX; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - PutText($"{HP - 1}", Xmid, Ymid, 1, 1, -1, -9, Color.Blue, Color.Red); - } - subObj = Mem.ReadU24(subObj + 5); - } - } - else if (type == 0xB7DF4) - { - Xpos = Mem.ReadS32(curObj + 0x24); - Ypos = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xpos + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ypos + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xpos >>= 16; Ypos >>= 16; - Xpos -= _camX; - Ypos -= _camY; - DrawEccoOct(Xpos, Ypos, 26, Color.PowderBlue); - DrawEccoOct(Xpos, Ypos, 26, Color.White); - DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xpos, Ypos, Xvec, Yvec); - } - else if (type == 0xE47EE) - { - uint subObj = Mem.ReadU24(curObj + 5); - while (subObj != 0) - { - Xpos = Mem.ReadS32(subObj + 0x1C); - Ypos = Mem.ReadS32(subObj + 0x20); - Xvec = ((Xpos + Mem.ReadS32(subObj + 0x54)) >> 16) - _camX; - Yvec = ((Ypos + Mem.ReadS32(subObj + 0x58)) >> 16) - _camY; - Xpos >>= 16; Ypos >>= 16; - Xpos -= _camX; - Ypos -= _camY; - DrawEccoOct(Xpos, Ypos, ((Mem.ReadS16(subObj + 0x2C) & 0xFFFF) >> 1) + 16, Color.White); - DrawEccoOct(Xpos, Ypos, ((Mem.ReadS16(subObj + 0x2C) & 0xFFFF) >> 1) + 16, Color.Yellow, 0); - DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); - subObj = Mem.ReadU24(subObj + 5); - } - } - else if (type == 0xDBE64) // Medusa Boss - { - uint subObj = curObj; - uint next; - do - { - next = Mem.ReadU24(subObj + 5); - if (next != 0) subObj = next; - } while (next != 0); - Xpos = Mem.ReadS16(subObj + 0x2C); - Xpos2 = Mem.ReadS16(subObj + 0x34); - Ypos = Mem.ReadS16(subObj + 0x30); - Ypos2 = Mem.ReadS16(subObj + 0x38); - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - DrawEccoOct(Xpos, Ypos, 32, Color.Red); - DrawEccoOct(Xpos2, Ypos2, 32, Color.Red); - Xpos = Mem.ReadS32(curObj + 0x24); - Ypos = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xpos + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ypos + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xpos >>= 16; Ypos >>= 16; - Xpos -= _camX; - Ypos -= _camY; - var octOff = (int)(Math.Sqrt(2) * 60) >> 1; - Point[] hemiOctPoints = - { - new Point(Xpos - 60, Ypos), - new Point(Xpos - octOff, Ypos - octOff), - new Point(Xpos, Ypos - 60), - new Point(Xpos + octOff, Ypos - octOff), - new Point(Xpos + 60, Ypos) - }; - Gui.DrawPolygon(hemiOctPoints, Color.Cyan, Color.FromArgb(0x3F, Color.Cyan)); - for (int l = 0; l < 4; l++) - { - Gui.DrawLine(hemiOctPoints[l].X, hemiOctPoints[l].Y, hemiOctPoints[l + 1].X, hemiOctPoints[l + 1].Y, Color.Cyan); - } - DrawBoxMWH(Xpos, Ypos + 12, 52, 12, Color.Cyan); - DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); - } - else if (type == 0xDCEE0) // Globe Holder boss - { - uint subObj; - var mode = Mem.ReadByte(curObj + 0x15); - if (mode < 4) - { - subObj = Mem.ReadU24(curObj + 9); - while (subObj != 0) - { - Xmid = Mem.ReadS32(subObj + 0x24); - Ymid = Mem.ReadS32(subObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(subObj + 0x54) + Mem.ReadS32(subObj + 0x5C)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(subObj + 0x58) + Mem.ReadS32(subObj + 0x60)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - DrawEccoOct(Xmid, Ymid, 12, Color.Orange); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - var next = Mem.ReadU24(subObj + 9); - if ((next == 0) && ((mode & 1) != 0)) - { - DrawEccoOct(Xmid, Ymid, Mem.ReadS16(subObj + 0x3C), Color.Orange); - } - subObj = Mem.ReadU24(subObj + 9); - } - subObj = Mem.ReadU24(curObj + 5); - while (subObj != 0) - { - Xmid = Mem.ReadS32(subObj + 0x24); - Ymid = Mem.ReadS32(subObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(subObj + 0x54) + Mem.ReadS32(subObj + 0x5C)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(subObj + 0x58) + Mem.ReadS32(subObj + 0x60)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - DrawEccoOct(Xmid, Ymid, 12, Color.Orange); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - var next = Mem.ReadU24(subObj + 5); - if ((next == 0) && ((mode & 2) != 0)) - { - DrawEccoOct(Xmid, Ymid, Mem.ReadS16(subObj + 0x3C), Color.Orange); - } - subObj = Mem.ReadU24(subObj + 5); - } - } - Xmid = Mem.ReadS16(curObj + 0x24) - _camX; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - int Xtmp = Mem.ReadS32(curObj + 0x2C); - int Ytmp = Mem.ReadS32(curObj + 0x30); - int Xtmp2 = Mem.ReadS32(curObj + 0x34); - int Ytmp2 = Mem.ReadS32(curObj + 0x38); - Xpos = (Xtmp >> 16) - _camX; Xpos2 = (Xtmp2 >> 16) - _camX; - Ypos = (Ytmp >> 16) - _camY; Ypos2 = (Ytmp2 >> 16) - _camY; - Xvec = ((Mem.ReadS32(curObj + 0x24) + Mem.ReadS32(curObj + 0x54) + Mem.ReadS32(curObj + 0x5C)) >> 16) - _camX; - Yvec = ((Mem.ReadS32(curObj + 0x28) + +Mem.ReadS32(curObj + 0x58) + Mem.ReadS32(curObj + 0x60)) >> 16) - _camY; - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - if (mode < 7) - { - double overlap = 0; - DrawEccoOct(Xmid, Ymid, 0x5C, Mem.ReadByte(curObj + 0x7C) == 0 ? Color.Blue : Color.Gray); - DrawEccoOct(Xmid, Ymid, 0x5C, Color.Cyan, 0); - Xvec = (Mem.ReadS32(curObj + 0x54) + Mem.ReadS32(curObj + 0x5C)); - Yvec = (Mem.ReadS32(curObj + 0x58) + Mem.ReadS32(curObj + 0x60)); - subObj = Mem.ReadU24(curObj + 0x69); - if (subObj != 0) - { - Xpos = Mem.ReadS32(subObj + 0x2C); - Ypos = Mem.ReadS32(subObj + 0x30); - Xpos2 = Mem.ReadS32(subObj + 0x34); - Ypos2 = Mem.ReadS32(subObj + 0x38); - while ((Xtmp > Xpos) && (Xtmp2 < Xpos2) && (Ytmp > Ypos) && (Ytmp2 < Ypos2) && ((Xvec != 0) || (Yvec != 0))) - { - Xtmp += Xvec; Xtmp2 += Xvec; - Ytmp += Yvec; Ytmp2 += Yvec; - } - overlap = Math.Max(Math.Max(Xpos - Xtmp, Xtmp2 - Xpos2), Math.Max(Ypos - Ytmp, Ytmp2 - Ypos2)) / 65536.0; - Xpos >>= 16; Xpos2 >>= 16; - Ypos >>= 16; Ypos2 >>= 16; - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, (overlap >= 6) ? Color.Orange : Color.White, 0); - } - Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; - Ypos = Mem.ReadS16(curObj + 0x30) - _camY; - Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; - Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, (overlap >= 6) ? Color.Orange : Color.White, (overlap >= 6) ? 63 : 0); - if (mode < 4) - { - Xmid = Mem.ReadS16(curObj + 0x4C) - _camX; - Ymid = Mem.ReadS16(curObj + 0x50) - _camY; - if ((mode & 1) == 0) DrawEccoOct(Xmid, Ymid - 0xAE, 32, Color.Orange); - if ((mode & 2) == 0) DrawEccoOct(Xmid, Ymid + 0xAE, 32, Color.Orange); - } - TickerText($"{mode}:{Mem.ReadByte(curObj + 0x7F)}:{Mem.ReadByte(curObj + 0x6D)}:{Mem.ReadByte(curObj + 0x7C)}", Color.Red); - } - else if (mode == 8) - { - DrawEccoOct(Xmid - 16, Ymid - 16, 12, Color.Red); - } - } - else if (type == 0xE1BA2) // Vortex Queen Boss - { - var vulnCount = Mem.ReadByte(curObj + 0x7F); - var state = Mem.ReadByte(curObj + 0x7C); - var stateCounter = Mem.ReadU16(curObj + 0x6E); - var mode = Mem.ReadU16(curObj + 0x64); - var modeCounter = Mem.ReadU16(curObj + 0x66); - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x40); - Xvec = Xmid + Mem.ReadS32(curObj + 0x54); - Yvec = Ymid + Mem.ReadS32(curObj + 0x58); - Xvec >>= 16; Yvec >>= 16; - Xmid >>= 16; Ymid >>= 16; - Xvec -= _camX; Yvec -= _camY; - Xmid -= _camX; Ymid -= _camY; - if (mode < 5) - { - var octOff = (int)(80 * Math.Sqrt(2)) >> 1; - Point hexOff = Intersection(new Point(-80, 0), new Point(-octOff, -octOff), new Point(-80, -32), new Point(-octOff, -32)).Value; - Point[] roundedRect = { - new Point(Xmid - 80, Ymid), - new Point(Xmid + hexOff.X, Ymid - 32), - new Point(Xmid - hexOff.X, Ymid - 32), - new Point(Xmid + 80, Ymid), - new Point(Xmid - hexOff.X, Ymid + 32), - new Point(Xmid + hexOff.X, Ymid + 32) - }; - Gui.DrawPolygon(roundedRect, Color.Orange, Color.FromArgb(63, Color.Orange)); - } - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - TickerText($"{state:X2}:{stateCounter}:{mode}:{modeCounter}:{Mem.ReadByte(curObj + 0x70) & 0xF}", Color.Red); - var subObj = Mem.ReadU24(curObj + 0x5); - var tongueMode = mode; - mode = Mem.ReadByte(subObj + 0x15); - modeCounter = Mem.ReadU16(subObj + 0x6E); - Xmid = Mem.ReadS32(subObj + 0x24); - Ymid = Mem.ReadS32(subObj + 0x40); - Xvec = (Xmid + Mem.ReadS32(subObj + 0x5C) >> 16) - _camX; - Yvec = (Ymid + Mem.ReadS32(subObj + 0x60) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - Ymid -= 32; Yvec -= 32; - var levelHeight = Mem.ReadS16(0xFFA7AC) - _camY; - switch (mode) - { - case 0: - DrawBox(Xmid - 32, Ymid - ((state == 5) ? 0x60 : 0x70), Xmid + 32, Ymid - 16, Color.Red); - break; - case 2: - Ypos = Mem.ReadS16(subObj + 0x50) - _camY; - Gui.DrawLine(Xmid - 48, Ypos, Xmid + 48, Ypos, Color.Orange); - DrawBoxMWH(Xmid, Ymid + 32, 1, 1, Color.Orange, 0); - break; - case 3: - modeCounter = Mem.ReadByte(subObj + 0x7C); - break; - case 5: - Point[] throatShape = - { - new Point(Xmid - 48, levelHeight), - new Point(Xmid - 48, Ymid + 60), - new Point(Xmid - 16, Ymid + 20), - new Point(Xmid + 16, Ymid + 20), - new Point(Xmid + 48, Ymid + 60), - new Point(Xmid + 48, levelHeight) - }; - Gui.DrawPolygon(throatShape, Color.Red, Color.FromArgb(63, Color.Red)); - DrawEccoOct(Xmid, Ymid, 24, Color.Red); - DrawEccoOct(Xmid, Ymid, 24, Color.White, 0); - break; - case 6: - if ((state != 7) && (vulnCount == 0) && (tongueMode != 7)) - { - DrawEccoOct(Xmid, Ymid + 16, 64, Color.Blue); - } - if (tongueMode == 7) - { - uint subObj2 = Mem.ReadU24(0xFFCFCD); - while (subObj2 != 0) - { - if (Mem.ReadU16(subObj2 + 0x10) == 0xFF) - { - Xpos = Mem.ReadS16(subObj2 + 0x24) - _camX; - Ypos = Mem.ReadS16(subObj2 + 0x28) - _camY; - Xpos2 = ((Mem.ReadS32(subObj2 + 0x24) + Mem.ReadS32(subObj2 + 0x54)) >> 16) - _camX; - Ypos2 = ((Mem.ReadS32(subObj2 + 0x28) + Mem.ReadS32(subObj2 + 0x58)) >> 16) - _camY; - DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Orange); - } - subObj2 = Mem.ReadU24(subObj2 + 1); - } - } - Ypos = Mem.ReadS16(subObj + 0x50) - _camY; - Gui.DrawLine(Xmid - 48, Ypos - 94, Xmid + 48, Ypos - 94, Color.Orange); - Gui.DrawLine(Xmid - 48, Ypos, Xmid + 48, Ypos, Color.Orange); - DrawBoxMWH(Xmid, Ymid + 32, 1, 1, Color.Orange, 0); - break; - default: - break; - } - if ((mode < 7) || ((mode == 7) && (Mem.ReadU24(0xFFCFC9) != 0))) - { - if (Mem.ReadByte(subObj + 0x70) == 0) - { - DrawEccoOct(Xmid, Ymid, 32, Color.Red); - DrawBox(Xmid - 48, Ymid + 32, Xmid + 48, levelHeight, Color.Red); - } - Ypos = Mem.ReadS16(subObj + 0x50) - _camY - 94; - Gui.DrawLine(Xmid - 48, Ypos, Xmid + 48, Ypos, Color.Orange); - DrawBoxMWH(Xmid, Ymid + 32, 1, 1, Color.Orange, 0); - } - if (Mem.ReadS32(subObj + 0xC) == 0xE17B4) - { - Point[] shapePoints = - { - new Point(Xmid - 48, levelHeight), - new Point(Xmid - 48, Ymid + 60), - new Point(Xmid - 16, Ymid + 20), - new Point(Xmid + 16, Ymid + 20), - new Point(Xmid + 48, Ymid + 60), - new Point(Xmid + 48, levelHeight) - }; - Gui.DrawPolygon(shapePoints, Color.Red, Color.FromArgb(63, Color.Red)); - DrawEccoOct(Xmid, Ymid, 24, Color.Red); - DrawEccoOct(Xmid, Ymid, 24, Color.White, 0); - } - Ypos = (Mem.ReadS16(subObj + 0x50) - _camY) - 264; - DrawBoxMWH(160 + _left, Ypos, 320, 12, (32 < stateCounter) && (stateCounter < 160) ? Color.Brown : Color.Gray); - if ((32 < stateCounter) && (stateCounter < 160)) - { - DrawBoxMWH(_left + 160, Ypos, 320, 12, Color.White, 0); - } - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - TickerText($"{mode:X2}:{modeCounter}:{HP}:{vulnCount}", Color.Red); - HP = 0; - } - else if (type == 0xA5BD2) // Telekinetic future dolphins - { - Xpos = Mem.ReadS16(curObj + 0x2C); - Xpos2 = Mem.ReadS16(curObj + 0x34); - Ypos = Mem.ReadS16(curObj + 0x30); - Ypos2 = Mem.ReadS16(curObj + 0x38); - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red, 0); - DrawEccoOct(Xmid, Ymid, 4, Color.Red); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if ((type == 0x9F5B0) || (type == 0x9F4DC) || (type == 0x9F6A0)) // Falling rock, breaks barriers - { - Xpos = Mem.ReadS16(curObj + 0x2C); - Xpos2 = Mem.ReadS16(curObj + 0x34); - Ypos = Mem.ReadS16(curObj + 0x30); - Ypos2 = Mem.ReadS16(curObj + 0x38); - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); - Gui.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); - Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - if (type == 0x9F6A0) - { - int width = Mem.ReadS16(curObj + 0x44) << 1; - DrawBox(Xpos - width, Ypos - (width << 2), Xpos2 + width, Ypos2, Color.Lime); - } - TickerText($"{Mem.ReadS32(curObj + 0x54) / 65536.0:0.######}:{Mem.ReadS32(curObj + 0x58) / 65536.0:0.######}", Color.Lime); - } - else if (type == 0xA3B18) - { - Xpos = Mem.ReadS32(curObj + 0x24); - Ypos = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xpos + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ypos + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xpos >>= 16; Ypos >>= 16; - Xpos -= _camX; - Ypos -= _camY; - DrawEccoOct(Xpos, Ypos, Mem.ReadS16(curObj + 0x44), Color.Yellow); - DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); - } - else if (type == 0xA4018) - { - Xpos = Mem.ReadS32(curObj + 0x24); - Ypos = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xpos + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ypos + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xpos >>= 16; Ypos >>= 16; - Xpos -= _camX; - Ypos -= _camY; - DrawEccoOct(Xpos, Ypos, Mem.ReadS16(curObj + 0x44), Color.Gray); - DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); - } - else if (type == 0xA091E) // Blue Whale - { - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - Xpos = Xmid; Ypos = Ymid; - Ymid -= 64; Yvec -= 64; - DrawEccoOct_scaled(Xmid, Ymid, 2, 0, 0x50, Color.Red, 31); - DrawEccoOct_scaled(Xmid, Ymid, 2, 0, 0x40, Color.Red, 31); - DrawEccoOct_scaled(Xmid, Ymid, 2, 0, 0x30, Color.Red, 31); - DrawEccoOct_scaled(Xmid, Ymid, 2, 0, 0x20, Color.Red, 31); - DrawEccoOct_scaled(Xmid, Ymid, 2, 0, 0x10, Color.Red, 31); - if (Mem.ReadByte(curObj + 0x7F) == 0) - { - Xpos += (Mem.ReadS16(curObj + 0x6E) == 0) ? -278 : 162; - Ypos += 44 - Mem.ReadS16(curObj + 0x48); - DrawEccoOct(Xpos, Ypos, 32, Color.Blue); - } - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - - } - else if (type == 0xE66D8) //Vortex Larva - { - uint subObj = Mem.ReadU24(curObj + 5); - while (subObj != 0) - { - Xpos = Mem.ReadS16(subObj + 0x1C); - Ypos = Mem.ReadS16(subObj + 0x20); - Xpos2 = Mem.ReadS16(subObj + 0x24); - Ypos2 = Mem.ReadS16(subObj + 0x28); - Xpos -= _camX; Ypos -= _camY; - Xpos2 -= _camX; Ypos2 -= _camY; - DrawEccoOct(Xpos, Ypos, 30, Color.White, 32); - DrawEccoOct(Xpos, Ypos, 30, Color.Yellow, 0); - DrawEccoOct(Xpos2, Ypos2, 30, Color.White, 32); - DrawEccoOct(Xpos2, Ypos2, 30, Color.Yellow, 0); - subObj = Mem.ReadU24(subObj + 5); - } - Xpos = Mem.ReadS32(curObj + 0x24); - Ypos = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xpos + Mem.ReadS32(curObj + 0x54) + Mem.ReadS32(curObj + 0x5C)) >> 16) - _camX; - Yvec = ((Ypos + Mem.ReadS32(curObj + 0x58) + Mem.ReadS32(curObj + 0x60)) >> 16) - _camY; - Xpos2 = Mem.ReadS16(curObj + 0x72) - _camX; - Ypos2 = Mem.ReadS16(curObj + 0x76) - _camY; - Xpos >>= 16; Ypos >>= 16; - Xpos -= _camX; Ypos -= _camY; - DrawEccoOct(Xpos, Ypos, 0xB0, Color.Yellow); - DrawEccoOct(Xpos, Ypos, 0xB0, Color.Red, 0); - DrawEccoOct(Xpos, Ypos, 0x70, Color.Red); - DrawEccoOct(Xpos, Ypos, 0x38, Color.White); - DrawEccoOct(Xpos, Ypos, 0x38, Color.Red, 0); - DrawEccoOct(Xpos, Ypos, 48, Color.Blue, ((Mem.ReadByte(curObj + 0x7B) > 2) && (Mem.ReadByte(curObj + 0x14) != 0)) ? 63 : 0); - DrawEccoOct(Xpos2, Ypos2, 32, Color.Orange); - DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); - Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Orange); - TickerText($"{Mem.ReadByte(curObj + 0x14):X2}:{Mem.ReadByte(curObj + 0x7B):X2}:{Mem.ReadS16(curObj + 0x6E):D2}", Color.Red); - TickerText($"{ Mem.ReadByte(curObj + 0x7C):X2}:{Mem.ReadS16(curObj + 0x18):D3}", Color.Red); - TickerText($"{(Mem.ReadS32(curObj + 0x54) + Mem.ReadS32(curObj + 0x5C))/65536.0:0.######}:{(Mem.ReadS32(curObj + 0x58) + Mem.ReadS32(curObj + 0x60)) / 65536.0:0.######}", Color.Red); - - } - else if (type == 0x9CE3A) //Remnant Stars - { - flags = Mem.ReadU16(curObj + 0x10); - uint subObj = Mem.ReadU24(curObj + 0x5); - uint anim = Mem.ReadU16(curObj + 0x6C); - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - if ((anim <= 7) && (subObj == 0xFFA9D4)) - { - DrawEccoRhomb(Xmid, Ymid, 96, Color.Red); - PutText($"{((7 - anim) * 4) - ((Mem.ReadByte(0xFFA7C9) & 3) - 4)}", Xmid, Ymid + 4, 1, 1, -1, -1, Color.Blue, Color.Red); - - } - } - else if (type == 0xA997C) // Vortex Soldier - { - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = (Xmid + Mem.ReadS32(curObj + 0x54) >> 16) - _camX; - Yvec = (Ymid + Mem.ReadS32(curObj + 0x58) >> 16) - _camY; - Xvec += Mem.ReadS16(curObj + 0x64); - Yvec += Mem.ReadS16(curObj + 0x66); - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - if (Mem.ReadByte(curObj + 0x7A) == 0) - { - DrawRectRhombusIntersection(new Point(Xmid, Ymid + 6), new Point(Xmid, Ymid), 50, 44, 64, Color.Red); - } - DrawRectRhombusIntersection(new Point(Xmid, Ymid - 25), new Point(Xmid, Ymid), 38, 47, 64, Color.Red); - DrawBoxMWH(Xmid, Ymid, Mem.ReadS16(curObj + 0x44), Mem.ReadS16(curObj + 0x48), Color.Blue, 16); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if ((type == 0xA6C4A) || (type == 0xC43D4)) // Barrier Glyphs - { - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - var subType = Mem.ReadByte(curObj + 0x13); - if ((Mem.ReadU8(curObj + 0x7A) == 0) && (Mem.ReadU8(0xFFA7B5) != 0) - && ((type != 0xA6C4A) || (subType == 0x14) || (subType == 0x97))) - { - DrawEccoOct(Xmid, Ymid, 70, Color.Red); - } - DrawBoxMWH(Xmid, Ymid, Mem.ReadS16(curObj + 0x44), Mem.ReadS16(curObj + 0x48), Color.Blue); - DrawBoxMWH(Xmid, Ymid, Mem.ReadS16(curObj + 0x44), Mem.ReadS16(curObj + 0x48), Color.PowderBlue, 0); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if ((type == 0xB4F46) || (type == 0xB4E1C) || (type == 0xB4C18) || (type == 0xB4ACC) || (type == 0xB4B72)) // Guiding Orca/Dolphin - { - Xpos = Mem.ReadS16(curObj + 0x2C); - Xpos2 = Mem.ReadS16(curObj + 0x34); - Ypos = Mem.ReadS16(curObj + 0x30); - Ypos2 = Mem.ReadS16(curObj + 0x38); - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - int Xdst = Mem.ReadS16(curObj + 0x64); - Xdst <<= 7; - Xdst = Xdst + 0x40 - _camX; - int Ydst = Mem.ReadS16(curObj + 0x66); - Ydst <<= 7; - Ydst = Ydst + 0x40 - _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - Gui.DrawLine(Xmid, Ymid, Xdst, Ydst, Color.Orange); - DrawBoxMWH(Xdst, Ydst, 64, 64, Color.Orange); - TickerText($"{Mem.ReadS16(curObj + 0x24)}:{Mem.ReadS16(curObj + 0x28)}:{Mem.ReadByte(curObj + 0x7D)}:{Mem.ReadByte(curObj + 0x7A)}", Color.Lime); - TickerText($"{Mem.ReadS32(curObj + 0x54) / 65536.0:0.######}:{Mem.ReadS32(curObj + 0x58) / 65536.0:0.######}", Color.Lime); - TickerText($"{Mem.ReadS32(curObj + 0x72) / 65536.0:0.######}:{Mem.ReadS32(curObj + 0x76) / 65536.0:0.######}", Color.Lime); - } - else if (type == 0xB5938) // Lost Orca - { - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xpos = Mem.ReadS16(curObj + 0x1C) - _camX; - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - //DrawBoxMWH(Xmid, Ymid, 64, 32, Color.Lime); - if (Mem.ReadU16(curObj + 0x6E) == 0) - { - if (Mem.ReadByte(curObj + 0x7D) == 0) - { - DrawBox(Xmid + 8, Ymid - 32, Xmid + 64, Ymid + 32, Color.Red); - } - else - { - DrawBox(Xmid - 64, Ymid - 32, Xmid - 8, Ymid + 32, Color.Red); - } - } - Gui.DrawLine(Xpos - 80, Ymid, Xpos + 80, Ymid, Color.Green); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if ((type == 0xB552A) || (type == 0xB5C42) || (type == 0xB5AFE)) // Following Orca, Returning Orca, & Idling Orca - { - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if (type == 0xB624A) // Orca Mother - { - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - int height = Mem.ReadS16(curObj + 0x48) + 32; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - DrawBoxMWH(Xmid, Ymid, 80, 32, Color.Red, 31); - DrawBoxMWH(Xmid, Ymid, Mem.ReadS16(curObj + 0x44), Mem.ReadS16(curObj + 0x48), Color.Blue); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - if (Mem.ReadS32(0xFFAB7E) != 0) - { - DrawEccoOct(Xmid, Ymid, 0x50, Color.Red, 31); - } - } - else if (type == 0xC047E) - { - Xmid = Mem.ReadS16(curObj + 0x24) - _camX; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - var width = 2; - var height = 2; - if (Mem.ReadByte(curObj + 0x15) == 0) - { - width = Mem.ReadS16(curObj + 0x44); - height = Mem.ReadS16(curObj + 0x48); - } - DrawBoxMWH(Xmid, Ymid, width, height, Color.Lime); - } - else if (type == 0xC056E) - { - Xmid = Mem.ReadS16(curObj + 0x24) - _camX; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - var width = Mem.ReadS16(curObj + 0x44); - var height = Mem.ReadS16(curObj + 0x48); - DrawBoxMWH(Xmid, Ymid, width, height, Color.Lime); - } - else if (type == 0xC4208) // Broken Glyph Base - { - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - var width = Mem.ReadS16(curObj + 0x44); - var height = Mem.ReadS16(curObj + 0x48); - DrawBoxMWH(Xmid, Ymid, width, height, Color.PowderBlue); - if (Mem.ReadByte(curObj + 0x15) == 0) - { - DrawRectRhombusIntersection(new Point(Xmid, Ymid), new Point(Xmid, Ymid), 80, 80, 120, Color.Orange); - } - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if (type == 0xAC242) // Broken Glyph Top repairing - { - uint subObj = Mem.ReadU24(curObj + 0x5); - Xmid = Mem.ReadS16(curObj + 0x24) - _camX; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - Xpos = Mem.ReadS16(subObj + 0x24) - _camX; - Ypos = Mem.ReadS16(subObj + 0x28) - _camY; - var width = Mem.ReadS16(curObj + 0x44); - var height = Mem.ReadS16(curObj + 0x48); - DrawBoxMWH(Xmid, Ymid, width, height, Color.Gray); - Point[] rhombPoints = - { - new Point(Xpos - 3, Ypos), - new Point(Xpos, Ypos - 3), - new Point(Xpos + 3, Ypos), - new Point(Xpos, Ypos + 3) - }; - Gui.DrawPolygon(rhombPoints, Color.Orange, Color.FromArgb(63, Color.Orange)); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xpos, Ypos, Color.Orange); - } - else if (type == 0xBE9C8) // Broken Glyph Top free - { - Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; - Ypos = Mem.ReadS16(curObj + 0x30) - _camY; - Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime, 0); - Gui.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); - Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - TickerText($"{Mem.ReadS32(curObj + 0x54) / 65536.0:0.######}:{Mem.ReadS32(curObj + 0x58) / 65536.0:0.######}", Color.Lime); Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if ((type == 0xD9C0E) || (type == 0xDA9EA)) - { - Xmid = Mem.ReadS16(curObj + 0x24) - _camX; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - DrawBoxMWH(Xmid, Ymid, 0xA0, 0x70, Color.Red); - } - else if ((type == 0xBF204) || (type == 0xDA2C0)) - { - Xpos = Mem.ReadS16(curObj + 0x2C); - Xpos2 = Mem.ReadS16(curObj + 0x34); - Ypos = Mem.ReadS16(curObj + 0x30); - Ypos2 = Mem.ReadS16(curObj + 0x38); - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54) + Mem.ReadS32(curObj + 0x5C)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58) + Mem.ReadS32(curObj + 0x60)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if (type == 0xAF9CC) // Mirror Dolphin - { - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xpos = Mem.ReadS16(curObj + 0x1C) - _camX + (Mem.ReadByte(curObj + 0x15) == 0 ? 27 : -27); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54) + Mem.ReadS32(curObj + 0x5C)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58) + Mem.ReadS32(curObj + 0x60)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - var width = Mem.ReadS16(curObj + 0x44); - var height = Mem.ReadS16(curObj + 0x48); - DrawBoxMWH(Xmid, Ymid, width, height, Color.Blue, 31); - if (Mem.ReadByte(curObj + 0x13) != 0xAC) - { - DrawBoxMWH(Xmid, Ymid, 96, 96, Color.Orange); - } - Gui.DrawLine(Xpos, 0, Xpos, 448, Color.Red); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if (type == 0xAF43E) // Vortex Lightning Trap - { - Xmid = Mem.ReadS16(curObj + 0x24) - _camX; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - if (Mem.ReadByte(curObj + 0x15) != 0) - { - if (Mem.ReadS16(0xFFAA12) != 0) - { - Ymid -= 8; - } - DrawBoxMWH(Xmid, Ymid, 92, 16, Color.Red); - PutText(Mem.ReadByte(curObj + 0x15).ToString(), Xmid, Ymid, 1, 1, -1, -1, Color.Blue, Color.Red); - } - else - { - DrawBoxMWH(Xmid, Ymid, 92, 16, Color.Gray); - PutText(Mem.ReadByte(curObj + 0x7F).ToString(), Xmid, Ymid, 1, 1, -1, -1, Color.Blue, Color.Red); - } - } - else if (type == 0xA6E24) // Barrier Glyph Forcefield - { - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = Mem.ReadS32(0xFFAA1A) - Xmid; - Yvec = Mem.ReadS32(0xFFAA1E) - Ymid; - var div = Math.Abs(Xvec) + Math.Abs(Yvec); - Xvec /= div; Yvec /= div; - Xvec += Xmid; Yvec += Ymid; - Xmid >>= 16; Ymid >>= 16; - Xvec >>= 16; Yvec >>= 16; - Xmid -= _camX; Ymid -= _camY; - Xvec -= _camX; Yvec -= _camY; - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if ((type == 0xC4A44) || (type == 0xAA32C)) // Pulsar power-up and Vortex bullet-spawner - { - Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; - Ypos = Mem.ReadS16(curObj + 0x30) - _camY; - Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue, 16); - } - else if (type == 0xC2F00) // Sky bubbles - { - Xpos = Mem.ReadS16(curObj + 0x2C); - Xpos2 = Mem.ReadS16(curObj + 0x34); - Ypos = Mem.ReadS16(curObj + 0x30); - Ypos2 = Mem.ReadS16(curObj + 0x38); - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - var mode = Mem.ReadByte(curObj + 0x15); - switch (mode) - { - case 0: - DrawRectRhombusIntersection(new Point(Xmid, Ymid), new Point(Xmid, Ymid), 70, 70, 105, Color.Gray); - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); - break; - case 1: - DrawRectRhombusIntersection(new Point(Xmid, Ymid), new Point(Xmid, Ymid), 70, 70, 105, Color.Red); - break; - case 2: - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red); - break; - default: - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Gray); - break; - } - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if (type == 0x9FA7E) //Air refiller/drainer - { - Xpos = Mem.ReadS16(curObj + 0x2C); - Xpos2 = Mem.ReadS16(curObj + 0x34); - Ypos = Mem.ReadS16(curObj + 0x30); - Ypos2 = Mem.ReadS16(curObj + 0x38); - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Lime)); - } - else if (type == 0xBFC14) //Pushable fish - { - Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; - Ypos = Mem.ReadS16(curObj + 0x30) - _camY; - Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime, 0); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - TickerText($"{Mem.ReadS32(curObj + 0x54) / 65536.0:0.######}:{Mem.ReadS32(curObj + 0x58) / 65536.0:0.######}", Color.Orange); - - } - else if ((type == 0xBE97C) //Slowing Kelp //Default Bounds nose-responsive - || (type == 0xACDAE)) //Metasphere - { - Xpos = Mem.ReadS16(curObj + 0x2C); - Xpos2 = Mem.ReadS16(curObj + 0x34); - Ypos = Mem.ReadS16(curObj + 0x30); - Ypos2 = Mem.ReadS16(curObj + 0x38); - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if (type == 0xACB42) // Turtle - { - Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; - Ypos = Mem.ReadS16(curObj + 0x30) - _camY; - Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - var mode = Mem.ReadByte(curObj + 0x15); - switch (mode) - { - case 0: - case 1: - case 2: - case 3: - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x4C)) >> 16) - _camX; - break; - case 4: - case 5: - case 6: - case 7: - Xvec = ((Xmid - Mem.ReadS32(curObj + 0x4C)) >> 16) - _camX; - break; - default: - Xvec = (Xmid >> 16) - _camX; - break; - } - Yvec = Ymid; - Xmid >>= 16; Xmid -= _camX; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); - Gui.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); - int width = Mem.ReadS16(curObj + 0x44) << 1; - DrawBox(Xpos - width, Ypos - (width << 2), Xpos2 + width, Ypos2, Color.Lime); - TickerText($"{Mem.ReadS32(curObj + 0x4C) / 65536.0:0.######}:{Mem.ReadS32(curObj + 0x50) / 65536.0:0.######}", Color.Lime); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if (type == 0xACA7E) // Retracting Turtle - { - Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; - Ypos = Mem.ReadS16(curObj + 0x30) - _camY; - Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + (Mem.ReadS32(curObj + 0x4C) >> 1)) >> 16) - _camX; - Yvec = ((Ymid + (Mem.ReadS32(curObj + 0x50) >> 1)) >> 16) - _camY; - Xmid >>= 16; Xmid -= _camX; - Ymid >>= 16; Ymid -= _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); - Gui.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); - int width = Mem.ReadS16(curObj + 0x44) << 1; - DrawBox(Xpos - width, Ypos - (width << 2), Xpos2 + width, Ypos2, Color.Lime); - TickerText($"{(Mem.ReadS32(curObj + 0x4C) >> 1) / 65536.0:0.######}:{(Mem.ReadS32(curObj + 0x50) >> 1) / 65536.0:0.######}", Color.Lime); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if ((type == 0xB5134) || (type == 0xA7E0C) //Default Bounds sonar-responsive - || (type == 0xAF868) || (type == 0xAF960) || (type == 0xD8E5C) || (type == 0xAA5C6)) - { - Xpos = Mem.ReadS16(curObj + 0x2C); - Xpos2 = Mem.ReadS16(curObj + 0x34); - Ypos = Mem.ReadS16(curObj + 0x30); - Ypos2 = Mem.ReadS16(curObj + 0x38); - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if ((type == 0xACCB4) || (type == 0xACD7E) //Default Baunds non-responsive - || (type == 0xD8D96) || (type == 0xA955E) || (type == 0xA92E4) || (type == 0xC05DC) - || (type == 0xC2684)) - { - Xpos = Mem.ReadS16(curObj + 0x2C); - Xpos2 = Mem.ReadS16(curObj + 0x34); - Ypos = Mem.ReadS16(curObj + 0x30); - Ypos2 = Mem.ReadS16(curObj + 0x38); - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Gray); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if (type == 0x9DE86) // Star Wreath - { - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - Xpos = Mem.ReadS32(curObj + 0x1C); - Ypos = Mem.ReadS32(curObj + 0x20); - Xpos2 = ((Xpos + Mem.ReadS32(curObj + 0x5C)) >> 16) - _camX; - Ypos2 = ((Ypos + Mem.ReadS32(curObj + 0x60)) >> 16) - _camY; - Xpos >>= 16; Ypos >>= 16; - Xpos -= _camX; Ypos -= _camY; - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Orange, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - DrawBoxMWH(Xpos, Ypos, 1, 1, (Mem.ReadByte(curObj + 0x7F) == 0) ? Color.Blue : Color.Black, 0); - Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Orange); - if (Mem.ReadByte(curObj + 0x12) % 7 == 0) - { - TickerText($"{Mem.ReadS32(curObj + 0x5C) / 65536.0:0.######}:{Mem.ReadS32(curObj + 0x60) / 65536.0:0.######}:{Mem.ReadByte(curObj + 0x7F)}", Color.Lime); - } - } - else if ((type == 0x9D774) || (type == 0x9DA26)) // Fish - { - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - DrawBoxMWH(Xmid, Ymid, 0x14, 0x14, Color.Lime); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if (type == 0xAD87C) // Enemy dolphins in metamorph levels - { - Xpos = Mem.ReadS16(curObj + 0x2C); - Xpos2 = Mem.ReadS16(curObj + 0x34); - Ypos = Mem.ReadS16(curObj + 0x30); - Ypos2 = Mem.ReadS16(curObj + 0x38); - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - DrawBoxMWH(Mem.ReadS16(curObj + 0x1C) - _camX, Mem.ReadS16(curObj + 0x20) - _camY, 1024, 1024, Color.Orange, 0); - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if (type == 0xC6128) // Drone attacking dolphin - { - Xmid = Mem.ReadS16(curObj + 0x4C) - _camX; - Ymid = Mem.ReadS16(curObj + 0x50) - _camY; - DrawEccoOct(Xmid, Ymid, 360, Color.Red, 0); - } - else if (type == 0xC605A) // Drone attacking dolphin sonar - { - Xmid = Mem.ReadS16(curObj + 0x24) - _camY; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - DrawBox(Xmid, Ymid - 1, Xmid + 32, Ymid + 1, Color.Orange); - } - else if (type == 0xB1BE0) // Globe - { - int mode = Mem.ReadS8(curObj + 0x15); - if (mode == 1) - { - Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; - Ypos = Mem.ReadS16(curObj + 0x30) - _camY; - Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime, 0); - Gui.DrawLine(Xpos, Ypos2, Xpos2, Ypos, Color.Lime); - Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if (type == 0xB1A10) // Approaching globes - { - Xmid = Mem.ReadS16(0xFFAA1A) - _camX; - Ymid = Mem.ReadS16(0xFFAA1E) - _camY; - DrawEccoOct(Xmid - 56, Ymid, 8, Color.Orange); - DrawEccoOct(Xmid + 56, Ymid, 8, Color.Orange); - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xpos = Mem.ReadS32(curObj + 0x4C); - Ypos = Mem.ReadS32(curObj + 0x50); - Xvec = ((Xmid - Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid - Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xpos2 = ((Xpos + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Ypos2 = ((Ypos + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - Xpos >>= 16; Ypos >>= 16; - Xpos -= _camX; Ypos -= _camY; - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xpos, Ypos, Xpos2, Ypos2, Color.Orange); - } - else if (type == 0xB1920) // Orbiting globes - { - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xpos = Mem.ReadS16(curObj + 0x4C) - _camX; - Ypos = Mem.ReadS16(curObj + 0x50) - _camY; - Xvec = ((Xmid - Mem.ReadS32(curObj + 0x5C)) >> 16) - _camX; - Yvec = ((Ymid - Mem.ReadS32(curObj + 0x60)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - DrawBoxMWH(Xpos, Ypos, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xpos, Ypos, Xvec, Yvec, Color.Orange); - } - else if (type == 0xC28A0) // Control point in Four Islands/Dolphin that gives Rock-breaking song - { - Xpos = Mem.ReadS16(curObj + 0x2C); - Xpos2 = Mem.ReadS16(curObj + 0x34); - Ypos = Mem.ReadS16(curObj + 0x30); - Ypos2 = Mem.ReadS16(curObj + 0x38); - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Mem.ReadByte(curObj + 0x15) == 0 ? Color.Orange : Color.Blue); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - // Crystal Springs merging glyphs - else if (type == 0xC651E) // Bound glyph - { - Xpos = Mem.ReadS16(curObj + 0x1C) - _camX; - Ypos = Mem.ReadS16(curObj + 0x20) - _camY; - DrawEccoRhomb(Xpos, Ypos, 4 << 4, Color.Orange); - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; - Ypos = Mem.ReadS16(curObj + 0x30) - _camY; - Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if (type == 0xC67E4) // Freed glyph - { - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; - Ypos = Mem.ReadS16(curObj + 0x30) - _camY; - Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Blue); - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue, 0); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if (type == 0xC6970) // Pulled glyph - { - uint subObj = Mem.ReadU24(curObj + 5); - Xvec = Mem.ReadS32(subObj + 0x54); - Yvec = Mem.ReadS32(subObj + 0x58); - for (i = 1; i < Mem.ReadByte(curObj + 0x7F); i++) - { - Xvec ^= Yvec; - Yvec ^= Xvec; - Xvec ^= Yvec; - Xvec = 0 - Xvec; - } - Xpos = (Xvec + Mem.ReadS32(subObj + 0x1C) >> 16) - _camX; - Ypos = (Yvec + Mem.ReadS32(subObj + 0x20) >> 16) - _camY; - DrawEccoRhomb(Xpos, Ypos, 3, Color.Orange); - Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; - Ypos = Mem.ReadS16(curObj + 0x30) - _camY; - Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue, 0); - Xmid = Mem.ReadS16(curObj + 0x24) - _camX; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Orange, 0); - } - else if (type == 0xC6BA8) // Delivery Point - { - Xvec = Mem.ReadS32(curObj + 0x54); - Yvec = Mem.ReadS32(curObj + 0x58); - Xmid = Mem.ReadS16(curObj + 0x24) - _camX; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - for (i = 0; i < 4; i++) - { - Xpos = (Xvec + Mem.ReadS32(curObj + 0x1C) >> 16) - _camX; - Ypos = (Yvec + Mem.ReadS32(curObj + 0x20) >> 16) - _camY; - Gui.DrawLine(Xmid, Ymid, Xpos, Ypos, Color.Orange); - Xvec ^= Yvec; - Yvec ^= Xvec; - Xvec ^= Yvec; - Xvec = 0 - Xvec; - } - } - else if (type == 0xC6A6C) // Delivered glyph - { - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid - Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid - Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if (type == 0xC6F82) // Full delivery point - { - Xmid = Mem.ReadS16(curObj + 0x24) - _camX; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - DrawEccoOct(Xmid, Ymid, 3, Color.Orange); - } - else if (type == 0xC6A9E) // Merging glyph - { - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid - Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid - Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Orange, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if (type == 0xC7052) { - Xpos = Mem.ReadS16(curObj + 0x2C); - Xpos2 = Mem.ReadS16(curObj + 0x34); - Ypos = Mem.ReadS16(curObj + 0x30); - Ypos2 = Mem.ReadS16(curObj + 0x38); - Xmid = Mem.ReadS16(curObj + 0x24); - Ymid = Mem.ReadS16(curObj + 0x28); - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - uint dropSpeed = Mem.ReadU8(curObj + 0x16); - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xmid, Ymid + (int)(dropSpeed), Color.Orange); - } - else if ((type == 0xD8B7C) || (type == 0xD89EA) || (type == 0x9E3AA) || (type == 0x9E5A8) // GFX particles don't need displayed. - || (type == 0x9B5D8) || (type == 0x9E2A6) || (type == 0xACD1E) || (type == 0xD9678) - || (type == 0xD9A3C) || (type == 0xD9240) || (type == 0x9E1DE) || (type == 0xDF86A) - || (type == 0xB159A) || (type == 0xDA898) || (type == 0xDA720) || (type == 0xD9FDC) - || (type == 0xC0D4E) || (type == 0xC0D38) || (type == 0xDCDAC) || (type == 0xC0B42) - || (type == 0xE3CD2) || (type == 0xE385E) || (type == 0xC20E8) || (type == 0xC22A6) - || (type == 0xC31B4) || (type == 0xA9EF0) || (type == 0xA9D90) || (type == 0xC6304) - || (type == 0xC26E4) || (type == 0xAEE68) || (type == 0xD9B2A) || (type == 0xD95AE) - || (type == 0)) - { - // This space intentionally left blank - } - else if ((type == 0xC152C) || (type == 0xA75E8) //Objects with default bounds confirmed - || (type == 0x9D076) || (type == 0xA7092) || (type == 0xC02EA) || (type == 0xA5378) - || (type == 0xACA7E) || (type == 0x9D28C) || (type == 0xA2D42) || (type == 0xA975E) - || (type == 0xBE9C8) || (type == 0xBFDA4) || (type == 0xAC736) || (type == 0xB716E) - || (type == 0xB1BE0) || (type == 0xB1A10) || (type == 0x9E546) || (type == 0xC2CB8) - || (type == 0xA0F04) || (type == 0xA6ACA) || (type == 0xA35A6) || (type == 0xAA12E) - || (type == 0xC651E) || (type == 0x9CC06) || (type == 0xA9202) || (type == 0xA6FDE) - || (type == 0xA6F62) || (type == 0xA745C) || (type == 0xC3EF0) || (type == 0xC3F90) - || (type == 0xC3FFC) || (type == 0xC3DB8) || (type == 0xAC766) || (type == 0xC5F66) - || (type == 0xA306E) || (type == 0xB0C7E) || (type == 0xB17F2) || (type == 0xB0CDC) - || (type == 0xC2106) || (type == 0xC208C) || (type == 0xC1EBA) || (type == 0xC251C) - || (type == 0xC32C8) || (type == 0xAB5E6) || (type == 0xAC796) || (type == 0xAC9F2) - || (type == 0xA538A)) - { - Xpos = Mem.ReadS16(curObj + 0x2C); - Xpos2 = Mem.ReadS16(curObj + 0x34); - Ypos = Mem.ReadS16(curObj + 0x30); - Ypos2 = Mem.ReadS16(curObj + 0x38); - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(255, 0, 127)); - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue, 0); - if (type != 0xA975E) - { - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - if (HP > 2) - { - PutText($"{HP - 1}", Xmid, Ymid, 1, 1, -1, -9, Color.Blue, Color.Red); - } - } - else // Default bounds - { - Xpos = Mem.ReadS16(curObj + 0x2C); - Xpos2 = Mem.ReadS16(curObj + 0x34); - Ypos = Mem.ReadS16(curObj + 0x30); - Ypos2 = Mem.ReadS16(curObj + 0x38); - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue, 0); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - PutText(type.ToString("X5"), Xmid, Ymid + 8, 1, 9, -1, -1, Color.Blue, Color.Red); - } - break; - } - case Modes.Ecco1: - type = Mem.ReadU32(curObj + 0x6); - Xpos = Mem.ReadS16(curObj + 0x17); - Xpos2 = Mem.ReadS16(curObj + 0x1F); - Ypos = Mem.ReadS16(curObj + 0x1B); - Ypos2 = Mem.ReadS16(curObj + 0x23); - Xmid = Mem.ReadS16(curObj + 0x0F); - Ymid = Mem.ReadS16(curObj + 0x13); - Xpos >>= 2; - Xpos2 >>= 2; - Ypos >>= 2; - Ypos2 >>= 2; - Xmid >>= 2; - Ymid >>= 2; - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Lime); - PutText(type.ToString("X8"), Xmid, Ymid, 1, 1, -1, -1, Color.Blue, Color.Red); - break; - } - curObj = Mem.ReadU24(curObj+1); - } - //events - curObj = Mem.ReadU24(0xFFCFB5); - while (curObj != 0) - { - type = Mem.ReadU32(curObj + 0xC); - if ((type == 0) // Null object - || (type == 0x9C1FA) || (type == 0x9C6D0) // Skytubes BG Image manager - || (type == 0x9ED72) || (type == 0xA57F2) // And Miscellaneous GFX particles - || (type == 0xC3A42) || (type == 0xB33D8) // And Cutscene controller - || (type == 0xB308A) || (type == 0xA1676) || (type == 0xB6822) || (type == 0xD12E2)) { } - else if ((type == 0xA44EE) || (type == 0xD120C)) - { - Xmid = Mem.ReadS16(curObj + 0x1C) - _camX; - Ymid = Mem.ReadS16(curObj + 0x20) - _camY; - DrawEccoOct(Xmid, Ymid, 0x20, Color.Red); - } - else if (type == 0x9F0D0) // Water Current - { - int Xvec = Mem.ReadS32(curObj + 0x54); - int Yvec = Mem.ReadS32(curObj + 0x58); - if ((Xvec != 0) || (Yvec != 0)) - { - Xpos = Mem.ReadS16(curObj + 0x2C); - Xpos2 = Mem.ReadS16(curObj + 0x34); - Ypos = Mem.ReadS16(curObj + 0x30); - Ypos2 = Mem.ReadS16(curObj + 0x38); - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - Xvec += Xmid; Yvec += Ymid; - Xmid >>= 16; Ymid >>= 16; - Xvec >>= 16; Yvec >>= 16; - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - Xvec -= _camX; Yvec -= _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63, Color.Red)); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - } - else if (type == 0xDEF94) - { - Xmid = Mem.ReadS16(curObj + 0x24) - _camX; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - DrawEccoOct(Xmid, Ymid, 0x18, Color.Cyan); - } - else if (type == 0xA6584) // Eagle - { - Xmid = Mem.ReadS16(curObj + 0x24) - _camX; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - DrawEccoOct(Xmid, Ymid, 0x10, Color.Red); - } - else if ((type == 0x9BA8A) // Autoscroller controller - || (type == 0xE27D4) || (type == 0xE270E) || (type == 0xE26C2)) - { - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - var Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - var Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Orange, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if (type == 0x9B948) // Autoscroller waypoint - { - Xmid = Mem.ReadS32(curObj + 0x24); - Ymid = Mem.ReadS32(curObj + 0x28); - var Xvec = ((Xmid + Mem.ReadS32(curObj + 0x54)) >> 16) - _camX; - var Yvec = ((Ymid + Mem.ReadS32(curObj + 0x58)) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - DrawBoxMWH(Xmid, Ymid, 8, 8, Color.Orange); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - else if (type == 0xA5448) // Bomb spawner - { - Xmid = Mem.ReadS16(curObj + 0x24) - _camX; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - PutText($"{Mem.ReadU16(curObj + 0x6E)}", Xmid, Ymid, 1, 1, -1, -1, Color.White, Color.Blue); - } - else if ((type == 0xA529C) || (type == 0xA5236) || (type == 0xA51E6)) // Explosion - { - uint subObj = Mem.ReadU24(curObj + 5); - if (subObj != 0) - { - Xpos = Mem.ReadS16(subObj + 0x1C) - _camX; - Ypos = Mem.ReadS16(subObj + 0x28) - _camY; - int Width = Mem.ReadS16(subObj + 0x24) - Xpos - _camX; - DrawBoxMWH(Xpos, Ypos, Width, 16, Color.Red); - } - subObj = Mem.ReadU24(curObj + 9); - if (subObj != 0) - { - Xpos = Mem.ReadS16(subObj + 0x1C) - _camX; - Ypos = Mem.ReadS16(subObj + 0x28) - _camY; - int Width = Mem.ReadS16(subObj + 0x24) - Xpos - _camX; - DrawBoxMWH(Xpos, Ypos, Width, 16, Color.Red); - } - } - else if (type == 0x9B5D8) - { - var subtype = Mem.ReadByte(curObj + 0x13); - int width = 0; - int height = 0; - switch (subtype) - { - case 48: - case 49: - case 126: - case 145: - case 146: - case 213: - PutText($"{type:X5}:{subtype}", Xmid, Ymid - 4, 1, 1, -1, -9, Color.White, Color.Blue); - PutText(curObj.ToString("X6"), Xmid, Ymid + 4, 1, 9, -1, -1, Color.White, Color.Blue); - break; - case 59: - case 87: - case 181: - Xmid = Mem.ReadS16(curObj + 0x24) - _camX; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - width = Mem.ReadS16(curObj + 0x44); - height = Mem.ReadS16(curObj + 0x48); - DrawEccoOct(Xmid, Ymid, (width + height) >> 1, Color.Lime); - break; - case 71: - case 72: - case 158: - case 159: - case 165: - Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; - Ypos = Mem.ReadS16(curObj + 0x30) - _camY; - Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red); - break; - case 82: - case 83: - case 84: - case 85: - case 86: - Xmid = Mem.ReadS16(curObj + 0x24) - _camX; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - width = Mem.ReadS16(curObj + 0x44); - height = Mem.ReadS16(curObj + 0x48); - DrawBoxMWH(Xmid, Ymid, width, height, Color.Red); - break; - case 210: - Xmid = Mem.ReadS16(curObj + 0x24) - _camX; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - width = Mem.ReadS16(curObj + 0x44); - height = Mem.ReadS16(curObj + 0x48); - DrawBoxMWH(Xmid, Ymid, width, height, Color.Blue); - break; - case 107: - Xmid = (Mem.ReadS16(curObj + 0x18) << 7) - _camX + 0x40; - Ymid = (Mem.ReadS16(curObj + 0x1A) << 7) - _camY + 0x40; - Xpos = (Mem.ReadS16(curObj + 0x64) << 7) - _camX + 0x40; - Ypos = (Mem.ReadS16(curObj + 0x66) << 7) - _camY + 0x40; - DrawBoxMWH(Xmid, Ymid, 64, 64, Color.Orange, 0); - DrawBoxMWH(Xpos, Ypos, 64, 64, Color.Orange, 0); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xpos, Ypos, Color.Orange); - break; - case 110: //Gravity conrol points - case 179: - Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; - Ypos = Mem.ReadS16(curObj + 0x30) - _camY; - Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.FromArgb(63,Mem.ReadByte(curObj + 0x15) == 0 ? Color.Gray : Color.Red)); - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red, 0); - int dir = Mem.ReadS8(curObj + 0x71) & 7; - int[] xtable = { 7, 4, -3, -10, -14, -11, -3, 4}; - int[] ytable = { 11, 4, 7, 4, -3, -11, -14, -11}; - Xmid = Mem.ReadS16(curObj + 0x24) - _camX; - Ymid = Mem.ReadS16(curObj + 0x28) - _camY; - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawImage(".\\dll\\gravitometer_bg.png", Xmid - 15, Ymid - 15); - Gui.DrawImage(".\\dll\\gravitometer_fg.png", Xmid + xtable[dir], Ymid + ytable[dir]); - break; - case 176: - Xmid = (Mem.ReadS16(curObj + 0x18) << 7) - _camX + 0x40; - Ymid = (Mem.ReadS16(curObj + 0x1A) << 7) - _camY + 0x40; - Xpos = (Mem.ReadS16(curObj + 0x64) << 7) - _camX + 0x40; - Ypos = (Mem.ReadS16(curObj + 0x66) << 7) - _camY + 0x40; - DrawEccoOct(Xmid, Ymid, 32, Color.Orange, 0); - DrawEccoOct(Xpos, Ypos, 32, Color.Orange, 0); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue, 0); - Gui.DrawLine(Xmid, Ymid, Xpos, Ypos, Color.Orange); - break; - case 194: // Kill plane - Xpos = Mem.ReadS16(curObj + 0x2C) - _camX; - Xpos2 = Mem.ReadS16(curObj + 0x34) - _camX; - Ypos = Mem.ReadS16(curObj + 0x30) - _camY; - Ypos2 = Mem.ReadS16(curObj + 0x38) - _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Black, 127); - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Red, 0); - break; - default: - Xpos = Mem.ReadS16(curObj + 0x2C); - Xpos2 = Mem.ReadS16(curObj + 0x34); - Ypos = Mem.ReadS16(curObj + 0x30); - Ypos2 = Mem.ReadS16(curObj + 0x38); - Xmid = Mem.ReadS16(curObj + 0x24); - Ymid = Mem.ReadS16(curObj + 0x28); - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Cyan); - PutText($"{type:X5}:{subtype}", Xmid, Ymid - 4, 1, 1, -1, -9, Color.White, Color.Blue); - PutText(curObj.ToString("X6"), Xmid, Ymid + 4, 1, 9, -1, -1, Color.White, Color.Blue); - break; - } - } - else - { - Xpos = Mem.ReadS16(curObj + 0x2C); - Xpos2= Mem.ReadS16(curObj + 0x34); - Ypos = Mem.ReadS16(curObj + 0x30); - Ypos2= Mem.ReadS16(curObj + 0x38); - Xmid = Mem.ReadS16(curObj + 0x24); - Ymid = Mem.ReadS16(curObj + 0x28); - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.Cyan); - PutText($"{type:X5}:{Mem.ReadByte(curObj + 0x13)}", Xmid, Ymid - 4, 1, 1, -1, -9, Color.White, Color.Blue); - PutText(curObj.ToString("X6"), Xmid, Ymid + 4, 1, 9, -1, -1, Color.White, Color.Blue); - } - curObj = Mem.ReadU24(curObj+1); - } - //Ecco head - Xpos = Mem.ReadS16(0xFFA8F8); - Xpos2 = Mem.ReadS16(0xFFA900); - Ypos = Mem.ReadS16(0xFFA8FC); - Ypos2 = Mem.ReadS16(0xFFA904); - Xmid = Mem.ReadS16(0xFFA8F0); - Ymid = Mem.ReadS16(0xFFA8F4); - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.PowderBlue, 0); - //Ecco tail - Xpos = Mem.ReadS16(0xFFA978); - Xpos2 = Mem.ReadS16(0xFFA980); - Ypos = Mem.ReadS16(0xFFA97C); - Ypos2 = Mem.ReadS16(0xFFA984); - Xmid = Mem.ReadS16(0xFFA970); - Ymid = Mem.ReadS16(0xFFA974); - Xpos -= _camX; Xpos2 -= _camX; - Ypos -= _camY; Ypos2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - DrawBox(Xpos, Ypos, Xpos2, Ypos2, Color.PowderBlue); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.PowderBlue, 0); - //Ecco body - Xpos = Mem.ReadS32(0xFFAA22); - Ypos = Mem.ReadS32(0xFFAA26); - Xpos2 = Mem.ReadS32(0xFFAA2A); - Ypos2 = Mem.ReadS32(0xFFAA2E); - Xmid = Mem.ReadS16(0xFFAA1A); - Ymid = Mem.ReadS16(0xFFAA1E); - int Xvel = Mem.ReadS32(0xFFAA36); - if (Mem.ReadU32(0xFFA9D6) > 7) Xvel += Mem.ReadS32(0xFFA9D6); - if (Mem.ReadU32(0xFFAA3E) > 7) Xvel += Mem.ReadS32(0xFFAA3E); - int Yvel = Mem.ReadS32(0xFFAA3A); - if (Mem.ReadU32(0xFFA9DA) > 7) Yvel += Mem.ReadS32(0xFFA9DA); - if (Mem.ReadU32(0xFFAA42) > 7) Yvel += Mem.ReadS32(0xFFAA42); - int XV = ((Xpos + Xvel) >> 16) - _camX; - int YV = ((Ypos + Yvel) >> 16) - _camY; - int XV2 = ((Xpos2 + Xvel) >> 16) - _camX; - int YV2 = ((Ypos2 + Yvel) >> 16) - _camY; - X = Xpos >> 16; - X2 = Xpos2 >> 16; - Y = Ypos >> 16; - Y2 = Ypos2 >> 16; - X -= _camX; X2 -= _camX; - Y -= _camY; Y2 -= _camY; - Xmid -= _camX; Ymid -= _camY; - int X3 = (Xmid + X) >> 1; - int X4 = (Xmid + X2) >> 1; - int Y3 = (Ymid + Y) >> 1; - int Y4 = (Ymid + Y2) >> 1; - Gui.DrawLine(X, Y, Xmid, Ymid, Color.Green); - Gui.DrawLine(Xmid, Ymid, X2, Y2, Color.Green); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Red); - DrawBoxMWH(X, Y, 1, 1, Color.Lime); - DrawBoxMWH(X2, Y2, 1, 1, Color.Blue); - DrawBoxMWH(X3, Y3, 1, 1, Color.Yellow); - DrawBoxMWH(X4, Y4, 1, 1, Color.Yellow); - Gui.DrawLine(X, Y, XV, YV, Color.Orange); - Gui.DrawLine(X2, Y2, XV2, YV2, Color.Orange); - // sonar - if (Mem.ReadU8(0xFFAB77) != 0) - { - Xmid = Mem.ReadS32(0xFFA9EC); - Ymid = Mem.ReadS32(0xFFA9F0); - int Xvec = ((Mem.ReadS32(0xFFAA04) + Xmid) >> 16) - _camX; - int Yvec = ((Mem.ReadS32(0xFFAA08) + Ymid) >> 16) - _camY; - Xmid >>= 16; - Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - Width2 = Mem.ReadS16(0xFFA9FC); - Height2 = Mem.ReadS16(0xFFAA00); - color = ((Mem.ReadU8(0xFFAA0C) != 0) ? Color.FromArgb(255, 0, 127) : Color.FromArgb(0, 0, 255)); - DrawBoxMWH(Xmid, Ymid, Width2, Height2, color); - DrawBoxMWH(Xmid, Ymid, 1, 1, color, 0); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - //Pulsar - curObj = Mem.ReadU24(0xFFCFD1); - if ((curObj != 0) && ((Mem.ReadU32(curObj + 0xC) == 0xC9222) || (Mem.ReadU32(curObj + 0xC) == 0xC9456))) - { - curObj += 0x26; - for (int l = 0; l < 4; l++) - { - if (Mem.ReadU16(curObj + 0x12) != 0) - { - Xmid = Mem.ReadS32(curObj); - Ymid = Mem.ReadS32(curObj + 4); - int Xvec = (Xmid + Mem.ReadS32(curObj + 8) >> 16) - _camX; - int Yvec = (Ymid + Mem.ReadS32(curObj + 0xC) >> 16) - _camY; - Xmid >>= 16; Ymid >>= 16; - Xmid -= _camX; Ymid -= _camY; - DrawBoxMWH(Xmid, Ymid, 0x30, 0x30, Color.Red); - DrawBoxMWH(Xmid, Ymid, 1, 1, Color.Blue); - Gui.DrawLine(Xmid, Ymid, Xvec, Yvec, Color.Orange); - } - curObj += 0x14; - } - } - - //Water Level - int waterLevel = Mem.ReadS16(0xFFA7B2); - Gui.DrawLine(0, waterLevel - _camY, _left + 320 + _right, waterLevel - _camY, Color.Aqua); - - } - - void EccoAutofire(bool on) - { - //Modif N - ECCO HACK - make caps lock (weirdly) autofire player 1's C key - uint charge; - uint mode = Mem.ReadU8(0xFFA555); - int frameCount = Emu.FrameCount(); - int lagCount = Emu.LagCount(); - Joy.Set("Start", on, 1); - switch (mode) - { - case 0x00: - if (on) - { - if (Mem.ReadU16(0xFFF342) == 0xFFFD) - Joy.Set("C", true, 1); - else - Joy.Set("C", false, 1); - } - break; - case 0xE6: - if (Mem.ReadU16(0xFFD5E8) == 0x00000002) { - Dictionary buttons = new Dictionary(); - buttons["B"] = buttons["C"] = true; - Joy.Set(buttons, 1); - } - else - { - Dictionary buttons = new Dictionary(); - buttons["B"] = buttons["C"] = false; - Joy.Set(buttons, 1); - } - break; - case 0xF6: - charge = Mem.ReadU8(0xFFB19B); - if (on) - { - if ((charge <= 1) && ((Mem.ReadU8(0xFFB1A6) == 0) || (Mem.ReadU8(0xFFB1A9) != 0))) - Joy.Set("B", true, 1); - else if (charge > 1) - Joy.Set("B", false, 1); - Joy.Set("C", (Mem.ReadU16(0xFFA7C8) % 2) == 0, 1); - } - break; - case 0x20: - case 0x28: - case 0xAC: - if (on) - { - if ((Mem.ReadU8(0xFFAB72) & 3) == 0) - Joy.Set("C", (Mem.ReadS8(0xFFAA6E) < 11), 1); - } - break; - default: - break; - } - } - public override void Init(IApiContainer api) - { - base.Init(api); - Mem.SetBigEndian(); - string gameName = GI.GetRomName(); - if ((gameName == "ECCO - The Tides of Time (J) [!]") || - (gameName == "ECCO - The Tides of Time (U) [!]") || - (gameName == "ECCO - The Tides of Time (E) [!]")) - { - _mode = Modes.Ecco2; - _camXAddr = 0xFFAD9C; - _camYAddr = 0xFFAD9E; - _top = _bottom = 112; - _left = _right = 160; - ClientApi.SetGameExtraPadding(_left, _top, _right, _bottom); - } - else if ((gameName == "ECCO The Dolphin (J) [!]") || - (gameName == "ECCO The Dolphin (UE) [!]")) - - { - _mode = Modes.Ecco1; - _camXAddr = 0xFFB836; - _camYAddr = 0xFFB834; - _top = _bottom = 112; - _left = _right = 160; - ClientApi.SetGameExtraPadding(_left, _top, _right, _bottom); - } - else - { - _mode = Modes.disabled; - Running = false; - } - } - private Color BackdropColor() - { - uint color = Mem.ReadU16(0, "CRAM"); - int r = (int)(( color & 0x7) * 0x22); - int g = (int)(((color >> 3) & 0x7) * 0x22); - int b = (int)(((color >> 6) & 0x7) * 0x22); - return Color.FromArgb(r, g, b); - } - public override void PreFrameCallback() - { - Gui.ClearText(); - if (_mode != Modes.disabled) - { - _camX = Mem.ReadS16(_camXAddr) - _left; - _camY = Mem.ReadS16(_camYAddr) - _top; - EccoAutofire(Joy.Get(1)["Start"]); - if (_dumpMap == 0) - { - Color bg = BackdropColor(); - Gui.DrawRectangle(0, 0, _left + 320 + _right, _top, bg, bg); - Gui.DrawRectangle(0, 0, _left, _top + 224 + _bottom, bg, bg); - Gui.DrawRectangle(_left + 320, 0, _left + 320 + _right, _top + 224 + _bottom, bg, bg); - Gui.DrawRectangle(0, _top + 224, _left + 320 + _right, _top + 224 + _bottom, bg, bg); - } - uint mode = Mem.ReadByte(0xFFA555); - switch (mode) - { - case 0x20: - case 0x28: - case 0xAC: - //ClientApi.SetGameExtraPadding(160, 112, 160, 112); - if (_dumpMap <= 1) EccoDrawBoxes(); - // Uncomment the following block to enable mapdumping - if ((Mem.ReadU16(0xFFA7C8) > 1) && (Mem.ReadU16(0xFFA7C8) < 4)) - { - _dumpMap = 1; - _rowStateGuid = string.Empty; - _top = _bottom = _left = _right = 0; - ClientApi.SetGameExtraPadding(0, 0, 0, 0); - } - if (_dumpMap == 3) - { - var levelID = Mem.ReadS8(0xFFA7D0); - int[] nameGroupLengths = - { - 7,1,11,6, - 4,3,3,3, - 7,1,2,1, - 0,0,0,0 - }; - int[] nameStringPtrOffsets = - { - 0xECBD0, 0x106BC0, 0x10AF8C, 0x135A48, - 0x1558E8, 0x15F700, 0x16537C, 0x180B00, - 0x193920, 0x1B3ECC, 0x1D7A44, 0x1DBF70, - 0x2DF2, 0x2DF6, 0x2DFA, 0x2DFE - }; - int nameGroup = 0; - var i = levelID; - while ((i >= 0) && (nameGroup < nameGroupLengths.Length)) - { - i -= nameGroupLengths[nameGroup]; - if (i >= 0) nameGroup++; - } - string name = "map"; - if (i < 0) - { - i += nameGroupLengths[nameGroup]; - uint strOffset = Mem.ReadU32(nameStringPtrOffsets[nameGroup] + 0x2E); - Console.WriteLine($"{i}"); - strOffset = Mem.ReadU32(strOffset + ((i << 3) + (i << 5)) + 0x22); - strOffset += 0x20; - List strTmp = new List(); - byte c; - do - { - c = (byte)Mem.ReadByte(strOffset++); - if (c != 0) - strTmp.Add(c); - } while (c != 0); - name = System.Text.Encoding.ASCII.GetString(strTmp.ToArray()); - TextInfo textInfo = new CultureInfo("en-US", false).TextInfo; - name = textInfo.ToTitleCase(name).Replace(" ", string.Empty); - } - ClientApi.Screenshot($"c:\\Ecco2Maps\\{levelID}_{name}_top.png"); - _destX = _destY = 0; - ClientApi.SetGameExtraPadding(0, 0, 0, 0); - _dumpMap++; - } - if (_dumpMap == 6) - { - var levelID = Mem.ReadS8(0xFFA7D0); - int[] nameGroupLengths = - { - 7,1,11,6, - 4,3,3,3, - 7,1,2,1, - 0,0,0,0 - }; - int[] nameStringPtrOffsets = - { - 0xECBD0, 0x106BC0, 0x10AF8C, 0x135A48, - 0x1558E8, 0x15F700, 0x16537C, 0x180B00, - 0x193920, 0x1B3ECC, 0x1D7A44, 0x1DBF70, - 0x2DF2, 0x2DF6, 0x2DFA, 0x2DFE - }; - int nameGroup = 0; - var i = levelID; - while ((i >= 0) && (nameGroup < nameGroupLengths.Length)) - { - i -= nameGroupLengths[nameGroup]; - if (i >= 0) nameGroup++; - } - string name = "map"; - if (i < 0) - { - i += nameGroupLengths[nameGroup]; - uint strOffset = Mem.ReadU32(nameStringPtrOffsets[nameGroup] + 0x2E); - Console.WriteLine($"{i}"); - strOffset = Mem.ReadU32(strOffset + ((i << 3) + (i << 5)) + 0x22); - strOffset += 0x20; - List strTmp = new List(); - byte c; - do - { - c = (byte)Mem.ReadByte(strOffset++); - if (c != 0) - strTmp.Add(c); - } while (c != 0); - name = System.Text.Encoding.ASCII.GetString(strTmp.ToArray()); - TextInfo textInfo = new CultureInfo("en-US", false).TextInfo; - name = textInfo.ToTitleCase(name).Replace(" ", string.Empty); - } - ClientApi.Screenshot($"c:\\Ecco2Maps\\{levelID}_{name}_bottom.png"); - _destX = _destY = 0; - _left = _right = 160; - _top = _bottom = 112; - ClientApi.SetGameExtraPadding(_left, _top, _right, _bottom); - _dumpMap = 0; - } - break; - case 0xF6: - EccoDraw3D(); - break; - default: - break; - } - _prevF = Mem.ReadU32(0xFFA524); - } - } - public override void PostFrameCallback() - { - uint frame = Mem.ReadU32(0xFFA524); - if ((frame <= _prevF) && !Emu.IsLagged()) - { - Emu.SetIsLagged(true); - Emu.SetLagCount(Emu.LagCount() + 1); - } - uint mode = Mem.ReadByte(0xFFA555); - _tickerY = 81; - string valueTicker = $"{Mem.ReadU32(0xFFA520)}:{Mem.ReadU32(0xFFA524)}:{Mem.ReadU16(0xFFA7C8)}:{mode:X2}"; - TickerText(valueTicker); - switch (mode) - { - case 0x20: - case 0x28: - case 0xAC: - valueTicker = $"{Mem.ReadS16(0xFFAD9C)}:{Mem.ReadS16(0xFFAD9E)}"; - TickerText(valueTicker); - valueTicker = $"{Mem.ReadS32(0xFFAA1A) / 65536.0:0.######}:{Mem.ReadS32(0xFFAA1E) / 65536.0:0.######}"; - TickerText(valueTicker); - valueTicker = $"{Mem.ReadS32(0xFFAA32) / 65536.0:0.######}:{Mem.ReadU8(0xFFAA6D)}:{Mem.ReadU8(0xFFAA6E)}"; - TickerText(valueTicker); - valueTicker = $"{Mem.ReadS32(0xFFAA36) / 65536.0:0.######}:{Mem.ReadS32(0xFFAA3A) / 65536.0:0.######}"; - TickerText(valueTicker); - valueTicker = $"{Mem.ReadS32(0xFFA9D6) / 65536.0:0.######}:{Mem.ReadS32(0xFFA9DA) / 65536.0:0.######}"; - TickerText(valueTicker); - valueTicker = $"{Mem.ReadS32(0xFFAA3E) / 65536.0:0.######}:{Mem.ReadS32(0xFFAA42) / 65536.0:0.######}"; - TickerText(valueTicker); - valueTicker = $"{(Mem.ReadS32(0xFFAA36) + Mem.ReadS32(0xFFA9D6) + Mem.ReadS32(0xFFAA3E)) / 65536.0:0.######}:" + - $"{(Mem.ReadS32(0xFFAA3A) + Mem.ReadS32(0xFFA9DA) + Mem.ReadS32(0xFFAA42)) / 65536.0:0.######}"; - TickerText(valueTicker); - valueTicker = $"{Mem.ReadU8(0xFFAB72)}:{Mem.ReadU8(0xFFAB70)}:{(short)Mem.ReadS16(0xFFAA52):X4}:{(short)Mem.ReadS16(0xFFAA5A):X4}"; - TickerText(valueTicker); - switch (Mem.ReadU8(0xFFA7D0)) - { - case 1: - case 2: - case 3: - case 30: - case 46: - var globeFlags = Mem.ReadU32(0xFFD434) >> 1; - var globeFlags2 = Mem.ReadU32(0xFFD438) >> 1; - int i, j = i = 0; - while (globeFlags > 0) - { - globeFlags >>= 1; - i++; - } - while (globeFlags2 > 0) - { - globeFlags2 >>= 1; - j++; - } - TickerText($"{i}:{j}", Color.Blue); - break; - default: - break; - } - if (_dumpMap != 0) - { - Mem.WriteS16(0xFFAA16, 7); - Mem.WriteS16(0xFFAA18, 56); - int PlayerX = Mem.ReadS16(0xFFAA1A) - _camX; - int PlayerY = Mem.ReadS16(0xFFAA1E) - _camY; - if ((PlayerX < -64) || (PlayerX > 384) || (PlayerY < -64) || (PlayerY > 288)) - { - Mem.WriteByte(0xFFAA70, 0xC); - Mem.WriteS16(0xFFA7CA, 1); - } - else - { - Mem.WriteByte(0xFFAA70, 0x0); - Mem.WriteS16(0xFFA7CA, 0); - } - } - if (_dumpMap == 1) - { - int levelWidth = Mem.ReadS16(0xFFA7A8); - int levelHeight = Mem.ReadS16(0xFFA7AC); - var levelID = Mem.ReadByte(0xFFA7D0); - var s = Emu.GetSettings() as GPGX.GPGXSettings; - s.DrawBGA = false; - s.DrawBGB = false; - s.DrawBGW = false; - s.DrawObj = false; - s.Backdrop = true; - Emu.PutSettings(s); - if ((_camX == _destX) && (_camY == _destY)) - { - if ((_prevX != _camX) || (_prevY != _camY)) - { - if (_destX == 0) - { - if (_rowStateGuid != string.Empty) - { - MemSS.DeleteState(_rowStateGuid); - } - _rowStateGuid = MemSS.SaveCoreStateToMemory(); - } - _snapPast = 1; - } - else - { - _snapPast--; - } - if (_snapPast == 0) - { - ClientApi.Screenshot($"c:\\Ecco2Maps\\{levelID}\\{_destY}_{_destX}_top.png"); - if (_destX >= levelWidth - 320) - { - if (_destY < levelHeight - 224) - { - if (_rowStateGuid != string.Empty) - { - MemSS.LoadCoreStateFromMemory(_rowStateGuid); - } - _destX = 0; - _destY = Math.Min(_destY + 111, levelHeight - 224); - } - } - else - _destX = Math.Min(_destX + 159, levelWidth - 320); - if ((_prevX == _destX) && (_prevY == _destY)) - { - ClientApi.SetGameExtraPadding(levelWidth - 320, levelHeight - 224, 0, 0); - _dumpMap++; - } - } - } - Mem.WriteS16(0xFFAD8C, _destX); - Mem.WriteS16(0xFFAD90, _destY); - } - else if (_dumpMap == 2) - { - if (_rowStateGuid != String.Empty) - MemSS.DeleteState(_rowStateGuid); - _rowStateGuid = String.Empty; - int levelWidth = Mem.ReadS16(0xFFA7A8); - int levelHeight = Mem.ReadS16(0xFFA7AC); - ClientApi.SetGameExtraPadding(levelWidth - 320, levelHeight - 224, 0, 0); - var levelID = Mem.ReadS8(0xFFA7D0); - var s = Emu.GetSettings() as GPGX.GPGXSettings; - s.DrawBGA = false; - s.DrawBGB = false; - s.DrawBGW = false; - s.DrawObj = false; - s.Backdrop = true; - Emu.PutSettings(s); - - var a = Gui.GetAttributes(); - a.SetColorKey(Color.FromArgb(0, 0x11, 0x22, 0x33), Color.FromArgb(0, 0x11, 0x22, 0x33)); - Gui.SetAttributes(a); - Gui.ToggleCompositingMode(); - - Gui.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{levelHeight - 224}_{levelWidth - 320}_top.png", 2, 2, 318, 222, (levelWidth - 318), (levelHeight - 222), 318, 222); - for (int x = ((levelWidth - 320) / 159) * 159; x >= 0; x -= 159) - { - var dx = (x == 0) ? 0 : 2; - Gui.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{levelHeight - 224}_{x}_top.png", dx, 2, 320 - dx, 222, x + dx, (levelHeight - 222), 320 - dx, 222); - } - for (int y = ((levelHeight - 224) / 111) * 111; y >= 0; y -= 111) - { - var dy = (y == 0) ? 0 : 2; - Gui.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{y}_{levelWidth - 320}_top.png", 2, dy, 318, 224 - 2, levelWidth - 318, y + dy, 318, 224 - dy); - for (int x = ((levelWidth - 320) / 159) * 159; x >= 0; x -= 159) - { - var dx = (x == 0) ? 0 : 2; - Gui.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{y}_{x}_top.png", dx, dy, 320 - dx, 224 - dy, x + dx, y + dy, 320 - dx, 224 - dy); - } - } - - Gui.ToggleCompositingMode(); - Gui.SetAttributes(new System.Drawing.Imaging.ImageAttributes()); - Gui.DrawFinish(); - _dumpMap++; - } - else if (_dumpMap == 4) - { - int levelWidth = Mem.ReadS16(0xFFA7A8); - int levelHeight = Mem.ReadS16(0xFFA7AC); - var levelID = Mem.ReadByte(0xFFA7D0); - var s = Emu.GetSettings() as GPGX.GPGXSettings; - s.DrawBGA = (levelID != 29); - s.DrawBGB = (levelID == 7); - s.DrawBGW = true; - s.DrawObj = true; - s.Backdrop = false; - Emu.PutSettings(s); - if ((_camX == _destX) && (_camY == _destY)) - { - if ((_prevX != _camX) || (_prevY != _camY)) - { - if (_destX == 0) - { - if (_rowStateGuid != string.Empty) - { - MemSS.DeleteState(_rowStateGuid); - } - _rowStateGuid = MemSS.SaveCoreStateToMemory(); - } - _snapPast = 1; - } - else - { - _snapPast--; - } - if (_snapPast == 0) - { - ClientApi.Screenshot($"c:\\Ecco2Maps\\{levelID}\\{_destY}_{_destX}_bottom.png"); - if (_destX >= levelWidth - 320) - { - if (_destY < levelHeight - 224) - { - if (_rowStateGuid != string.Empty) - { - MemSS.LoadCoreStateFromMemory(_rowStateGuid); - } - _destX = 0; - _destY = Math.Min(_destY + 111, levelHeight - 224); - } - } - else - _destX = Math.Min(_destX + 159, levelWidth - 320); - if ((_prevX == _destX) && (_prevY == _destY)) - { - ClientApi.SetGameExtraPadding(levelWidth - 320, levelHeight - 224, 0, 0); - _dumpMap++; - } - } - } - Mem.WriteS16(0xFFAD8C, _destX); - Mem.WriteS16(0xFFAD90, _destY); - } - else if (_dumpMap == 5) - { - if (_rowStateGuid != String.Empty) - MemSS.DeleteState(_rowStateGuid); - _rowStateGuid = String.Empty; - int levelWidth = Mem.ReadS16(0xFFA7A8); - int levelHeight = Mem.ReadS16(0xFFA7AC); - var levelID = Mem.ReadS8(0xFFA7D0); - var s = Emu.GetSettings() as GPGX.GPGXSettings; - s.DrawBGA = (levelID != 29); - s.DrawBGB = (levelID == 7); - s.DrawBGW = true; - s.DrawObj = true; - s.Backdrop = false; - Emu.PutSettings(s); - Gui.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{levelHeight - 224}_{levelWidth - 320}_bottom.png", 2, 2, 318, 222, (levelWidth - 318), (levelHeight - 222), 318, 222); - for (int x = ((levelWidth - 320) / 159) * 159; x >= 0; x -= 159) - { - var dx = (x == 0) ? 0 : 2; - Gui.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{levelHeight - 224}_{x}_bottom.png", dx, 2, 320 - dx, 222, x + dx, (levelHeight - 222), 320 - dx, 222); - } - for (int y = ((levelHeight - 224) / 111) * 111; y >= 0; y -= 111) - { - var dy = (y == 0) ? 0 : 2; - Gui.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{y}_{levelWidth - 320}_bottom.png", 2, dy, 318, 224 - 2, levelWidth - 318, y + dy, 318, 224 - dy); - for (int x = ((levelWidth - 320) / 159) * 159; x >= 0; x -= 159) - { - var dx = (x == 0) ? 0 : 2; - Gui.DrawImageRegion($"c:\\Ecco2Maps\\{levelID}\\{y}_{x}_bottom.png", dx, dy, 320 - dx, 224 - dy, x + dx, y + dy, 320 - dx, 224 - dy); - } - } - Gui.DrawFinish(); - _dumpMap++; - } - _prevX = _camX; - _prevY = _camY; - break; - case 0xF6: - valueTicker = $"{Mem.ReadS32(0xFFD5E0) / 4096.0:0.######}:{Mem.ReadS32(0xFFD5E8) / 4096.0:0.######}:{Mem.ReadS32(0xFFD5E4) / 2048.0:0.######}"; - TickerText(valueTicker); - valueTicker = $"{Mem.ReadS32(0xFFB13A) / 4096.0:0.######}:{Mem.ReadS32(0xFFB142) / 4096.0:0.######}:{Mem.ReadS32(0xFFB13E) / 2048.0:0.######}"; - TickerText(valueTicker); - valueTicker = $"{Mem.ReadS32(0xFFB162) / 4096.0:0.######}:{Mem.ReadS32(0xFFB16A) / 4096.0:0.######}:{Mem.ReadS32(0xFFB166) / 2048.0:0.######}"; - TickerText(valueTicker); - valueTicker = $"{Mem.ReadU8(0xFFB19B)}:{Mem.ReadU8(0xFFB1A6)}:{Mem.ReadU8(0xFFB1A9)}"; - TickerText(valueTicker); - int SpawnZ = Mem.ReadS32(0xFFD5F0) + 0x180000; - int nextRingZ = SpawnZ; - while (((nextRingZ >> 17) & 0xF) != 0) - { - nextRingZ += 0x20000; - } - valueTicker = $"{Mem.ReadS32(0xFFD856) / 4096.0:0.######}:{Mem.ReadS32(0xFFD85A) / 4096.0:0.######}:{(nextRingZ - 0x160000) / 2048.0:0.######}:{nextRingZ / 2048.0:0.######}"; - TickerText(valueTicker); - var levelId = -1 - Mem.ReadS16(0xFFA79E); - bool spawn = false; - bool firstRand = true; - int SpawnX, SpawnY, z; - int CamX = (Mem.ReadS32(0xFFD5E0) >> 0xC) - _left; - int CamY = (Mem.ReadS32(0xFFD5E8) >> 0xC) + _top; - int CamZ = (Mem.ReadS32(0xFFD5E4) >> 0xC) + _top; - while (!spawn) - { - var temp = (SpawnZ >> 17) & 0xFF; - var controlList = Mem.ReadS32(0x7B54 + (levelId << 2)); - temp = Mem.ReadS16(controlList + (temp << 1)); - var v = temp & 0xFF; - var num = (temp >> 8) + v; - temp = v; - spawn = (num > 2); - if (spawn) for (; temp < num; temp++) - { - switch (temp) - { - case 0: - case 1: - case 13: - // Nothing important spawns - break; - case 2: - // Jellyfish - SpawnX = Mem.ReadS32(0xFFB13A) + 0x40000 - (EccoRand(firstRand) << 3); - firstRand = false; - SpawnY = -0xC0000 + (EccoRand() << 3); - z = SpawnZ + 0x20000;// ? - valueTicker = $"{SpawnX / 4096.0:0.######}:{SpawnY / 4096.0:0.######}:{(z - 0x180000) / 2048.0:0.######}:{z / 2048.0:0.######}"; - TickerText(valueTicker); - SpawnX = 160 + ((SpawnX >> 0xC) - CamX); - SpawnY = 112 - ((SpawnY >> 0xC) - CamY); - z = _top + 112 - ((z >> 0xC) - CamZ); - DrawBoxMWH(SpawnX, SpawnY, 1, 1, Color.Gray); - DrawBoxMWH(SpawnX, z, 1, 1, Color.Gray); - break; - case 3: - // Eagle - SpawnX = Mem.ReadS32(0xFFB13A) + 0x40000 - (EccoRand(firstRand) << 3); - firstRand = false; - SpawnY = 0x50000; - z = SpawnZ - 0x40000 + 0x20000;// ? - valueTicker = $"{SpawnX / 4096.0:0.######}:{SpawnY / 4096.0:0.######}:{(z - 0x180000) / 2048.0:0.######}:{z / 2048.0:0.######}"; - TickerText(valueTicker); - SpawnX = 160 + ((SpawnX >> 0xC) - CamX); - SpawnY = 112 - ((SpawnY >> 0xC) - CamY); - z = _top + 112 - ((z >> 0xC) - CamZ); - DrawBoxMWH(SpawnX, SpawnY, 1, 1, Color.Gray); - DrawBoxMWH(SpawnX, z, 1, 1, Color.Gray); - break; - case 4: - // Shark - bool left = (EccoRand(firstRand) > 0x8000); - firstRand = false; - var xdiff = 0xC0000 + (EccoRand() << 3); - SpawnX = Mem.ReadS32(0xFFB13A) + (left ? -xdiff : xdiff); - SpawnY = Math.Min(Mem.ReadS32(0xFFB142), -0x10000) - (EccoRand() + 0x10000); - z = SpawnZ + 0x20000; - valueTicker = $"{SpawnX / 4096.0:0.######}:{SpawnY / 4096.0:0.######}:{(z - 0x180000) / 2048.0:0.######}:{z / 2048.0:0.######}"; - TickerText(valueTicker); - SpawnX = 160 + ((SpawnX >> 0xC) - CamX); - SpawnY = 112 - ((SpawnY >> 0xC) - CamY); - z = _top + 112 - ((z >> 0xC) - CamZ); - DrawBoxMWH(SpawnX, SpawnY, 1, 1, Color.Gray); - DrawBoxMWH(SpawnX, z, 1, 1, Color.Gray); - break; - case 5: - case 6: - case 7: - case 8: - // Vine - EccoRand(firstRand); - firstRand = false; - if ((temp & 1) == 1) EccoRand(); - EccoRand(); - break; - case 9: - case 10: - case 11: - case 12: - // Unknown, possibly just rand incrementation? - EccoRand(firstRand); - firstRand = false; - if ((temp & 1) == 1) EccoRand(); - break; - case 14: - // Shell - SpawnX = Mem.ReadS32(0xFFB13A) - 0x20000 + (EccoRand(firstRand) << 2); - firstRand = false; - SpawnY = -0x80000; - z = SpawnZ + 0x20000; - EccoRand(); - valueTicker = $"{SpawnX / 4096.0:0.######}:{SpawnY / 4096.0:0.######}:{(z - 0x180000) / 2048.0:0.######}:{(z - 0x80000) / 2048.0:0.######}"; - TickerText(valueTicker); - SpawnX = 160 + ((SpawnX >> 0xC) - CamX); - SpawnY = 112 - ((SpawnY >> 0xC) - CamY); - z = _top + 112 - ((z >> 0xC) - CamZ); - DrawBoxMWH(SpawnX, SpawnY, 1, 1, Color.Gray); - DrawBoxMWH(SpawnX, z, 1, 1, Color.Gray); - break; - } - } - SpawnZ += 0x20000; - } - break; - } - Joy.Set("C", null, 1); - Joy.Set("Start", null, 1); - var color = _turnSignalColors[Mem.ReadS8(0xFFA7C9) & 7]; - Gui.DrawRectangle(_left - 48, _top - 112, 15, 15, color, color); - } - public override void LoadStateCallback(string name) - { - Gui.DrawNew("emu"); - PreFrameCallback(); - Gui.DrawFinish(); - } - } -} diff --git a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj index d12517e315..fd0185f1b6 100644 --- a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj +++ b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj @@ -658,7 +658,6 @@ - From 8a9e8ceed21d8a9284d519bdc1b8485beb61fa75 Mon Sep 17 00:00:00 2001 From: upthorn Date: Fri, 4 Jan 2019 14:25:24 -0800 Subject: [PATCH 058/301] Fix appveyor build error by removing use of C#7 features. --- BizHawk.Client.ApiHawk/Classes/Api/EmuApi.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/BizHawk.Client.ApiHawk/Classes/Api/EmuApi.cs b/BizHawk.Client.ApiHawk/Classes/Api/EmuApi.cs index 3677007d2b..a3cda9ed76 100644 --- a/BizHawk.Client.ApiHawk/Classes/Api/EmuApi.cs +++ b/BizHawk.Client.ApiHawk/Classes/Api/EmuApi.cs @@ -97,7 +97,8 @@ namespace BizHawk.Client.ApiHawk domain = MemoryDomains[name]; } - var d = DisassemblableCore.Disassemble(domain, pc, out int l); + int l; + var d = DisassemblableCore.Disassemble(domain, pc, out l); return new { disasm = d, length = l }; } catch (NotImplementedException) From 303e9df26e5685f9abb51c5d88120544141f9643 Mon Sep 17 00:00:00 2001 From: zeromus Date: Fri, 4 Jan 2019 17:41:59 -0500 Subject: [PATCH 059/301] rejigger PlatformLinkedLibSingleton so it can be used embedded in the EXE without requiring a dependency on dlls, so it can boot when dlls are relocated --- .../BizHawk.Client.EmuHawk.csproj | 7 +++++-- BizHawk.Client.EmuHawk/Program.cs | 12 ++++++------ BizHawk.Common/PlatformLinkedLibSingleton.cs | 17 ++++++++++++----- 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj index 2587f62945..0a3bf56323 100644 --- a/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj +++ b/BizHawk.Client.EmuHawk/BizHawk.Client.EmuHawk.csproj @@ -45,7 +45,7 @@ true ..\output\ - WINDOWS;DEBUG + DEBUG;WINDOWS;EXE_PROJECT true full AnyCPU @@ -56,7 +56,7 @@ ..\output\ - WINDOWS + WINDOWS;EXE_PROJECT true true pdbonly @@ -113,6 +113,9 @@ + + PlatformLinkedLibSingleton.cs + svnrev.cs diff --git a/BizHawk.Client.EmuHawk/Program.cs b/BizHawk.Client.EmuHawk/Program.cs index cc970daf55..0ed765e047 100644 --- a/BizHawk.Client.EmuHawk/Program.cs +++ b/BizHawk.Client.EmuHawk/Program.cs @@ -23,14 +23,14 @@ namespace BizHawk.Client.EmuHawk Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); - var libLoader = PlatformLinkedLibSingleton.LinkedLibManager; + var libLoader = EXE_PROJECT.PlatformLinkedLibSingleton.LinkedLibManager; //http://www.codeproject.com/Articles/310675/AppDomain-AssemblyResolve-Event-Tips //try loading libraries we know we'll need //something in the winforms, etc. code below will cause .net to popup a missing msvcr100.dll in case that one's missing //but oddly it lets us proceed and we'll then catch it here - var libExt = PlatformLinkedLibSingleton.RunningOnUnix ? ".dll.so" : ".dll"; + var libExt = EXE_PROJECT.PlatformLinkedLibSingleton.RunningOnUnix ? ".dll.so" : ".dll"; var d3dx9 = libLoader.LoadPlatformSpecific($"d3dx9_43{libExt}"); var vc2015 = libLoader.LoadPlatformSpecific($"vcruntime140{libExt}"); var vc2012 = libLoader.LoadPlatformSpecific($"msvcr120{libExt}"); //TODO - check version? @@ -65,7 +65,7 @@ namespace BizHawk.Client.EmuHawk libLoader.FreePlatformSpecific(vc2010); libLoader.FreePlatformSpecific(vc2010p); - if (!PlatformLinkedLibSingleton.RunningOnUnix) + if (!EXE_PROJECT.PlatformLinkedLibSingleton.RunningOnUnix) { // this will look in subdirectory "dll" to load pinvoked stuff string dllDir = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "dll"); @@ -200,7 +200,7 @@ namespace BizHawk.Client.EmuHawk } } } - private static PlatformSpecificMainLoopCrashHandler mainLoopCrashHandler = PlatformLinkedLibSingleton.RunningOnUnix + private static PlatformSpecificMainLoopCrashHandler mainLoopCrashHandler = EXE_PROJECT.PlatformLinkedLibSingleton.RunningOnUnix ? (PlatformSpecificMainLoopCrashHandler) new UnixMonoMainLoopCrashHandler() : (PlatformSpecificMainLoopCrashHandler) new Win32MainLoopCrashHandler(); @@ -265,7 +265,7 @@ namespace BizHawk.Client.EmuHawk GlobalWin.GLManager = GLManager.Instance; //now create the "GL" context for the display method. we can reuse the IGL_TK context if opengl display method is chosen - if (PlatformLinkedLibSingleton.RunningOnUnix) Global.Config.DispMethod = Config.EDispMethod.GdiPlus; + if (EXE_PROJECT.PlatformLinkedLibSingleton.RunningOnUnix) Global.Config.DispMethod = Config.EDispMethod.GdiPlus; REDO_DISPMETHOD: if (Global.Config.DispMethod == Config.EDispMethod.GdiPlus) GlobalWin.GL = new Bizware.BizwareGL.Drivers.GdiPlus.IGL_GdiPlus(); @@ -313,7 +313,7 @@ namespace BizHawk.Client.EmuHawk goto REDO_DISPMETHOD; } - if (!PlatformLinkedLibSingleton.RunningOnUnix) + if (!EXE_PROJECT.PlatformLinkedLibSingleton.RunningOnUnix) { //WHY do we have to do this? some intel graphics drivers (ig7icd64.dll 10.18.10.3304 on an unknown chip on win8.1) are calling SetDllDirectory() for the process, which ruins stuff. //The relevant initialization happened just before in "create IGL context". diff --git a/BizHawk.Common/PlatformLinkedLibSingleton.cs b/BizHawk.Common/PlatformLinkedLibSingleton.cs index 9a9ed2baab..14ed9c29e6 100644 --- a/BizHawk.Common/PlatformLinkedLibSingleton.cs +++ b/BizHawk.Common/PlatformLinkedLibSingleton.cs @@ -1,9 +1,16 @@ using System; -using System.Runtime.InteropServices; - +using System.Runtime.InteropServices; + +//put in a different namespace for EXE so we can have an instance of this type (by linking to this file rather than copying it) built-in to the exe +//so the exe doesnt implicitly depend on the dll +#if EXE_PROJECT +namespace EXE_PROJECT +#else namespace BizHawk.Common -{ - public sealed class PlatformLinkedLibSingleton +#endif +{ + +public sealed class PlatformLinkedLibSingleton { public static readonly bool RunningOnUnix = Environment.OSVersion.Platform == PlatformID.Unix || Environment.OSVersion.Platform == PlatformID.MacOSX; @@ -83,4 +90,4 @@ namespace BizHawk.Common } } } -} \ No newline at end of file +} From b9094545db80e464150347bdf135cc07c1d9b38e Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Fri, 4 Jan 2019 18:03:34 -0600 Subject: [PATCH 060/301] update 7zip file location --- BizHawk.Client.Common/7z/LibraryManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BizHawk.Client.Common/7z/LibraryManager.cs b/BizHawk.Client.Common/7z/LibraryManager.cs index 8f0d8c4b68..ac0aedd2ee 100644 --- a/BizHawk.Client.Common/7z/LibraryManager.cs +++ b/BizHawk.Client.Common/7z/LibraryManager.cs @@ -63,7 +63,7 @@ namespace SevenZip /// 7z.dll (from the 7-zip distribution) supports every InArchiveFormat for encoding and decoding. /// //private static string _libraryFileName = ConfigurationManager.AppSettings["7zLocation"] ?? Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "7z.dll"); - private static string _libraryFileName = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "7z.dll"); + private static string _libraryFileName = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "dll\\7z.dll"); #endif #if WINCE From e2ccff1c821f93371bc9666b15c7b02b0d00f355 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 5 Jan 2019 08:23:16 -0600 Subject: [PATCH 061/301] GBHawk: CGB double speed linking --- .../Consoles/Nintendo/GBHawk/SerialPort.cs | 28 +++++++++++++++++-- .../GBHawkLink/GBHawkLink.IEmulator.cs | 8 +++--- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/SerialPort.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/SerialPort.cs index 4aa700268c..f5e0150c61 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/SerialPort.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/SerialPort.cs @@ -49,7 +49,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk if ((value & 1) > 0) { clk_internal = true; - clk_rate = 512; + if (((value & 2) > 0) && Core.GBC_compat) + { + clk_rate = 256; + } + else + { + clk_rate = 512; + } serial_clock = clk_rate; } else @@ -64,7 +71,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk if ((value & 1) > 0) { clk_internal = true; - clk_rate = 512; + if (((value & 2) > 0) && Core.GBC_compat) + { + clk_rate = 256; + } + else + { + clk_rate = 512; + } serial_clock = clk_rate; } else @@ -75,7 +89,15 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk } } - serial_control = (byte)(0x7E | (value & 0x81)); // middle six bits always 1 + if (Core.GBC_compat) + { + serial_control = (byte)(0x7C | (value & 0x83)); // extra CGB bit + } + else + { + serial_control = (byte)(0x7E | (value & 0x81)); // middle six bits always 1 + } + break; } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs index 0a95188026..48ce21972b 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs @@ -105,7 +105,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink R.do_single_step(); // the signal to shift out a bit is when serial_clock = 1 - if (L.serialport.serial_clock == 1) + if ((L.serialport.serial_clock == 1) || (L.serialport.serial_clock == 2)) { if (LinkConnected) { @@ -113,7 +113,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink if ((R.serialport.clk_rate == -1) && R.serialport.serial_start) { - R.serialport.serial_clock = 1; + R.serialport.serial_clock = L.serialport.serial_clock; R.serialport.send_external_bit((byte)(R.serialport.serial_data & 0x80)); R.serialport.coming_in = L.serialport.going_out; } @@ -121,7 +121,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink L.serialport.coming_in = R.serialport.going_out; } } - else if (R.serialport.serial_clock == 1) + else if ((R.serialport.serial_clock == 1) || (R.serialport.serial_clock == 2)) { if (LinkConnected) { @@ -129,7 +129,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink if ((L.serialport.clk_rate == -1) && L.serialport.serial_start) { - L.serialport.serial_clock = 1; + L.serialport.serial_clock = R.serialport.serial_clock; L.serialport.send_external_bit((byte)(L.serialport.serial_data & 0x80)); L.serialport.coming_in = R.serialport.going_out; } From 292ee296dc116cca0f0c403a4d72fd106141a209 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 5 Jan 2019 10:34:19 -0600 Subject: [PATCH 062/301] GBHAwk: palette not writable during rendering: fixes lego racers --- .../Consoles/Nintendo/GBHawk/GBC_PPU.cs | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs index b02084f64b..27775f026b 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBC_PPU.cs @@ -82,7 +82,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk case 0xFF54: ret = HDMA_dest_lo; break; // HDMA4 case 0xFF55: ret = HDMA_ctrl; break; // HDMA5 case 0xFF68: ret = BG_pal_ret; break; // BGPI - case 0xFF69: ret = BG_bytes[BG_bytes_index]; break; // BGPD + case 0xFF69: ret = BG_PAL_read(); break; // BGPD case 0xFF6A: ret = OBJ_pal_ret; break; // OBPI case 0xFF6B: ret = OBJ_bytes[OBJ_bytes_index]; break; // OBPD } @@ -90,6 +90,18 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk return ret; } + public byte BG_PAL_read() + { + if (VRAM_access_read) + { + return BG_bytes[BG_bytes_index]; + } + else + { + return 0xFF; + } + } + public override void WriteReg(int addr, byte value) { switch (addr) @@ -240,8 +252,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk BG_bytes_inc = ((value & 0x80) == 0x80); break; case 0xFF69: // BGPD - BG_transfer_byte = value; - BG_bytes[BG_bytes_index] = value; + if (VRAM_access_write) + { + BG_transfer_byte = value; + BG_bytes[BG_bytes_index] = value; + } // change the appropriate palette color color_compute_BG(); From cd2d63b04a0844cecef1d1d4a273ecc1422ef654 Mon Sep 17 00:00:00 2001 From: feos Date: Sat, 5 Jan 2019 21:30:06 +0300 Subject: [PATCH 063/301] tastudio: - don't use branch laglog after loading it. it's useless because we invalidate if needed anyway - PauseOnFrame being null started to crash seeking, fixed - make use of movie alias in branchbox - capture tsm state after loading the branch todo: if we load a branch in the middle of invalid greenzone, advancing won't draw new greenzone even tho states are being created. laglog doesn't seem to allow gaps either. unsure how to resolve --- .../movie/tasproj/TasMovie.cs | 8 ++------ BizHawk.Client.EmuHawk/MainForm.cs | 2 +- .../tools/TAStudio/BookmarksBranchesBox.cs | 19 ++++++++++--------- .../tools/TAStudio/TAStudio.cs | 2 +- 4 files changed, 14 insertions(+), 17 deletions(-) diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs index e500a1e833..80b54f7c9a 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs @@ -509,17 +509,13 @@ namespace BizHawk.Client.Common Log?.Dispose(); Log = branch.InputLog.Clone(); - _lagLog.FromLagLog(branch.LagLog); - - // if there are branch states, they will be loaded anyway - // but if there's none, or only *after* divergent point, don't invalidate the entire movie anymore if (divergentPoint.HasValue) { - _stateManager.Invalidate(divergentPoint.Value); + InvalidateAfter(divergentPoint.Value); } else { - _stateManager.Invalidate(branch.InputLog.Count); + InvalidateAfter(branch.InputLog.Count); } if (BindMarkersToInput) // pretty critical not to erase them diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 4c02e8bf16..28f0311d31 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -3060,11 +3060,11 @@ namespace BizHawk.Client.EmuHawk if (IsSeeking && Emulator.Frame == PauseOnFrame.Value) { PauseEmulator(); - PauseOnFrame = null; if (GlobalWin.Tools.IsLoaded()) { GlobalWin.Tools.TAStudio.StopSeeking(); } + PauseOnFrame = null; } } diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs index 8e7adcc47b..f64cace517 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/BookmarksBranchesBox.cs @@ -117,7 +117,7 @@ namespace BizHawk.Client.EmuHawk TasBranch branch = GetBranch(index); if (branch != null) { - var record = Tastudio.CurrentTasMovie[branch.Frame]; + var record = Movie[branch.Frame]; if (index == Movie.CurrentBranch) { color = TAStudio.CurrentFrame_InputLog; @@ -146,7 +146,7 @@ namespace BizHawk.Client.EmuHawk private TasBranch GetBranch(int index) { - return Tastudio.CurrentTasMovie.GetBranch(index); + return Movie.GetBranch(index); } public void Branch() @@ -199,13 +199,14 @@ namespace BizHawk.Client.EmuHawk return; } - Tastudio.CurrentTasMovie.LoadBranch(branch); + Movie.LoadBranch(branch); var stateInfo = new KeyValuePair(branch.Frame, branch.CoreData); Tastudio.LoadState(stateInfo); + Movie.TasStateManager.Capture(true); QuickBmpFile.Copy(new BitmapBufferVideoProvider(branch.OSDFrameBuffer), Tastudio.VideoProvider); if (Tastudio.Settings.OldControlSchemeForBranches && Tastudio.TasPlaybackBox.RecordingMode) - Tastudio.CurrentTasMovie.Truncate(branch.Frame); + Movie.Truncate(branch.Frame); GlobalWin.MainForm.PauseOnFrame = null; Tastudio.RefreshDialog(); @@ -242,7 +243,7 @@ namespace BizHawk.Client.EmuHawk private void AddBranchToolStripMenuItem_Click(object sender, EventArgs e) { Branch(); - CallSavedCallback(Tastudio.CurrentTasMovie.BranchCount - 1); + CallSavedCallback(Movie.BranchCount - 1); GlobalWin.OSD.AddMessage("Added branch " + Movie.CurrentBranch.ToString()); } @@ -250,7 +251,7 @@ namespace BizHawk.Client.EmuHawk { Branch(); EditBranchTextPopUp(Movie.CurrentBranch); - CallSavedCallback(Tastudio.CurrentTasMovie.BranchCount - 1); + CallSavedCallback(Movie.BranchCount - 1); GlobalWin.OSD.AddMessage("Added branch " + Movie.CurrentBranch.ToString()); } @@ -366,13 +367,13 @@ namespace BizHawk.Client.EmuHawk if (_branchUndo == BranchUndo.Load) { LoadBranch(_backupBranch); - CallLoadedCallback(Tastudio.CurrentTasMovie.Branches.IndexOf(_backupBranch)); + CallLoadedCallback(Movie.Branches.IndexOf(_backupBranch)); GlobalWin.OSD.AddMessage("Branch Load canceled"); } else if (_branchUndo == BranchUndo.Update) { Movie.UpdateBranch(Movie.GetBranch(_backupBranch.UniqueIdentifier), _backupBranch); - CallSavedCallback(Tastudio.CurrentTasMovie.Branches.IndexOf(_backupBranch)); + CallSavedCallback(Movie.Branches.IndexOf(_backupBranch)); GlobalWin.OSD.AddMessage("Branch Update canceled"); } else if (_branchUndo == BranchUndo.Text) @@ -384,7 +385,7 @@ namespace BizHawk.Client.EmuHawk { Movie.AddBranch(_backupBranch); BranchView.RowCount = Movie.BranchCount; - CallSavedCallback(Tastudio.CurrentTasMovie.Branches.IndexOf(_backupBranch)); + CallSavedCallback(Movie.Branches.IndexOf(_backupBranch)); GlobalWin.OSD.AddMessage("Branch Removal canceled"); } diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs index 0019b8e3eb..8b0647d1f6 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs @@ -191,7 +191,7 @@ namespace BizHawk.Client.EmuHawk this.Invoke(() => SavingProgressBar.Visible = true); for (;;) { - if (_seekBackgroundWorker.CancellationPending || !this.IsHandleCreated) + if (_seekBackgroundWorker.CancellationPending || !IsHandleCreated || !Mainform.PauseOnFrame.HasValue) { e.Cancel = true; break; From 56e77f490723d1b6bc08de0accbd8dba21108924 Mon Sep 17 00:00:00 2001 From: feos Date: Sat, 5 Jan 2019 21:48:40 +0300 Subject: [PATCH 064/301] tastudio: allow to actually unbind markers from input, and unbind by default --- BizHawk.Client.Common/movie/tasproj/TasMovie.cs | 4 ++-- BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs index 80b54f7c9a..a226d2d17f 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasMovie.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasMovie.cs @@ -65,7 +65,7 @@ namespace BizHawk.Client.Common Markers = new TasMovieMarkerList(this); Markers.CollectionChanged += Markers_CollectionChanged; Markers.Add(0, startsFromSavestate ? "Savestate" : "Power on"); - BindMarkersToInput = true; + BindMarkersToInput = false; CurrentBranch = -1; } @@ -84,7 +84,7 @@ namespace BizHawk.Client.Common Markers = new TasMovieMarkerList(this); Markers.CollectionChanged += Markers_CollectionChanged; Markers.Add(0, startsFromSavestate ? "Savestate" : "Power on"); - BindMarkersToInput = true; + BindMarkersToInput = false; CurrentBranch = -1; } diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs index 013f04ea77..f2eb9db437 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs @@ -822,6 +822,7 @@ namespace BizHawk.Client.EmuHawk SingleClickFloatEditMenuItem.Checked = Settings.SingleClickFloatEdit; OldControlSchemeForBranchesMenuItem.Checked = Settings.OldControlSchemeForBranches; LoadBranchOnDoubleclickMenuItem.Checked = Settings.LoadBranchOnDoubleClick; + BindMarkersToInputMenuItem.Checked = CurrentTasMovie.BindMarkersToInput; } private void SetMaxUndoLevelsMenuItem_Click(object sender, EventArgs e) From 3a8ae031d33763f6ba445a2e56841845c60cb0b9 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 5 Jan 2019 13:00:37 -0600 Subject: [PATCH 065/301] GBHawkLink: Fix state error. --- .../Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs | 5 ----- .../Consoles/Nintendo/GBHawkLink/GBHawkLink.IStatable.cs | 2 ++ 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs index 48ce21972b..1cebe9f5b4 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs @@ -14,11 +14,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink public ControllerDefinition ControllerDefinition => _controllerDeck.Definition; - public byte controller_state; - public bool in_vblank_old; - public bool in_vblank; - public bool vblank_rise; - public void FrameAdvance(IController controller, bool render, bool rendersound) { //Console.WriteLine("-----------------------FRAME-----------------------"); diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IStatable.cs index ffd05ea99f..5429566225 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IStatable.cs @@ -60,6 +60,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink ser.Sync("_cableconnected", ref _cableconnected); ser.Sync("_cablediscosignal", ref _cablediscosignal); _controllerDeck.SyncState(ser); + + LinkConnected = _cableconnected; } } } From b962f06e07cc5ab968816c72dd20e3a526e56722 Mon Sep 17 00:00:00 2001 From: Dan B Date: Sun, 6 Jan 2019 12:16:28 -0500 Subject: [PATCH 066/301] Fix quicknes --- .../Consoles/Nintendo/QuickNES/QuickNES.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs index fc632d8fa9..899ae0254f 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs @@ -21,7 +21,8 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES { static QuickNES() { - QN = BizInvoker.GetInvoker(new DynamicLibraryImportResolver(LibQuickNES.dllname), CallingConventionAdapters.Native); + Resolver = new DynamicLibraryImportResolver(LibQuickNES.dllname); + QN = BizInvoker.GetInvoker(Resolver, CallingConventionAdapters.Native); QN.qn_setup_mappers(); } @@ -73,6 +74,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES } static readonly LibQuickNES QN; + static readonly DynamicLibraryImportResolver Resolver; public IEmulatorServiceProvider ServiceProvider { get; private set; } From c0a28a320b873c1a07316760e8e6aed8c1154da1 Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Mon, 7 Jan 2019 22:01:57 +1000 Subject: [PATCH 067/301] Inconsequential changes (no whitespace) Remove useless semicolon, remove useless `? true : false`, move period to next line --- BizHawk.Client.DiscoHawk/DiscoHawkDialog.cs | 2 +- .../tools/BasicBot/BasicBot.cs | 4 ++-- .../CPUs/LR35902/Operations.cs | 2 +- BizHawk.Emulation.Cores/CPUs/Z80A/Operations.cs | 2 +- .../Media/Tape/PZX/PzxConverter.cs | 4 ++-- .../Consoles/Atari/A7800Hawk/A7800Hawk.cs | 2 +- .../Nintendo/GBHawk/Mappers/Mapper_MBC1_Multi.cs | 2 +- .../Nintendo/GBHawk/Mappers/Mapper_MBC2.cs | 2 +- .../Nintendo/GBHawk/Mappers/Mapper_MBC3.cs | 2 +- .../Nintendo/GBHawk/Mappers/Mapper_MBC7.cs | 4 ++-- .../Consoles/Nintendo/NES/Boards/Cony.cs | 2 +- .../Consoles/Nintendo/NES/Boards/Mapper222.cs | 16 ++++++++-------- .../Consoles/Nintendo/NES/PPU.cs | 2 +- .../Consoles/Sega/gpgx64/GPGX.IVideoProvider.cs | 2 +- 14 files changed, 24 insertions(+), 24 deletions(-) diff --git a/BizHawk.Client.DiscoHawk/DiscoHawkDialog.cs b/BizHawk.Client.DiscoHawk/DiscoHawkDialog.cs index 557d15aa87..14992bcf97 100644 --- a/BizHawk.Client.DiscoHawk/DiscoHawkDialog.cs +++ b/BizHawk.Client.DiscoHawk/DiscoHawkDialog.cs @@ -95,7 +95,7 @@ namespace BizHawk.Client.DiscoHawk } var cueBin = boundDisc.DumpCueBin(boundDiscRecord.BaseName, GetCuePrefs()); - txtCuePreview.Text = cueBin.cue.Replace("\n", "\r\n"); ; + txtCuePreview.Text = cueBin.cue.Replace("\n", "\r\n"); } private void btnPresetCanonical_Click(object sender, EventArgs e) diff --git a/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.cs b/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.cs index 2c6392854c..5c3e484926 100644 --- a/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.cs +++ b/BizHawk.Client.EmuHawk/tools/BasicBot/BasicBot.cs @@ -350,8 +350,8 @@ namespace BizHawk.Client.EmuHawk set { - var item = StartFromSlotBox.Items. - OfType() + var item = StartFromSlotBox.Items + .OfType() .FirstOrDefault(o => o.ToString() == value); if (item != null) diff --git a/BizHawk.Emulation.Cores/CPUs/LR35902/Operations.cs b/BizHawk.Emulation.Cores/CPUs/LR35902/Operations.cs index e317416265..cddd89dd72 100644 --- a/BizHawk.Emulation.Cores/CPUs/LR35902/Operations.cs +++ b/BizHawk.Emulation.Cores/CPUs/LR35902/Operations.cs @@ -159,7 +159,7 @@ namespace BizHawk.Emulation.Common.Components.LR35902 public void SRL_Func(ushort src) { - FlagC = Regs[src].Bit(0) ? true : false; + FlagC = Regs[src].Bit(0); Regs[src] = (ushort)(Regs[src] >> 1); diff --git a/BizHawk.Emulation.Cores/CPUs/Z80A/Operations.cs b/BizHawk.Emulation.Cores/CPUs/Z80A/Operations.cs index d643ce06c8..1212430187 100644 --- a/BizHawk.Emulation.Cores/CPUs/Z80A/Operations.cs +++ b/BizHawk.Emulation.Cores/CPUs/Z80A/Operations.cs @@ -267,7 +267,7 @@ namespace BizHawk.Emulation.Cores.Components.Z80A public void SRL_Func(ushort src) { - FlagC = Regs[src].Bit(0) ? true : false; + FlagC = Regs[src].Bit(0); Regs[src] = (ushort)(Regs[src] >> 1); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/PZX/PzxConverter.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/PZX/PzxConverter.cs index 6ada823be8..ed35aadf55 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/PZX/PzxConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/PZX/PzxConverter.cs @@ -249,7 +249,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum dCount = GetInt32(b, pos); initPulseLevel = (uint)((dCount & 0x80000000) == 0 ? 0 : 1); - t.InitialPulseLevel = initPulseLevel == 1 ? true : false; + t.InitialPulseLevel = initPulseLevel == 1; dCount = (int)(dCount & 0x7FFFFFFF); pos += 4; @@ -334,7 +334,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum var d = GetInt32(b, pos); iniPulseLevel = ((d & 0x80000000) == 0 ? 0 : 1); - t.InitialPulseLevel = iniPulseLevel == 1 ? true : false; + t.InitialPulseLevel = iniPulseLevel == 1; pCount = (d & 0x7FFFFFFF); // convert to tape block diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.cs b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.cs index 7d64189dca..2651c1f893 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.cs @@ -172,7 +172,7 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk byte cart_1 = header[0x35]; byte cart_2 = header[0x36]; - _isPAL = (header[0x39] > 0) ? true : false; + _isPAL = (header[0x39] > 0); if (cart_2.Bit(1)) { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_MBC1_Multi.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_MBC1_Multi.cs index 06f64f781a..3d84b4fde2 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_MBC1_Multi.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_MBC1_Multi.cs @@ -120,7 +120,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk { if (addr < 0x2000) { - RAM_enable = ((value & 0xA) == 0xA) ? true : false; + RAM_enable = ((value & 0xA) == 0xA); } else if (addr < 0x4000) { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_MBC2.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_MBC2.cs index e18a829d62..9d82306f50 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_MBC2.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_MBC2.cs @@ -81,7 +81,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk { if ((addr & 0x100) == 0) { - RAM_enable = ((value & 0xA) == 0xA) ? true : false; + RAM_enable = ((value & 0xA) == 0xA); } } else if (addr < 0x4000) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_MBC3.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_MBC3.cs index 840bc5ba37..f52c8c6e65 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_MBC3.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_MBC3.cs @@ -142,7 +142,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk { if (addr < 0x2000) { - RAM_enable = ((value & 0xA) == 0xA) ? true : false; + RAM_enable = ((value & 0xA) == 0xA); } else if (addr < 0x4000) { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_MBC7.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_MBC7.cs index 1e733479de..ba00d55c9d 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_MBC7.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/Mappers/Mapper_MBC7.cs @@ -419,11 +419,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk case 5: if ((instr_clocks >= 0) && (instr_clocks <= 7)) { - DO = ((Core.cart_RAM[EE_addr * 2 + 1] >> (7 - instr_clocks)) & 1) == 1 ? true : false; + DO = ((Core.cart_RAM[EE_addr * 2 + 1] >> (7 - instr_clocks)) & 1) == 1; } else if ((instr_clocks >= 8) && (instr_clocks <= 15)) { - DO = ((Core.cart_RAM[EE_addr * 2] >> (15 - instr_clocks)) & 1) == 1 ? true : false; + DO = ((Core.cart_RAM[EE_addr * 2] >> (15 - instr_clocks)) & 1) == 1; } if (instr_clocks == 15) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Cony.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Cony.cs index b1ac0da1c2..3decb3fb74 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Cony.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Cony.cs @@ -451,7 +451,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES else if (addr == 0x200) { - IRQCount &= 0xFF00; IRQCount |= value; ; + IRQCount &= 0xFF00; IRQCount |= value; IRQSignal = false; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Mapper222.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Mapper222.cs index d249370787..52607fcd15 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Mapper222.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Mapper222.cs @@ -66,14 +66,14 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES //Console.WriteLine("IRQ GO: SL {0} val {1}", NES.ppu.ppur.status.sl, value); //break; case 0x1000: SetMirrorType(!value.Bit(0) ? EMirrorType.Vertical : EMirrorType.Horizontal);break; - case 0x3000: chr[0] = value & chr_bank_mask_1k; ; break; - case 0x3002: chr[1] = value & chr_bank_mask_1k; ; break; - case 0x4000: chr[2] = value & chr_bank_mask_1k; ; break; - case 0x4002: chr[3] = value & chr_bank_mask_1k; ; break; - case 0x5000: chr[4] = value & chr_bank_mask_1k; ; break; - case 0x5002: chr[5] = value & chr_bank_mask_1k; ; break; - case 0x6000: chr[6] = value & chr_bank_mask_1k; ; break; - case 0x6002: chr[7] = value & chr_bank_mask_1k; ; break; + case 0x3000: chr[0] = value & chr_bank_mask_1k; break; + case 0x3002: chr[1] = value & chr_bank_mask_1k; break; + case 0x4000: chr[2] = value & chr_bank_mask_1k; break; + case 0x4002: chr[3] = value & chr_bank_mask_1k; break; + case 0x5000: chr[4] = value & chr_bank_mask_1k; break; + case 0x5002: chr[5] = value & chr_bank_mask_1k; break; + case 0x6000: chr[6] = value & chr_bank_mask_1k; break; + case 0x6002: chr[7] = value & chr_bank_mask_1k; break; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs index 36df0ab4c3..0fb724ce31 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs @@ -307,7 +307,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES string str = "oamdata" + i.ToString() + "y"; oam_byte = t_oam[i].oam_y; ser.Sync(str, ref oam_byte); t_oam[i].oam_y = oam_byte; str = "oamdata" + i.ToString() + "ind"; - oam_byte = t_oam[i].oam_ind; ; ser.Sync(str, ref oam_byte); t_oam[i].oam_ind = oam_byte; + oam_byte = t_oam[i].oam_ind; ser.Sync(str, ref oam_byte); t_oam[i].oam_ind = oam_byte; str = "oamdata" + i.ToString() + "attr"; oam_byte = t_oam[i].oam_attr; ser.Sync(str, ref oam_byte); t_oam[i].oam_attr = oam_byte; str = "oamdata" + i.ToString() + "x"; diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IVideoProvider.cs b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IVideoProvider.cs index 9eaa69b291..69f2250c13 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IVideoProvider.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IVideoProvider.cs @@ -78,7 +78,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx for (int i = 0; i < xpad; i++) *pdst++ = unchecked((int)0xff000000); for (int i = 0; i < gpwidth; i++) - *pdst++ = *psrc++; ; + *pdst++ = *psrc++; for (int i = 0; i < xpad2; i++) *pdst++ = unchecked((int)0xff000000); psrc += rinc; From 5f642845e710cd56981ae8f4af0d64c65a1bf598 Mon Sep 17 00:00:00 2001 From: James Groom Date: Tue, 8 Jan 2019 16:08:37 +1000 Subject: [PATCH 068/301] draft 1 --- README.md | 89 +++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 74 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 05d9dd6cda..18ec806b05 100644 --- a/README.md +++ b/README.md @@ -1,23 +1,84 @@ # BizHawk +![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&style=flat) + BizHawk is a multi-system emulator written in C#. BizHawk provides nice features for casual gamers such as fullscreen, rewind, and joypad support in addition to rerecording and debugging tools for all system cores. -[Release Notes](http://tasvideos.org/Bizhawk/ReleaseHistory.html) +## Installing — Windows 7/8.1/10 + +Released binaries can be found right here on GitHub: + +[![Windows | binaries](https://img.shields.io/badge/Windows-binaries-%230078D6.svg?logo=windows&logoColor=0078D6&style=popout)](http://github.com/TASVideos/BizHawk/releases) + +Click `BizHawk-.zip` to download it. Also note the changelog, the full version of which is [on tasvideos.org](http://tasvideos.org/Bizhawk/ReleaseHistory.html). **Don't mix different versions** of BizHawk, keep each version in its own folder. + +Before you start (by running `EmuHawk.exe`), make sure you have the Windows-only prerequisites installed: .NET Framework 4.6.1; Visual C++ 2010 SP1, 2012, and 2015; and Direct3D 9. If you have a few Steam games, chances are these are already installed, otherwise you can get them all at once with [this program](http://github.com/TASVideos/BizHawk-Prereqs/releases). + +BizHawk functions like a "portable" program, you may move or rename the folder containing `EmuHawk.exe`, even to another drive, as long as the prerequisites are installed when you go to run it. + +Win7 is supported from SP1, Win8 is supported from 8.1, and Win10 is supported from 1709 "Redstone 3", following [Microsoft's support lifecycle](https://support.microsoft.com/en-us/help/13853/windows-lifecycle-fact-sheet). + +## Installing — GNU+Linux and macOS + +Install BizHawk with your distro's package manager. The package name is given on each button below, and some buttons are links. For the changelog, [see tasvideos.org](http://tasvideos.org/Bizhawk/ReleaseHistory.html). + +[![Arch Linux (AUR) | bizhawk](https://img.shields.io/badge/Arch_Linux_(AUR)-bizhawk-%231793D1.svg?logo=arch-linux&style=popout)](https://aur.archlinux.org/packages/bizhawk) +[![CentOS | bizhawk](https://img.shields.io/badge/CentOS-bizhawk-%23941D7A.svg?logo=centos&style=popout)](https://example.com/bizhawk) +[![Debian (Launchpad) | bizhawk](https://img.shields.io/badge/Debian_(Launchpad)-bizhawk-%23A81D33.svg?logo=debian&style=popout)](https://example.com/bizhawk) +[![elementaryOS (Launchpad) | bizhawk](https://img.shields.io/badge/elementaryOS-bizhawk-%2364BAFF.svg?logo=elementary&style=popout)](https://example.com/bizhawk) +[![Fedora | bizhawk](https://img.shields.io/badge/Fedora-bizhawk-%23294172.svg?logo=fedora&style=popout)](https://example.com/bizhawk) +[![Gentoo | bizhawk](https://img.shields.io/badge/Gentoo-bizhawk-%234E4371.svg?logo=gentoo&style=popout)](https://example.com/bizhawk) +[![Hyperbola | bizhawk](https://img.shields.io/badge/Hyperbola-bizhawk-black.svg?logo=hyperbola&style=popout)](https://example.com/bizhawk) +[![Linux Mint (Launchpad) | bizhawk](https://img.shields.io/badge/Linux_Mint_(Launchpad)-bizhawk-%2387CF3E.svg?logo=linux-mint&style=popout)](https://example.com/bizhawk) +[![macOS (Homebrew) | bizhawk](https://img.shields.io/badge/macOS_(Homebrew)-bizhawk-%23999999.svg?logo=apple&style=popout)](https://example.com/bizhawk) +[![Manjaro (AUR) | bizhawk](https://img.shields.io/badge/Manjaro_(AUR)-bizhawk-%2335BF5C.svg?logo=manjaro&style=popout)](https://aur.archlinux.org/packages/bizhawk) +[![MX Linux | bizhawk](https://img.shields.io/badge/MX_Linux-bizhawk-%23506E88.svg?logo=mx-linux&style=popout)](https://example.com/bizhawk) +[![NixOS | bizhawk](https://img.shields.io/badge/NixOS-bizhawk-%234F73BC.svg?colorA=7EB5E0&logo=nixos&style=popout)](https://example.com/bizhawk) +[![openSUSE | bizhawk](https://img.shields.io/badge/openSUSE-bizhawk-%236DA741.svg?logo=opensuse&style=popout)](https://example.com/bizhawk) +[![Solus | bizhawk](https://img.shields.io/badge/Solus-bizhawk-%235294E2.svg?colorA=4C5164&logo=solus&style=popout)](https://example.com/bizhawk) +[![SteamOS (Launchpad) | bizhawk](https://img.shields.io/badge/SteamOS-bizhawk-%231B2838.svg?logo=steam&logoColor=1B2838&style=popout)](https://example.com/bizhawk) +[![Ubuntu (Launchpad) | bizhawk](https://img.shields.io/badge/Ubuntu_(Launchpad)-bizhawk-%23E95420.svg?colorA=772953&logo=ubuntu&style=popout)](https://example.com/bizhawk) + +Is your distro not there? Released binaries can be found right here on GitHub: + +[![Misc. Linux | binaries](https://img.shields.io/badge/Misc._Linux-binaries-%23FCC624.svg?logo=linux&logoColor=black&style=popout)](http://github.com/TASVideos/BizHawk/releases) + +If you download BizHawk this way, **don't mix different versions**, keep each version in its own folder. Run `EmuHawkMono.sh` to give Mono the library and executable paths - you can run it from anywhere, so putting it in a .desktop file is fine. If running the script doesn't start EmuHawk, you may need to edit it (if you use a terminal, it will say so in the output). + +Linux distros are supported if the distributor is still supporting your version, you're using Linux 4.4/4.9/4.14/4.19 LTS or 4.20, and there are no updates available in your package manager. *Please* update and reboot. + +macOS is supported from 10.11 "El Capitan" (Darwin 15.6). Apple doesn't seem to care about lifecycles, so we'll go with 6 months from the last security update. + +## Building + +If you want to test the latest changes without building BizHawk yourself, grab the developer build from [AppVeyor](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history). Pick the topmost one that doesn't say "Pull request", then click "Artifacts" and download the single listed file (it's compressed as .zip). + +If you use GNU+Linux, there might be a `bizhawk-git` package or similar in the same repo as `bizhawk`. This will build and install from the `master` branch here on GitHub. + +### GNU+Linux and macOS + +TODO + +### Windows 7/8.1/10 + +TODO + +## Usage and troubleshooting (casual) + +TODO + +## Usage (TASing or romhacking) + +TODO + +## License + +TODO + +## junk [Here](http://tasvideos.org/Bizhawk/Features.html) is a list of features offered by bizhawk. -## Download Binaries - -Windows users, don't forget to run the [prereq installer](http://github.com/TASVideos/BizHawk-Prereqs/releases) first! - -Release binaries can be found on [on github](http://github.com/TASVideos/BizHawk/releases) - -[Developer build](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/build/artifacts) of the most recent commit - -Never mix different versions of BizHawk. Keep each version in its own folder. - -## Supported Systems - * Nintendo Entertainment System / Famicom / Famicom Disk System (NES/FDS) * Super Nintendo (SNES) * Nintendo 64 @@ -38,8 +99,6 @@ Never mix different versions of BizHawk. Keep each version in its own folder. * Commodore 64 * Sinclair ZX Spectrum -## Resources - [BizHawk homepage](http://tasvideos.org/Bizhawk.html) [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) - Frequently Asked Questions / Troubleshooting From a53f1f97dc014fae82fc58cff88b9d38d3e1de9c Mon Sep 17 00:00:00 2001 From: James Groom Date: Tue, 8 Jan 2019 16:37:17 +1000 Subject: [PATCH 069/301] draft 2 --- README.md | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 18ec806b05..9256672fce 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ Click `BizHawk-.zip` to download it. Also note the changelog, the full Before you start (by running `EmuHawk.exe`), make sure you have the Windows-only prerequisites installed: .NET Framework 4.6.1; Visual C++ 2010 SP1, 2012, and 2015; and Direct3D 9. If you have a few Steam games, chances are these are already installed, otherwise you can get them all at once with [this program](http://github.com/TASVideos/BizHawk-Prereqs/releases). -BizHawk functions like a "portable" program, you may move or rename the folder containing `EmuHawk.exe`, even to another drive, as long as the prerequisites are installed when you go to run it. +BizHawk functions like a "portable" program, you may move or rename the folder containing `EmuHawk.exe`, even to another drive, as long as you keep all the files together and the prerequisites are installed when you go to run it. Win7 is supported from SP1, Win8 is supported from 8.1, and Win10 is supported from 1709 "Redstone 3", following [Microsoft's support lifecycle](https://support.microsoft.com/en-us/help/13853/windows-lifecycle-fact-sheet). @@ -39,11 +39,13 @@ Install BizHawk with your distro's package manager. The package name is given on [![SteamOS (Launchpad) | bizhawk](https://img.shields.io/badge/SteamOS-bizhawk-%231B2838.svg?logo=steam&logoColor=1B2838&style=popout)](https://example.com/bizhawk) [![Ubuntu (Launchpad) | bizhawk](https://img.shields.io/badge/Ubuntu_(Launchpad)-bizhawk-%23E95420.svg?colorA=772953&logo=ubuntu&style=popout)](https://example.com/bizhawk) -Is your distro not there? Released binaries can be found right here on GitHub: +If you run `EmuHawkMono.sh` from a terminal, note that `File > Exit (Alt+F4)` doesn't terminate the process correctly, you'll need to send SIGINT (`^C`). + +Is your distro not there? Released binaries can be found right here on GitHub (same download as for Windows): [![Misc. Linux | binaries](https://img.shields.io/badge/Misc._Linux-binaries-%23FCC624.svg?logo=linux&logoColor=black&style=popout)](http://github.com/TASVideos/BizHawk/releases) -If you download BizHawk this way, **don't mix different versions**, keep each version in its own folder. Run `EmuHawkMono.sh` to give Mono the library and executable paths - you can run it from anywhere, so putting it in a .desktop file is fine. If running the script doesn't start EmuHawk, you may need to edit it (if you use a terminal, it will say so in the output). +If you download BizHawk this way, **don't mix different versions**, keep each version in its own folder. Run `EmuHawkMono.sh` to give Mono the library and executable paths — you can run it from anywhere, so putting it in a .desktop file is fine. If running the script doesn't start EmuHawk, you may need to edit it (if you use a terminal, it will say so in the output). Linux distros are supported if the distributor is still supporting your version, you're using Linux 4.4/4.9/4.14/4.19 LTS or 4.20, and there are no updates available in your package manager. *Please* update and reboot. @@ -51,13 +53,28 @@ macOS is supported from 10.11 "El Capitan" (Darwin 15.6). Apple doesn't seem to ## Building -If you want to test the latest changes without building BizHawk yourself, grab the developer build from [AppVeyor](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history). Pick the topmost one that doesn't say "Pull request", then click "Artifacts" and download the single listed file (it's compressed as .zip). +If you want to test the latest changes without building BizHawk yourself, grab the developer build from [AppVeyor](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history). Pick the topmost one that doesn't say "Pull request", then click "Artifacts" and download `BizHawk_Developer--#.zip`. -If you use GNU+Linux, there might be a `bizhawk-git` package or similar in the same repo as `bizhawk`. This will build and install from the `master` branch here on GitHub. +If you use GNU+Linux, there might be a `bizhawk-git` package or similar in the same repo as the main package. If it's available, installing it will automate the build process. ### GNU+Linux and macOS -TODO +*Compiling* requires MSBuild and *running* requires Mono and WINE, but **BizHawk does not run under WINE** — only the bundled libraries are required. + +Building is as easy as: +```sh +git clone https://github.com/TASVideos/BizHawk.git BizHawk_master && cd BizHawk_master +# or ssh: git clone git@github.com:TASVideos/BizHawk.git BizHawk_master && cd BizHawk_master +msbuild BizHawk.sln +``` + +Running is even easier, just execute `EmuHawkMono.sh` in the repo's `output` folder (this folder is what gets distributed in a Release build, you can move/rename it). + +If your distro isn't listed under *Installing* above, you might get an "Unknown distro" warning in the terminal, and BizHawk may not open or may show the missing dependencies dialog. You may need to add your distro to the case statement in the script, setting `libpath` to the location of `d3dx9_43.dll.so` (please do share if you get it working). + +Again, if your distro isn't listed above, `libblip_buf` probably isn't in your package repos. You can easily [build it yourself](https://gitlab.com/TASVideos/libblip_buf/blob/unified/README.md). + +Otherwise, see the *Installing* section above. ### Windows 7/8.1/10 From b7f2363584f6b6a647d0bb8912225d891ddc7544 Mon Sep 17 00:00:00 2001 From: Asnivor Date: Tue, 8 Jan 2019 11:53:27 +0000 Subject: [PATCH 070/301] EmuHawk: Change deterministic back to how it was before. TRUE if a movie is queued, FALSE if not (and let the cores manage this setting further down the foodchain if they want to). Without this, mGBA skipbios will never work #1432 --- BizHawk.Client.EmuHawk/MainForm.cs | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 28f0311d31..6693e69650 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -3594,25 +3594,18 @@ namespace BizHawk.Client.EmuHawk if (args.Deterministic == null) { - // force deterministic in this case - // this is usually null for most cores - // previously this was getting set to false if a movie was not queued for recording - surely that can't be good.. - deterministic = true; - } + // movies should require deterministic emulation in ALL cases + // if the core is managing its own DE through SyncSettings a 'deterministic' bool can be passed into the core's constructor + // it is then up to the core itself to override its own local DeterministicEmulation setting + // if a movie is *not* queued then make this false (this is needed for mGBA logic and is how things were working before I changed them -Asni) + deterministic = Global.MovieSession.QueuedMovie != null; + } else { // a value was actually supplied somehow - use this deterministic = args.Deterministic.Value; } - if (Global.MovieSession.QueuedMovie != null) - { - // movies should require deterministic emulation in ALL cases - // if the core is managing its own DE through SyncSettings a 'deterministic' bool should be passed into the core's constructor - // it is then up to the core itself to override its own local DeterministicEmulation setting - deterministic = true; - } - if (!GlobalWin.Tools.AskSave()) { return false; From a6b371727197a85ef625aeb7443080d271472f5f Mon Sep 17 00:00:00 2001 From: James Groom Date: Tue, 8 Jan 2019 21:56:04 +1000 Subject: [PATCH 071/301] draft 3 --- README.md | 112 +++++++++++++++++++++++++++++++++++------------------- 1 file changed, 72 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index 9256672fce..6fe249b572 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,41 @@ BizHawk is a multi-system emulator written in C#. BizHawk provides nice features for casual gamers such as fullscreen, rewind, and joypad support in addition to rerecording and debugging tools for all system cores. +## Core feature matrix + +Most games for every system in the table will run perfectly, and every system supports fast-forward, frame advance, and rewind. + +System | Play+FF/ADV/RW | Debugging | (Input) Recording +--:|:-:|:-:|:-: +Apple II | ✓ | ? | ? +Atari 2600 | ✓ | ? | ? +Atari 7800 | ✓ | ? | ? +Atari Lynx | ✓ | ? | ? +ColecoVision | ✓ | ? | ? +Commodore 64 | ✓ | ? | ? +Game Boy / GBC | ✓ | ? | ? +GBA | ✓ | ? | ? +Genesis | ✓ | ? | ? +IntelliVision | ✓ | ? | ? +Master System | ✓ | ? | ? +N64 | ✓ | ? | ? +Neo Geo Pocket | ✓ | ? | ? +NES | ✓ | ? | ? +PSX | ✓ | ? | ? +Saturn | ✓ | ? | ? +SNES | ✓ | ? | ? +TI-83 | ✓ | ? | ? +TurboGrafx-16 | ✓ | ? | ? +Virtual Boy | ✓ | ? | ? +WonderSwan | ✓ | ? | ? +ZX Spectrum | ✓ | ? | ? + +EmuHawk's frontend also has a comprehensive input mapper, with keyboard and controller support (even simultaneously), hotkeys, and turbo/rapid fire. + +In addition to input recording (with TAStudio), you can also record the emulated system's audio and video, either of your own gameplay or of a prerecorded movie (TAS). See the *Usage (advanced)* section below for more info about the many debugging and recording features. + +Most of the frontend can be controlled with Lua scripts (only on Windows for now). These scripts can draw overlays for casual play or for RTA speedruns, change the running game to add complex cheats, assist TASers and romhackers in debugging a game, and more. + ## Installing — Windows 7/8.1/10 Released binaries can be found right here on GitHub: @@ -74,57 +109,54 @@ If your distro isn't listed under *Installing* above, you might get an "Unknown Again, if your distro isn't listed above, `libblip_buf` probably isn't in your package repos. You can easily [build it yourself](https://gitlab.com/TASVideos/libblip_buf/blob/unified/README.md). -Otherwise, see the *Installing* section above. +Once built, see the *Installing* section above. ### Windows 7/8.1/10 TODO -## Usage and troubleshooting (casual) +[Compiling](http://tasvideos.org/Bizhawk/Compiling.html) + +## Usage (casual) TODO -## Usage (TASing or romhacking) +## Usage (advanced) TODO +[Commandline](http://tasvideos.org/Bizhawk/CommandLine.html) + +[CompactDiscInfoDump](http://tasvideos.org/Bizhawk/CompactDiscInfoDump.html) + +[Rerecording](http://tasvideos.org/Bizhawk/Rerecording.html) + +[TAS movie file format](http://tasvideos.org/Bizhawk/TASFormat.html) + +## Troubleshooting and support + +TODO + +[BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) + +[BizHawk wiki](http://tasvideos.org/Bizhawk.html) + +[FAQ](http://tasvideos.org/Bizhawk/FAQ.html) + +## Contributing + +BizHawk is Open Source Software, so you're free to modify it however you please, and if you do, we invite you to share! Under the MIT license, this is *optional*, just be careful with reusing cores as some have copyleft licenses. + +If you've already made changes, the best way to contribute is with a Pull Request here on GitHub. If you're looking for something to do, check the issue tracker here on GitHub: + +[![GitHub open issues counter](https://img.shields.io/github/issues-raw/TASVideos/BizHawk.svg?logo=github&style=flat)](https://github.com/TASVideos/BizHawk/issues) + +It's a good idea to check if anyone else is working on an issue by asking on IRC: + +[![IRC | chat.freenode.net #bizhawk](https://img.shields.io/badge/IRC-chat.freenode.net_%23bizhawk-black.svg?style=flat)](ircs://chat.freenode.net:6697/bizhawk) +[![Matrix (via bridge) | #freenode_#bizhawk:matrix.org](https://img.shields.io/badge/Matrix_(via_bridge)-%23freenode__%23bizhawk:matrix.org-black.svg?logo=matrix&style=flat)](https://matrix.to/#/#freenode_#bizhawk:matrix.org) +[![freenode webchat | #bizhawk](https://img.shields.io/badge/freenode_webchat-%23bizhawk-black.svg?style=flat)](http://webchat.freenode.net/?channels=bizhawk) + ## License TODO - -## junk - -[Here](http://tasvideos.org/Bizhawk/Features.html) is a list of features offered by bizhawk. - - * Nintendo Entertainment System / Famicom / Famicom Disk System (NES/FDS) - * Super Nintendo (SNES) - * Nintendo 64 - * Game Boy, Game Boy Color, and Super Game Boy - * Game Boy Advance - * Sony PlayStation - * Sega Master System, Game Gear, and SG-1000 - * Sega Genesis / Sega-CD - * Sega Saturn - * PC-Engine (TurboGrafx-16) / CD-ROM & SuperGrafx - * Atari 2600 - * Atari 7800 - * Atari Lynx - * ColecoVision - * TI-83 Calculator - * Wonderswan and Wonderswan Color - * Apple II - * Commodore 64 - * Sinclair ZX Spectrum - -[BizHawk homepage](http://tasvideos.org/Bizhawk.html) - -[FAQ](http://tasvideos.org/Bizhawk/FAQ.html) - Frequently Asked Questions / Troubleshooting - -[Compiling](http://tasvideos.org/Bizhawk/Compiling.html) - What is needed to compile BizHawk src - -[CompactDiscInfoDump](http://tasvideos.org/Bizhawk/CompactDiscInfoDump.html) - A concise explanation of compact disc CDs, gathered for the first time EVER in one location, and mostly inaccurate - -[Rerecording](http://tasvideos.org/Bizhawk/Rerecording.html) - (Work in progress) - Documentation of the rerecording implementation of BizHawk - * [TAS movie file format](http://tasvideos.org/Bizhawk/TASFormat.html) - Mnemonic patterns for each platform for .tas (input) files. - -[Commandline](http://tasvideos.org/Bizhawk/CommandLine.html) - Documentation of the command line options in BizHawk From 4c5728dedb36e14cef9b224bd43827997eff05e1 Mon Sep 17 00:00:00 2001 From: Asnivor Date: Tue, 8 Jan 2019 12:48:40 +0000 Subject: [PATCH 072/301] EmuHawk: Deterministic Emulation Revert --- BizHawk.Client.EmuHawk/MainForm.cs | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 6693e69650..78a1fa21bd 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -3589,23 +3589,12 @@ namespace BizHawk.Client.EmuHawk } try - { - bool deterministic; - - if (args.Deterministic == null) - { - // movies should require deterministic emulation in ALL cases - // if the core is managing its own DE through SyncSettings a 'deterministic' bool can be passed into the core's constructor - // it is then up to the core itself to override its own local DeterministicEmulation setting - // if a movie is *not* queued then make this false (this is needed for mGBA logic and is how things were working before I changed them -Asni) - deterministic = Global.MovieSession.QueuedMovie != null; - } - else - { - // a value was actually supplied somehow - use this - deterministic = args.Deterministic.Value; - } - + { + // movies should require deterministic emulation in ALL cases + // if the core is managing its own DE through SyncSettings a 'deterministic' bool can be passed into the core's constructor + // it is then up to the core itself to override its own local DeterministicEmulation setting + bool deterministic = args.Deterministic ?? Global.MovieSession.QueuedMovie != null; + if (!GlobalWin.Tools.AskSave()) { return false; From 47064f3d21bc9a727bcacb7a73119a6695dd39f7 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 9 Jan 2019 03:52:51 +1000 Subject: [PATCH 073/301] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6fe249b572..8974b9173f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # BizHawk -![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&style=flat) +[![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&style=flat)](https://github.com/TASVideos/BizHawk/releases/latest) ![Unique systems emulated | 22](https://img.shields.io/badge/Unique_systems_emulated-22-darkgreen.svg?style=flat) BizHawk is a multi-system emulator written in C#. BizHawk provides nice features for casual gamers such as fullscreen, rewind, and joypad support in addition to rerecording and debugging tools for all system cores. @@ -43,11 +43,11 @@ Most of the frontend can be controlled with Lua scripts (only on Windows for now Released binaries can be found right here on GitHub: -[![Windows | binaries](https://img.shields.io/badge/Windows-binaries-%230078D6.svg?logo=windows&logoColor=0078D6&style=popout)](http://github.com/TASVideos/BizHawk/releases) +[![Windows | binaries](https://img.shields.io/badge/Windows-binaries-%230078D6.svg?logo=windows&logoColor=0078D6&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) Click `BizHawk-.zip` to download it. Also note the changelog, the full version of which is [on tasvideos.org](http://tasvideos.org/Bizhawk/ReleaseHistory.html). **Don't mix different versions** of BizHawk, keep each version in its own folder. -Before you start (by running `EmuHawk.exe`), make sure you have the Windows-only prerequisites installed: .NET Framework 4.6.1; Visual C++ 2010 SP1, 2012, and 2015; and Direct3D 9. If you have a few Steam games, chances are these are already installed, otherwise you can get them all at once with [this program](http://github.com/TASVideos/BizHawk-Prereqs/releases). +Before you start (by running `EmuHawk.exe`), make sure you have the Windows-only prerequisites installed: .NET Framework 4.6.1; Visual C++ 2010 SP1, 2012, and 2015; and Direct3D 9. If you have a few Steam games, chances are these are already installed, otherwise you can get them all at once with [this program](https://github.com/TASVideos/BizHawk-Prereqs/releases/latest). BizHawk functions like a "portable" program, you may move or rename the folder containing `EmuHawk.exe`, even to another drive, as long as you keep all the files together and the prerequisites are installed when you go to run it. @@ -78,7 +78,7 @@ If you run `EmuHawkMono.sh` from a terminal, note that `File > Exit (Alt+F4)` do Is your distro not there? Released binaries can be found right here on GitHub (same download as for Windows): -[![Misc. Linux | binaries](https://img.shields.io/badge/Misc._Linux-binaries-%23FCC624.svg?logo=linux&logoColor=black&style=popout)](http://github.com/TASVideos/BizHawk/releases) +[![Misc. Linux | binaries](https://img.shields.io/badge/Misc._Linux-binaries-%23FCC624.svg?logo=linux&logoColor=black&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) If you download BizHawk this way, **don't mix different versions**, keep each version in its own folder. Run `EmuHawkMono.sh` to give Mono the library and executable paths — you can run it from anywhere, so putting it in a .desktop file is fine. If running the script doesn't start EmuHawk, you may need to edit it (if you use a terminal, it will say so in the output). From 689eb388018942fb0969bca573a73b28e6c57359 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 9 Jan 2019 03:57:51 +1000 Subject: [PATCH 074/301] Copy blurb from GitLab mirror --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8974b9173f..11f858ae01 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&style=flat)](https://github.com/TASVideos/BizHawk/releases/latest) ![Unique systems emulated | 22](https://img.shields.io/badge/Unique_systems_emulated-22-darkgreen.svg?style=flat) -BizHawk is a multi-system emulator written in C#. BizHawk provides nice features for casual gamers such as fullscreen, rewind, and joypad support in addition to rerecording and debugging tools for all system cores. +A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). ## Core feature matrix From 0005b938e0a632e55d153a4cb0e4479e391e88f2 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 9 Jan 2019 15:53:31 +1000 Subject: [PATCH 075/301] Update README.md --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 11f858ae01..e3a26c0df7 100644 --- a/README.md +++ b/README.md @@ -154,9 +154,14 @@ If you've already made changes, the best way to contribute is with a Pull Reques It's a good idea to check if anyone else is working on an issue by asking on IRC: [![IRC | chat.freenode.net #bizhawk](https://img.shields.io/badge/IRC-chat.freenode.net_%23bizhawk-black.svg?style=flat)](ircs://chat.freenode.net:6697/bizhawk) -[![Matrix (via bridge) | #freenode_#bizhawk:matrix.org](https://img.shields.io/badge/Matrix_(via_bridge)-%23freenode__%23bizhawk:matrix.org-black.svg?logo=matrix&style=flat)](https://matrix.to/#/#freenode_#bizhawk:matrix.org) +[![Matrix (IRC bridge) | #freenode_#bizhawk:matrix.org](https://img.shields.io/badge/Matrix_(IRC_bridge)-%23freenode__%23bizhawk:matrix.org-black.svg?logo=matrix&style=flat)](https://matrix.to/#/#freenode_#bizhawk:matrix.org) [![freenode webchat | #bizhawk](https://img.shields.io/badge/freenode_webchat-%23bizhawk-black.svg?style=flat)](http://webchat.freenode.net/?channels=bizhawk) +And of course, open a "feature request" issue before adding features. No point making something that no-one's going to use. + ## License -TODO +From the [full text](https://github.com/TASVideos/BizHawk/blob/master/LICENSE): +> This repository contains original work chiefly in c# by the BizHawk team (which is all provided under the MIT License), embedded submodules from other authors with their own licenses clearly provided, other embedded submodules from other authors WITHOUT their own licenses clearly provided, customizations by the BizHawk team to many of those submodules (which is provided under the MIT license), and compiled binary executable modules from other authors without their licenses OR their origins clearly indicated. + +In short, the frontend is MIT, and past that you're on your own. From a43eacaa40a8e7173504d040df40a7cec2b5105d Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 9 Jan 2019 15:54:24 +1000 Subject: [PATCH 076/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e3a26c0df7..d367efc523 100644 --- a/README.md +++ b/README.md @@ -164,4 +164,4 @@ And of course, open a "feature request" issue before adding features. No point m From the [full text](https://github.com/TASVideos/BizHawk/blob/master/LICENSE): > This repository contains original work chiefly in c# by the BizHawk team (which is all provided under the MIT License), embedded submodules from other authors with their own licenses clearly provided, other embedded submodules from other authors WITHOUT their own licenses clearly provided, customizations by the BizHawk team to many of those submodules (which is provided under the MIT license), and compiled binary executable modules from other authors without their licenses OR their origins clearly indicated. -In short, the frontend is MIT, and past that you're on your own. +In short, the frontend is MIT (Expat), beyond that you're on your own. From 220e0612a9d25ac964e8a721d5d9bf598a450ad1 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 9 Jan 2019 15:58:16 +1000 Subject: [PATCH 077/301] Update README.md --- README.md | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index d367efc523..3538a319db 100644 --- a/README.md +++ b/README.md @@ -135,13 +135,11 @@ TODO ## Troubleshooting and support -TODO +A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at tasvideos.org, or ask on IRC: -[BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) - -[BizHawk wiki](http://tasvideos.org/Bizhawk.html) - -[FAQ](http://tasvideos.org/Bizhawk/FAQ.html) +[![IRC | chat.freenode.net #bizhawk](https://img.shields.io/badge/IRC-chat.freenode.net_%23bizhawk-black.svg?style=flat)](ircs://chat.freenode.net:6697/bizhawk) +[![Matrix (IRC bridge) | #freenode_#bizhawk:matrix.org](https://img.shields.io/badge/Matrix_(IRC_bridge)-%23freenode__%23bizhawk:matrix.org-black.svg?logo=matrix&style=flat)](https://matrix.to/#/#freenode_#bizhawk:matrix.org) +[![freenode webchat | #bizhawk](https://img.shields.io/badge/freenode_webchat-%23bizhawk-black.svg?style=flat)](http://webchat.freenode.net/?channels=bizhawk) ## Contributing @@ -151,13 +149,7 @@ If you've already made changes, the best way to contribute is with a Pull Reques [![GitHub open issues counter](https://img.shields.io/github/issues-raw/TASVideos/BizHawk.svg?logo=github&style=flat)](https://github.com/TASVideos/BizHawk/issues) -It's a good idea to check if anyone else is working on an issue by asking on IRC: - -[![IRC | chat.freenode.net #bizhawk](https://img.shields.io/badge/IRC-chat.freenode.net_%23bizhawk-black.svg?style=flat)](ircs://chat.freenode.net:6697/bizhawk) -[![Matrix (IRC bridge) | #freenode_#bizhawk:matrix.org](https://img.shields.io/badge/Matrix_(IRC_bridge)-%23freenode__%23bizhawk:matrix.org-black.svg?logo=matrix&style=flat)](https://matrix.to/#/#freenode_#bizhawk:matrix.org) -[![freenode webchat | #bizhawk](https://img.shields.io/badge/freenode_webchat-%23bizhawk-black.svg?style=flat)](http://webchat.freenode.net/?channels=bizhawk) - -And of course, open a "feature request" issue before adding features. No point making something that no-one's going to use. +It's a good idea to check if anyone is already working on an issue by asking on IRC (see *Support* above). And of course, open a "feature request" issue before adding features. No point making something that no-one's going to use. ## License From ff19a708a42a18d70a7ca0f8160dbc953ec15ad4 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 9 Jan 2019 16:11:27 +1000 Subject: [PATCH 078/301] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 3538a319db..64b37f7cf8 100644 --- a/README.md +++ b/README.md @@ -137,9 +137,9 @@ TODO A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at tasvideos.org, or ask on IRC: -[![IRC | chat.freenode.net #bizhawk](https://img.shields.io/badge/IRC-chat.freenode.net_%23bizhawk-black.svg?style=flat)](ircs://chat.freenode.net:6697/bizhawk) -[![Matrix (IRC bridge) | #freenode_#bizhawk:matrix.org](https://img.shields.io/badge/Matrix_(IRC_bridge)-%23freenode__%23bizhawk:matrix.org-black.svg?logo=matrix&style=flat)](https://matrix.to/#/#freenode_#bizhawk:matrix.org) -[![freenode webchat | #bizhawk](https://img.shields.io/badge/freenode_webchat-%23bizhawk-black.svg?style=flat)](http://webchat.freenode.net/?channels=bizhawk) +[![IRC | chat.freenode.net #bizhawk](https://img.shields.io/badge/IRC-chat.freenode.net_%23bizhawk-steelblue.svg?style=flat)](ircs://chat.freenode.net:6697/bizhawk) +[![Matrix (IRC bridge) | #freenode_#bizhawk:matrix.org](https://img.shields.io/badge/Matrix_(IRC_bridge)-%23freenode__%23bizhawk:matrix.org-mediumpurple.svg?logo=matrix&style=flat)](https://matrix.to/#/#freenode_#bizhawk:matrix.org) +[![freenode webchat | #bizhawk](https://img.shields.io/badge/freenode_webchat-%23bizhawk-lightcoral.svg?style=flat)](http://webchat.freenode.net/?channels=bizhawk) ## Contributing From 10d7bcee6e9085e4ace71eba65a4302eec05d267 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 9 Jan 2019 16:21:12 +1000 Subject: [PATCH 079/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 64b37f7cf8..65bba1c5ba 100644 --- a/README.md +++ b/README.md @@ -133,7 +133,7 @@ TODO [TAS movie file format](http://tasvideos.org/Bizhawk/TASFormat.html) -## Troubleshooting and support +## Support and troubleshooting A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at tasvideos.org, or ask on IRC: From d8c22b5c9ea007424a4c58b8f8e2d1ea3c08e95f Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 9 Jan 2019 16:23:16 +1000 Subject: [PATCH 080/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 65bba1c5ba..485e736806 100644 --- a/README.md +++ b/README.md @@ -135,7 +135,7 @@ TODO ## Support and troubleshooting -A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at tasvideos.org, or ask on IRC: +A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, and you can't find it in the [issue tracker search](https://github.com/TASVideos/BizHawk/issues?q=is%3Aissue+ISSUE_KEYWORDS), check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at tasvideos.org, or ask on IRC: [![IRC | chat.freenode.net #bizhawk](https://img.shields.io/badge/IRC-chat.freenode.net_%23bizhawk-steelblue.svg?style=flat)](ircs://chat.freenode.net:6697/bizhawk) [![Matrix (IRC bridge) | #freenode_#bizhawk:matrix.org](https://img.shields.io/badge/Matrix_(IRC_bridge)-%23freenode__%23bizhawk:matrix.org-mediumpurple.svg?logo=matrix&style=flat)](https://matrix.to/#/#freenode_#bizhawk:matrix.org) From bafcd6c7240dcca5f5fd5da4de718bad77b6c2fa Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 9 Jan 2019 20:27:28 +1000 Subject: [PATCH 081/301] Update README.md --- README.md | 16 +++------------- 1 file changed, 3 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 485e736806..449eba295f 100644 --- a/README.md +++ b/README.md @@ -58,22 +58,12 @@ Win7 is supported from SP1, Win8 is supported from 8.1, and Win10 is supported f Install BizHawk with your distro's package manager. The package name is given on each button below, and some buttons are links. For the changelog, [see tasvideos.org](http://tasvideos.org/Bizhawk/ReleaseHistory.html). [![Arch Linux (AUR) | bizhawk](https://img.shields.io/badge/Arch_Linux_(AUR)-bizhawk-%231793D1.svg?logo=arch-linux&style=popout)](https://aur.archlinux.org/packages/bizhawk) -[![CentOS | bizhawk](https://img.shields.io/badge/CentOS-bizhawk-%23941D7A.svg?logo=centos&style=popout)](https://example.com/bizhawk) -[![Debian (Launchpad) | bizhawk](https://img.shields.io/badge/Debian_(Launchpad)-bizhawk-%23A81D33.svg?logo=debian&style=popout)](https://example.com/bizhawk) -[![elementaryOS (Launchpad) | bizhawk](https://img.shields.io/badge/elementaryOS-bizhawk-%2364BAFF.svg?logo=elementary&style=popout)](https://example.com/bizhawk) -[![Fedora | bizhawk](https://img.shields.io/badge/Fedora-bizhawk-%23294172.svg?logo=fedora&style=popout)](https://example.com/bizhawk) -[![Gentoo | bizhawk](https://img.shields.io/badge/Gentoo-bizhawk-%234E4371.svg?logo=gentoo&style=popout)](https://example.com/bizhawk) -[![Hyperbola | bizhawk](https://img.shields.io/badge/Hyperbola-bizhawk-black.svg?logo=hyperbola&style=popout)](https://example.com/bizhawk) -[![Linux Mint (Launchpad) | bizhawk](https://img.shields.io/badge/Linux_Mint_(Launchpad)-bizhawk-%2387CF3E.svg?logo=linux-mint&style=popout)](https://example.com/bizhawk) [![macOS (Homebrew) | bizhawk](https://img.shields.io/badge/macOS_(Homebrew)-bizhawk-%23999999.svg?logo=apple&style=popout)](https://example.com/bizhawk) -[![Manjaro (AUR) | bizhawk](https://img.shields.io/badge/Manjaro_(AUR)-bizhawk-%2335BF5C.svg?logo=manjaro&style=popout)](https://aur.archlinux.org/packages/bizhawk) -[![MX Linux | bizhawk](https://img.shields.io/badge/MX_Linux-bizhawk-%23506E88.svg?logo=mx-linux&style=popout)](https://example.com/bizhawk) -[![NixOS | bizhawk](https://img.shields.io/badge/NixOS-bizhawk-%234F73BC.svg?colorA=7EB5E0&logo=nixos&style=popout)](https://example.com/bizhawk) -[![openSUSE | bizhawk](https://img.shields.io/badge/openSUSE-bizhawk-%236DA741.svg?logo=opensuse&style=popout)](https://example.com/bizhawk) -[![Solus | bizhawk](https://img.shields.io/badge/Solus-bizhawk-%235294E2.svg?colorA=4C5164&logo=solus&style=popout)](https://example.com/bizhawk) -[![SteamOS (Launchpad) | bizhawk](https://img.shields.io/badge/SteamOS-bizhawk-%231B2838.svg?logo=steam&logoColor=1B2838&style=popout)](https://example.com/bizhawk) [![Ubuntu (Launchpad) | bizhawk](https://img.shields.io/badge/Ubuntu_(Launchpad)-bizhawk-%23E95420.svg?colorA=772953&logo=ubuntu&style=popout)](https://example.com/bizhawk) +[![Linux Mint (Launchpad) | bizhawk](https://img.shields.io/badge/Linux_Mint_(Launchpad)-bizhawk-%2387CF3E.svg?logo=linux-mint&style=popout)](https://example.com/bizhawk) +[![Manjaro (AUR) | bizhawk](https://img.shields.io/badge/Manjaro_(AUR)-bizhawk-%2335BF5C.svg?logo=manjaro&style=popout)](https://aur.archlinux.org/packages/bizhawk) + If you run `EmuHawkMono.sh` from a terminal, note that `File > Exit (Alt+F4)` doesn't terminate the process correctly, you'll need to send SIGINT (`^C`). Is your distro not there? Released binaries can be found right here on GitHub (same download as for Windows): From 8557cdb90aae12d45bb17f32e6d8e9661ea0c226 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 9 Jan 2019 20:44:11 +1000 Subject: [PATCH 082/301] Update README.md --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 449eba295f..0ace764534 100644 --- a/README.md +++ b/README.md @@ -58,12 +58,11 @@ Win7 is supported from SP1, Win8 is supported from 8.1, and Win10 is supported f Install BizHawk with your distro's package manager. The package name is given on each button below, and some buttons are links. For the changelog, [see tasvideos.org](http://tasvideos.org/Bizhawk/ReleaseHistory.html). [![Arch Linux (AUR) | bizhawk](https://img.shields.io/badge/Arch_Linux_(AUR)-bizhawk-%231793D1.svg?logo=arch-linux&style=popout)](https://aur.archlinux.org/packages/bizhawk) +[![Linux Mint (Launchpad) | bizhawk](https://img.shields.io/badge/Linux_Mint_(Launchpad)-bizhawk-%2387CF3E.svg?logo=data:image/png;base64,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&style=popout)](https://example.com/bizhawk) [![macOS (Homebrew) | bizhawk](https://img.shields.io/badge/macOS_(Homebrew)-bizhawk-%23999999.svg?logo=apple&style=popout)](https://example.com/bizhawk) +[![Manjaro (AUR) | bizhawk](https://img.shields.io/badge/Manjaro_(AUR)-bizhawk-%2335BF5C.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABRUlEQVR4nO3bQUrDQBTG8Qdu3dS91r2CAzYE3Cm9QBURmjq7Yk9QIsELJYJ2XYqh7UJbL9NcYFyoGAQZiFMygf8Hb/vNm192IREhhJBS+ou4Fa3vM71Kitv3B1P3lHer2qFXSTFYJ2l/EbesANev46y7HJkw1yZ4GdQ+5d2qdoS5Nt3lyNy8xakV4Hw+LOq+tGuA77mY322sAL48+W0AhLk2f93b2SE+A/zuAwAAAAAAAAAAAAAAAAAAcH3IqcNpJMBWAkATAVy+E2wkgE9dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAZzrTaOPT0i67OtPI/suMyq6efVraZdfJ4+WTFWD3bP9Ypb1JMIsq/zzlHcAsKlTam+wFB0dWABHZEZFDEVHi4NO2f3S47FIi0v66GyHkJx/0rGTAdYdsEwAAAABJRU5ErkJggg==&style=popout)](https://aur.archlinux.org/packages/bizhawk) [![Ubuntu (Launchpad) | bizhawk](https://img.shields.io/badge/Ubuntu_(Launchpad)-bizhawk-%23E95420.svg?colorA=772953&logo=ubuntu&style=popout)](https://example.com/bizhawk) -[![Linux Mint (Launchpad) | bizhawk](https://img.shields.io/badge/Linux_Mint_(Launchpad)-bizhawk-%2387CF3E.svg?logo=linux-mint&style=popout)](https://example.com/bizhawk) -[![Manjaro (AUR) | bizhawk](https://img.shields.io/badge/Manjaro_(AUR)-bizhawk-%2335BF5C.svg?logo=manjaro&style=popout)](https://aur.archlinux.org/packages/bizhawk) - If you run `EmuHawkMono.sh` from a terminal, note that `File > Exit (Alt+F4)` doesn't terminate the process correctly, you'll need to send SIGINT (`^C`). Is your distro not there? Released binaries can be found right here on GitHub (same download as for Windows): From a0d9c8133101fb722975b2a0cfed9e352bea1bf5 Mon Sep 17 00:00:00 2001 From: James Groom Date: Thu, 10 Jan 2019 00:31:48 +1000 Subject: [PATCH 083/301] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 0ace764534..337eee1031 100644 --- a/README.md +++ b/README.md @@ -58,6 +58,7 @@ Win7 is supported from SP1, Win8 is supported from 8.1, and Win10 is supported f Install BizHawk with your distro's package manager. The package name is given on each button below, and some buttons are links. For the changelog, [see tasvideos.org](http://tasvideos.org/Bizhawk/ReleaseHistory.html). [![Arch Linux (AUR) | bizhawk](https://img.shields.io/badge/Arch_Linux_(AUR)-bizhawk-%231793D1.svg?logo=arch-linux&style=popout)](https://aur.archlinux.org/packages/bizhawk) +[![Debian (Launchpad) | bizhawk](https://img.shields.io/badge/Debian_(Launchpad)-bizhawk-%23A81D33.svg?logo=debian&style=popout)](https://example.com/bizhawk) [![Linux Mint (Launchpad) | bizhawk](https://img.shields.io/badge/Linux_Mint_(Launchpad)-bizhawk-%2387CF3E.svg?logo=data:image/png;base64,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&style=popout)](https://example.com/bizhawk) [![macOS (Homebrew) | bizhawk](https://img.shields.io/badge/macOS_(Homebrew)-bizhawk-%23999999.svg?logo=apple&style=popout)](https://example.com/bizhawk) [![Manjaro (AUR) | bizhawk](https://img.shields.io/badge/Manjaro_(AUR)-bizhawk-%2335BF5C.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABRUlEQVR4nO3bQUrDQBTG8Qdu3dS91r2CAzYE3Cm9QBURmjq7Yk9QIsELJYJ2XYqh7UJbL9NcYFyoGAQZiFMygf8Hb/vNm192IREhhJBS+ou4Fa3vM71Kitv3B1P3lHer2qFXSTFYJ2l/EbesANev46y7HJkw1yZ4GdQ+5d2qdoS5Nt3lyNy8xakV4Hw+LOq+tGuA77mY322sAL48+W0AhLk2f93b2SE+A/zuAwAAAAAAAAAAAAAAAAAAcH3IqcNpJMBWAkATAVy+E2wkgE9dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAZzrTaOPT0i67OtPI/suMyq6efVraZdfJ4+WTFWD3bP9Ypb1JMIsq/zzlHcAsKlTam+wFB0dWABHZEZFDEVHi4NO2f3S47FIi0v66GyHkJx/0rGTAdYdsEwAAAABJRU5ErkJggg==&style=popout)](https://aur.archlinux.org/packages/bizhawk) From c2bc9893e5b5a34523c4cc1e6946ef6265fdc541 Mon Sep 17 00:00:00 2001 From: Asnivor Date: Wed, 9 Jan 2019 14:37:11 +0000 Subject: [PATCH 084/301] Add Debian as option in EmuHawkMono.sh runscript --- Assets/EmuHawkMono.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/Assets/EmuHawkMono.sh b/Assets/EmuHawkMono.sh index 45298de879..68dad15c38 100755 --- a/Assets/EmuHawkMono.sh +++ b/Assets/EmuHawkMono.sh @@ -9,6 +9,7 @@ if [ "$(command -v lsb_release)" ]; then case "$(lsb_release -i | cut -c17- | tr -d "\n")" in "Arch"|"ManjaroLinux") libpath="/usr/lib/wine";; "Ubuntu"|"LinuxMint") libpath="/usr/lib/x86_64-linux-gnu/wine";; + "Debian"|"DebianLinux") libpath="/usr/lib/x86_64-linux-gnu/wine";; esac fi if [ -z "$libpath" ]; then From 31300b9ccab3bc8c3220dd3a49552ae2ecd4eb26 Mon Sep 17 00:00:00 2001 From: James Groom Date: Thu, 10 Jan 2019 01:35:01 +1000 Subject: [PATCH 085/301] Update README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 337eee1031..4316c3df24 100644 --- a/README.md +++ b/README.md @@ -90,9 +90,13 @@ Building is as easy as: ```sh git clone https://github.com/TASVideos/BizHawk.git BizHawk_master && cd BizHawk_master # or ssh: git clone git@github.com:TASVideos/BizHawk.git BizHawk_master && cd BizHawk_master -msbuild BizHawk.sln +msbuild --release BizHawk.sln ``` +Remove the `--release` flag from MSBuild if you want debugging symbols. + +TODO it's not --release + Running is even easier, just execute `EmuHawkMono.sh` in the repo's `output` folder (this folder is what gets distributed in a Release build, you can move/rename it). If your distro isn't listed under *Installing* above, you might get an "Unknown distro" warning in the terminal, and BizHawk may not open or may show the missing dependencies dialog. You may need to add your distro to the case statement in the script, setting `libpath` to the location of `d3dx9_43.dll.so` (please do share if you get it working). From fe52089b1af91507d1dcef386c1d494e245ea0eb Mon Sep 17 00:00:00 2001 From: James Groom Date: Thu, 10 Jan 2019 01:37:09 +1000 Subject: [PATCH 086/301] Update README.md --- README.md | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 4316c3df24..6d143e9780 100644 --- a/README.md +++ b/README.md @@ -97,13 +97,9 @@ Remove the `--release` flag from MSBuild if you want debugging symbols. TODO it's not --release -Running is even easier, just execute `EmuHawkMono.sh` in the repo's `output` folder (this folder is what gets distributed in a Release build, you can move/rename it). +If your distro isn't listed above, `libblip_buf` probably isn't in your package repos. You can easily [build it yourself](https://gitlab.com/TASVideos/libblip_buf/blob/unified/README.md). -If your distro isn't listed under *Installing* above, you might get an "Unknown distro" warning in the terminal, and BizHawk may not open or may show the missing dependencies dialog. You may need to add your distro to the case statement in the script, setting `libpath` to the location of `d3dx9_43.dll.so` (please do share if you get it working). - -Again, if your distro isn't listed above, `libblip_buf` probably isn't in your package repos. You can easily [build it yourself](https://gitlab.com/TASVideos/libblip_buf/blob/unified/README.md). - -Once built, see the *Installing* section above. +Once built, see the *Installing* section above, substituting the repo's `output` folder for the download. If your distro isn't listed there, you might get an "Unknown distro" warning in the terminal, and BizHawk may not open or may show the missing dependencies dialog. You may need to add your distro to the case statement in the script, setting `libpath` to the location of `d3dx9_43.dll.so` (please do share if you get it working). ### Windows 7/8.1/10 From 5297ba8eb78e7dda473b7506ff864208993091c0 Mon Sep 17 00:00:00 2001 From: James Groom Date: Thu, 10 Jan 2019 01:46:32 +1000 Subject: [PATCH 087/301] Update README.md --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 6d143e9780..0100b3349b 100644 --- a/README.md +++ b/README.md @@ -90,16 +90,16 @@ Building is as easy as: ```sh git clone https://github.com/TASVideos/BizHawk.git BizHawk_master && cd BizHawk_master # or ssh: git clone git@github.com:TASVideos/BizHawk.git BizHawk_master && cd BizHawk_master -msbuild --release BizHawk.sln +msbuild /p:Configuration=Release BizHawk.sln ``` -Remove the `--release` flag from MSBuild if you want debugging symbols. +Remove the `/p:...` flag from MSBuild if you want debugging symbols. -TODO it's not --release +If your distro isn't listed under *Installing* above, `libblip_buf` probably isn't in your package repos. You can easily [build it yourself](https://gitlab.com/TASVideos/libblip_buf/blob/unified/README.md). -If your distro isn't listed above, `libblip_buf` probably isn't in your package repos. You can easily [build it yourself](https://gitlab.com/TASVideos/libblip_buf/blob/unified/README.md). +Once built, see the *Installing* section, substituting the repo's `output` folder for the download. -Once built, see the *Installing* section above, substituting the repo's `output` folder for the download. If your distro isn't listed there, you might get an "Unknown distro" warning in the terminal, and BizHawk may not open or may show the missing dependencies dialog. You may need to add your distro to the case statement in the script, setting `libpath` to the location of `d3dx9_43.dll.so` (please do share if you get it working). +Again, if your distro isn't listed there, you might get an "Unknown distro" warning in the terminal, and BizHawk may not open or may show the missing dependencies dialog. You may need to add your distro to the case statement in the script, setting `libpath` to the location of `d3dx9_43.dll.so` (please do share if you get it working). ### Windows 7/8.1/10 From 245dce55712d8bf9436a9b33a5f05e6b9c3aefab Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 9 Jan 2019 17:04:45 +0000 Subject: [PATCH 088/301] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 0100b3349b..aababd758e 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,8 @@ A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). +tl;dr: click the "latest" button above to grab it. The changelog is [here on tasvideos.org](http://tasvideos.org/Bizhawk/ReleaseHistory.html). + ## Core feature matrix Most games for every system in the table will run perfectly, and every system supports fast-forward, frame advance, and rewind. From 592c6cd9456c474bea8b808e00383404a34d4654 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 9 Jan 2019 17:05:57 +0000 Subject: [PATCH 089/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aababd758e..e49a7d7a5c 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). -tl;dr: click the "latest" button above to grab it. The changelog is [here on tasvideos.org](http://tasvideos.org/Bizhawk/ReleaseHistory.html). +tl;dr: click the "latest" button above to grab it. The changelog is [here on tasvideos.org](http://tasvideos.org/Bizhawk/ReleaseHistory.html). **Don't mix versions**, copy `config.ini` to keep settings. ## Core feature matrix From 49301f4fe0e426f9116ae6bdf92dc9547c414535 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 9 Jan 2019 17:09:28 +0000 Subject: [PATCH 090/301] Update README.md --- README.md | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index e49a7d7a5c..35bf9e96dc 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # BizHawk -[![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&style=flat)](https://github.com/TASVideos/BizHawk/releases/latest) ![Unique systems emulated | 22](https://img.shields.io/badge/Unique_systems_emulated-22-darkgreen.svg?style=flat) +[![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&style=flat)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?style=flat)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) ![unique systems emulated | 22](https://img.shields.io/badge/unique_systems_emulated-22-darkgreen.svg?style=flat) A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). @@ -84,6 +84,12 @@ If you want to test the latest changes without building BizHawk yourself, grab t If you use GNU+Linux, there might be a `bizhawk-git` package or similar in the same repo as the main package. If it's available, installing it will automate the build process. +### Windows 7/8.1/10 + +TODO + +[Compiling](http://tasvideos.org/Bizhawk/Compiling.html) + ### GNU+Linux and macOS *Compiling* requires MSBuild and *running* requires Mono and WINE, but **BizHawk does not run under WINE** — only the bundled libraries are required. @@ -103,12 +109,6 @@ Once built, see the *Installing* section, substituting the repo's `output` folde Again, if your distro isn't listed there, you might get an "Unknown distro" warning in the terminal, and BizHawk may not open or may show the missing dependencies dialog. You may need to add your distro to the case statement in the script, setting `libpath` to the location of `d3dx9_43.dll.so` (please do share if you get it working). -### Windows 7/8.1/10 - -TODO - -[Compiling](http://tasvideos.org/Bizhawk/Compiling.html) - ## Usage (casual) TODO From 233ac59d8a914dd57bd6f2ace48e520a23c15c70 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 9 Jan 2019 17:14:16 +0000 Subject: [PATCH 091/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 35bf9e96dc..741b315516 100644 --- a/README.md +++ b/README.md @@ -78,7 +78,7 @@ Linux distros are supported if the distributor is still supporting your version, macOS is supported from 10.11 "El Capitan" (Darwin 15.6). Apple doesn't seem to care about lifecycles, so we'll go with 6 months from the last security update. -## Building +## Building/Testing If you want to test the latest changes without building BizHawk yourself, grab the developer build from [AppVeyor](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history). Pick the topmost one that doesn't say "Pull request", then click "Artifacts" and download `BizHawk_Developer--#.zip`. From 65ce6409ab3bea5023528ccc56cdbd502b7c9ccc Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 9 Jan 2019 17:18:41 +0000 Subject: [PATCH 092/301] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 741b315516..fce0c411d0 100644 --- a/README.md +++ b/README.md @@ -137,11 +137,13 @@ A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk BizHawk is Open Source Software, so you're free to modify it however you please, and if you do, we invite you to share! Under the MIT license, this is *optional*, just be careful with reusing cores as some have copyleft licenses. -If you've already made changes, the best way to contribute is with a Pull Request here on GitHub. If you're looking for something to do, check the issue tracker here on GitHub: +If you'd like to fix bugs, check the issue tracker here on GitHub: [![GitHub open issues counter](https://img.shields.io/github/issues-raw/TASVideos/BizHawk.svg?logo=github&style=flat)](https://github.com/TASVideos/BizHawk/issues) -It's a good idea to check if anyone is already working on an issue by asking on IRC (see *Support* above). And of course, open a "feature request" issue before adding features. No point making something that no-one's going to use. +It's a good idea to check if anyone is already working on an issue by asking on IRC (see *Support* above). + +If you'd like to add a feature, first search the issue tracker for it. If it's a new idea, make your own feature request issue before you start coding. ## License From 43686a2cf173786f450996aa43ea4cb5e7b5d122 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 9 Jan 2019 17:24:20 +0000 Subject: [PATCH 093/301] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index fce0c411d0..12a0043134 100644 --- a/README.md +++ b/README.md @@ -133,6 +133,8 @@ A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk [![Matrix (IRC bridge) | #freenode_#bizhawk:matrix.org](https://img.shields.io/badge/Matrix_(IRC_bridge)-%23freenode__%23bizhawk:matrix.org-mediumpurple.svg?logo=matrix&style=flat)](https://matrix.to/#/#freenode_#bizhawk:matrix.org) [![freenode webchat | #bizhawk](https://img.shields.io/badge/freenode_webchat-%23bizhawk-lightcoral.svg?style=flat)](http://webchat.freenode.net/?channels=bizhawk) +If there's no easy solution, what you've got is a bug. Or maybe a feature request. Either way, [open a new issue](https://github.com/TASVideos/BizHawk/issues/new) (you'll need a GitHub account, signup is very fast). + ## Contributing BizHawk is Open Source Software, so you're free to modify it however you please, and if you do, we invite you to share! Under the MIT license, this is *optional*, just be careful with reusing cores as some have copyleft licenses. From 37eb3a41fdb86f124955a82dc48b89bf44ebfb58 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 9 Jan 2019 17:31:16 +0000 Subject: [PATCH 094/301] Update README.md --- README.md | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 12a0043134..29c2749017 100644 --- a/README.md +++ b/README.md @@ -49,9 +49,15 @@ Released binaries can be found right here on GitHub: Click `BizHawk-.zip` to download it. Also note the changelog, the full version of which is [on tasvideos.org](http://tasvideos.org/Bizhawk/ReleaseHistory.html). **Don't mix different versions** of BizHawk, keep each version in its own folder. -Before you start (by running `EmuHawk.exe`), make sure you have the Windows-only prerequisites installed: .NET Framework 4.6.1; Visual C++ 2010 SP1, 2012, and 2015; and Direct3D 9. If you have a few Steam games, chances are these are already installed, otherwise you can get them all at once with [this program](https://github.com/TASVideos/BizHawk-Prereqs/releases/latest). +Before you start (by running `EmuHawk.exe`), you'll need the following Windows-only prerequisites installed. You can get them all at once with [this program](https://github.com/TASVideos/BizHawk-Prereqs/releases/latest). +* .NET Framework 4.6.1 +* Visual C++ Redists + * 2010 SP1 + * 2012 + * 2015 +* Direct3D 9 -BizHawk functions like a "portable" program, you may move or rename the folder containing `EmuHawk.exe`, even to another drive, as long as you keep all the files together and the prerequisites are installed when you go to run it. +BizHawk functions like a "portable" program, you may move or rename the folder containing `EmuHawk.exe`, even to another drive — as long as you keep all the files together, and the prerequisites are installed when you go to run it. Win7 is supported from SP1, Win8 is supported from 8.1, and Win10 is supported from 1709 "Redstone 3", following [Microsoft's support lifecycle](https://support.microsoft.com/en-us/help/13853/windows-lifecycle-fact-sheet). From 96042e217426338dcac28895b8de387b6be24dee Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 9 Jan 2019 17:39:13 +0000 Subject: [PATCH 095/301] Update README.md --- README.md | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 29c2749017..f24feb9b6f 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,16 @@ A multi-system emulator written in C#. As well as quality-of-life features for c tl;dr: click the "latest" button above to grab it. The changelog is [here on tasvideos.org](http://tasvideos.org/Bizhawk/ReleaseHistory.html). **Don't mix versions**, copy `config.ini` to keep settings. +Jump to: +* [Installing — Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#installing--windows-78110) +* [Installing — GNU+Linux and macOS](https://github.com/TASVideos/BizHawk/blob/master/README.md#installing--gnulinux-and-macos) +* [Building/Testing](https://github.com/TASVideos/BizHawk/blob/master/README.md#buildingtesting) +* [Usage (emulation)](https://github.com/TASVideos/BizHawk/blob/master/README.md#usage-emulation) +* [Usage (TASing)](https://github.com/TASVideos/BizHawk/blob/master/README.md#usage-tasing) +* [Support and troubleshooting](https://github.com/TASVideos/BizHawk/blob/master/README.md#support-and-troubleshooting) +* [Contributing](https://github.com/TASVideos/BizHawk/blob/master/README.md#contributing) +* [License](https://github.com/TASVideos/BizHawk/blob/master/README.md#license) + ## Core feature matrix Most games for every system in the table will run perfectly, and every system supports fast-forward, frame advance, and rewind. @@ -115,11 +125,11 @@ Once built, see the *Installing* section, substituting the repo's `output` folde Again, if your distro isn't listed there, you might get an "Unknown distro" warning in the terminal, and BizHawk may not open or may show the missing dependencies dialog. You may need to add your distro to the case statement in the script, setting `libpath` to the location of `d3dx9_43.dll.so` (please do share if you get it working). -## Usage (casual) +## Usage (emulation) TODO -## Usage (advanced) +## Usage (TASing) TODO From d7caf48a70032cfbc57517cf3fea6804d37444b7 Mon Sep 17 00:00:00 2001 From: Asnivor Date: Wed, 9 Jan 2019 17:50:57 +0000 Subject: [PATCH 096/301] EmuHawkMono.sh 'I suck at shell scripts' fix --- Assets/EmuHawkMono.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Assets/EmuHawkMono.sh b/Assets/EmuHawkMono.sh index 68dad15c38..a42a52a5f6 100755 --- a/Assets/EmuHawkMono.sh +++ b/Assets/EmuHawkMono.sh @@ -8,8 +8,7 @@ libpath="" if [ "$(command -v lsb_release)" ]; then case "$(lsb_release -i | cut -c17- | tr -d "\n")" in "Arch"|"ManjaroLinux") libpath="/usr/lib/wine";; - "Ubuntu"|"LinuxMint") libpath="/usr/lib/x86_64-linux-gnu/wine";; - "Debian"|"DebianLinux") libpath="/usr/lib/x86_64-linux-gnu/wine";; + "Debian"|"Ubuntu"|"LinuxMint") libpath="/usr/lib/x86_64-linux-gnu/wine";; esac fi if [ -z "$libpath" ]; then From 531e4d8909fe4eb1223183c3845afba31ba32581 Mon Sep 17 00:00:00 2001 From: James Groom Date: Thu, 10 Jan 2019 04:37:10 +1000 Subject: [PATCH 097/301] Update README.md --- README.md | 62 ++++++++++++++++++++++++++++++------------------------- 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index f24feb9b6f..2b99087a1c 100644 --- a/README.md +++ b/README.md @@ -16,40 +16,46 @@ Jump to: * [Contributing](https://github.com/TASVideos/BizHawk/blob/master/README.md#contributing) * [License](https://github.com/TASVideos/BizHawk/blob/master/README.md#license) -## Core feature matrix +## Features -Most games for every system in the table will run perfectly, and every system supports fast-forward, frame advance, and rewind. +The "core" features, common to every system core, are: +* rom format and region detection and a corruption check +* speed control, including frame stepping and rewinding +* input recording (making TAS movies) +* memory view/search/edit in all parts of the emulated HW +* 10 savestate slots and save/load to file +* more things I can't remember -System | Play+FF/ADV/RW | Debugging | (Input) Recording +System | "Core" Features | Game Coverage† | Peripherals --:|:-:|:-:|:-: -Apple II | ✓ | ? | ? -Atari 2600 | ✓ | ? | ? -Atari 7800 | ✓ | ? | ? -Atari Lynx | ✓ | ? | ? -ColecoVision | ✓ | ? | ? -Commodore 64 | ✓ | ? | ? -Game Boy / GBC | ✓ | ? | ? -GBA | ✓ | ? | ? -Genesis | ✓ | ? | ? -IntelliVision | ✓ | ? | ? -Master System | ✓ | ? | ? -N64 | ✓ | ? | ? -Neo Geo Pocket | ✓ | ? | ? -NES | ✓ | ? | ? -PSX | ✓ | ? | ? -Saturn | ✓ | ? | ? -SNES | ✓ | ? | ? -TI-83 | ✓ | ? | ? -TurboGrafx-16 | ✓ | ? | ? -Virtual Boy | ✓ | ? | ? -WonderSwan | ✓ | ? | ? -ZX Spectrum | ✓ | ? | ? +Apple II | ✓ | 95%? | ? +Atari 2600 | ✓ | 95%? | ? +Atari 7800 | ✓ | 95%? | ? +Atari Lynx | ✓ | 95%? | ? +ColecoVision | ✓ | 95%? | ? +Commodore 64 | ✓ | 95%? | ? +Game Boy / GBC | ✓ | 95%? | ? +GBA | ✓ | 95%? | ? +Genesis | ✓ | 95%? | ? +IntelliVision | ✓ | 95%? | ? +Master System | ✓ | 95%? | ? +N64 | ✓ | 95%? | ? +Neo Geo Pocket | ✓ | 95%? | ? +NES | ✓ | 95%? | ? +PSX | ✓ | 95%? | ? +Saturn | ✓ | 95%? | ? +SNES | ✓ | 95%? | ? +TI-83 | ✓ | 95%? | ? +TurboGrafx-16 | ✓ | 95%? | ? +Virtual Boy | ✓ | 95%? | ? +WonderSwan | ✓ | 95%? | ? +ZX Spectrum | ✓ | 95%? | ? -EmuHawk's frontend also has a comprehensive input mapper, with keyboard and controller support (even simultaneously), hotkeys, and turbo/rapid fire. +† *approximately* what portion of games run perfectly, not counting romhacks/homebrew (if you want to count, go right ahead) -In addition to input recording (with TAStudio), you can also record the emulated system's audio and video, either of your own gameplay or of a prerecorded movie (TAS). See the *Usage (advanced)* section below for more info about the many debugging and recording features. +EmuHawk's frontend also has a firmware manager, nice overlays, and a comprehensive input mapper. We're talking keyboard and controller mapped to one emulated controller with analog support, keyboard hotkeys, controller hotkeys, and rapid fire for emulated controllers. Most of the frontend can be controlled with Lua scripts (only on Windows for now). These scripts can draw overlays for casual play or for RTA speedruns, change the running game to add complex cheats, assist TASers and romhackers in debugging a game, and more. But most importantly: BizHawk is Hawk Biz. -Most of the frontend can be controlled with Lua scripts (only on Windows for now). These scripts can draw overlays for casual play or for RTA speedruns, change the running game to add complex cheats, assist TASers and romhackers in debugging a game, and more. +See the *Usage* sections below for details about specific tools and config menus. ## Installing — Windows 7/8.1/10 From b29516fb59c0264faf061d3ff20e123bd8efb7dd Mon Sep 17 00:00:00 2001 From: James Groom Date: Thu, 10 Jan 2019 04:39:40 +1000 Subject: [PATCH 098/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2b99087a1c..9ca2cfddc3 100644 --- a/README.md +++ b/README.md @@ -53,7 +53,7 @@ ZX Spectrum | ✓ | 95%? | ? † *approximately* what portion of games run perfectly, not counting romhacks/homebrew (if you want to count, go right ahead) -EmuHawk's frontend also has a firmware manager, nice overlays, and a comprehensive input mapper. We're talking keyboard and controller mapped to one emulated controller with analog support, keyboard hotkeys, controller hotkeys, and rapid fire for emulated controllers. Most of the frontend can be controlled with Lua scripts (only on Windows for now). These scripts can draw overlays for casual play or for RTA speedruns, change the running game to add complex cheats, assist TASers and romhackers in debugging a game, and more. But most importantly: BizHawk is Hawk Biz. +EmuHawk's frontend also has a firmware manager, nice overlays, and a comprehensive input mapper. We're talking keyboard and controller mapped to one emulated controller, analog from analog or from digital, keyboard hotkeys, controller hotkeys, and rapid fire for emulated controllers. Most of the frontend can be controlled with Lua scripts (only on Windows for now). These scripts can draw overlays for casual play or for RTA speedruns, change the running game to add complex cheats, assist TASers and romhackers in debugging a game, and more. But most importantly: BizHawk is Hawk Biz. See the *Usage* sections below for details about specific tools and config menus. From cc532a2988df07b25300c53271c5e6933238bed4 Mon Sep 17 00:00:00 2001 From: zeromus Date: Wed, 9 Jan 2019 16:20:53 -0500 Subject: [PATCH 099/301] update nlua.dll with one built with optimization --- output/dll/nlua/NLua.dll | Bin 101376 -> 91648 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/output/dll/nlua/NLua.dll b/output/dll/nlua/NLua.dll index 5bdc058e66fb68f7e8d907f08e06b6e4207d9a53..57e6d07cb9c15bbf514d7ad4059c858a998eb1e9 100644 GIT binary patch literal 91648 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 literal 101376 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 J|LY|1zX4x7&!YeU From 41061b44abcaaf0134db84e89bdb84aa054e3fe4 Mon Sep 17 00:00:00 2001 From: James Groom Date: Thu, 10 Jan 2019 14:30:49 +1000 Subject: [PATCH 100/301] Update README.md --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 9ca2cfddc3..84e6c0a858 100644 --- a/README.md +++ b/README.md @@ -33,23 +33,23 @@ Atari 2600 | ✓ | 95%? | ? Atari 7800 | ✓ | 95%? | ? Atari Lynx | ✓ | 95%? | ? ColecoVision | ✓ | 95%? | ? -Commodore 64 | ✓ | 95%? | ? -Game Boy / GBC | ✓ | 95%? | ? +Commodore 64 | ✓ | 95%? | [some](http://tasvideos.org/Bizhawk/C64.html) +GB/GBC | ✓ | 95%? | ? GBA | ✓ | 95%? | ? -Genesis | ✓ | 95%? | ? +Genesis | ✓ | 95%? | [all?](https://bitbucket.org/eke/genesis-plus-gx/src/b573cd25853f9f8b5b941fc36506835e228144c6/wiki/Features.md?at=master&fileviewer=file-view-default) IntelliVision | ✓ | 95%? | ? Master System | ✓ | 95%? | ? -N64 | ✓ | 95%? | ? -Neo Geo Pocket | ✓ | 95%? | ? +N64 | ✓ | 95%? | [all?](http://tasvideos.org/Bizhawk/N64.html) +NGP/NGPC | ✓ | 95%? | N/A NES | ✓ | 95%? | ? PSX | ✓ | 95%? | ? Saturn | ✓ | 95%? | ? SNES | ✓ | 95%? | ? -TI-83 | ✓ | 95%? | ? -TurboGrafx-16 | ✓ | 95%? | ? -Virtual Boy | ✓ | 95%? | ? -WonderSwan | ✓ | 95%? | ? -ZX Spectrum | ✓ | 95%? | ? +TI-83 | ✓ | 95%? | N/A +PC Engine / SG | ✓ | 95%? | ? +Virtual Boy | ✓ | 95%? | N/A +WonderSwan | ✓ | 95%? | N/A +ZX Spectrum | ✓ | 95%? | [common](http://tasvideos.org/Bizhawk/ZXSpectrum.html) † *approximately* what portion of games run perfectly, not counting romhacks/homebrew (if you want to count, go right ahead) From 0a41092150a2823f7d2231d6fa81c872d8b992c8 Mon Sep 17 00:00:00 2001 From: James Groom Date: Thu, 10 Jan 2019 15:01:37 +1000 Subject: [PATCH 101/301] Update README.md --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 84e6c0a858..adeb2ab38a 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ Jump to: * [Usage (TASing)](https://github.com/TASVideos/BizHawk/blob/master/README.md#usage-tasing) * [Support and troubleshooting](https://github.com/TASVideos/BizHawk/blob/master/README.md#support-and-troubleshooting) * [Contributing](https://github.com/TASVideos/BizHawk/blob/master/README.md#contributing) +* [Related projects](https://github.com/TASVideos/BizHawk/blob/master/README.md#related-projects) * [License](https://github.com/TASVideos/BizHawk/blob/master/README.md#license) ## Features @@ -169,6 +170,15 @@ It's a good idea to check if anyone is already working on an issue by asking on If you'd like to add a feature, first search the issue tracker for it. If it's a new idea, make your own feature request issue before you start coding. +## Related projects + +* [DeSmuME](https://desmume.org) for DS/Lite — cross-platform +* [Dolphin](https://dolphin-emu.org) for GameCube and (original) Wii — cross-platform +* [FCEUX](http://www.fceux.com/web/home.html) for NES/Famicom — TASing is Windows-only, but it should run on Unix +* [Hourglass](https://github.com/TASVideos/hourglass-win32) for Windows Win32 — Windows-only, see also [rewrite project](https://github.com/Hourglass-Resurrection/Hourglass-Resurrection) +* [libTAS](https://github.com/clementgallet/libTAS) for Linux ELF — GNU+Linux-only +* [openMSX](https://openmsx.org) for MSX — cross-platform + ## License From the [full text](https://github.com/TASVideos/BizHawk/blob/master/LICENSE): From 7ab651786736565f428b6268685a0f569c0a3262 Mon Sep 17 00:00:00 2001 From: James Groom Date: Thu, 10 Jan 2019 20:28:43 +1000 Subject: [PATCH 102/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index adeb2ab38a..bef2f76dc8 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ ZX Spectrum | ✓ | 95%? | [common](http://tasvideos.org/Bizhawk/ZXSpectrum.html † *approximately* what portion of games run perfectly, not counting romhacks/homebrew (if you want to count, go right ahead) -EmuHawk's frontend also has a firmware manager, nice overlays, and a comprehensive input mapper. We're talking keyboard and controller mapped to one emulated controller, analog from analog or from digital, keyboard hotkeys, controller hotkeys, and rapid fire for emulated controllers. Most of the frontend can be controlled with Lua scripts (only on Windows for now). These scripts can draw overlays for casual play or for RTA speedruns, change the running game to add complex cheats, assist TASers and romhackers in debugging a game, and more. But most importantly: BizHawk is Hawk Biz. +EmuHawk's frontend also has a firmware manager, nice overlays, and a comprehensive input mapper. We're talking keyboard and controller mapped to one emulated controller, analog from digital and digital from analog, keyboard hotkeys, controller hotkeys, and rapid fire for emulated controllers. Most of the frontend can be controlled with Lua scripts (only on Windows for now). These scripts can draw overlays for casual play or for RTA speedruns, change the running game to add complex cheats, assist TASers and romhackers in debugging a game, and more. But most importantly: BizHawk is Hawk Biz. See the *Usage* sections below for details about specific tools and config menus. From 041436e5fdeee66ee47d464f80128a5e4d160248 Mon Sep 17 00:00:00 2001 From: James Groom Date: Thu, 10 Jan 2019 20:42:06 +1000 Subject: [PATCH 103/301] Update README.md --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index bef2f76dc8..4fe84ecb88 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # BizHawk -[![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&style=flat)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?style=flat)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) ![unique systems emulated | 22](https://img.shields.io/badge/unique_systems_emulated-22-darkgreen.svg?style=flat) +[![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) ![unique systems emulated | 22](https://img.shields.io/badge/unique_systems_emulated-22-darkgreen.svg?style=popout) A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). @@ -152,9 +152,9 @@ TODO A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, and you can't find it in the [issue tracker search](https://github.com/TASVideos/BizHawk/issues?q=is%3Aissue+ISSUE_KEYWORDS), check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at tasvideos.org, or ask on IRC: -[![IRC | chat.freenode.net #bizhawk](https://img.shields.io/badge/IRC-chat.freenode.net_%23bizhawk-steelblue.svg?style=flat)](ircs://chat.freenode.net:6697/bizhawk) -[![Matrix (IRC bridge) | #freenode_#bizhawk:matrix.org](https://img.shields.io/badge/Matrix_(IRC_bridge)-%23freenode__%23bizhawk:matrix.org-mediumpurple.svg?logo=matrix&style=flat)](https://matrix.to/#/#freenode_#bizhawk:matrix.org) -[![freenode webchat | #bizhawk](https://img.shields.io/badge/freenode_webchat-%23bizhawk-lightcoral.svg?style=flat)](http://webchat.freenode.net/?channels=bizhawk) +[![IRC | chat.freenode.net #bizhawk](https://img.shields.io/badge/IRC-chat.freenode.net_%23bizhawk-steelblue.svg?style=popout)](ircs://chat.freenode.net:6697/bizhawk) +[![Matrix (IRC bridge) | #freenode_#bizhawk:matrix.org](https://img.shields.io/badge/Matrix_(IRC_bridge)-%23freenode__%23bizhawk:matrix.org-mediumpurple.svg?logo=matrix&style=popout)](https://matrix.to/#/#freenode_#bizhawk:matrix.org) +[![freenode webchat | #bizhawk](https://img.shields.io/badge/freenode_webchat-%23bizhawk-lightcoral.svg?style=popout)](http://webchat.freenode.net/?channels=bizhawk) If there's no easy solution, what you've got is a bug. Or maybe a feature request. Either way, [open a new issue](https://github.com/TASVideos/BizHawk/issues/new) (you'll need a GitHub account, signup is very fast). @@ -164,7 +164,7 @@ BizHawk is Open Source Software, so you're free to modify it however you please, If you'd like to fix bugs, check the issue tracker here on GitHub: -[![GitHub open issues counter](https://img.shields.io/github/issues-raw/TASVideos/BizHawk.svg?logo=github&style=flat)](https://github.com/TASVideos/BizHawk/issues) +[![GitHub open issues counter](https://img.shields.io/github/issues-raw/TASVideos/BizHawk.svg?logo=github&style=popout)](https://github.com/TASVideos/BizHawk/issues) It's a good idea to check if anyone is already working on an issue by asking on IRC (see *Support* above). From b82875f33aa67f2f2fa04ec8daaf836fbe8a926c Mon Sep 17 00:00:00 2001 From: James Groom Date: Thu, 10 Jan 2019 20:50:32 +1000 Subject: [PATCH 104/301] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4fe84ecb88..e6c93191ef 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # BizHawk -[![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) ![unique systems emulated | 22](https://img.shields.io/badge/unique_systems_emulated-22-darkgreen.svg?style=popout) +[![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) ![unique systems emulated | 22](https://img.shields.io/badge/unique_systems_emulated-22-darkgreen.svg?logo=buffer&logoColor=white&style=popout) A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). @@ -152,9 +152,9 @@ TODO A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, and you can't find it in the [issue tracker search](https://github.com/TASVideos/BizHawk/issues?q=is%3Aissue+ISSUE_KEYWORDS), check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at tasvideos.org, or ask on IRC: -[![IRC | chat.freenode.net #bizhawk](https://img.shields.io/badge/IRC-chat.freenode.net_%23bizhawk-steelblue.svg?style=popout)](ircs://chat.freenode.net:6697/bizhawk) -[![Matrix (IRC bridge) | #freenode_#bizhawk:matrix.org](https://img.shields.io/badge/Matrix_(IRC_bridge)-%23freenode__%23bizhawk:matrix.org-mediumpurple.svg?logo=matrix&style=popout)](https://matrix.to/#/#freenode_#bizhawk:matrix.org) -[![freenode webchat | #bizhawk](https://img.shields.io/badge/freenode_webchat-%23bizhawk-lightcoral.svg?style=popout)](http://webchat.freenode.net/?channels=bizhawk) +[![IRC | chat.freenode.net #bizhawk](https://img.shields.io/badge/IRC-chat.freenode.net_%23bizhawk-steelblue.svg?style=flat)](ircs://chat.freenode.net:6697/bizhawk) +[![Matrix (IRC bridge) | #freenode_#bizhawk:matrix.org](https://img.shields.io/badge/Matrix_(IRC_bridge)-%23freenode__%23bizhawk:matrix.org-mediumpurple.svg?logo=matrix&style=flat)](https://matrix.to/#/#freenode_#bizhawk:matrix.org) +[![freenode webchat | #bizhawk](https://img.shields.io/badge/freenode_webchat-%23bizhawk-lightcoral.svg?style=flat)](http://webchat.freenode.net/?channels=bizhawk) If there's no easy solution, what you've got is a bug. Or maybe a feature request. Either way, [open a new issue](https://github.com/TASVideos/BizHawk/issues/new) (you'll need a GitHub account, signup is very fast). From ef002869fb5a386fd79f4ea4ae146860dd1f0979 Mon Sep 17 00:00:00 2001 From: James Groom Date: Thu, 10 Jan 2019 21:11:26 +1000 Subject: [PATCH 105/301] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e6c93191ef..fbcec8430f 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # BizHawk -[![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) ![unique systems emulated | 22](https://img.shields.io/badge/unique_systems_emulated-22-darkgreen.svg?logo=buffer&logoColor=white&style=popout) +[![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&logoColor=333333&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) ![unique systems emulated | 22](https://img.shields.io/badge/unique_systems_emulated-22-darkgreen.svg?logo=buffer&logoColor=333333&style=popout) A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). @@ -164,7 +164,7 @@ BizHawk is Open Source Software, so you're free to modify it however you please, If you'd like to fix bugs, check the issue tracker here on GitHub: -[![GitHub open issues counter](https://img.shields.io/github/issues-raw/TASVideos/BizHawk.svg?logo=github&style=popout)](https://github.com/TASVideos/BizHawk/issues) +[![GitHub open issues counter](https://img.shields.io/github/issues-raw/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/issues) It's a good idea to check if anyone is already working on an issue by asking on IRC (see *Support* above). From 9155d213d312f4841a50139363b2a10e36840b4c Mon Sep 17 00:00:00 2001 From: James Groom Date: Thu, 10 Jan 2019 23:50:46 +1000 Subject: [PATCH 106/301] Update README.md --- README.md | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index fbcec8430f..cd4b382c0c 100644 --- a/README.md +++ b/README.md @@ -27,30 +27,30 @@ The "core" features, common to every system core, are: * 10 savestate slots and save/load to file * more things I can't remember -System | "Core" Features | Game Coverage† | Peripherals ---:|:-:|:-:|:-: -Apple II | ✓ | 95%? | ? -Atari 2600 | ✓ | 95%? | ? -Atari 7800 | ✓ | 95%? | ? -Atari Lynx | ✓ | 95%? | ? -ColecoVision | ✓ | 95%? | ? -Commodore 64 | ✓ | 95%? | [some](http://tasvideos.org/Bizhawk/C64.html) -GB/GBC | ✓ | 95%? | ? -GBA | ✓ | 95%? | ? -Genesis | ✓ | 95%? | [all?](https://bitbucket.org/eke/genesis-plus-gx/src/b573cd25853f9f8b5b941fc36506835e228144c6/wiki/Features.md?at=master&fileviewer=file-view-default) -IntelliVision | ✓ | 95%? | ? -Master System | ✓ | 95%? | ? -N64 | ✓ | 95%? | [all?](http://tasvideos.org/Bizhawk/N64.html) -NGP/NGPC | ✓ | 95%? | N/A -NES | ✓ | 95%? | ? -PSX | ✓ | 95%? | ? -Saturn | ✓ | 95%? | ? -SNES | ✓ | 95%? | ? -TI-83 | ✓ | 95%? | N/A -PC Engine / SG | ✓ | 95%? | ? -Virtual Boy | ✓ | 95%? | N/A -WonderSwan | ✓ | 95%? | N/A -ZX Spectrum | ✓ | 95%? | [common](http://tasvideos.org/Bizhawk/ZXSpectrum.html) +System | "Core" Features | Game Coverage† | Peripherals | Debugging +--:|:-:|:-:|:-:|:-: +Apple II | ✓ | 95%? | ? | full/partial/limited +Atari 2600 | ✓ | 95%? | ? | partial/limited +Atari 7800 | ✓ | 95%? | ? | full/partial/limited +Atari Lynx | ✓ | 95%? | ? | full/partial/limited +ColecoVision | ✓ | 95%? | ? | full/partial/limited +Commodore 64 | ✓ | 95%? | [some](http://tasvideos.org/Bizhawk/C64.html) | full/partial/limited +GB/GBC | ✓ | 95%? | ? | full/partial/limited +GBA | ✓ | 95%? | ? | full/partial/limited +Genesis | ✓ | 95%? | [all?](https://bitbucket.org/eke/genesis-plus-gx/src/b573cd25853f9f8b5b941fc36506835e228144c6/wiki/Features.md?at=master&fileviewer=file-view-default) | full/partial/limited +IntelliVision | ✓ | 95%? | ? | full/partial/limited +Master System | ✓ | 95%? | ? | full/partial/limited +N64 | ✓ | 95%? | [all?](http://tasvideos.org/Bizhawk/N64.html) | full/partial/limited +NGP/NGPC | ✓ | 95%? | N/A | full/partial/limited +NES | ✓ | 95%? | ? | full/partial/limited +PSX | ✓ | 95%? | ? | full/partial/limited +Saturn | ✓ | 95%? | ? | full/partial/limited +SNES | ✓ | 95%? | ? | full/partial/limited +TI-83 | ✓ | 95%? | N/A | full/partial/limited +PC Engine / SG | ✓ | 95%? | ? | full/partial/limited +Virtual Boy | ✓ | 95%? | N/A | full/partial/limited +WonderSwan | ✓ | 95%? | N/A | full/partial/limited +ZX Spectrum | ✓ | 95%? | [common](http://tasvideos.org/Bizhawk/ZXSpectrum.html) | full/partial/limited † *approximately* what portion of games run perfectly, not counting romhacks/homebrew (if you want to count, go right ahead) From 54602ba86fcd016a54148cc11f6b23f08b18422d Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 00:12:17 +1000 Subject: [PATCH 107/301] Update README.md --- README.md | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index cd4b382c0c..aca1eaaa64 100644 --- a/README.md +++ b/README.md @@ -29,28 +29,28 @@ The "core" features, common to every system core, are: System | "Core" Features | Game Coverage† | Peripherals | Debugging --:|:-:|:-:|:-:|:-: -Apple II | ✓ | 95%? | ? | full/partial/limited -Atari 2600 | ✓ | 95%? | ? | partial/limited -Atari 7800 | ✓ | 95%? | ? | full/partial/limited -Atari Lynx | ✓ | 95%? | ? | full/partial/limited -ColecoVision | ✓ | 95%? | ? | full/partial/limited -Commodore 64 | ✓ | 95%? | [some](http://tasvideos.org/Bizhawk/C64.html) | full/partial/limited -GB/GBC | ✓ | 95%? | ? | full/partial/limited -GBA | ✓ | 95%? | ? | full/partial/limited -Genesis | ✓ | 95%? | [all?](https://bitbucket.org/eke/genesis-plus-gx/src/b573cd25853f9f8b5b941fc36506835e228144c6/wiki/Features.md?at=master&fileviewer=file-view-default) | full/partial/limited -IntelliVision | ✓ | 95%? | ? | full/partial/limited -Master System | ✓ | 95%? | ? | full/partial/limited -N64 | ✓ | 95%? | [all?](http://tasvideos.org/Bizhawk/N64.html) | full/partial/limited -NGP/NGPC | ✓ | 95%? | N/A | full/partial/limited -NES | ✓ | 95%? | ? | full/partial/limited -PSX | ✓ | 95%? | ? | full/partial/limited -Saturn | ✓ | 95%? | ? | full/partial/limited -SNES | ✓ | 95%? | ? | full/partial/limited -TI-83 | ✓ | 95%? | N/A | full/partial/limited -PC Engine / SG | ✓ | 95%? | ? | full/partial/limited -Virtual Boy | ✓ | 95%? | N/A | full/partial/limited -WonderSwan | ✓ | 95%? | N/A | full/partial/limited -ZX Spectrum | ✓ | 95%? | [common](http://tasvideos.org/Bizhawk/ZXSpectrum.html) | full/partial/limited +Apple II | ✓ | 95%? | ? | ? +Atari 2600 | ✓ | 95%? | ? | partial +Atari 7800 | ✓ | 95%? | ? | partial +Atari Lynx | ✓ | 95%? | ? | limited +ColecoVision | ✓ | 95%? | ? | partial +Commodore 64 | ✓ | 95%? | [some](http://tasvideos.org/Bizhawk/C64.html) | partial +GB/GBC | ✓ | 95%? | ? | full +GBA | ✓ | 95%? | ? | partial +Genesis | ✓ | 95%? | [all?](https://bitbucket.org/eke/genesis-plus-gx/src/b573cd25853f9f8b5b941fc36506835e228144c6/wiki/Features.md?at=master&fileviewer=file-view-default) | full +IntelliVision | ✓ | 95%? | ? | partial +Master System | ✓ | 95%? | ? | full +N64 | ✓ | 95%? | [all?](http://tasvideos.org/Bizhawk/N64.html) | partial +NGP/NGPC | ✓ | 95%? | N/A | limited +NES | ✓ | 95%? | ? | full +PSX | ✓ | 95%? | ? | ? +Saturn | ✓ | 95%? | ? | limited +SNES | ✓ | 95%? | ? | full +TI-83 | ✓ | 95%? | N/A | ? +PC Engine / SG | ✓ | 95%? | ? | full +Virtual Boy | ✓ | 95%? | N/A | ? +WonderSwan | ✓ | 95%? | N/A | partial +ZX Spectrum | ✓ | 95%? | [common](http://tasvideos.org/Bizhawk/ZXSpectrum.html) | full † *approximately* what portion of games run perfectly, not counting romhacks/homebrew (if you want to count, go right ahead) From 5e3e722858575cdfe22e5bb1cf175f5813add5c7 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 00:20:04 +1000 Subject: [PATCH 108/301] Update README.md --- README.md | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/README.md b/README.md index aca1eaaa64..648229524b 100644 --- a/README.md +++ b/README.md @@ -30,27 +30,27 @@ The "core" features, common to every system core, are: System | "Core" Features | Game Coverage† | Peripherals | Debugging --:|:-:|:-:|:-:|:-: Apple II | ✓ | 95%? | ? | ? -Atari 2600 | ✓ | 95%? | ? | partial -Atari 7800 | ✓ | 95%? | ? | partial -Atari Lynx | ✓ | 95%? | ? | limited -ColecoVision | ✓ | 95%? | ? | partial -Commodore 64 | ✓ | 95%? | [some](http://tasvideos.org/Bizhawk/C64.html) | partial -GB/GBC | ✓ | 95%? | ? | full -GBA | ✓ | 95%? | ? | partial -Genesis | ✓ | 95%? | [all?](https://bitbucket.org/eke/genesis-plus-gx/src/b573cd25853f9f8b5b941fc36506835e228144c6/wiki/Features.md?at=master&fileviewer=file-view-default) | full -IntelliVision | ✓ | 95%? | ? | partial -Master System | ✓ | 95%? | ? | full -N64 | ✓ | 95%? | [all?](http://tasvideos.org/Bizhawk/N64.html) | partial -NGP/NGPC | ✓ | 95%? | N/A | limited -NES | ✓ | 95%? | ? | full +Atari 2600 | ✓ | 95%? | ? | ◕ +Atari 7800 | ✓ | 95%? | ? | ◕ +Atari Lynx | ✓ | 95%? | ? | ◔ +ColecoVision | ✓ | 95%? | ? | ◕ +Commodore 64 | ✓ | 95%? | [some](http://tasvideos.org/Bizhawk/C64.html) | ◕ +GB/GBC | ✓ | 95%? | ? | ✓ +GBA | ✓ | 95%? | ? | ◕ +Genesis | ✓ | 95%? | [all?](https://bitbucket.org/eke/genesis-plus-gx/src/b573cd25853f9f8b5b941fc36506835e228144c6/wiki/Features.md?at=master&fileviewer=file-view-default) | ✓ +IntelliVision | ✓ | 95%? | ? | ◕ +Master System | ✓ | 95%? | ? | ✓ +N64 | ✓ | 95%? | [all?](http://tasvideos.org/Bizhawk/N64.html) | ◕ +NGP/NGPC | ✓ | 95%? | N/A | ◔ +NES | ✓ | 95%? | ? | ✓ PSX | ✓ | 95%? | ? | ? -Saturn | ✓ | 95%? | ? | limited -SNES | ✓ | 95%? | ? | full +Saturn | ✓ | 95%? | ? | ◔ +SNES | ✓ | 95%? | ? | ✓ TI-83 | ✓ | 95%? | N/A | ? -PC Engine / SG | ✓ | 95%? | ? | full +PC Engine / SG | ✓ | 95%? | ? | ✓ Virtual Boy | ✓ | 95%? | N/A | ? -WonderSwan | ✓ | 95%? | N/A | partial -ZX Spectrum | ✓ | 95%? | [common](http://tasvideos.org/Bizhawk/ZXSpectrum.html) | full +WonderSwan | ✓ | 95%? | N/A | ◕ +ZX Spectrum | ✓ | 95%? | [common](http://tasvideos.org/Bizhawk/ZXSpectrum.html) | ✓ † *approximately* what portion of games run perfectly, not counting romhacks/homebrew (if you want to count, go right ahead) From 200cffabc426e8daccb736b938a239dc9b07e876 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 00:30:05 +1000 Subject: [PATCH 109/301] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 648229524b..512a878444 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # BizHawk -[![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&logoColor=333333&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) ![unique systems emulated | 22](https://img.shields.io/badge/unique_systems_emulated-22-darkgreen.svg?logo=buffer&logoColor=333333&style=popout) +[![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) +[![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&logoColor=333333&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) +[![unique systems emulated | 22](https://img.shields.io/badge/unique_systems_emulated-22-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](#) A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). From f1041fc764b7db7eeb575bcb905d4ade58aab3bc Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 00:30:22 +1000 Subject: [PATCH 110/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 512a878444..1318f4f666 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&logoColor=333333&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) -[![unique systems emulated | 22](https://img.shields.io/badge/unique_systems_emulated-22-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](#) +[![unique systems emulated | 22](https://img.shields.io/badge/unique_systems_emulated-22-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)]() A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). From 544b2c07484c13e8e5bf913a09044f5086d23bef Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 00:30:38 +1000 Subject: [PATCH 111/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1318f4f666..f6f34ba702 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&logoColor=333333&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) -[![unique systems emulated | 22](https://img.shields.io/badge/unique_systems_emulated-22-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)]() +[![unique systems emulated | 22](https://img.shields.io/badge/unique_systems_emulated-22-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](javascript:;) A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). From e22d10517f3dcedc527a264fd2497f2b16ef3ade Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 00:31:21 +1000 Subject: [PATCH 112/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f6f34ba702..0e45be8132 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&logoColor=333333&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) -[![unique systems emulated | 22](https://img.shields.io/badge/unique_systems_emulated-22-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](javascript:;) +[![unique systems emulated | 22](https://img.shields.io/badge/unique_systems_emulated-22-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#features) A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). From 43286f7ec37ec3120b880f93783e611a991614f9 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 00:35:54 +1000 Subject: [PATCH 113/301] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0e45be8132..3e7b2a937d 100644 --- a/README.md +++ b/README.md @@ -23,11 +23,11 @@ Jump to: The "core" features, common to every system core, are: * rom format and region detection and a corruption check -* speed control, including frame stepping and rewinding -* input recording (making TAS movies) -* memory view/search/edit in all parts of the emulated HW * 10 savestate slots and save/load to file -* more things I can't remember +* speed control, including frame stepping and rewinding +* memory view/search/edit in all parts of the emulated HW +* input recording (making TAS movies) +* take screenshots and record video System | "Core" Features | Game Coverage† | Peripherals | Debugging --:|:-:|:-:|:-:|:-: From 746606a09d99f30d419563d92ad021d867e2bd7d Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 00:45:58 +1000 Subject: [PATCH 114/301] Update README.md --- README.md | 44 ++++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 3e7b2a937d..88ae2ef065 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Jump to: ## Features -The "core" features, common to every system core, are: +The BizHawk common features (across all cores) are: * rom format and region detection and a corruption check * 10 savestate slots and save/load to file * speed control, including frame stepping and rewinding @@ -29,30 +29,30 @@ The "core" features, common to every system core, are: * input recording (making TAS movies) * take screenshots and record video -System | "Core" Features | Game Coverage† | Peripherals | Debugging +System | BH Common | Accuracy† | Debugging | Peripherals --:|:-:|:-:|:-:|:-: Apple II | ✓ | 95%? | ? | ? -Atari 2600 | ✓ | 95%? | ? | ◕ -Atari 7800 | ✓ | 95%? | ? | ◕ -Atari Lynx | ✓ | 95%? | ? | ◔ -ColecoVision | ✓ | 95%? | ? | ◕ -Commodore 64 | ✓ | 95%? | [some](http://tasvideos.org/Bizhawk/C64.html) | ◕ -GB/GBC | ✓ | 95%? | ? | ✓ -GBA | ✓ | 95%? | ? | ◕ -Genesis | ✓ | 95%? | [all?](https://bitbucket.org/eke/genesis-plus-gx/src/b573cd25853f9f8b5b941fc36506835e228144c6/wiki/Features.md?at=master&fileviewer=file-view-default) | ✓ -IntelliVision | ✓ | 95%? | ? | ◕ -Master System | ✓ | 95%? | ? | ✓ -N64 | ✓ | 95%? | [all?](http://tasvideos.org/Bizhawk/N64.html) | ◕ -NGP/NGPC | ✓ | 95%? | N/A | ◔ -NES | ✓ | 95%? | ? | ✓ +Atari 2600 | ✓ | 95%? | ◕ | ? +Atari 7800 | ✓ | 95%? | ◕ | ? +Atari Lynx | ✓ | 95%? | ◔ | ? +ColecoVision | ✓ | 95%? | ◕ | ? +Commodore 64 | ✓ | 95%? | ◕ | [some](http://tasvideos.org/Bizhawk/C64.html) +GB/GBC | ✓ | 95%? | ✓ | ? +GBA | ✓ | 95%? | ◕ | ? +Genesis | ✓ | 95%? | ✓ | [all?](https://bitbucket.org/eke/genesis-plus-gx/src/b573cd25853f9f8b5b941fc36506835e228144c6/wiki/Features.md?at=master&fileviewer=file-view-default) +IntelliVision | ✓ | 95%? | ◕ | ? +Master System | ✓ | 95%? | ✓ | ? +N64 | ✓ | 95%? | ◕ | [all?](http://tasvideos.org/Bizhawk/N64.html) +NGP/NGPC | ✓ | 95%? | ◔ | N/A +NES | ✓ | 95%? | ✓ | ? PSX | ✓ | 95%? | ? | ? -Saturn | ✓ | 95%? | ? | ◔ -SNES | ✓ | 95%? | ? | ✓ -TI-83 | ✓ | 95%? | N/A | ? -PC Engine / SG | ✓ | 95%? | ? | ✓ -Virtual Boy | ✓ | 95%? | N/A | ? -WonderSwan | ✓ | 95%? | N/A | ◕ -ZX Spectrum | ✓ | 95%? | [common](http://tasvideos.org/Bizhawk/ZXSpectrum.html) | ✓ +Saturn | ✓ | 95%? | ◔ | ? +SNES | ✓ | 95%? | ✓ | ? +TI-83 | ✓ | 95%? | ? | N/A +PC Engine / SG | ✓ | 95%? | ✓ | ? +Virtual Boy | ✓ | 95%? | ? | N/A +WonderSwan | ✓ | 95%? | ◕ | N/A +ZX Spectrum | ✓ | 95%? | ✓ | [common](http://tasvideos.org/Bizhawk/ZXSpectrum.html) † *approximately* what portion of games run perfectly, not counting romhacks/homebrew (if you want to count, go right ahead) From c19c7cd5c39087027475a6eff6268c8aea8ce2e5 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 6 Jan 2019 23:05:29 +0300 Subject: [PATCH 115/301] SubNESHawk also Input register shift fix # Conflicts: # BizHawk.Client.EmuHawk/MainForm.Designer.cs # BizHawk.Client.EmuHawk/MainForm.Events.cs # BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IEmulator.cs # BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.IEmulator.cs # BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.run.cs --- BizHawk.Client.Common/RomLoader.cs | 9 +- BizHawk.Client.Common/config/Config.cs | 1 + BizHawk.Client.EmuHawk/MainForm.Designer.cs | 10 + BizHawk.Client.EmuHawk/MainForm.Events.cs | 11 + BizHawk.Client.EmuHawk/MainForm.cs | 4 +- .../Base Implementations/NullEmulator.cs | 10 +- .../Interfaces/IEmulator.cs | 2 +- .../BizHawk.Emulation.Cores.csproj | 24 ++ .../Calculator/TI83.IEmulator.cs | 4 +- .../AmstradCPC/AmstradCPC.IEmulator.cs | 4 +- .../Computers/AppleII/AppleII.IEmulator.cs | 4 +- .../Computers/Commodore64/C64.IEmulator.cs | 4 +- .../SinclairSpectrum/ZXSpectrum.IEmulator.cs | 4 +- .../Atari/2600/Atari2600.IEmulator.cs | 4 +- .../Atari/A7800Hawk/A7800Hawk.IEmulator.cs | 4 +- .../Consoles/Atari/lynx/Lynx.cs | 4 +- .../Consoles/Coleco/ColecoVision.IEmulator.cs | 4 +- .../Intellivision/Intellivision.IEmulator.cs | 4 +- .../Consoles/Nintendo/GBA/MGBAHawk.cs | 4 +- .../Consoles/Nintendo/GBA/VBANext.cs | 4 +- .../Nintendo/GBHawk/GBHawk.IEmulator.cs | 4 +- .../GBHawkLink/GBHawkLink.IEmulator.cs | 4 +- .../Nintendo/Gameboy/Gambatte.IEmulator.cs | 4 +- .../Consoles/Nintendo/Gameboy/Gambatte.cs | 4 +- .../Gameboy/GambatteLink.IEmulator.cs | 4 +- .../Consoles/Nintendo/N64/N64.cs | 4 +- .../Consoles/Nintendo/NES/Boards/ExROM.cs | 6 +- .../NES/Boards/UNIF/UNIF_UNL-TF1201.cs | 4 +- .../Consoles/Nintendo/NES/NES.Core.cs | 108 +++++++-- .../Consoles/Nintendo/NES/NES.IStatable.cs | 11 +- .../Consoles/Nintendo/NES/NES.cs | 4 +- .../Consoles/Nintendo/NES/PPU.cs | 11 +- .../Consoles/Nintendo/NES/PPU.regs.cs | 2 +- .../Consoles/Nintendo/NES/PPU.run.cs | 20 +- .../Consoles/Nintendo/QuickNES/QuickNES.cs | 4 +- .../Nintendo/SNES/LibsnesCore.IEmulator.cs | 4 +- .../Consoles/Nintendo/SubNESHawk/ReadMe.txt | 1 + .../SubNESHawk/SubNESHawk.IDebuggable.cs | 74 ++++++ .../SubNESHawk/SubNESHawk.IEmulator.cs | 215 ++++++++++++++++++ .../SubNESHawk/SubNESHawk.IInputPollable.cs | 24 ++ .../SubNESHawk/SubNESHawk.IMemoryDomains.cs | 84 +++++++ .../SubNESHawk/SubNESHawk.ISaveRam.cs | 42 ++++ .../SubNESHawk/SubNESHawk.ISettable.cs | 58 +++++ .../SubNESHawk/SubNESHawk.IStatable.cs | 63 +++++ .../Nintendo/SubNESHawk/SubNESHawk.cs | 80 +++++++ .../SubNESHawk/SubNESHawkControllerDeck.cs | 89 ++++++++ .../SubNESHawk/SubNESHawkControllers.cs | 94 ++++++++ .../Consoles/PC Engine/PCEngine.IEmulator.cs | 4 +- .../Consoles/SNK/DualNeoGeoPort.cs | 4 +- .../Consoles/Sega/SMS/SMS.IEmulator.cs | 4 +- .../Consoles/Sega/gpgx64/GPGX.IEmulator.cs | 74 +++--- .../Consoles/Sony/PSP/PSP.cs | 4 +- .../Consoles/Sony/PSX/Octoshock.cs | 6 +- .../Consoles/WonderSwan/WonderSwan.cs | 4 +- .../Libretro/LibretroCore.cs | 4 +- .../Waterbox/WaterboxCore.cs | 4 +- 56 files changed, 1144 insertions(+), 105 deletions(-) create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/ReadMe.txt create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IDebuggable.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IInputPollable.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IMemoryDomains.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.ISaveRam.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.ISettable.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawkControllerDeck.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawkControllers.cs diff --git a/BizHawk.Client.Common/RomLoader.cs b/BizHawk.Client.Common/RomLoader.cs index 3a4b1d69a6..f06cf75020 100644 --- a/BizHawk.Client.Common/RomLoader.cs +++ b/BizHawk.Client.Common/RomLoader.cs @@ -973,7 +973,14 @@ namespace BizHawk.Client.Common if (preference == "neshawk") { - core = CoreInventory.Instance["NES", "NesHawk"]; + if (Global.Config.UseSubNESHawk) + { + core = CoreInventory.Instance["NES", "SubNESHawk"]; + } + else + { + core = CoreInventory.Instance["NES", "NesHawk"]; + } } else { diff --git a/BizHawk.Client.Common/config/Config.cs b/BizHawk.Client.Common/config/Config.cs index b7f72ab639..60c0071725 100644 --- a/BizHawk.Client.Common/config/Config.cs +++ b/BizHawk.Client.Common/config/Config.cs @@ -554,6 +554,7 @@ namespace BizHawk.Client.Common // as this setting spans multiple cores and doesn't actually affect the behavior of any core, // it hasn't been absorbed into the new system public bool GB_AsSGB = false; + public bool UseSubNESHawk = false; public bool NES_InQuickNES = true; public bool SNES_InSnes9x = true; public bool GBA_UsemGBA = true; diff --git a/BizHawk.Client.EmuHawk/MainForm.Designer.cs b/BizHawk.Client.EmuHawk/MainForm.Designer.cs index 092908ba95..b7df5e2f76 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Designer.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Designer.cs @@ -199,6 +199,7 @@ this.GBGambatteMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.GBGBHawkMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.GBInSGBMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.SubNESHawkMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripMenuItem16 = new System.Windows.Forms.ToolStripSeparator(); this.allowGameDBCoreOverridesToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.toolStripSeparator8 = new System.Windows.Forms.ToolStripSeparator(); @@ -1845,6 +1846,7 @@ this.SGBCoreSubmenu, this.GBCoreSubmenu, this.GBInSGBMenuItem, + this.SubNESHawkMenuItem, this.toolStripMenuItem16, this.allowGameDBCoreOverridesToolStripMenuItem, this.toolStripSeparator8, @@ -1982,6 +1984,13 @@ this.GBInSGBMenuItem.Text = "GB in SGB"; this.GBInSGBMenuItem.Click += new System.EventHandler(this.GbInSgbMenuItem_Click); // + // SubNESHawkMenuItem + // + this.SubNESHawkMenuItem.Name = "SubNESHawkMenuItem"; + this.SubNESHawkMenuItem.Size = new System.Drawing.Size(239, 22); + this.SubNESHawkMenuItem.Text = "SubNESHawk"; + this.SubNESHawkMenuItem.Click += new System.EventHandler(this.SubNESHawkMenuItem_Click); + // // toolStripMenuItem16 // this.toolStripMenuItem16.Name = "toolStripMenuItem16"; @@ -4532,6 +4541,7 @@ private System.Windows.Forms.ToolStripMenuItem MovieSettingsMenuItem; private System.Windows.Forms.ToolStripMenuItem CoresSubMenu; private System.Windows.Forms.ToolStripMenuItem GBInSGBMenuItem; + private System.Windows.Forms.ToolStripMenuItem SubNESHawkMenuItem; private System.Windows.Forms.ToolStripMenuItem batchRunnerToolStripMenuItem; private System.Windows.Forms.ToolStripMenuItem DisplayConfigMenuItem; private System.Windows.Forms.ToolStripMenuItem PCEtileViewerToolStripMenuItem; diff --git a/BizHawk.Client.EmuHawk/MainForm.Events.cs b/BizHawk.Client.EmuHawk/MainForm.Events.cs index e9bce5e5aa..f524b4bb13 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Events.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Events.cs @@ -1215,6 +1215,7 @@ namespace BizHawk.Client.EmuHawk private void CoresSubMenu_DropDownOpened(object sender, EventArgs e) { GBInSGBMenuItem.Checked = Global.Config.GB_AsSGB; + SubNESHawkMenuItem.Checked = Global.Config.UseSubNESHawk; allowGameDBCoreOverridesToolStripMenuItem.Checked = Global.Config.CoreForcingViaGameDB; } @@ -1308,6 +1309,16 @@ namespace BizHawk.Client.EmuHawk } } + private void SubNESHawkMenuItem_Click(object sender, EventArgs e) + { + Global.Config.UseSubNESHawk ^= true; + + if (!Emulator.IsNull()) + { + FlagNeedsReboot(); + } + } + private void AllowGameDBCoreOverridesToolStripMenuItem_Click(object sender, EventArgs e) { Global.Config.CoreForcingViaGameDB ^= true; diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 28f0311d31..a7a40b17aa 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -2997,7 +2997,7 @@ namespace BizHawk.Client.EmuHawk } bool render = !_throttle.skipNextFrame || (_currAviWriter?.UsesVideo ?? false); - Emulator.FrameAdvance(Global.ControllerOutput, render, renderSound); + bool new_frame = Emulator.FrameAdvance(Global.ControllerOutput, render, renderSound); Global.MovieSession.HandleMovieAfterFrameLoop(); @@ -3036,7 +3036,7 @@ namespace BizHawk.Client.EmuHawk UpdateToolsAfter(SuppressLua); } - if (!PauseAvi) + if (!PauseAvi && new_frame) { AvFrameAdvance(); } diff --git a/BizHawk.Emulation.Common/Base Implementations/NullEmulator.cs b/BizHawk.Emulation.Common/Base Implementations/NullEmulator.cs index 034d1dfbaf..0983f9651c 100644 --- a/BizHawk.Emulation.Common/Base Implementations/NullEmulator.cs +++ b/BizHawk.Emulation.Common/Base Implementations/NullEmulator.cs @@ -33,23 +33,23 @@ namespace BizHawk.Emulation.Common public ControllerDefinition ControllerDefinition => NullController.Instance.Definition; - public void FrameAdvance(IController controller, bool render, bool rendersound) + public bool FrameAdvance(IController controller, bool render, bool rendersound) { if (render == false) { - return; + return true; } if (!_settings.SnowyDisplay) { if (_frameBufferClear) { - return; + return true; } _frameBufferClear = true; Array.Clear(_frameBuffer, 0, 256 * 192); - return; + return true; } _frameBufferClear = false; @@ -70,6 +70,8 @@ namespace BizHawk.Emulation.Common } Frame++; + + return true; } public int Frame { get; private set; } diff --git a/BizHawk.Emulation.Common/Interfaces/IEmulator.cs b/BizHawk.Emulation.Common/Interfaces/IEmulator.cs index 4d3926d6fc..6920136d94 100644 --- a/BizHawk.Emulation.Common/Interfaces/IEmulator.cs +++ b/BizHawk.Emulation.Common/Interfaces/IEmulator.cs @@ -34,7 +34,7 @@ namespace BizHawk.Emulation.Common /// Whether or not to render video, cores will pass false here in cases such as frame skipping /// Whether or not to render audio, cores will pass here false here in cases such as fast forwarding where bypassing sound may improve speed /// - void FrameAdvance(IController controller, bool render, bool rendersound = true); + bool FrameAdvance(IController controller, bool render, bool rendersound = true); ///

    /// Gets the current frame count diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index 744a7d8c27..dda627b813 100644 --- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -1201,6 +1201,30 @@ + + + SubNESHawk.cs + + + SubNESHawk.cs + + + SubNESHawk.cs + + + SubNESHawk.cs + + + SubNESHawk.cs + + + SubNESHawk.cs + + + SubNESHawk.cs + + + diff --git a/BizHawk.Emulation.Cores/Calculator/TI83.IEmulator.cs b/BizHawk.Emulation.Cores/Calculator/TI83.IEmulator.cs index 622664bcc7..ba1f2efde3 100644 --- a/BizHawk.Emulation.Cores/Calculator/TI83.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Calculator/TI83.IEmulator.cs @@ -8,7 +8,7 @@ namespace BizHawk.Emulation.Cores.Calculators public ControllerDefinition ControllerDefinition => TI83Controller; - public void FrameAdvance(IController controller, bool render, bool rendersound) + public bool FrameAdvance(IController controller, bool render, bool rendersound) { _controller = controller; _lagged = true; @@ -59,6 +59,8 @@ namespace BizHawk.Emulation.Cores.Calculators } _isLag = _lagged; + + return true; } public int Frame diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IEmulator.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IEmulator.cs index 23a2bfb521..bb7fe9b5f3 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.IEmulator.cs @@ -12,7 +12,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC public ControllerDefinition ControllerDefinition { get; set; } - public void FrameAdvance(IController controller, bool render, bool renderSound) + public bool FrameAdvance(IController controller, bool render, bool renderSound) { _controller = controller; @@ -42,6 +42,8 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC { _lagCount++; } + + return true; } public int Frame diff --git a/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.IEmulator.cs b/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.IEmulator.cs index 8e41c8ba8c..903fc365bd 100644 --- a/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Computers/AppleII/AppleII.IEmulator.cs @@ -14,9 +14,11 @@ namespace BizHawk.Emulation.Cores.Computers.AppleII public bool DeterministicEmulation => true; - public void FrameAdvance(IController controller, bool render, bool rendersound) + public bool FrameAdvance(IController controller, bool render, bool rendersound) { FrameAdv(controller, render, rendersound); + + return true; } public void ResetCounters() diff --git a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IEmulator.cs b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IEmulator.cs index 358a02fcff..29aea5b261 100644 --- a/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Computers/Commodore64/C64.IEmulator.cs @@ -8,7 +8,7 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 public ControllerDefinition ControllerDefinition => C64ControllerDefinition; - public void FrameAdvance(IController controller, bool render, bool rendersound) + public bool FrameAdvance(IController controller, bool render, bool rendersound) { _board.Controller = controller; @@ -47,6 +47,8 @@ namespace BizHawk.Emulation.Cores.Computers.Commodore64 DoCycle(); } while (_frameCycles != 0); + + return true; } public int Frame => _frame; diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.IEmulator.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.IEmulator.cs index 1276521373..56e9f0d376 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.IEmulator.cs @@ -12,7 +12,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum public ControllerDefinition ControllerDefinition { get; set; } - public void FrameAdvance(IController controller, bool render, bool renderSound) + public bool FrameAdvance(IController controller, bool render, bool renderSound) { _controller = controller; @@ -42,6 +42,8 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum { _lagCount++; } + + return true; } public int Frame diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.IEmulator.cs index 1dad16b1d3..23585fb39f 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/2600/Atari2600.IEmulator.cs @@ -9,7 +9,7 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 public ControllerDefinition ControllerDefinition => _controllerDeck.Definition; - public void FrameAdvance(IController controller, bool render, bool rendersound) + public bool FrameAdvance(IController controller, bool render, bool rendersound) { _controller = controller; @@ -75,6 +75,8 @@ namespace BizHawk.Emulation.Cores.Atari.Atari2600 } _tia.LineCount = 0; + + return true; } public int Frame => _frame; diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.IEmulator.cs index 11ce9c8f23..667ee16c13 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/A7800Hawk/A7800Hawk.IEmulator.cs @@ -57,7 +57,7 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk public bool slow_access = false; public int slow_countdown; - public void FrameAdvance(IController controller, bool render, bool rendersound) + public bool FrameAdvance(IController controller, bool render, bool rendersound) { if (_tracer.Enabled) { @@ -88,6 +88,8 @@ namespace BizHawk.Emulation.Cores.Atari.A7800Hawk { _lagcount++; } + + return true; } public void RunCPUCycle() diff --git a/BizHawk.Emulation.Cores/Consoles/Atari/lynx/Lynx.cs b/BizHawk.Emulation.Cores/Consoles/Atari/lynx/Lynx.cs index e234ae4455..24fb8a0095 100644 --- a/BizHawk.Emulation.Cores/Consoles/Atari/lynx/Lynx.cs +++ b/BizHawk.Emulation.Cores/Consoles/Atari/lynx/Lynx.cs @@ -120,7 +120,7 @@ namespace BizHawk.Emulation.Cores.Atari.Lynx public IEmulatorServiceProvider ServiceProvider { get; } - public void FrameAdvance(IController controller, bool render, bool rendersound = true) + public bool FrameAdvance(IController controller, bool render, bool rendersound = true) { Frame++; if (controller.IsPressed("Power")) @@ -135,6 +135,8 @@ namespace BizHawk.Emulation.Cores.Atari.Lynx { LagCount++; } + + return true; } public int Frame { get; private set; } diff --git a/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.IEmulator.cs index 6d9dda125f..8d8c7b8b48 100644 --- a/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Coleco/ColecoVision.IEmulator.cs @@ -10,7 +10,7 @@ namespace BizHawk.Emulation.Cores.ColecoVision public ControllerDefinition ControllerDefinition => ControllerDeck.Definition; - public void FrameAdvance(IController controller, bool render, bool renderSound) + public bool FrameAdvance(IController controller, bool render, bool renderSound) { _controller = controller; @@ -163,6 +163,8 @@ namespace BizHawk.Emulation.Cores.ColecoVision { _lagCount++; } + + return true; } public bool use_SGM = false; diff --git a/BizHawk.Emulation.Cores/Consoles/Intellivision/Intellivision.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Intellivision/Intellivision.IEmulator.cs index 7f7c1e717d..0d0dd5dee2 100644 --- a/BizHawk.Emulation.Cores/Consoles/Intellivision/Intellivision.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Intellivision/Intellivision.IEmulator.cs @@ -8,7 +8,7 @@ namespace BizHawk.Emulation.Cores.Intellivision public ControllerDefinition ControllerDefinition => _controllerDeck.Definition; - public void FrameAdvance(IController controller, bool render, bool rendersound) + public bool FrameAdvance(IController controller, bool render, bool rendersound) { if (_tracer.Enabled) { @@ -124,6 +124,8 @@ namespace BizHawk.Emulation.Cores.Intellivision { SoftReset(); } + + return true; } public int Frame => _frame; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.cs index 0028c7b4e9..264d658e98 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/MGBAHawk.cs @@ -67,7 +67,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA public ControllerDefinition ControllerDefinition => GBA.GBAController; - public void FrameAdvance(IController controller, bool render, bool rendersound = true) + public bool FrameAdvance(IController controller, bool render, bool rendersound = true) { Frame++; if (controller.IsPressed("Power")) @@ -97,6 +97,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA // this should be called in hblank on the appropriate line, but until we implement that, just do it here _scanlinecb?.Invoke(); + + return true; } public int Frame { get; private set; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs index 676210608f..247d7fd68d 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBA/VBANext.cs @@ -95,7 +95,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA public IEmulatorServiceProvider ServiceProvider { get; private set; } - public void FrameAdvance(IController controller, bool render, bool rendersound = true) + public bool FrameAdvance(IController controller, bool render, bool rendersound = true) { Frame++; @@ -108,6 +108,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBA if (IsLagFrame) LagCount++; + + return true; } public int Frame { get; private set; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IEmulator.cs index e0aa0baeef..ca42c1472e 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawk/GBHawk.IEmulator.cs @@ -19,7 +19,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk public bool in_vblank; public bool vblank_rise; - public void FrameAdvance(IController controller, bool render, bool rendersound) + public bool FrameAdvance(IController controller, bool render, bool rendersound) { //Console.WriteLine("-----------------------FRAME-----------------------"); @@ -74,6 +74,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawk { _lagcount++; } + + return true; } public void do_frame() diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs index 1cebe9f5b4..dc431a50fc 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs @@ -14,7 +14,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink public ControllerDefinition ControllerDefinition => _controllerDeck.Definition; - public void FrameAdvance(IController controller, bool render, bool rendersound) + public bool FrameAdvance(IController controller, bool render, bool rendersound) { //Console.WriteLine("-----------------------FRAME-----------------------"); //Update the color palette if a setting changed @@ -86,6 +86,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink { _lagcount++; } + + return true; } public void do_frame() diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IEmulator.cs index 2b55424647..c0b371b389 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.IEmulator.cs @@ -12,7 +12,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy public ControllerDefinition ControllerDefinition => GbController; - public void FrameAdvance(IController controller, bool render, bool rendersound) + public bool FrameAdvance(IController controller, bool render, bool rendersound) { FrameAdvancePrep(controller); if (_syncSettings.EqualLengthFrames) @@ -68,6 +68,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy } FrameAdvancePost(); + + return true; } public int Frame { get; private set; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs index 1f1891e1a5..b0bdd405d9 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs @@ -344,7 +344,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy LibGambatte.gambatte_setlayers(GambatteState, (_settings.DisplayBG ? 1 : 0) | (_settings.DisplayOBJ ? 2 : 0) | (_settings.DisplayWindow ? 4 : 0)); } - internal void FrameAdvancePost() + internal bool FrameAdvancePost() { if (IsLagFrame) { @@ -352,6 +352,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy } endofframecallback?.Invoke(LibGambatte.gambatte_cpuread(GambatteState, 0xff40)); + + return true; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.IEmulator.cs index 3a835ee5a2..c10f340eae 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/GambatteLink.IEmulator.cs @@ -9,7 +9,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy public ControllerDefinition ControllerDefinition => DualGbController; - public void FrameAdvance(IController controller, bool render, bool rendersound = true) + public bool FrameAdvance(IController controller, bool render, bool rendersound = true) { LCont.Clear(); RCont.Clear(); @@ -148,6 +148,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy { LagCount++; } + + return true; } public int Frame { get; private set; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.cs index b4c68bf03f..342eaef8c4 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/N64/N64.cs @@ -221,7 +221,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64 RunThreadAction(() => { _pendingThreadTerminate = true; }); } - public void FrameAdvance(IController controller, bool render, bool rendersound) + public bool FrameAdvance(IController controller, bool render, bool rendersound) { _inputProvider.Controller = controller; @@ -258,6 +258,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.N64 if(!api.IsCrashed) Frame++; + + return true; } public string SystemId { get { return "N64"; } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/ExROM.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/ExROM.cs index 61a0c5fe7c..ce0e72510f 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/ExROM.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/ExROM.cs @@ -244,7 +244,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES int bank_1k = addr >> 10; int ofs = addr & ((1 << 10) - 1); - if (exram_mode == 1 && NES.ppu.ppuphase == PPU.PPUPHASE.BG) + if (exram_mode == 1 && NES.ppu.ppuphase == PPU.PPU_PHASE_BG) { int exram_addr = last_nt_read; int bank_4k = EXRAM[exram_addr] & 0x3F; @@ -261,9 +261,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES if (NES.ppu.reg_2000.obj_size_16) { bool isPattern = NES.ppu.PPUON; - if (NES.ppu.ppuphase == PPU.PPUPHASE.OBJ && isPattern) + if (NES.ppu.ppuphase == PPU.PPU_PHASE_OBJ && isPattern) bank_1k = a_banks_1k[bank_1k]; - else if (NES.ppu.ppuphase == PPU.PPUPHASE.BG && isPattern) + else if (NES.ppu.ppuphase == PPU.PPU_PHASE_BG && isPattern) bank_1k = b_banks_1k[bank_1k]; else { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/UNIF/UNIF_UNL-TF1201.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/UNIF/UNIF_UNL-TF1201.cs index 04df29aadc..c8df6cac0d 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/UNIF/UNIF_UNL-TF1201.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/UNIF/UNIF_UNL-TF1201.cs @@ -80,7 +80,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES case 0xF003: IRQa = value.Bit(1); IRQSignal = false; - if (NES.ppu.ppuphase !=PPU.PPUPHASE.VBL) + if (NES.ppu.ppuphase !=PPU.PPU_PHASE_VBL) IRQCount -= 8; break; } @@ -88,7 +88,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES public override void ClockPPU() { - if ((NES.ppu.ppuphase != PPU.PPUPHASE.VBL))// && IRQa) + if ((NES.ppu.ppuphase != PPU.PPU_PHASE_VBL))// && IRQa) { IRQpre--; if (IRQpre==0) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs index 5d5a01ed83..851291e2a1 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs @@ -79,7 +79,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES magicSoundProvider = null; } - class MagicSoundProvider : ISoundProvider, IDisposable + public class MagicSoundProvider : ISoundProvider, IDisposable { BlipBuffer blip; NES nes; @@ -157,7 +157,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES } } } - MagicSoundProvider magicSoundProvider; + public MagicSoundProvider magicSoundProvider; public void HardReset() { @@ -311,7 +311,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES bool resetSignal; bool hardResetSignal; - public void FrameAdvance(IController controller, bool render, bool rendersound) + public bool FrameAdvance(IController controller, bool render, bool rendersound) { _controller = controller; @@ -377,12 +377,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES } else { - ppu.ppu_init_frame(); - - ppu.do_vbl = true; - ppu.do_active_sl = true; - ppu.do_pre_vbl = true; - // do the vbl ticks seperate, that will save us a few checks that don't happen in active region while (ppu.do_vbl) { @@ -415,6 +409,50 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES // turn off all cheats // any cheats still active will be re-applied by the buspoke at the start of the next frame num_cheats = 0; + + return true; + } + + // these variables are for subframe input control + public bool controller_was_latched; + public bool frame_is_done; + public bool current_strobe; + public bool new_strobe; + public bool alt_lag; + public byte ctrl_1 = 0; + public byte ctrl_2 = 0; + public byte ctrl_1_new = 0; + public byte ctrl_2_new = 0; + public int shift_1; + public int shift_2; + public bool use_sub_input = false; + // this function will run one step of the ppu + // it will return whether the controller is read or not. + public void do_single_step(out bool cont_read, out bool frame_done) + { + controller_was_latched = false; + frame_is_done = false; + + current_strobe = new_strobe; + if (ppu.ppudead > 0) + { + ppu.NewDeadPPU(); + } + else if (ppu.do_vbl) + { + ppu.TickPPU_VBL(); + } + else if (ppu.do_active_sl) + { + ppu.TickPPU_active(); + } + else if (ppu.do_pre_vbl) + { + ppu.TickPPU_preVBL(); + } + + cont_read = controller_was_latched; + frame_done = frame_is_done; } //PAL: @@ -736,6 +774,27 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES var si = new StrobeInfo(latched4016, value); ControllerDeck.Strobe(si, _controller); latched4016 = value; + new_strobe = (value & 1) > 0; + if (current_strobe && !new_strobe) + { + controller_was_latched = true; + alt_lag = false; + + if (use_sub_input) + { + shift_1 = 7; + shift_2 = 7; + + ctrl_1 = ctrl_1_new; + ctrl_2 = ctrl_2_new; + } + } + + if (use_sub_input && new_strobe) + { + shift_1 = 7; + shift_2 = 7; + } } byte read_joyport(int addr) @@ -743,14 +802,35 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES InputCallbacks.Call(); lagged = false; byte ret = 0; - if (_isVS) + + if (use_sub_input) { - // for whatever reason, in VS left and right controller have swapped regs - ret = addr == 0x4017 ? ControllerDeck.ReadA(_controller) : ControllerDeck.ReadB(_controller); + if (addr == 0x4016) + { + if (shift_1 >= 0) { ret = (byte)((ctrl_1 >> shift_1) & 1); } + else { ret = 1; } + + if (!current_strobe) { shift_1 -= 1; } + } + else + { + if (shift_2 >= 0) { ret = (byte)((ctrl_2 >> shift_2) & 1); } + else { ret = 1; } + + if (!current_strobe) { shift_2 -= 1; } + } } else { - ret = addr == 0x4016 ? ControllerDeck.ReadA(_controller) : ControllerDeck.ReadB(_controller); + if (_isVS) + { + // for whatever reason, in VS left and right controller have swapped regs + ret = addr == 0x4017 ? ControllerDeck.ReadA(_controller) : ControllerDeck.ReadB(_controller); + } + else + { + ret = addr == 0x4016 ? ControllerDeck.ReadA(_controller) : ControllerDeck.ReadB(_controller); + } } ret &= 0x1f; @@ -810,7 +890,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES public byte DummyReadMemory(ushort addr) { return 0; } - private void ApplySystemBusPoke(int addr, byte value) + public void ApplySystemBusPoke(int addr, byte value) { if (addr < 0x2000) { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.IStatable.cs index e2dd212602..7c7b3f7f17 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.IStatable.cs @@ -82,7 +82,16 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES ser.Sync("VS_Coin", ref VS_coin_inserted); ser.Sync("VS_ROM_Control", ref VS_ROM_control); - ser.BeginSection("Board"); + // single cycle execution related + ser.Sync("current_strobe", ref current_strobe); + ser.Sync("new_strobe", ref new_strobe); + ser.Sync("ctrl_1", ref ctrl_1); + ser.Sync("ctrl_2", ref ctrl_2); + ser.Sync("shift_1", ref shift_1); + ser.Sync("shift_2", ref shift_2); + ser.Sync("use_sub_input", ref use_sub_input); + + ser.BeginSection("Board"); Board.SyncState(ser); if (Board is NESBoardBase && !((NESBoardBase)Board).SyncStateFlag) throw new InvalidOperationException("the current NES mapper didnt call base.SyncState"); diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.cs index 5da37f44c4..62d534f935 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.cs @@ -126,7 +126,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES public DisplayType Region { get { return _display_type; } } - class MyVideoProvider : IVideoProvider + public class MyVideoProvider : IVideoProvider { //public int ntsc_top = 8; //public int ntsc_bottom = 231; @@ -246,7 +246,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES public int VsyncDenominator => emu.VsyncDen; } - MyVideoProvider videoProvider; + public MyVideoProvider videoProvider; [Obsolete] // with the changes to both nes and quicknes cores, nothing uses this anymore public static readonly ControllerDefinition NESController = diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs index 36df0ab4c3..b04744f5f8 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs @@ -158,11 +158,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES return nes.Board.PeekPPU(addr); } - public enum PPUPHASE - { - VBL, BG, OBJ - }; - public PPUPHASE ppuphase; + public static int PPU_PHASE_VBL = 0; + public static int PPU_PHASE_BG = 1; + public static int PPU_PHASE_OBJ = 2; + + public int ppuphase; private readonly NES nes; public PPU(NES nes) @@ -247,6 +247,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES ser.Sync("OAM", ref OAM, false); ser.Sync("soam", ref soam, false); ser.Sync("PALRAM", ref PALRAM, false); + ser.Sync("ppuphase", ref ppuphase); ser.Sync("Reg2002_objoverflow", ref Reg2002_objoverflow); ser.Sync("Reg2002_objhit", ref Reg2002_objhit); diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.regs.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.regs.cs index 0fa0bc98cd..739338840a 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.regs.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.regs.cs @@ -551,7 +551,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES //does this take 4x longer? nestopia indicates so perhaps... int addr = ppur.get_2007access(); - if (ppuphase == PPUPHASE.BG) + if (ppuphase == PPU_PHASE_BG) { if (show_bg_new) { diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.run.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.run.cs index 3b2199bf06..ead5ce61b5 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.run.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.run.cs @@ -151,7 +151,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES // These things happen at the start of every frame //Reg2002_vblank_active = true; //Reg2002_vblank_active_pending = true; - ppuphase = PPUPHASE.VBL; + ppuphase = PPU_PHASE_VBL; bgdata = new BGDataRecord[34]; } @@ -194,6 +194,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES { do_vbl = false; ppur.status.sl = 0; + do_active_sl = true; } } } @@ -216,7 +217,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES sprite_zero_in_range = false; yp = ppur.status.sl - 1; - ppuphase = PPUPHASE.BG; + ppuphase = PPU_PHASE_BG; // "If PPUADDR is not less then 8 when rendering starts, the first 8 bytes in OAM are written to from // the current location of PPUADDR" @@ -615,7 +616,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES if (soam_index_prev > 8 && !nes.Settings.AllowMoreThanEightSprites) soam_index_prev = 8; - ppuphase = PPUPHASE.OBJ; + ppuphase = PPU_PHASE_OBJ; spriteHeight = reg_2000.obj_size_16 ? 16 : 8; @@ -926,7 +927,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES { if (ppur.status.cycle == 320) { - ppuphase = PPUPHASE.BG; + ppuphase = PPU_PHASE_BG; xt = 0; xp = 0; } @@ -992,6 +993,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES if (ppur.status.sl == 241) { do_active_sl = false; + do_pre_vbl = true; } } } @@ -1012,6 +1014,10 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES if (ppur.status.sl == 241 + preNMIlines) { do_pre_vbl = false; + do_vbl = true; + + ppu_init_frame(); + nes.frame_is_done = true; } } } @@ -1033,6 +1039,12 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES if (ppur.status.cycle == 241 * 341 - start_up_offset) { ppudead--; + + ppu_init_frame(); + + do_vbl = true; + + nes.frame_is_done = true; } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs index 899ae0254f..aad8579a37 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/QuickNES/QuickNES.cs @@ -179,7 +179,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES #endregion - public void FrameAdvance(IController controller, bool render, bool rendersound = true) + public bool FrameAdvance(IController controller, bool render, bool rendersound = true) { CheckDisposed(); using (FP.Save()) @@ -211,6 +211,8 @@ namespace BizHawk.Emulation.Cores.Consoles.Nintendo.QuickNES if (CB1 != null) CB1(); if (CB2 != null) CB2(); } + + return true; } IntPtr Context; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.IEmulator.cs index a245fbdbbf..e16511cbaa 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SNES/LibsnesCore.IEmulator.cs @@ -10,7 +10,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES public ControllerDefinition ControllerDefinition => _controllerDeck.Definition; - public void FrameAdvance(IController controller, bool render, bool rendersound) + public bool FrameAdvance(IController controller, bool render, bool rendersound) { _controller = controller; @@ -80,6 +80,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.SNES { LagCount++; } + + return true; } public int Frame diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/ReadMe.txt b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/ReadMe.txt new file mode 100644 index 0000000000..bc60bf4b01 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/ReadMe.txt @@ -0,0 +1 @@ +TODO: diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IDebuggable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IDebuggable.cs new file mode 100644 index 0000000000..fe41918f23 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IDebuggable.cs @@ -0,0 +1,74 @@ +using System; +using System.Collections.Generic; + +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk +{ + public partial class SubNESHawk : IDebuggable + { + public IDictionary GetCpuFlagsAndRegisters() + { + return new Dictionary + { + /* + ["A"] = cpu.A, + ["X"] = cpu.X, + ["Y"] = cpu.Y, + ["S"] = cpu.S, + ["PC"] = cpu.PC, + ["Flag C"] = cpu.FlagC, + ["Flag Z"] = cpu.FlagZ, + ["Flag I"] = cpu.FlagI, + ["Flag D"] = cpu.FlagD, + ["Flag B"] = cpu.FlagB, + ["Flag V"] = cpu.FlagV, + ["Flag N"] = cpu.FlagN, + ["Flag T"] = cpu.FlagT + */ + }; + } + + public void SetCpuRegister(string register, int value) + { + switch (register) + { + default: + throw new InvalidOperationException(); + case "A": + //cpu.A = (byte)value; + break; + case "X": + //cpu.X = (byte)value; + break; + case "Y": + //cpu.Y = (byte)value; + break; + case "S": + //cpu.S = (byte)value; + break; + case "PC": + //cpu.PC = (ushort)value; + break; + case "Flag I": + //cpu.FlagI = value > 0; + break; + } + } + + public bool CanStep(StepType type) + { + return false; + } + + public IMemoryCallbackSystem MemoryCallbacks { get; private set; } + + [FeatureNotImplemented] + public void Step(StepType type) { throw new NotImplementedException(); } + + public long TotalExecutedCycles + { + get { return subnes.cpu.TotalExecutedCycles; } + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs new file mode 100644 index 0000000000..3fef3f0d45 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs @@ -0,0 +1,215 @@ +using System; + +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Cores.Nintendo.NES; + +namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk +{ + public partial class SubNESHawk : IEmulator + { + public IEmulatorServiceProvider ServiceProvider { get; } + + public ControllerDefinition ControllerDefinition => _controllerDeck.Definition; + + public bool FrameAdvance(IController controller, bool render, bool rendersound) + { + //Console.WriteLine("-----------------------FRAME-----------------------"); + if (_tracer.Enabled) + { + subnes.cpu.TraceCallback = s => _tracer.Put(s); + } + else + { + subnes.cpu.TraceCallback = null; + } + + _frame++; + + if (controller.IsPressed("Power")) + { + HardReset(); + } + + if (controller.IsPressed("Reset")) + { + SoftReset(); + } + + _islag = true; + subnes.alt_lag = true; + + GetControllerState(controller); + + do_frame(); + + bool ret = pass_a_frame; + + if (pass_a_frame) + { + subnes.videoProvider.FillFrameBuffer(); + } + + _islag = subnes.alt_lag; + + if (_islag) + { + _lagcount++; + } + + return ret; + } + + public bool stop_cur_frame; + public bool pass_new_input; + public bool pass_a_frame; + public byte ctrl_byte_1; + public byte ctrl_byte_2; + + public void do_frame() + { + stop_cur_frame = false; + while (!stop_cur_frame) + { + subnes.do_single_step(out pass_new_input, out pass_a_frame); + stop_cur_frame |= pass_a_frame; + stop_cur_frame |= pass_new_input; + } + } + + public void GetControllerState(IController controller) + { + InputCallbacks.Call(); + + ctrl_byte_1 = _controllerDeck.ReadPort1(controller); + ctrl_byte_2 = _controllerDeck.ReadPort2(controller); + + subnes.ctrl_1_new = ctrl_byte_1; + subnes.ctrl_2_new = ctrl_byte_2; + } + + public int Frame => _frame; + + public string SystemId => "NES"; + + public bool DeterministicEmulation { get; set; } + + public void ResetCounters() + { + _frame = 0; + _lagcount = 0; + _islag = false; + } + + public CoreComm CoreComm { get; } + + public void Dispose() + { + subnes.Dispose(); + } + /* + #region Video provider + + public int _frameHz = 60; + + public int[] _vidbuffer = new int[160 * 2 * 144]; + public int[] buff_L = new int[160 * 144]; + public int[] buff_R = new int[160 * 144]; + + public int[] GetVideoBuffer() + { + // combine the 2 video buffers from the instances + for (int i = 0; i < 144; i++) + { + for (int j = 0; j < 160; j++) + { + _vidbuffer[i * 320 + j] = buff_L[i * 160 + j]; + _vidbuffer[i * 320 + j + 160] = buff_R[i * 160 + j]; + } + } + + return _vidbuffer; + } + + public int VirtualWidth => 160 * 2; + public int VirtualHeight => 144; + public int BufferWidth => 160 * 2; + public int BufferHeight => 144; + public int BackgroundColor => unchecked((int)0xFF000000); + public int VsyncNumerator => _frameHz; + public int VsyncDenominator => 1; + + public static readonly uint[] color_palette_BW = { 0xFFFFFFFF , 0xFFAAAAAA, 0xFF555555, 0xFF000000 }; + public static readonly uint[] color_palette_Gr = { 0xFFA4C505, 0xFF88A905, 0xFF1D551D, 0xFF052505 }; + + public uint[] color_palette = new uint[4]; + + #endregion + + #region audio + + public bool CanProvideAsync => false; + + public void SetSyncMode(SyncSoundMode mode) + { + if (mode != SyncSoundMode.Sync) + { + throw new InvalidOperationException("Only Sync mode is supported_"); + } + } + + public SyncSoundMode SyncMode => SyncSoundMode.Sync; + + public void GetSamplesSync(out short[] samples, out int nsamp) + { + short[] temp_samp_L; + short[] temp_samp_R; + + int nsamp_L; + int nsamp_R; + + L.audio.GetSamplesSync(out temp_samp_L, out nsamp_L); + R.audio.GetSamplesSync(out temp_samp_R, out nsamp_R); + + if (linkSettings.AudioSet == GBLinkSettings.AudioSrc.Left) + { + samples = temp_samp_L; + nsamp = nsamp_L; + } + else if (linkSettings.AudioSet == GBLinkSettings.AudioSrc.Right) + { + samples = temp_samp_R; + nsamp = nsamp_R; + } + else + { + samples = new short[0]; + nsamp = 0; + } + } + + public void GetSamplesAsync(short[] samples) + { + throw new NotSupportedException("Async is not available"); + } + + public void DiscardSamples() + { + L.audio.DiscardSamples(); + R.audio.DiscardSamples(); + } + + private void GetSamples(short[] samples) + { + + } + + public void DisposeSound() + { + L.audio.DisposeSound(); + R.audio.DisposeSound(); + } + + #endregion + */ + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IInputPollable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IInputPollable.cs new file mode 100644 index 0000000000..04c6faea5c --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IInputPollable.cs @@ -0,0 +1,24 @@ +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk +{ + public partial class SubNESHawk : IInputPollable + { + public int LagCount + { + get { return _lagcount; } + set { _lagcount = value; } + } + + public bool IsLagFrame + { + get { return _islag; } + set { _islag = value; } + } + + public IInputCallbackSystem InputCallbacks { get; } = new InputCallbackSystem(); + + public bool _islag = true; + private int _lagcount; + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IMemoryDomains.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IMemoryDomains.cs new file mode 100644 index 0000000000..b1aafedaf7 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IMemoryDomains.cs @@ -0,0 +1,84 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk +{ + public partial class SubNESHawk + { + private MemoryDomainList _memoryDomains; + private bool _memoryDomainsSetup = false; + + private void SetupMemoryDomains() + { + var domains = new List(); + var RAM = new MemoryDomainByteArray("RAM", MemoryDomain.Endian.Little, subnes.ram, true, 1); + var SystemBus = new MemoryDomainDelegate("System Bus", 0x10000, MemoryDomain.Endian.Little, + addr => subnes.PeekMemory((ushort)addr), (addr, value) => subnes.ApplySystemBusPoke((int)addr, value), 1); + var PPUBus = new MemoryDomainDelegate("PPU Bus", 0x4000, MemoryDomain.Endian.Little, + addr => subnes.ppu.ppubus_peek((int)addr), (addr, value) => subnes.ppu.ppubus_write((int)addr, value), 1); + var CIRAMdomain = new MemoryDomainByteArray("CIRAM (nametables)", MemoryDomain.Endian.Little, subnes.CIRAM, true, 1); + var OAMdoman = new MemoryDomainByteArray("OAM", MemoryDomain.Endian.Unknown, subnes.ppu.OAM, true, 1); + + domains.Add(RAM); + domains.Add(SystemBus); + domains.Add(PPUBus); + domains.Add(CIRAMdomain); + domains.Add(OAMdoman); + + if (!(subnes.Board is NES.FDS) && subnes.Board.SaveRam != null) + { + var BatteryRam = new MemoryDomainByteArray("Battery RAM", MemoryDomain.Endian.Little, subnes.Board.SaveRam, true, 1); + domains.Add(BatteryRam); + } + + if (subnes.Board.ROM != null) + { + var PRGROM = new MemoryDomainByteArray("PRG ROM", MemoryDomain.Endian.Little, subnes.Board.ROM, true, 1); + domains.Add(PRGROM); + } + + if (subnes.Board.VROM != null) + { + var CHRROM = new MemoryDomainByteArray("CHR VROM", MemoryDomain.Endian.Little, subnes.Board.VROM, true, 1); + domains.Add(CHRROM); + } + + if (subnes.Board.VRAM != null) + { + var VRAM = new MemoryDomainByteArray("VRAM", MemoryDomain.Endian.Little, subnes.Board.VRAM, true, 1); + domains.Add(VRAM); + } + + if (subnes.Board.WRAM != null) + { + var WRAM = new MemoryDomainByteArray("WRAM", MemoryDomain.Endian.Little, subnes.Board.WRAM, true, 1); + domains.Add(WRAM); + } + + // if there were more boards with special ram sets, we'd want to do something more general + if (subnes.Board is NES.FDS) + { + domains.Add((subnes.Board as NES.FDS).GetDiskPeeker()); + } + else if (subnes.Board is NES.ExROM) + { + domains.Add((subnes.Board as NES.ExROM).GetExRAM()); + } + + if (!_memoryDomainsSetup) + { + _memoryDomains = new MemoryDomainList(domains); + (ServiceProvider as BasicServiceProvider).Register(_memoryDomains); + _memoryDomainsSetup = true; + } + else + { + var src = new MemoryDomainList(domains); + _memoryDomains.MergeList(src); + } + } + } +} \ No newline at end of file diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.ISaveRam.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.ISaveRam.cs new file mode 100644 index 0000000000..1d61877e5b --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.ISaveRam.cs @@ -0,0 +1,42 @@ +using System; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk +{ + public partial class SubNESHawk : ISaveRam + { + public bool SaveRamModified + { + get + { + if (subnes.Board == null) return false; + if (subnes.Board is NES.FDS) return true; + if (subnes.Board.SaveRam == null) return false; + return true; + } + } + + public byte[] CloneSaveRam() + { + if (subnes.Board is NES.FDS) + return (subnes.Board as NES.FDS).ReadSaveRam(); + + if (subnes.Board == null || subnes.Board.SaveRam == null) + return null; + return (byte[])subnes.Board.SaveRam.Clone(); + } + + public void StoreSaveRam(byte[] data) + { + if (subnes.Board is NES.FDS) + { + (subnes.Board as NES.FDS).StoreSaveRam(data); + return; + } + + if (subnes.Board == null || subnes.Board.SaveRam == null) + return; + Array.Copy(data, subnes.Board.SaveRam, data.Length); + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.ISettable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.ISettable.cs new file mode 100644 index 0000000000..9db3f0acc1 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.ISettable.cs @@ -0,0 +1,58 @@ +using System; + +using BizHawk.Common; +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Cores.Nintendo.NES; + +namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk +{ + public partial class SubNESHawk : IEmulator, IStatable, ISettable + { + public SubNESHawkSettings GetSettings() + { + return subnesSettings.Clone(); + } + + public SubNESHawkSyncSettings GetSyncSettings() + { + return subnesSyncSettings.Clone(); + } + + public bool PutSettings(SubNESHawkSettings o) + { + subnesSettings = o; + return false; + } + + public bool PutSyncSettings(SubNESHawkSyncSettings o) + { + bool ret = SubNESHawkSyncSettings.NeedsReboot(subnesSyncSettings, o); + subnesSyncSettings = o; + return ret; + } + + private SubNESHawkSettings subnesSettings = new SubNESHawkSettings(); + public SubNESHawkSyncSettings subnesSyncSettings = new SubNESHawkSyncSettings(); + + public class SubNESHawkSettings + { + public SubNESHawkSettings Clone() + { + return (SubNESHawkSettings)MemberwiseClone(); + } + } + + public class SubNESHawkSyncSettings + { + public SubNESHawkSyncSettings Clone() + { + return (SubNESHawkSyncSettings)MemberwiseClone(); + } + + public static bool NeedsReboot(SubNESHawkSyncSettings x, SubNESHawkSyncSettings y) + { + return !DeepEquality.DeepEquals(x, y); + } + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs new file mode 100644 index 0000000000..d6a092971e --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs @@ -0,0 +1,63 @@ +using System.IO; + +using BizHawk.Common; +using BizHawk.Emulation.Common; +using BizHawk.Emulation.Cores.Nintendo.NES; + +namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk +{ + public partial class SubNESHawk : IStatable + { + public bool BinarySaveStatesPreferred => true; + + public void SaveStateText(TextWriter writer) + { + subnes.SaveStateText(writer); + SyncState(new Serializer(writer)); + } + + public void LoadStateText(TextReader reader) + { + subnes.LoadStateText(reader); + SyncState(new Serializer(reader)); + } + + public void SaveStateBinary(BinaryWriter bw) + { + subnes.SaveStateBinary(bw); + // other variables + SyncState(new Serializer(bw)); + } + + public void LoadStateBinary(BinaryReader br) + { + subnes.LoadStateBinary(br); + // other variables + SyncState(new Serializer(br)); + } + + public byte[] SaveStateBinary() + { + MemoryStream ms = new MemoryStream(); + BinaryWriter bw = new BinaryWriter(ms); + SaveStateBinary(bw); + bw.Flush(); + return ms.ToArray(); + } + + //private JsonSerializer ser = new JsonSerializer { Formatting = Formatting.Indented }; + + private void SyncState(Serializer ser) + { + ser.Sync("Lag", ref _lagcount); + ser.Sync("Frame", ref _frame); + ser.Sync("IsLag", ref _islag); + ser.Sync("pass_a_frame", ref pass_a_frame); + ser.Sync("pass_new_input", ref pass_new_input); + ser.Sync("ctrl_byte_1", ref ctrl_byte_1); + ser.Sync("ctrl_byte_2", ref ctrl_byte_2); + + _controllerDeck.SyncState(ser); + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs new file mode 100644 index 0000000000..a04a68f7f8 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs @@ -0,0 +1,80 @@ +using System; + +using BizHawk.Emulation.Common; + +using BizHawk.Emulation.Cores.Nintendo.NES; + +namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk +{ + [Core( + "SubNESHawk", + "", + isPorted: false, + isReleased: false)] + [ServiceNotApplicable(typeof(IDriveLight))] + public partial class SubNESHawk : IEmulator, ISaveRam, IDebuggable, IStatable, IInputPollable, IRegionable, + ISettable + { + public NES.NES subnes; + + [CoreConstructor("NES")] + public SubNESHawk(CoreComm comm, GameInfo game, byte[] rom, /*string gameDbFn,*/ object settings, object syncSettings) + { + var ser = new BasicServiceProvider(this); + + subnesSettings = (SubNESHawkSettings)settings ?? new SubNESHawkSettings(); + subnesSyncSettings = (SubNESHawkSyncSettings)syncSettings ?? new SubNESHawkSyncSettings(); + _controllerDeck = new SubNESHawkControllerDeck(SubNESHawkControllerDeck.DefaultControllerName, SubNESHawkControllerDeck.DefaultControllerName); + + CoreComm = comm; + + var temp_set = new NES.NES.NESSettings(); + + var temp_sync = new NES.NES.NESSyncSettings(); + + subnes = new NES.NES(new CoreComm(comm.ShowMessage, comm.Notify) { CoreFileProvider = comm.CoreFileProvider }, + game, rom, temp_set, temp_sync); + + ser.Register(subnes.videoProvider); + ser.Register(subnes.magicSoundProvider); + + _tracer = new TraceBuffer { Header = subnes.cpu.TraceHeader }; + ser.Register(_tracer); + + ServiceProvider = ser; + + SetupMemoryDomains(); + + HardReset(); + + // input override for subframe input + subnes.use_sub_input = true; + } + + public void HardReset() + { + subnes.HardReset(); + } + + public void SoftReset() + { + subnes.Board.NESSoftReset(); + subnes.cpu.NESSoftReset(); + subnes.apu.NESSoftReset(); + subnes.ppu.NESSoftReset(); + } + + public DisplayType Region => DisplayType.NTSC; + + public int _frame = 0; + + private readonly SubNESHawkControllerDeck _controllerDeck; + + private readonly ITraceable _tracer; + + private void ExecFetch(ushort addr) + { + MemoryCallbacks.CallExecutes(addr, "System Bus"); + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawkControllerDeck.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawkControllerDeck.cs new file mode 100644 index 0000000000..7f2ecfae40 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawkControllerDeck.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using System.Linq; + +using BizHawk.Common; +using BizHawk.Common.ReflectionExtensions; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk +{ + public class SubNESHawkControllerDeck + { + public SubNESHawkControllerDeck(string controller1Name, string controller2Name) + { + if (!ValidControllerTypes.ContainsKey(controller1Name)) + { + throw new InvalidOperationException("Invalid controller type: " + controller1Name); + } + + if (!ValidControllerTypes.ContainsKey(controller2Name)) + { + throw new InvalidOperationException("Invalid controller type: " + controller2Name); + } + + Port1 = (IPort)Activator.CreateInstance(ValidControllerTypes[controller1Name], 1); + Port2 = (IPort)Activator.CreateInstance(ValidControllerTypes[controller2Name], 2); + + Definition = new ControllerDefinition + { + Name = Port1.Definition.Name, + BoolButtons = Port1.Definition.BoolButtons + .Concat(Port2.Definition.BoolButtons) + .Concat(new[] + { + "Power", + "Reset", + }) + .ToList() + }; + } + + public byte ReadPort1(IController c) + { + return Port1.Read(c); + } + + public byte ReadPort2(IController c) + { + return Port2.Read(c); + } + + public ControllerDefinition Definition { get; } + + public void SyncState(Serializer ser) + { + ser.BeginSection("Port1"); + Port1.SyncState(ser); + ser.EndSection(); + + ser.BeginSection("Port2"); + Port2.SyncState(ser); + ser.EndSection(); + } + + private readonly IPort Port1; + private readonly IPort Port2; + + private static Dictionary _controllerTypes; + + public static Dictionary ValidControllerTypes + { + get + { + if (_controllerTypes == null) + { + _controllerTypes = typeof(SubNESHawkControllerDeck).Assembly + .GetTypes() + .Where(t => typeof(IPort).IsAssignableFrom(t)) + .Where(t => !t.IsAbstract && !t.IsInterface) + .ToDictionary(tkey => tkey.DisplayName()); + } + + return _controllerTypes; + } + } + + public static string DefaultControllerName => typeof(StandardControls).DisplayName(); + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawkControllers.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawkControllers.cs new file mode 100644 index 0000000000..44e9e5e98d --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawkControllers.cs @@ -0,0 +1,94 @@ +using System; + +using System.ComponentModel; +using System.Linq; + +using BizHawk.Common; +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk +{ + /// + /// Represents a Standard Nintendo Controller + /// + public interface IPort + { + byte Read(IController c); + + ControllerDefinition Definition { get; } + + void SyncState(Serializer ser); + + int PortNum { get; } + } + + [DisplayName("NES Controller")] + public class StandardControls : IPort + { + public StandardControls(int portNum) + { + PortNum = portNum; + Definition = new ControllerDefinition + { + Name = "NES Controller", + BoolButtons = BaseDefinition + .Select(b => "P" + PortNum + " " + b) + .ToList() + }; + } + + public int PortNum { get; } + + public ControllerDefinition Definition { get; } + + public byte Read(IController c) + { + byte result = 0; + + if (c.IsPressed(Definition.BoolButtons[0])) + { + result |= 8; + } + if (c.IsPressed(Definition.BoolButtons[1])) + { + result |= 4; + } + if (c.IsPressed(Definition.BoolButtons[2])) + { + result |= 2; + } + if (c.IsPressed(Definition.BoolButtons[3])) + { + result |= 1; + } + if (c.IsPressed(Definition.BoolButtons[4])) + { + result |= 16; + } + if (c.IsPressed(Definition.BoolButtons[5])) + { + result |= 32; + } + if (c.IsPressed(Definition.BoolButtons[6])) + { + result |= 64; + } + if (c.IsPressed(Definition.BoolButtons[7])) + { + result |= 128; + } + + return result; + } + + private static readonly string[] BaseDefinition = + { + "Up", "Down", "Left", "Right", "Start", "Select", "B", "A" + }; + + public void SyncState(Serializer ser) + { + //nothing + } + } +} \ No newline at end of file diff --git a/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.IEmulator.cs index 5fa7f01d7e..6b46010327 100644 --- a/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/PC Engine/PCEngine.IEmulator.cs @@ -8,7 +8,7 @@ namespace BizHawk.Emulation.Cores.PCEngine public ControllerDefinition ControllerDefinition => _controllerDeck.Definition; - public void FrameAdvance(IController controller, bool render, bool rendersound) + public bool FrameAdvance(IController controller, bool render, bool rendersound) { _controller = controller; _lagged = true; @@ -39,6 +39,8 @@ namespace BizHawk.Emulation.Cores.PCEngine { _isLag = false; } + + return true; } public int Frame diff --git a/BizHawk.Emulation.Cores/Consoles/SNK/DualNeoGeoPort.cs b/BizHawk.Emulation.Cores/Consoles/SNK/DualNeoGeoPort.cs index 462b62fbee..ae20720922 100644 --- a/BizHawk.Emulation.Cores/Consoles/SNK/DualNeoGeoPort.cs +++ b/BizHawk.Emulation.Cores/Consoles/SNK/DualNeoGeoPort.cs @@ -47,7 +47,7 @@ namespace BizHawk.Emulation.Cores.Consoles.SNK _serviceProvider.Register(_videoProvider); } - public void FrameAdvance(IController controller, bool render, bool rendersound = true) + public bool FrameAdvance(IController controller, bool render, bool rendersound = true) { var t1 = Task.Run(() => { @@ -67,6 +67,8 @@ namespace BizHawk.Emulation.Cores.Consoles.SNK Frame++; _soundProvider.Fetch(); _videoProvider.Fetch(); + + return true; } #region link cable diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.IEmulator.cs index 1ac7e86924..d3fbefd440 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/SMS/SMS.IEmulator.cs @@ -37,7 +37,7 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem } } - public void FrameAdvance(IController controller, bool render, bool rendersound) + public bool FrameAdvance(IController controller, bool render, bool rendersound) { _controller = controller; _lagged = true; @@ -86,6 +86,8 @@ namespace BizHawk.Emulation.Cores.Sega.MasterSystem { _isLag = false; } + + return true; } public int Frame => _frame; diff --git a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IEmulator.cs index e0a3ac20b1..475d1562fc 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sega/gpgx64/GPGX.IEmulator.cs @@ -7,45 +7,45 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx { public IEmulatorServiceProvider ServiceProvider { get; private set; } - public ControllerDefinition ControllerDefinition { get; private set; } - - // TODO: use render and rendersound - public void FrameAdvance(IController controller, bool render, bool rendersound = true) + public ControllerDefinition ControllerDefinition { get; private set; } + + // TODO: use render and rendersound + public bool FrameAdvance(IController controller, bool render, bool rendersound = true) { if (controller.IsPressed("Reset")) Core.gpgx_reset(false); if (controller.IsPressed("Power")) - Core.gpgx_reset(true); - if (_cds != null) - { - var prev = controller.IsPressed("Previous Disk"); - var next = controller.IsPressed("Next Disk"); - int newDisk = _discIndex; - if (prev && !_prevDiskPressed) - newDisk--; - if (next && !_nextDiskPressed) - newDisk++; - - _prevDiskPressed = prev; - _nextDiskPressed = next; - - if (newDisk < -1) - newDisk = -1; - if (newDisk >= _cds.Length) - newDisk = _cds.Length - 1; - - if (newDisk != _discIndex) - { - _discIndex = newDisk; - Core.gpgx_swap_disc(_discIndex == -1 ? null : GetCDDataStruct(_cds[_discIndex])); - Console.WriteLine("IMMA CHANGING MAH DISKS"); - } - } - - // this shouldn't be needed, as nothing has changed - // if (!Core.gpgx_get_control(input, inputsize)) - // throw new Exception("gpgx_get_control() failed!"); - + Core.gpgx_reset(true); + if (_cds != null) + { + var prev = controller.IsPressed("Previous Disk"); + var next = controller.IsPressed("Next Disk"); + int newDisk = _discIndex; + if (prev && !_prevDiskPressed) + newDisk--; + if (next && !_nextDiskPressed) + newDisk++; + + _prevDiskPressed = prev; + _nextDiskPressed = next; + + if (newDisk < -1) + newDisk = -1; + if (newDisk >= _cds.Length) + newDisk = _cds.Length - 1; + + if (newDisk != _discIndex) + { + _discIndex = newDisk; + Core.gpgx_swap_disc(_discIndex == -1 ? null : GetCDDataStruct(_cds[_discIndex])); + Console.WriteLine("IMMA CHANGING MAH DISKS"); + } + } + + // this shouldn't be needed, as nothing has changed + // if (!Core.gpgx_get_control(input, inputsize)) + // throw new Exception("gpgx_get_control() failed!"); + ControlConverter.ScreenWidth = vwidth; ControlConverter.ScreenHeight = vheight; ControlConverter.Convert(controller, input); @@ -66,6 +66,8 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx if (_cds != null) DriveLightOn = _drivelight; + + return true; } public int Frame { get; private set; } @@ -96,7 +98,7 @@ namespace BizHawk.Emulation.Cores.Consoles.Sega.gpgx if (_elf != null) _elf.Dispose(); if (_cds != null) - foreach (var cd in _cds) + foreach (var cd in _cds) cd.Dispose(); _disposed = true; } diff --git a/BizHawk.Emulation.Cores/Consoles/Sony/PSP/PSP.cs b/BizHawk.Emulation.Cores/Consoles/Sony/PSP/PSP.cs index 5c43900826..55157f7abe 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sony/PSP/PSP.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sony/PSP/PSP.cs @@ -131,7 +131,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSP } - public void FrameAdvance(IController controller, bool render, bool rendersound = true) + public bool FrameAdvance(IController controller, bool render, bool rendersound = true) { Frame++; UpdateInput(controller); @@ -147,6 +147,8 @@ namespace BizHawk.Emulation.Cores.Sony.PSP //nsampavail = PPSSPPDll.mixsound(audiobuffer, audiobuffer.Length / 2); LogFlush(); //Console.WriteLine("Audio Service: {0}", nsampavail); + + return true; } public int Frame diff --git a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs index 807558d6b3..eca318a577 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs @@ -743,7 +743,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSX private IController _controller; - public void FrameAdvance(IController controller, bool render, bool rendersound) + public bool FrameAdvance(IController controller, bool render, bool rendersound) { _controller = controller; FrameAdvance_PrepDiscState(); @@ -801,7 +801,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSX LagCount++; //what happens to sound in this case? - if (render == false) return; + if (render == false) return true; OctoshockDll.ShockFramebufferInfo fb = new OctoshockDll.ShockFramebufferInfo(); @@ -843,6 +843,8 @@ namespace BizHawk.Emulation.Cores.Sony.PSX if (sbuffcontains * 2 > sbuff.Length) throw new InvalidOperationException("shock_GetSamples returned too many samples: " + sbuffcontains); OctoshockDll.shock_GetSamples(psx, samples); } + + return true; } public ControllerDefinition ControllerDefinition { get; private set; } diff --git a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs index 49f91a1824..b5224065ea 100644 --- a/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs +++ b/BizHawk.Emulation.Cores/Consoles/WonderSwan/WonderSwan.cs @@ -61,7 +61,7 @@ namespace BizHawk.Emulation.Cores.WonderSwan } } - public void FrameAdvance(IController controller, bool render, bool rendersound = true) + public bool FrameAdvance(IController controller, bool render, bool rendersound = true) { Frame++; IsLagFrame = true; @@ -79,6 +79,8 @@ namespace BizHawk.Emulation.Cores.WonderSwan if (IsLagFrame) LagCount++; + + return true; } public CoreComm CoreComm { get; private set; } diff --git a/BizHawk.Emulation.Cores/Libretro/LibretroCore.cs b/BizHawk.Emulation.Cores/Libretro/LibretroCore.cs index f52709963b..3d3fca7bb9 100644 --- a/BizHawk.Emulation.Cores/Libretro/LibretroCore.cs +++ b/BizHawk.Emulation.Cores/Libretro/LibretroCore.cs @@ -154,11 +154,13 @@ namespace BizHawk.Emulation.Cores.Libretro private IController _controller; - public void FrameAdvance(IController controller, bool render, bool rendersound) + public bool FrameAdvance(IController controller, bool render, bool rendersound) { _controller = controller; api.CMD_Run(); timeFrameCounter++; + + return true; } GCHandle vidBufferHandle; diff --git a/BizHawk.Emulation.Cores/Waterbox/WaterboxCore.cs b/BizHawk.Emulation.Cores/Waterbox/WaterboxCore.cs index 3c717bb65f..f202a6b3dd 100644 --- a/BizHawk.Emulation.Cores/Waterbox/WaterboxCore.cs +++ b/BizHawk.Emulation.Cores/Waterbox/WaterboxCore.cs @@ -191,7 +191,7 @@ namespace BizHawk.Emulation.Cores.Waterbox protected virtual void FrameAdvancePost() { } - public unsafe void FrameAdvance(IController controller, bool render, bool rendersound = true) + public unsafe bool FrameAdvance(IController controller, bool render, bool rendersound = true) { using (_exe.EnterExit()) { @@ -218,6 +218,8 @@ namespace BizHawk.Emulation.Cores.Waterbox FrameAdvancePost(); } } + + return true; } private bool _disposed = false; From c21422c396de399ccbbd18040f5ca485e5b7d50f Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 01:29:37 +1000 Subject: [PATCH 116/301] Update README.md --- README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 88ae2ef065..280247c4af 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). -tl;dr: click the "latest" button above to grab it. The changelog is [here on tasvideos.org](http://tasvideos.org/Bizhawk/ReleaseHistory.html). **Don't mix versions**, copy `config.ini` to keep settings. +tl;dr: click the "latest" button above to grab it. The changelog is [here at TASVideos](http://tasvideos.org/Bizhawk/ReleaseHistory.html). **Don't mix versions**, copy `config.ini` to keep settings. Jump to: * [Installing — Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#installing--windows-78110) @@ -66,7 +66,7 @@ Released binaries can be found right here on GitHub: [![Windows | binaries](https://img.shields.io/badge/Windows-binaries-%230078D6.svg?logo=windows&logoColor=0078D6&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) -Click `BizHawk-.zip` to download it. Also note the changelog, the full version of which is [on tasvideos.org](http://tasvideos.org/Bizhawk/ReleaseHistory.html). **Don't mix different versions** of BizHawk, keep each version in its own folder. +Click `BizHawk-.zip` to download it. Also note the changelog, the full version of which is [here at TASVideos](http://tasvideos.org/Bizhawk/ReleaseHistory.html). **Don't mix different versions** of BizHawk, keep each version in its own folder. Before you start (by running `EmuHawk.exe`), you'll need the following Windows-only prerequisites installed. You can get them all at once with [this program](https://github.com/TASVideos/BizHawk-Prereqs/releases/latest). * .NET Framework 4.6.1 @@ -82,7 +82,7 @@ Win7 is supported from SP1, Win8 is supported from 8.1, and Win10 is supported f ## Installing — GNU+Linux and macOS -Install BizHawk with your distro's package manager. The package name is given on each button below, and some buttons are links. For the changelog, [see tasvideos.org](http://tasvideos.org/Bizhawk/ReleaseHistory.html). +Install BizHawk with your distro's package manager. The package name is given on each button below, and some buttons are links. For the changelog, [see TASVideos here](http://tasvideos.org/Bizhawk/ReleaseHistory.html). [![Arch Linux (AUR) | bizhawk](https://img.shields.io/badge/Arch_Linux_(AUR)-bizhawk-%231793D1.svg?logo=arch-linux&style=popout)](https://aur.archlinux.org/packages/bizhawk) [![Debian (Launchpad) | bizhawk](https://img.shields.io/badge/Debian_(Launchpad)-bizhawk-%23A81D33.svg?logo=debian&style=popout)](https://example.com/bizhawk) @@ -140,6 +140,8 @@ TODO ## Usage (TASing) +This section refers to BizHawk specifically. For resources on TASing in general, see [Welcome to TASVideos](http://tasvideos.org/WelcomeToTASVideos.html). + TODO [Commandline](http://tasvideos.org/Bizhawk/CommandLine.html) @@ -152,7 +154,7 @@ TODO ## Support and troubleshooting -A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, and you can't find it in the [issue tracker search](https://github.com/TASVideos/BizHawk/issues?q=is%3Aissue+ISSUE_KEYWORDS), check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at tasvideos.org, or ask on IRC: +A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, and you can't find it in the [issue tracker search](https://github.com/TASVideos/BizHawk/issues?q=is%3Aissue+ISSUE_KEYWORDS), check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at TASVideos, or ask on IRC: [![IRC | chat.freenode.net #bizhawk](https://img.shields.io/badge/IRC-chat.freenode.net_%23bizhawk-steelblue.svg?style=flat)](ircs://chat.freenode.net:6697/bizhawk) [![Matrix (IRC bridge) | #freenode_#bizhawk:matrix.org](https://img.shields.io/badge/Matrix_(IRC_bridge)-%23freenode__%23bizhawk:matrix.org-mediumpurple.svg?logo=matrix&style=flat)](https://matrix.to/#/#freenode_#bizhawk:matrix.org) From 577b46f350314f93518fcea045a17e61eaa7f181 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 01:43:21 +1000 Subject: [PATCH 117/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 280247c4af..284f193c3a 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). -tl;dr: click the "latest" button above to grab it. The changelog is [here at TASVideos](http://tasvideos.org/Bizhawk/ReleaseHistory.html). **Don't mix versions**, copy `config.ini` to keep settings. +Click the "release" button above to grab the latest stable version. The changelog is [here at TASVideos](http://tasvideos.org/Bizhawk/ReleaseHistory.html). **Never mix different versions** of BizHawk — Keep each version in its own folder. Jump to: * [Installing — Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#installing--windows-78110) From 54729d3c1533aeb435c85b9ed894db4d127710e1 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 01:48:13 +1000 Subject: [PATCH 118/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 284f193c3a..10f17bcb8d 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). -Click the "release" button above to grab the latest stable version. The changelog is [here at TASVideos](http://tasvideos.org/Bizhawk/ReleaseHistory.html). **Never mix different versions** of BizHawk — Keep each version in its own folder. +Click the "release" button above to grab the latest stable version. New users on Windows will need [this](https://github.com/TASVideos/BizHawk-Prereqs/releases/latest). The changelog is [here at TASVideos](http://tasvideos.org/Bizhawk/ReleaseHistory.html). **Never mix different versions** of BizHawk — Keep each version in its own folder. Jump to: * [Installing — Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#installing--windows-78110) From 4bc924ebd495418824ab828ef23e5786d23c6fb6 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 01:52:05 +1000 Subject: [PATCH 119/301] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 10f17bcb8d..9b23324ae8 100644 --- a/README.md +++ b/README.md @@ -22,12 +22,12 @@ Jump to: ## Features The BizHawk common features (across all cores) are: -* rom format and region detection and a corruption check +* detection of game format and region, and corruption checking * 10 savestate slots and save/load to file * speed control, including frame stepping and rewinding * memory view/search/edit in all parts of the emulated HW * input recording (making TAS movies) -* take screenshots and record video +* screenshotting and recording video System | BH Common | Accuracy† | Debugging | Peripherals --:|:-:|:-:|:-:|:-: From 108879217f91510adf2e152fc47f44077436e4a3 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 01:53:32 +1000 Subject: [PATCH 120/301] Update README.md --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 9b23324ae8..24f048b28f 100644 --- a/README.md +++ b/README.md @@ -113,6 +113,10 @@ If you use GNU+Linux, there might be a `bizhawk-git` package or similar in the s TODO +powershell to come + +something something IDE is [VS Community 2017](https://visualstudio.microsoft.com/vs/community) + [Compiling](http://tasvideos.org/Bizhawk/Compiling.html) ### GNU+Linux and macOS From dd7abcd5dfe409cd99ee2b9fee43720f0fe06664 Mon Sep 17 00:00:00 2001 From: James Groom Date: Thu, 10 Jan 2019 16:06:37 +0000 Subject: [PATCH 121/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 24f048b28f..1a177fc20e 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ If you use GNU+Linux, there might be a `bizhawk-git` package or similar in the s TODO -powershell to come +powershell *should* be `C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe /p:Configuration=Release BizHawk.sln`, but getting errors w/ master something something IDE is [VS Community 2017](https://visualstudio.microsoft.com/vs/community) From e7b18c587139ffc5d473f2256becdb15c5e6d379 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 02:44:52 +1000 Subject: [PATCH 122/301] Update README.md --- README.md | 44 ++++++++++++++------------------------------ 1 file changed, 14 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index 1a177fc20e..58ff76e40b 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ [![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&logoColor=333333&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) -[![unique systems emulated | 22](https://img.shields.io/badge/unique_systems_emulated-22-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#features) +[![unique systems emulated | 24](https://img.shields.io/badge/unique_systems_emulated-24-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#features) A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). @@ -28,35 +28,20 @@ The BizHawk common features (across all cores) are: * memory view/search/edit in all parts of the emulated HW * input recording (making TAS movies) * screenshotting and recording video +* organised firmware +* input, framerate, and other overlays +* emulated controllers via a comprehensive input mapper +* Lua control over core and frontend (Windows only) -System | BH Common | Accuracy† | Debugging | Peripherals ---:|:-:|:-:|:-:|:-: -Apple II | ✓ | 95%? | ? | ? -Atari 2600 | ✓ | 95%? | ◕ | ? -Atari 7800 | ✓ | 95%? | ◕ | ? -Atari Lynx | ✓ | 95%? | ◔ | ? -ColecoVision | ✓ | 95%? | ◕ | ? -Commodore 64 | ✓ | 95%? | ◕ | [some](http://tasvideos.org/Bizhawk/C64.html) -GB/GBC | ✓ | 95%? | ✓ | ? -GBA | ✓ | 95%? | ◕ | ? -Genesis | ✓ | 95%? | ✓ | [all?](https://bitbucket.org/eke/genesis-plus-gx/src/b573cd25853f9f8b5b941fc36506835e228144c6/wiki/Features.md?at=master&fileviewer=file-view-default) -IntelliVision | ✓ | 95%? | ◕ | ? -Master System | ✓ | 95%? | ✓ | ? -N64 | ✓ | 95%? | ◕ | [all?](http://tasvideos.org/Bizhawk/N64.html) -NGP/NGPC | ✓ | 95%? | ◔ | N/A -NES | ✓ | 95%? | ✓ | ? -PSX | ✓ | 95%? | ? | ? -Saturn | ✓ | 95%? | ◔ | ? -SNES | ✓ | 95%? | ✓ | ? -TI-83 | ✓ | 95%? | ? | N/A -PC Engine / SG | ✓ | 95%? | ✓ | ? -Virtual Boy | ✓ | 95%? | ? | N/A -WonderSwan | ✓ | 95%? | ◕ | N/A -ZX Spectrum | ✓ | 95%? | ✓ | [common](http://tasvideos.org/Bizhawk/ZXSpectrum.html) +Supported consoles and PCs: -† *approximately* what portion of games run perfectly, not counting romhacks/homebrew (if you want to count, go right ahead) - -EmuHawk's frontend also has a firmware manager, nice overlays, and a comprehensive input mapper. We're talking keyboard and controller mapped to one emulated controller, analog from digital and digital from analog, keyboard hotkeys, controller hotkeys, and rapid fire for emulated controllers. Most of the frontend can be controlled with Lua scripts (only on Windows for now). These scripts can draw overlays for casual play or for RTA speedruns, change the running game to add complex cheats, assist TASers and romhackers in debugging a game, and more. But most importantly: BizHawk is Hawk Biz. +* N64 and [all peripherals](http://tasvideos.org/Bizhawk/N64.html); Playstation (PSX); Saturn; Virtual Boy +* Game Boy Advance; Game Boy Color; Neo Geo Pocket (Color); WonderSwan (Color) +* Genesis and [all peripherals](https://bitbucket.org/eke/genesis-plus-gx/src/b573cd25853f9f8b5b941fc36506835e228144c6/wiki/Features.md?at=master&fileviewer=file-view-default); SNES; TurboGrafx / SuperGrafx +* Atari Lynx; Game Boy; Game Gear; TI-83 +* Atari 7800; Commodore 64 and [some peripherals](http://tasvideos.org/Bizhawk/C64.html); Master System; NES; ZX Spectrum and [some peripherals](http://tasvideos.org/Bizhawk/ZXSpectrum.html) +* Apple II; Atari 2600; ColecoVision; IntelliVision +* [More](http://tasvideos.org/Bizhawk/CoreRoadMap.html) coming soon..? See the *Usage* sections below for details about specific tools and config menus. @@ -183,8 +168,7 @@ If you'd like to add a feature, first search the issue tracker for it. If it's a * [DeSmuME](https://desmume.org) for DS/Lite — cross-platform * [Dolphin](https://dolphin-emu.org) for GameCube and (original) Wii — cross-platform * [FCEUX](http://www.fceux.com/web/home.html) for NES/Famicom — TASing is Windows-only, but it should run on Unix -* [Hourglass](https://github.com/TASVideos/hourglass-win32) for Windows Win32 — Windows-only, see also [rewrite project](https://github.com/Hourglass-Resurrection/Hourglass-Resurrection) -* [libTAS](https://github.com/clementgallet/libTAS) for Linux ELF — GNU+Linux-only +* [libTAS](https://github.com/clementgallet/libTAS) for Linux ELF — GNU+Linux-only, also emulates other emulators * [openMSX](https://openmsx.org) for MSX — cross-platform ## License From 506d9e2e0c77ba0821396d0594f04b685d328d7e Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 03:00:34 +1000 Subject: [PATCH 123/301] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 58ff76e40b..26634d63c6 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@ # BizHawk +[![unique systems emulated | 24](https://img.shields.io/badge/unique_systems_emulated-24-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#features) [![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&logoColor=333333&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) -[![unique systems emulated | 24](https://img.shields.io/badge/unique_systems_emulated-24-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#features) +[![Windows prereqs | GitHub](https://img.shields.io/badge/Windows_prereqs-GitHub-darkred.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk-Prereqs/releases/latest) A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). -Click the "release" button above to grab the latest stable version. New users on Windows will need [this](https://github.com/TASVideos/BizHawk-Prereqs/releases/latest). The changelog is [here at TASVideos](http://tasvideos.org/Bizhawk/ReleaseHistory.html). **Never mix different versions** of BizHawk — Keep each version in its own folder. +Click the "release" button above to grab the latest stable version ([changelog at TASVideos](http://tasvideos.org/Bizhawk/ReleaseHistory.html)). New users on Windows should click the "prereqs" button too, see *Installing* for info. **Never mix different versions** of BizHawk — Keep each version in its own folder. Jump to: * [Installing — Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#installing--windows-78110) From 5e3b2eada3164daf16254742c8db840737e201dc Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 03:04:07 +1000 Subject: [PATCH 124/301] Update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 26634d63c6..a5eeaae82f 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,8 @@ Jump to: ## Features The BizHawk common features (across all cores) are: -* detection of game format and region, and corruption checking +* format and region detection for game images +* image corruption warning checked against database * 10 savestate slots and save/load to file * speed control, including frame stepping and rewinding * memory view/search/edit in all parts of the emulated HW From d1f3b19c73194ceb978382fc0494f1ddb79bd3ec Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 03:05:27 +1000 Subject: [PATCH 125/301] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a5eeaae82f..1d64f7edeb 100644 --- a/README.md +++ b/README.md @@ -37,11 +37,11 @@ The BizHawk common features (across all cores) are: Supported consoles and PCs: -* N64 and [all peripherals](http://tasvideos.org/Bizhawk/N64.html); Playstation (PSX); Saturn; Virtual Boy +* N64 and [all](http://tasvideos.org/Bizhawk/N64.html) peripherals; Playstation (PSX); Saturn; Virtual Boy * Game Boy Advance; Game Boy Color; Neo Geo Pocket (Color); WonderSwan (Color) -* Genesis and [all peripherals](https://bitbucket.org/eke/genesis-plus-gx/src/b573cd25853f9f8b5b941fc36506835e228144c6/wiki/Features.md?at=master&fileviewer=file-view-default); SNES; TurboGrafx / SuperGrafx +* Genesis and [all](https://bitbucket.org/eke/genesis-plus-gx/src/b573cd25853f9f8b5b941fc36506835e228144c6/wiki/Features.md?at=master&fileviewer=file-view-default) peripherals; SNES; TurboGrafx / SuperGrafx * Atari Lynx; Game Boy; Game Gear; TI-83 -* Atari 7800; Commodore 64 and [some peripherals](http://tasvideos.org/Bizhawk/C64.html); Master System; NES; ZX Spectrum and [some peripherals](http://tasvideos.org/Bizhawk/ZXSpectrum.html) +* Atari 7800; Commodore 64 and [some](http://tasvideos.org/Bizhawk/C64.html) peripherals; Master System; NES; ZX Spectrum and [some](http://tasvideos.org/Bizhawk/ZXSpectrum.html) peripherals * Apple II; Atari 2600; ColecoVision; IntelliVision * [More](http://tasvideos.org/Bizhawk/CoreRoadMap.html) coming soon..? From 47fe7743c8964438b54bc2869fb034c3135f7228 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 03:06:17 +1000 Subject: [PATCH 126/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1d64f7edeb..d94c4c7805 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,7 @@ Jump to: * [Related projects](https://github.com/TASVideos/BizHawk/blob/master/README.md#related-projects) * [License](https://github.com/TASVideos/BizHawk/blob/master/README.md#license) -## Features +## Features and systems The BizHawk common features (across all cores) are: * format and region detection for game images From 56c9033ef839bcfcbc9481f24e17b499f6df79bb Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 03:17:12 +1000 Subject: [PATCH 127/301] Update README.md --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d94c4c7805..086b9f805f 100644 --- a/README.md +++ b/README.md @@ -12,11 +12,12 @@ Click the "release" button above to grab the latest stable version ([changelog a Jump to: * [Installing — Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#installing--windows-78110) * [Installing — GNU+Linux and macOS](https://github.com/TASVideos/BizHawk/blob/master/README.md#installing--gnulinux-and-macos) -* [Building/Testing](https://github.com/TASVideos/BizHawk/blob/master/README.md#buildingtesting) +* [Building](https://github.com/TASVideos/BizHawk/blob/master/README.md#building) * [Usage (emulation)](https://github.com/TASVideos/BizHawk/blob/master/README.md#usage-emulation) * [Usage (TASing)](https://github.com/TASVideos/BizHawk/blob/master/README.md#usage-tasing) * [Support and troubleshooting](https://github.com/TASVideos/BizHawk/blob/master/README.md#support-and-troubleshooting) * [Contributing](https://github.com/TASVideos/BizHawk/blob/master/README.md#contributing) +* [Testing]() * [Related projects](https://github.com/TASVideos/BizHawk/blob/master/README.md#related-projects) * [License](https://github.com/TASVideos/BizHawk/blob/master/README.md#license) @@ -165,6 +166,10 @@ It's a good idea to check if anyone is already working on an issue by asking on If you'd like to add a feature, first search the issue tracker for it. If it's a new idea, make your own feature request issue before you start coding. +### Testing + +Dev builds are automated with AppVeyor, every green checkmark in the [commit history](https://github.com/TASVideos/BizHawk/commits/master) is a successful build and clicking the check takes you straight there. The full list is [here](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history), in future use the "dev builds" button at the top of this readme. + ## Related projects * [DeSmuME](https://desmume.org) for DS/Lite — cross-platform From a2edf3646a216fd3236f863a615e0765d0c279a4 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 03:18:42 +1000 Subject: [PATCH 128/301] Update README.md --- README.md | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 086b9f805f..3ea82587b9 100644 --- a/README.md +++ b/README.md @@ -10,14 +10,15 @@ A multi-system emulator written in C#. As well as quality-of-life features for c Click the "release" button above to grab the latest stable version ([changelog at TASVideos](http://tasvideos.org/Bizhawk/ReleaseHistory.html)). New users on Windows should click the "prereqs" button too, see *Installing* for info. **Never mix different versions** of BizHawk — Keep each version in its own folder. Jump to: -* [Installing — Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#installing--windows-78110) -* [Installing — GNU+Linux and macOS](https://github.com/TASVideos/BizHawk/blob/master/README.md#installing--gnulinux-and-macos) +* Installing + * [Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#windows-78110) + * [GNU+Linux and macOS](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-and-macos) * [Building](https://github.com/TASVideos/BizHawk/blob/master/README.md#building) -* [Usage (emulation)](https://github.com/TASVideos/BizHawk/blob/master/README.md#usage-emulation) -* [Usage (TASing)](https://github.com/TASVideos/BizHawk/blob/master/README.md#usage-tasing) +* [Usage](https://github.com/TASVideos/BizHawk/blob/master/README.md#usage) + * [TASing](https://github.com/TASVideos/BizHawk/blob/master/README.md#tasing) * [Support and troubleshooting](https://github.com/TASVideos/BizHawk/blob/master/README.md#support-and-troubleshooting) * [Contributing](https://github.com/TASVideos/BizHawk/blob/master/README.md#contributing) -* [Testing]() + * [Testing]() * [Related projects](https://github.com/TASVideos/BizHawk/blob/master/README.md#related-projects) * [License](https://github.com/TASVideos/BizHawk/blob/master/README.md#license) @@ -48,7 +49,9 @@ Supported consoles and PCs: See the *Usage* sections below for details about specific tools and config menus. -## Installing — Windows 7/8.1/10 +## Installing + +### Windows 7/8.1/10 Released binaries can be found right here on GitHub: @@ -68,7 +71,7 @@ BizHawk functions like a "portable" program, you may move or rename the folder c Win7 is supported from SP1, Win8 is supported from 8.1, and Win10 is supported from 1709 "Redstone 3", following [Microsoft's support lifecycle](https://support.microsoft.com/en-us/help/13853/windows-lifecycle-fact-sheet). -## Installing — GNU+Linux and macOS +### GNU+Linux and macOS Install BizHawk with your distro's package manager. The package name is given on each button below, and some buttons are links. For the changelog, [see TASVideos here](http://tasvideos.org/Bizhawk/ReleaseHistory.html). @@ -126,11 +129,11 @@ Once built, see the *Installing* section, substituting the repo's `output` folde Again, if your distro isn't listed there, you might get an "Unknown distro" warning in the terminal, and BizHawk may not open or may show the missing dependencies dialog. You may need to add your distro to the case statement in the script, setting `libpath` to the location of `d3dx9_43.dll.so` (please do share if you get it working). -## Usage (emulation) +## Usage TODO -## Usage (TASing) +### TASing This section refers to BizHawk specifically. For resources on TASing in general, see [Welcome to TASVideos](http://tasvideos.org/WelcomeToTASVideos.html). From 4ee836982a0f4f727cb6f2f86af834e80a2bbde5 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 03:20:50 +1000 Subject: [PATCH 129/301] Update README.md --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3ea82587b9..e67c4be4ee 100644 --- a/README.md +++ b/README.md @@ -179,6 +179,7 @@ Dev builds are automated with AppVeyor, every green checkmark in the [commit his * [Dolphin](https://dolphin-emu.org) for GameCube and (original) Wii — cross-platform * [FCEUX](http://www.fceux.com/web/home.html) for NES/Famicom — TASing is Windows-only, but it should run on Unix * [libTAS](https://github.com/clementgallet/libTAS) for Linux ELF — GNU+Linux-only, also emulates other emulators +* [lsnes](http://tasvideos.org/Lsnes.html) for SNES — Windows-only * [openMSX](https://openmsx.org) for MSX — cross-platform ## License From 753a14ef1ec5b7b9229b9074594db111931f30e6 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 03:26:07 +1000 Subject: [PATCH 130/301] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e67c4be4ee..10121d8935 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,7 @@ Install BizHawk with your distro's package manager. The package name is given on [![Manjaro (AUR) | bizhawk](https://img.shields.io/badge/Manjaro_(AUR)-bizhawk-%2335BF5C.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABRUlEQVR4nO3bQUrDQBTG8Qdu3dS91r2CAzYE3Cm9QBURmjq7Yk9QIsELJYJ2XYqh7UJbL9NcYFyoGAQZiFMygf8Hb/vNm192IREhhJBS+ou4Fa3vM71Kitv3B1P3lHer2qFXSTFYJ2l/EbesANev46y7HJkw1yZ4GdQ+5d2qdoS5Nt3lyNy8xakV4Hw+LOq+tGuA77mY322sAL48+W0AhLk2f93b2SE+A/zuAwAAAAAAAAAAAAAAAAAAcH3IqcNpJMBWAkATAVy+E2wkgE9dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAZzrTaOPT0i67OtPI/suMyq6efVraZdfJ4+WTFWD3bP9Ypb1JMIsq/zzlHcAsKlTam+wFB0dWABHZEZFDEVHi4NO2f3S47FIi0v66GyHkJx/0rGTAdYdsEwAAAABJRU5ErkJggg==&style=popout)](https://aur.archlinux.org/packages/bizhawk) [![Ubuntu (Launchpad) | bizhawk](https://img.shields.io/badge/Ubuntu_(Launchpad)-bizhawk-%23E95420.svg?colorA=772953&logo=ubuntu&style=popout)](https://example.com/bizhawk) -If you run `EmuHawkMono.sh` from a terminal, note that `File > Exit (Alt+F4)` doesn't terminate the process correctly, you'll need to send SIGINT (`^C`). +If you run `EmuHawkMono.sh` from a terminal, note that `File > Exit (Alt+F4)` doesn't terminate the process correctly, you'll need to send SIGINT (`^C`). The systems that currently work are: Game Boy + GBC (GBHawk), NES (NesHawk), Master System, Atari 7800, Commodore 64, ColecoVision, IntelliVision, TurboGrafx, and ZX Spectrum. See #1430 for progress. Is your distro not there? Released binaries can be found right here on GitHub (same download as for Windows): @@ -94,7 +94,7 @@ Linux distros are supported if the distributor is still supporting your version, macOS is supported from 10.11 "El Capitan" (Darwin 15.6). Apple doesn't seem to care about lifecycles, so we'll go with 6 months from the last security update. -## Building/Testing +## Building If you want to test the latest changes without building BizHawk yourself, grab the developer build from [AppVeyor](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history). Pick the topmost one that doesn't say "Pull request", then click "Artifacts" and download `BizHawk_Developer--#.zip`. From 4f53bb2d90dba292f1b07d13a2e73002e9ee7663 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 03:27:38 +1000 Subject: [PATCH 131/301] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 10121d8935..fcd66bb4e6 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ A multi-system emulator written in C#. As well as quality-of-life features for c Click the "release" button above to grab the latest stable version ([changelog at TASVideos](http://tasvideos.org/Bizhawk/ReleaseHistory.html)). New users on Windows should click the "prereqs" button too, see *Installing* for info. **Never mix different versions** of BizHawk — Keep each version in its own folder. Jump to: -* Installing +* [Installing](https://github.com/TASVideos/BizHawk/blob/master/README.md#installing) * [Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#windows-78110) * [GNU+Linux and macOS](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-and-macos) * [Building](https://github.com/TASVideos/BizHawk/blob/master/README.md#building) @@ -18,7 +18,7 @@ Jump to: * [TASing](https://github.com/TASVideos/BizHawk/blob/master/README.md#tasing) * [Support and troubleshooting](https://github.com/TASVideos/BizHawk/blob/master/README.md#support-and-troubleshooting) * [Contributing](https://github.com/TASVideos/BizHawk/blob/master/README.md#contributing) - * [Testing]() + * [Testing](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) * [Related projects](https://github.com/TASVideos/BizHawk/blob/master/README.md#related-projects) * [License](https://github.com/TASVideos/BizHawk/blob/master/README.md#license) From c44aed966f276f5096add4fc61ceb548b8eb02c3 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 03:28:48 +1000 Subject: [PATCH 132/301] Update README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index fcd66bb4e6..67dd936044 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,11 @@ A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). -Click the "release" button above to grab the latest stable version ([changelog at TASVideos](http://tasvideos.org/Bizhawk/ReleaseHistory.html)). New users on Windows should click the "prereqs" button too, see *Installing* for info. **Never mix different versions** of BizHawk — Keep each version in its own folder. +Click the "release" button above to grab the latest stable version ([changelog at TASVideos](http://tasvideos.org/Bizhawk/ReleaseHistory.html)). + +New users on Windows should click the "prereqs" button too, see *Installing* for info. + +**Never mix different versions** of BizHawk — Keep each version in its own folder. Jump to: * [Installing](https://github.com/TASVideos/BizHawk/blob/master/README.md#installing) From ec65982893e1dd736ac8b1476b4f70ff65cf90c4 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 03:34:01 +1000 Subject: [PATCH 133/301] Update README.md --- README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 67dd936044..0370381083 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # BizHawk -[![unique systems emulated | 24](https://img.shields.io/badge/unique_systems_emulated-24-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#features) +[![unique systems emulated | 24](https://img.shields.io/badge/unique_systems_emulated-24-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) [![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&logoColor=333333&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) [![Windows prereqs | GitHub](https://img.shields.io/badge/Windows_prereqs-GitHub-darkred.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk-Prereqs/releases/latest) @@ -20,6 +20,7 @@ Jump to: * [Building](https://github.com/TASVideos/BizHawk/blob/master/README.md#building) * [Usage](https://github.com/TASVideos/BizHawk/blob/master/README.md#usage) * [TASing](https://github.com/TASVideos/BizHawk/blob/master/README.md#tasing) + * [Cores](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) * [Support and troubleshooting](https://github.com/TASVideos/BizHawk/blob/master/README.md#support-and-troubleshooting) * [Contributing](https://github.com/TASVideos/BizHawk/blob/master/README.md#contributing) * [Testing](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) @@ -151,6 +152,12 @@ TODO [TAS movie file format](http://tasvideos.org/Bizhawk/TASFormat.html) +### Cores + +A *core* is what we call the smaller bits of software that emulate just one system or family of systems, e.g. NES/Famicom. For the most part, there's a "best" core for each system, based on accuracy, but there's currently a bit of overlap in the cores BizHawk uses as noted below. + +TABLE GOES HERE + ## Support and troubleshooting A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, and you can't find it in the [issue tracker search](https://github.com/TASVideos/BizHawk/issues?q=is%3Aissue+ISSUE_KEYWORDS), check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at TASVideos, or ask on IRC: From b62abb7f0bfef23a933534f5c2bb13acd237fa9a Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 03:39:03 +1000 Subject: [PATCH 134/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0370381083..700874c633 100644 --- a/README.md +++ b/README.md @@ -32,7 +32,7 @@ Jump to: The BizHawk common features (across all cores) are: * format and region detection for game images * image corruption warning checked against database -* 10 savestate slots and save/load to file +* 10 save slots with hotkeys and ∞ named savestates * speed control, including frame stepping and rewinding * memory view/search/edit in all parts of the emulated HW * input recording (making TAS movies) From d9836e0c20aba69c3bb0f450c38de87620868b26 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 03:45:48 +1000 Subject: [PATCH 135/301] Update README.md --- README.md | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 700874c633..cbdd4b170a 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,14 @@ # BizHawk +A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). + +*** + [![unique systems emulated | 24](https://img.shields.io/badge/unique_systems_emulated-24-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) [![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&logoColor=333333&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) [![Windows prereqs | GitHub](https://img.shields.io/badge/Windows_prereqs-GitHub-darkred.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk-Prereqs/releases/latest) -A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). - Click the "release" button above to grab the latest stable version ([changelog at TASVideos](http://tasvideos.org/Bizhawk/ReleaseHistory.html)). New users on Windows should click the "prereqs" button too, see *Installing* for info. @@ -30,17 +32,17 @@ Jump to: ## Features and systems The BizHawk common features (across all cores) are: -* format and region detection for game images -* image corruption warning checked against database +* format, region, and integrity detection for game images * 10 save slots with hotkeys and ∞ named savestates * speed control, including frame stepping and rewinding -* memory view/search/edit in all parts of the emulated HW +* memory view/search/edit in all emulated hardware components * input recording (making TAS movies) * screenshotting and recording video -* organised firmware -* input, framerate, and other overlays +* firmware management +* input, framerate, and more in a HUD over the game * emulated controllers via a comprehensive input mapper * Lua control over core and frontend (Windows only) +* hotkey bindings to control the UI Supported consoles and PCs: From c1e2d2388c33f9117920af60ed4bb4be22781c17 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 03:55:46 +1000 Subject: [PATCH 136/301] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index cbdd4b170a..8c5eb40362 100644 --- a/README.md +++ b/README.md @@ -37,14 +37,14 @@ The BizHawk common features (across all cores) are: * speed control, including frame stepping and rewinding * memory view/search/edit in all emulated hardware components * input recording (making TAS movies) -* screenshotting and recording video +* screenshotting and recording audio + video to file * firmware management * input, framerate, and more in a HUD over the game * emulated controllers via a comprehensive input mapper * Lua control over core and frontend (Windows only) * hotkey bindings to control the UI -Supported consoles and PCs: +Supported consoles and computers: * N64 and [all](http://tasvideos.org/Bizhawk/N64.html) peripherals; Playstation (PSX); Saturn; Virtual Boy * Game Boy Advance; Game Boy Color; Neo Geo Pocket (Color); WonderSwan (Color) From 9a9daf20d883c6b304336440d2f080532d6f125f Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 04:08:52 +1000 Subject: [PATCH 137/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8c5eb40362..7129a8d5ab 100644 --- a/README.md +++ b/README.md @@ -97,7 +97,7 @@ Is your distro not there? Released binaries can be found right here on GitHub (s If you download BizHawk this way, **don't mix different versions**, keep each version in its own folder. Run `EmuHawkMono.sh` to give Mono the library and executable paths — you can run it from anywhere, so putting it in a .desktop file is fine. If running the script doesn't start EmuHawk, you may need to edit it (if you use a terminal, it will say so in the output). -Linux distros are supported if the distributor is still supporting your version, you're using Linux 4.4/4.9/4.14/4.19 LTS or 4.20, and there are no updates available in your package manager. *Please* update and reboot. +Linux distros are supported if the distributor is still supporting your version, you're using Linux 4.4/4.9/4.14/4.19 LTS or 4.20 for x86_64/amd64, and there are no updates available in your package manager. *Please* update and reboot. macOS is supported from 10.11 "El Capitan" (Darwin 15.6). Apple doesn't seem to care about lifecycles, so we'll go with 6 months from the last security update. From 17a73c31e5bdb93eb31da0a560a52545902a9fab Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 04:18:34 +1000 Subject: [PATCH 138/301] Update README.md --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7129a8d5ab..70893026ae 100644 --- a/README.md +++ b/README.md @@ -46,11 +46,11 @@ The BizHawk common features (across all cores) are: Supported consoles and computers: -* N64 and [all](http://tasvideos.org/Bizhawk/N64.html) peripherals; Playstation (PSX); Saturn; Virtual Boy -* Game Boy Advance; Game Boy Color; Neo Geo Pocket (Color); WonderSwan (Color) -* Genesis and [all](https://bitbucket.org/eke/genesis-plus-gx/src/b573cd25853f9f8b5b941fc36506835e228144c6/wiki/Features.md?at=master&fileviewer=file-view-default) peripherals; SNES; TurboGrafx / SuperGrafx -* Atari Lynx; Game Boy; Game Gear; TI-83 -* Atari 7800; Commodore 64 and [some](http://tasvideos.org/Bizhawk/C64.html) peripherals; Master System; NES; ZX Spectrum and [some](http://tasvideos.org/Bizhawk/ZXSpectrum.html) peripherals +* N64; Playstation (PSX); Sega Saturn; Virtual Boy +* Game Boy Advance; Game Boy Color; Neo Geo Pocket / Color; WonderSwan / Color +* Sega Genesis; SNES; TurboGrafx / SuperGrafx +* Atari Lynx; Game Boy; Sega Game Gear; TI-83 +* Atari 7800; Commodore 64; Sega Master System; NES; ZX Spectrum * Apple II; Atari 2600; ColecoVision; IntelliVision * [More](http://tasvideos.org/Bizhawk/CoreRoadMap.html) coming soon..? From e60be7753c8f8108ab5e540357d0d0819867a252 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 04:32:54 +1000 Subject: [PATCH 139/301] Update README.md --- README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 70893026ae..2ff79d35fd 100644 --- a/README.md +++ b/README.md @@ -46,12 +46,11 @@ The BizHawk common features (across all cores) are: Supported consoles and computers: -* N64; Playstation (PSX); Sega Saturn; Virtual Boy -* Game Boy Advance; Game Boy Color; Neo Geo Pocket / Color; WonderSwan / Color -* Sega Genesis; SNES; TurboGrafx / SuperGrafx -* Atari Lynx; Game Boy; Sega Game Gear; TI-83 -* Atari 7800; Commodore 64; Sega Master System; NES; ZX Spectrum -* Apple II; Atari 2600; ColecoVision; IntelliVision +* N64; Playstation (PSX); Sega Saturn +* Game Boy; Game Boy Advance; Game Boy Color; Sega Game Gear +* Atari 2600; Atari 7800; Atari Lynx; NES; Sega Genesis; Sega Master System; SNES; Virtual Boy +* Apple II; Commodore 64; ColecoVision; IntelliVision; TurboGrafx / SuperGrafx; ZX Spectrum +* Neo Geo Pocket / Color; TI-83; WonderSwan / Color * [More](http://tasvideos.org/Bizhawk/CoreRoadMap.html) coming soon..? See the *Usage* sections below for details about specific tools and config menus. From 5200ce89c63c3d14e75105a242238bd981d36068 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 18:07:44 +1000 Subject: [PATCH 140/301] Update README.md --- README.md | 31 +++++++++++++++++++++++++------ 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 2ff79d35fd..463aeaf465 100644 --- a/README.md +++ b/README.md @@ -46,11 +46,30 @@ The BizHawk common features (across all cores) are: Supported consoles and computers: -* N64; Playstation (PSX); Sega Saturn -* Game Boy; Game Boy Advance; Game Boy Color; Sega Game Gear -* Atari 2600; Atari 7800; Atari Lynx; NES; Sega Genesis; Sega Master System; SNES; Virtual Boy -* Apple II; Commodore 64; ColecoVision; IntelliVision; TurboGrafx / SuperGrafx; ZX Spectrum -* Neo Geo Pocket / Color; TI-83; WonderSwan / Color +* Apple II +* Atari 2600 +* Atari 7800 +* Atari Lynx +* Commodore 64 +* ColecoVision +* Game Boy +* Game Boy Advance +* Game Boy Color +* IntelliVision +* N64 +* Neo Geo Pocket / Color +* NES +* Playstation (PSX) +* Sega Game Gear +* Sega Genesis +* Sega Master System +* Sega Saturn +* SNES +* TI-83 +* TurboGrafx / SuperGrafx +* Virtual Boy +* WonderSwan / Color +* ZX Spectrum * [More](http://tasvideos.org/Bizhawk/CoreRoadMap.html) coming soon..? See the *Usage* sections below for details about specific tools and config menus. @@ -191,7 +210,7 @@ Dev builds are automated with AppVeyor, every green checkmark in the [commit his * [Dolphin](https://dolphin-emu.org) for GameCube and (original) Wii — cross-platform * [FCEUX](http://www.fceux.com/web/home.html) for NES/Famicom — TASing is Windows-only, but it should run on Unix * [libTAS](https://github.com/clementgallet/libTAS) for Linux ELF — GNU+Linux-only, also emulates other emulators -* [lsnes](http://tasvideos.org/Lsnes.html) for SNES — Windows-only +* [lsnes](http://tasvideos.org/Lsnes.html) for GB and SNES — cross-platform * [openMSX](https://openmsx.org) for MSX — cross-platform ## License From 79252ee41706a58f9baa12aadaa800e15c2456fc Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 18:25:16 +1000 Subject: [PATCH 141/301] Update README.md --- README.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 463aeaf465..9bdd9c7d4e 100644 --- a/README.md +++ b/README.md @@ -127,13 +127,16 @@ If you use GNU+Linux, there might be a `bizhawk-git` package or similar in the s ### Windows 7/8.1/10 -TODO +If you have WSL, Git BASH, or similar, clone the repo with: +``` +git clone https://github.com/TASVideos/BizHawk.git BizHawk_master +# or ssh: git clone git@github.com:TASVideos/BizHawk.git BizHawk_master +``` +...or use a [Git GUI](https://desktop.github.com). Otherwise, you'll have to download an archive from GitHub. -powershell *should* be `C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe /p:Configuration=Release BizHawk.sln`, but getting errors w/ master +On Windows 10, open a PowerShell window in BizHawk_master (Shift+Mouse2 in File Explorer) and run `C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe /p:Configuration=Release BizHawk.sln`. TODO: didn't work for me. On older versions, a similar Command Prompt script should work. -something something IDE is [VS Community 2017](https://visualstudio.microsoft.com/vs/community) - -[Compiling](http://tasvideos.org/Bizhawk/Compiling.html) +The best free C# IDE is [VS Community 2017](https://visualstudio.microsoft.com/vs/community), which you'll need to work on the project efficiently. Open `BizHawk.sln` with VS to start. ### GNU+Linux and macOS From 62363e3cded9cad0976c6498bf156e61943c29cc Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 18:26:27 +1000 Subject: [PATCH 142/301] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 9bdd9c7d4e..f097779edf 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,8 @@ Jump to: * [Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#windows-78110) * [GNU+Linux and macOS](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-and-macos) * [Building](https://github.com/TASVideos/BizHawk/blob/master/README.md#building) + * [Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#windows-78110-1) + * [GNU+Linux and macOS](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-and-macos-1) * [Usage](https://github.com/TASVideos/BizHawk/blob/master/README.md#usage) * [TASing](https://github.com/TASVideos/BizHawk/blob/master/README.md#tasing) * [Cores](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) From 5905dc2d7c01a55c56b62c065b746f2e0b8d50be Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 19:45:36 +1000 Subject: [PATCH 143/301] Update README.md --- README.md | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index f097779edf..f9e7bd7f50 100644 --- a/README.md +++ b/README.md @@ -181,7 +181,35 @@ TODO A *core* is what we call the smaller bits of software that emulate just one system or family of systems, e.g. NES/Famicom. For the most part, there's a "best" core for each system, based on accuracy, but there's currently a bit of overlap in the cores BizHawk uses as noted below. -TABLE GOES HERE +System | Core | Alt. Core | SGB +--:|:--|:--|:-- +Amstrad CPC | CPCHawk† || +Apple II | Virtu || +Atari 2600 | Atari2600Hawk || +Atari 7800 | A7800Hawk || +Atari Lynx | Handy || +Commodore 64 | C64Hawk || +ColecoVision | ColecoHawk || +Game Boy | GBHawk | Gambatte | SameBoy (on SNES with SGB) +Game Boy Advance | mGBA/VBA-Next | mGBA/VBA-Next | +Game Boy Color | GBHawk | Gambatte | SameBoy (on SNES with SGB) +IntelliVision | IntelliHawk || +N64 | Mupen64Plus || +Neo Geo Pocket / Color | NeoPop || +NES | NesHawk | QuickNes || +Playstation (PSX) | Octoshock || +Sega Game Gear | SMSHawk || +Sega Genesis | Genplus-gx || +Sega Master System | SMSHawk || +Sega Saturn | Saturnus || +SNES | BSNES/Snes9x | BSNES/Snes9x | +TI-83 | TI83Hawk || +TurboGrafx / SuperGrafx | PCEHawk || +Virtual Boy | Virtual Boyee || +WonderSwan / Color | Cygne || +ZX Spectrum | ZXHawk || + +† core is in development and unreleased ## Support and troubleshooting From 3794d0ced8063c106c6ad9918f98375c10705e5e Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 20:00:38 +1000 Subject: [PATCH 144/301] Update README.md --- README.md | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f9e7bd7f50..c4ffc3f253 100644 --- a/README.md +++ b/README.md @@ -61,6 +61,7 @@ Supported consoles and computers: * N64 * Neo Geo Pocket / Color * NES +* PC-FX * Playstation (PSX) * Sega Game Gear * Sega Genesis @@ -181,7 +182,7 @@ TODO A *core* is what we call the smaller bits of software that emulate just one system or family of systems, e.g. NES/Famicom. For the most part, there's a "best" core for each system, based on accuracy, but there's currently a bit of overlap in the cores BizHawk uses as noted below. -System | Core | Alt. Core | SGB +System | Core | Alt. Core | Special Core --:|:--|:--|:-- Amstrad CPC | CPCHawk† || Apple II | Virtu || @@ -194,10 +195,13 @@ Game Boy | GBHawk | Gambatte | SameBoy (on SNES with SGB) Game Boy Advance | mGBA/VBA-Next | mGBA/VBA-Next | Game Boy Color | GBHawk | Gambatte | SameBoy (on SNES with SGB) IntelliVision | IntelliHawk || +Magnavox Odyssey² | O2Em† || N64 | Mupen64Plus || -Neo Geo Pocket / Color | NeoPop || +Neo Geo Pocket / Color | NeoPop || Dual NeoPop (dual instance) NES | NesHawk | QuickNes || +PC-FX | T.S.T. || Playstation (PSX) | Octoshock || +PSP | PPSSPP† || Sega Game Gear | SMSHawk || Sega Genesis | Genplus-gx || Sega Master System | SMSHawk || @@ -205,6 +209,7 @@ Sega Saturn | Saturnus || SNES | BSNES/Snes9x | BSNES/Snes9x | TI-83 | TI83Hawk || TurboGrafx / SuperGrafx | PCEHawk || +Uzebox | Uzem† || Virtual Boy | Virtual Boyee || WonderSwan / Color | Cygne || ZX Spectrum | ZXHawk || From 9c397a005384c82544399eb65a708ef0511436da Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 20:02:51 +1000 Subject: [PATCH 145/301] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index c4ffc3f253..4e7a14df18 100644 --- a/README.md +++ b/README.md @@ -66,6 +66,7 @@ Supported consoles and computers: * Sega Game Gear * Sega Genesis * Sega Master System +* Sega Pico * Sega Saturn * SNES * TI-83 @@ -206,6 +207,7 @@ Sega Game Gear | SMSHawk || Sega Genesis | Genplus-gx || Sega Master System | SMSHawk || Sega Saturn | Saturnus || +Sega Pico | PicoDrive || SNES | BSNES/Snes9x | BSNES/Snes9x | TI-83 | TI83Hawk || TurboGrafx / SuperGrafx | PCEHawk || From 48e9f731b2b12ddff2234d01ed84b52cfac18756 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 20:07:09 +1000 Subject: [PATCH 146/301] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4e7a14df18..16d0e75d4c 100644 --- a/README.md +++ b/README.md @@ -125,10 +125,6 @@ macOS is supported from 10.11 "El Capitan" (Darwin 15.6). Apple doesn't seem to ## Building -If you want to test the latest changes without building BizHawk yourself, grab the developer build from [AppVeyor](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history). Pick the topmost one that doesn't say "Pull request", then click "Artifacts" and download `BizHawk_Developer--#.zip`. - -If you use GNU+Linux, there might be a `bizhawk-git` package or similar in the same repo as the main package. If it's available, installing it will automate the build process. - ### Windows 7/8.1/10 If you have WSL, Git BASH, or similar, clone the repo with: @@ -146,6 +142,8 @@ The best free C# IDE is [VS Community 2017](https://visualstudio.microsoft.com/v *Compiling* requires MSBuild and *running* requires Mono and WINE, but **BizHawk does not run under WINE** — only the bundled libraries are required. +If you use GNU+Linux, there might be a `bizhawk-git` package or similar in the same repo as the main package. If it's available, installing it will automate the build process. + Building is as easy as: ```sh git clone https://github.com/TASVideos/BizHawk.git BizHawk_master && cd BizHawk_master @@ -244,6 +242,8 @@ If you'd like to add a feature, first search the issue tracker for it. If it's a Dev builds are automated with AppVeyor, every green checkmark in the [commit history](https://github.com/TASVideos/BizHawk/commits/master) is a successful build and clicking the check takes you straight there. The full list is [here](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history), in future use the "dev builds" button at the top of this readme. +Once you're on the build page, click "Artifacts" and download `BizHawk_Developer--#.zip`. + ## Related projects * [DeSmuME](https://desmume.org) for DS/Lite — cross-platform From 91b486e9a01eac3c709e85723f9ed922a1fb02b3 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 20:08:06 +1000 Subject: [PATCH 147/301] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 16d0e75d4c..8245f0e1b8 100644 --- a/README.md +++ b/README.md @@ -16,10 +16,10 @@ New users on Windows should click the "prereqs" button too, see *Installing* for **Never mix different versions** of BizHawk — Keep each version in its own folder. Jump to: -* [Installing](https://github.com/TASVideos/BizHawk/blob/master/README.md#installing) +* Installing * [Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#windows-78110) * [GNU+Linux and macOS](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-and-macos) -* [Building](https://github.com/TASVideos/BizHawk/blob/master/README.md#building) +* Building * [Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#windows-78110-1) * [GNU+Linux and macOS](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-and-macos-1) * [Usage](https://github.com/TASVideos/BizHawk/blob/master/README.md#usage) From 13704e1904c35ed4b062c682694c1ba91651c0de Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 21:58:06 +1000 Subject: [PATCH 148/301] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 8245f0e1b8..0b38029fe4 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,8 @@ BizHawk functions like a "portable" program, you may move or rename the folder c Win7 is supported from SP1, Win8 is supported from 8.1, and Win10 is supported from 1709 "Redstone 3", following [Microsoft's support lifecycle](https://support.microsoft.com/en-us/help/13853/windows-lifecycle-fact-sheet). +A "backport" release, [1.13.2](https://github.com/TASVideos/BizHawk/releases/tag/1.13.2), is available for Windows XP and 32-bit users. Being in the 1.x series, many bugs remain and features are missing. + ### GNU+Linux and macOS Install BizHawk with your distro's package manager. The package name is given on each button below, and some buttons are links. For the changelog, [see TASVideos here](http://tasvideos.org/Bizhawk/ReleaseHistory.html). From 993a6d80e2ef7e57d2e72b815174f90727be89a6 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 22:08:42 +1000 Subject: [PATCH 149/301] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 0b38029fe4..ee6e8dd700 100644 --- a/README.md +++ b/README.md @@ -240,6 +240,8 @@ It's a good idea to check if anyone is already working on an issue by asking on If you'd like to add a feature, first search the issue tracker for it. If it's a new idea, make your own feature request issue before you start coding. +Past contrbutors to the frontend and custom-built cores are listed [here](https://github.com/TASVideos/BizHawk/graphs/contributors). See a core's docs for its authors. + ### Testing Dev builds are automated with AppVeyor, every green checkmark in the [commit history](https://github.com/TASVideos/BizHawk/commits/master) is a successful build and clicking the check takes you straight there. The full list is [here](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history), in future use the "dev builds" button at the top of this readme. From 0d71b4a525f03537c7838e56f8dbceaa960e75f0 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 22:10:10 +1000 Subject: [PATCH 150/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ee6e8dd700..41fc7d613d 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ A multi-system emulator written in C#. As well as quality-of-life features for c *** -[![unique systems emulated | 24](https://img.shields.io/badge/unique_systems_emulated-24-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) +[![unique systems emulated | 26](https://img.shields.io/badge/unique_systems_emulated-24-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) [![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&logoColor=333333&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) [![Windows prereqs | GitHub](https://img.shields.io/badge/Windows_prereqs-GitHub-darkred.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk-Prereqs/releases/latest) From a48c697016c0910870e07b6b446c68fb66b7c8db Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 22:11:18 +1000 Subject: [PATCH 151/301] Update README.md --- README.md | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 41fc7d613d..875e9b51bd 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ A multi-system emulator written in C#. As well as quality-of-life features for c *** -[![unique systems emulated | 26](https://img.shields.io/badge/unique_systems_emulated-24-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) +[![unique systems emulated | 25](https://img.shields.io/badge/unique_systems_emulated-25-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) [![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&logoColor=333333&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) [![Windows prereqs | GitHub](https://img.shields.io/badge/Windows_prereqs-GitHub-darkred.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk-Prereqs/releases/latest) @@ -54,9 +54,8 @@ Supported consoles and computers: * Atari Lynx * Commodore 64 * ColecoVision -* Game Boy +* Game Boy / Color * Game Boy Advance -* Game Boy Color * IntelliVision * N64 * Neo Geo Pocket / Color @@ -192,9 +191,8 @@ Atari 7800 | A7800Hawk || Atari Lynx | Handy || Commodore 64 | C64Hawk || ColecoVision | ColecoHawk || -Game Boy | GBHawk | Gambatte | SameBoy (on SNES with SGB) +Game Boy / Color | GBHawk | Gambatte | SameBoy (on SNES with SGB) Game Boy Advance | mGBA/VBA-Next | mGBA/VBA-Next | -Game Boy Color | GBHawk | Gambatte | SameBoy (on SNES with SGB) IntelliVision | IntelliHawk || Magnavox Odyssey² | O2Em† || N64 | Mupen64Plus || From 9cbf6455f86ff0cb84fc9fa0b1ee868ccf21c638 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 22:11:49 +1000 Subject: [PATCH 152/301] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 875e9b51bd..40a723442c 100644 --- a/README.md +++ b/README.md @@ -2,13 +2,13 @@ A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). -*** - [![unique systems emulated | 25](https://img.shields.io/badge/unique_systems_emulated-25-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) [![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&logoColor=333333&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) [![Windows prereqs | GitHub](https://img.shields.io/badge/Windows_prereqs-GitHub-darkred.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk-Prereqs/releases/latest) +*** + Click the "release" button above to grab the latest stable version ([changelog at TASVideos](http://tasvideos.org/Bizhawk/ReleaseHistory.html)). New users on Windows should click the "prereqs" button too, see *Installing* for info. From dd69df3433d0c24847657c51ed1dd9d52669b0ae Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 22:14:13 +1000 Subject: [PATCH 153/301] Update README.md --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 40a723442c..3112449ec4 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,8 @@ Linux distros are supported if the distributor is still supporting your version, macOS is supported from 10.11 "El Capitan" (Darwin 15.6). Apple doesn't seem to care about lifecycles, so we'll go with 6 months from the last security update. +[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) + ## Building ### Windows 7/8.1/10 @@ -160,6 +162,8 @@ Once built, see the *Installing* section, substituting the repo's `output` folde Again, if your distro isn't listed there, you might get an "Unknown distro" warning in the terminal, and BizHawk may not open or may show the missing dependencies dialog. You may need to add your distro to the case statement in the script, setting `libpath` to the location of `d3dx9_43.dll.so` (please do share if you get it working). +[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) + ## Usage TODO @@ -216,6 +220,8 @@ ZX Spectrum | ZXHawk || † core is in development and unreleased +[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) + ## Support and troubleshooting A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, and you can't find it in the [issue tracker search](https://github.com/TASVideos/BizHawk/issues?q=is%3Aissue+ISSUE_KEYWORDS), check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at TASVideos, or ask on IRC: @@ -246,6 +252,8 @@ Dev builds are automated with AppVeyor, every green checkmark in the [commit his Once you're on the build page, click "Artifacts" and download `BizHawk_Developer--#.zip`. +[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) + ## Related projects * [DeSmuME](https://desmume.org) for DS/Lite — cross-platform From 49fe45488177d920be59bdc992bca0f3b95d8f2d Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 11 Jan 2019 22:15:06 +1000 Subject: [PATCH 154/301] Update README.md --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 3112449ec4..f975129b71 100644 --- a/README.md +++ b/README.md @@ -101,6 +101,8 @@ Win7 is supported from SP1, Win8 is supported from 8.1, and Win10 is supported f A "backport" release, [1.13.2](https://github.com/TASVideos/BizHawk/releases/tag/1.13.2), is available for Windows XP and 32-bit users. Being in the 1.x series, many bugs remain and features are missing. +[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) + ### GNU+Linux and macOS Install BizHawk with your distro's package manager. The package name is given on each button below, and some buttons are links. For the changelog, [see TASVideos here](http://tasvideos.org/Bizhawk/ReleaseHistory.html). @@ -141,6 +143,8 @@ On Windows 10, open a PowerShell window in BizHawk_master (Shift+Mouse2 in File The best free C# IDE is [VS Community 2017](https://visualstudio.microsoft.com/vs/community), which you'll need to work on the project efficiently. Open `BizHawk.sln` with VS to start. +[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) + ### GNU+Linux and macOS *Compiling* requires MSBuild and *running* requires Mono and WINE, but **BizHawk does not run under WINE** — only the bundled libraries are required. @@ -168,6 +172,8 @@ Again, if your distro isn't listed there, you might get an "Unknown distro" warn TODO +[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) + ### TASing This section refers to BizHawk specifically. For resources on TASing in general, see [Welcome to TASVideos](http://tasvideos.org/WelcomeToTASVideos.html). @@ -182,6 +188,8 @@ TODO [TAS movie file format](http://tasvideos.org/Bizhawk/TASFormat.html) +[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) + ### Cores A *core* is what we call the smaller bits of software that emulate just one system or family of systems, e.g. NES/Famicom. For the most part, there's a "best" core for each system, based on accuracy, but there's currently a bit of overlap in the cores BizHawk uses as noted below. @@ -232,6 +240,8 @@ A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk If there's no easy solution, what you've got is a bug. Or maybe a feature request. Either way, [open a new issue](https://github.com/TASVideos/BizHawk/issues/new) (you'll need a GitHub account, signup is very fast). +[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) + ## Contributing BizHawk is Open Source Software, so you're free to modify it however you please, and if you do, we invite you to share! Under the MIT license, this is *optional*, just be careful with reusing cores as some have copyleft licenses. From 25115fd2937b88dc999bb16959ca45a67a2c7b03 Mon Sep 17 00:00:00 2001 From: James Groom Date: Sat, 12 Jan 2019 00:33:19 +1000 Subject: [PATCH 155/301] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index f975129b71..ec6f8de728 100644 --- a/README.md +++ b/README.md @@ -254,6 +254,8 @@ It's a good idea to check if anyone is already working on an issue by asking on If you'd like to add a feature, first search the issue tracker for it. If it's a new idea, make your own feature request issue before you start coding. +For the time being, style is not enforced in PRs, only build success. Please use CRLF and tabs in new files. + Past contrbutors to the frontend and custom-built cores are listed [here](https://github.com/TASVideos/BizHawk/graphs/contributors). See a core's docs for its authors. ### Testing From 31f28f466ad65e16e50ef60fc9effb920295e9a2 Mon Sep 17 00:00:00 2001 From: James Groom Date: Sat, 12 Jan 2019 00:39:53 +1000 Subject: [PATCH 156/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ec6f8de728..134129c8b1 100644 --- a/README.md +++ b/README.md @@ -254,7 +254,7 @@ It's a good idea to check if anyone is already working on an issue by asking on If you'd like to add a feature, first search the issue tracker for it. If it's a new idea, make your own feature request issue before you start coding. -For the time being, style is not enforced in PRs, only build success. Please use CRLF and tabs in new files. +For the time being, style is not enforced in PRs, only build success. Please use CRLF, tabs, and [Allman braces](https://en.wikipedia.org/wiki/Indentation_style#Allman_style) in new files. Past contrbutors to the frontend and custom-built cores are listed [here](https://github.com/TASVideos/BizHawk/graphs/contributors). See a core's docs for its authors. From 08fdb101ddd782e709a099f60e6f1f0d75ee2f7e Mon Sep 17 00:00:00 2001 From: James Groom Date: Sat, 12 Jan 2019 00:40:18 +1000 Subject: [PATCH 157/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 134129c8b1..e62a28e8bf 100644 --- a/README.md +++ b/README.md @@ -254,7 +254,7 @@ It's a good idea to check if anyone is already working on an issue by asking on If you'd like to add a feature, first search the issue tracker for it. If it's a new idea, make your own feature request issue before you start coding. -For the time being, style is not enforced in PRs, only build success. Please use CRLF, tabs, and [Allman braces](https://en.wikipedia.org/wiki/Indentation_style#Allman_style) in new files. +For the time being, style is not enforced in PRs, only build success is. Please use CRLF, tabs, and [Allman braces](https://en.wikipedia.org/wiki/Indentation_style#Allman_style) in new files. Past contrbutors to the frontend and custom-built cores are listed [here](https://github.com/TASVideos/BizHawk/graphs/contributors). See a core's docs for its authors. From 99b4e7f4d8f9ed420b9e9ba9d041ffc4274f9383 Mon Sep 17 00:00:00 2001 From: James Groom Date: Sat, 12 Jan 2019 01:45:15 +1000 Subject: [PATCH 158/301] Update README.md --- README.md | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index e62a28e8bf..449571ddec 100644 --- a/README.md +++ b/README.md @@ -196,7 +196,6 @@ A *core* is what we call the smaller bits of software that emulate just one syst System | Core | Alt. Core | Special Core --:|:--|:--|:-- -Amstrad CPC | CPCHawk† || Apple II | Virtu || Atari 2600 | Atari2600Hawk || Atari 7800 | A7800Hawk || @@ -204,29 +203,26 @@ Atari Lynx | Handy || Commodore 64 | C64Hawk || ColecoVision | ColecoHawk || Game Boy / Color | GBHawk | Gambatte | SameBoy (on SNES with SGB) -Game Boy Advance | mGBA/VBA-Next | mGBA/VBA-Next | +Game Boy Advance | mGBA | VBA-Next | IntelliVision | IntelliHawk || -Magnavox Odyssey² | O2Em† || N64 | Mupen64Plus || Neo Geo Pocket / Color | NeoPop || Dual NeoPop (dual instance) NES | NesHawk | QuickNes || PC-FX | T.S.T. || Playstation (PSX) | Octoshock || -PSP | PPSSPP† || Sega Game Gear | SMSHawk || Sega Genesis | Genplus-gx || Sega Master System | SMSHawk || Sega Saturn | Saturnus || Sega Pico | PicoDrive || -SNES | BSNES/Snes9x | BSNES/Snes9x | +SNES | BSNES | Snes9x | TI-83 | TI83Hawk || TurboGrafx / SuperGrafx | PCEHawk || -Uzebox | Uzem† || Virtual Boy | Virtual Boyee || WonderSwan / Color | Cygne || ZX Spectrum | ZXHawk || -† core is in development and unreleased +Amstrad CPC, Magnavox Odyssey², PSP, and Uzebox emulation is a work-in-progress and there is **no ETA**. Cores for other systems are only conceptual. If you want to help speed up development, ask on IRC (see *Support* below). [to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) From 6cca49f828f6413af7ae5cd72c1805bbd17b40a0 Mon Sep 17 00:00:00 2001 From: James Groom Date: Sat, 12 Jan 2019 01:46:54 +1000 Subject: [PATCH 159/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 449571ddec..af81e69468 100644 --- a/README.md +++ b/README.md @@ -192,7 +192,7 @@ TODO ### Cores -A *core* is what we call the smaller bits of software that emulate just one system or family of systems, e.g. NES/Famicom. For the most part, there's a "best" core for each system, based on accuracy, but there's currently a bit of overlap in the cores BizHawk uses as noted below. +A *core* is what we call the smaller bits of software that emulate just one system or family of systems, e.g. NES/Famicom. For the most part, there's a "best" core for each system, based on accuracy, but there are a few alternative cores which are *faster and less accurate*. System | Core | Alt. Core | Special Core --:|:--|:--|:-- From 73bbd688940d23812a30bb7edbee84e4a7decb33 Mon Sep 17 00:00:00 2001 From: James Groom Date: Sat, 12 Jan 2019 01:53:13 +1000 Subject: [PATCH 160/301] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index af81e69468..001d287281 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). -[![unique systems emulated | 25](https://img.shields.io/badge/unique_systems_emulated-25-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) +[![unique systems emulated | 26](https://img.shields.io/badge/unique_systems_emulated-26-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) [![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&logoColor=333333&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) [![Windows prereqs | GitHub](https://img.shields.io/badge/Windows_prereqs-GitHub-darkred.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk-Prereqs/releases/latest) @@ -70,6 +70,7 @@ Supported consoles and computers: * SNES * TI-83 * TurboGrafx / SuperGrafx +* Uzebox * Virtual Boy * WonderSwan / Color * ZX Spectrum @@ -218,11 +219,12 @@ Sega Pico | PicoDrive || SNES | BSNES | Snes9x | TI-83 | TI83Hawk || TurboGrafx / SuperGrafx | PCEHawk || +Uzebox | Uzem || Virtual Boy | Virtual Boyee || WonderSwan / Color | Cygne || ZX Spectrum | ZXHawk || -Amstrad CPC, Magnavox Odyssey², PSP, and Uzebox emulation is a work-in-progress and there is **no ETA**. Cores for other systems are only conceptual. If you want to help speed up development, ask on IRC (see *Support* below). +Amstrad CPC, Magnavox Odyssey², and PSP emulation are works-in-progress and there is **no ETA**. Cores for other systems are only conceptual. If you want to help speed up development, ask on IRC (see *Support* below). [to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) From 2647fcb74b7db9deb00265dc3eacb92886952754 Mon Sep 17 00:00:00 2001 From: James Groom Date: Sat, 12 Jan 2019 01:58:20 +1000 Subject: [PATCH 161/301] Update README.md --- README.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 001d287281..3d4fec96df 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ A multi-system emulator written in C#. As well as quality-of-life features for c Click the "release" button above to grab the latest stable version ([changelog at TASVideos](http://tasvideos.org/Bizhawk/ReleaseHistory.html)). -New users on Windows should click the "prereqs" button too, see *Installing* for info. +New users on Windows need an extra download, click the "prereqs" button to get that and see [*Installing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#windows-78110) for info. **Never mix different versions** of BizHawk — Keep each version in its own folder. @@ -76,7 +76,7 @@ Supported consoles and computers: * ZX Spectrum * [More](http://tasvideos.org/Bizhawk/CoreRoadMap.html) coming soon..? -See the *Usage* sections below for details about specific tools and config menus. +See [*Usage*](https://github.com/TASVideos/BizHawk/blob/master/README.md#usage) below for details about specific tools and config menus. ## Installing @@ -163,7 +163,7 @@ Remove the `/p:...` flag from MSBuild if you want debugging symbols. If your distro isn't listed under *Installing* above, `libblip_buf` probably isn't in your package repos. You can easily [build it yourself](https://gitlab.com/TASVideos/libblip_buf/blob/unified/README.md). -Once built, see the *Installing* section, substituting the repo's `output` folder for the download. +Once built, see [*Installing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-and-macos) above, substituting the repo's `output` folder for the download. Again, if your distro isn't listed there, you might get an "Unknown distro" warning in the terminal, and BizHawk may not open or may show the missing dependencies dialog. You may need to add your distro to the case statement in the script, setting `libpath` to the location of `d3dx9_43.dll.so` (please do share if you get it working). @@ -224,7 +224,7 @@ Virtual Boy | Virtual Boyee || WonderSwan / Color | Cygne || ZX Spectrum | ZXHawk || -Amstrad CPC, Magnavox Odyssey², and PSP emulation are works-in-progress and there is **no ETA**. Cores for other systems are only conceptual. If you want to help speed up development, ask on IRC (see *Support* below). +Amstrad CPC, Magnavox Odyssey², and PSP emulation are works-in-progress and there is **no ETA**. Cores for other systems are only conceptual. If you want to help speed up development, ask on IRC (see below). [to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) @@ -248,7 +248,7 @@ If you'd like to fix bugs, check the issue tracker here on GitHub: [![GitHub open issues counter](https://img.shields.io/github/issues-raw/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/issues) -It's a good idea to check if anyone is already working on an issue by asking on IRC (see *Support* above). +It's a good idea to check if anyone is already working on an issue by asking on IRC (see [*Support*](https://github.com/TASVideos/BizHawk/blob/master/README.md#support-and-troubleshooting) above). If you'd like to add a feature, first search the issue tracker for it. If it's a new idea, make your own feature request issue before you start coding. From a6cf78a8b56ad98c0cff587b372ee2db4afb9f8c Mon Sep 17 00:00:00 2001 From: James Groom Date: Sat, 12 Jan 2019 02:12:24 +1000 Subject: [PATCH 162/301] Update README.md --- README.md | 52 ++++++++++++++++++++++++++++------------------------ 1 file changed, 28 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 3d4fec96df..39e34a2ad0 100644 --- a/README.md +++ b/README.md @@ -49,31 +49,35 @@ The BizHawk common features (across all cores) are: Supported consoles and computers: * Apple II -* Atari 2600 -* Atari 7800 -* Atari Lynx -* Commodore 64 -* ColecoVision -* Game Boy / Color -* Game Boy Advance -* IntelliVision -* N64 -* Neo Geo Pocket / Color -* NES -* PC-FX -* Playstation (PSX) -* Sega Game Gear -* Sega Genesis -* Sega Master System -* Sega Pico -* Sega Saturn -* SNES -* TI-83 -* TurboGrafx / SuperGrafx +* Atari + * 2600 + * 7800 + * Lynx +* Bandai WonderSwan + Color +* CBM Commodore 64 +* Coleco Industries ColecoVision +* Mattel IntelliVision +* NEC + * PC Engine / TurboGrafx-16 + SuperGrafx + CD + * PC-FX +* Neo Geo Pocket + Color +* Nintendo + * Famicom / Nintendo Entertainment System + * Game Boy + Color + * Game Boy Advance + * Nintendo 64 + * Super Famicom / Super Nintendo Entertainment System + * Virtual Boy +* Sega + * Game Gear + * Genesis + 32X + CD + * Master System + SG-1000 + * Pico + * Saturn +* Sinclair ZX Spectrum +* Sony Playstation / PSX +* Texas Instruments TI-83 * Uzebox -* Virtual Boy -* WonderSwan / Color -* ZX Spectrum * [More](http://tasvideos.org/Bizhawk/CoreRoadMap.html) coming soon..? See [*Usage*](https://github.com/TASVideos/BizHawk/blob/master/README.md#usage) below for details about specific tools and config menus. From 1be46842819d63a23c6de8c528d1fb256afeecde Mon Sep 17 00:00:00 2001 From: James Groom Date: Sat, 12 Jan 2019 02:12:50 +1000 Subject: [PATCH 163/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 39e34a2ad0..1445e6fcdc 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ Supported consoles and computers: * PC-FX * Neo Geo Pocket + Color * Nintendo - * Famicom / Nintendo Entertainment System + * Famicom / Nintendo Entertainment System + FDS * Game Boy + Color * Game Boy Advance * Nintendo 64 From 2afb731e5e1f5503662145a0af751425f9ec72c6 Mon Sep 17 00:00:00 2001 From: James Groom Date: Sat, 12 Jan 2019 02:13:58 +1000 Subject: [PATCH 164/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1445e6fcdc..18f242b63a 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Supported consoles and computers: * Apple II * Atari - * 2600 + * Video Computer System / 2600 * 7800 * Lynx * Bandai WonderSwan + Color From b2386830e32010c037b3acef9943264c27d65eef Mon Sep 17 00:00:00 2001 From: James Groom Date: Sat, 12 Jan 2019 02:14:59 +1000 Subject: [PATCH 165/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 18f242b63a..2c03677ae0 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ A multi-system emulator written in C#. As well as quality-of-life features for c Click the "release" button above to grab the latest stable version ([changelog at TASVideos](http://tasvideos.org/Bizhawk/ReleaseHistory.html)). -New users on Windows need an extra download, click the "prereqs" button to get that and see [*Installing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#windows-78110) for info. +New user on Windows? Install the prerequisites first, click the "prereqs" button to get that and see [*Installing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#windows-78110) for info. **Never mix different versions** of BizHawk — Keep each version in its own folder. From aba7a9dde512f08f6cec81f1a6a7f82f2eafe3cc Mon Sep 17 00:00:00 2001 From: James Groom Date: Sat, 12 Jan 2019 02:16:55 +1000 Subject: [PATCH 166/301] Update README.md --- README.md | 57 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/README.md b/README.md index 2c03677ae0..5a6803cfaf 100644 --- a/README.md +++ b/README.md @@ -199,34 +199,35 @@ TODO A *core* is what we call the smaller bits of software that emulate just one system or family of systems, e.g. NES/Famicom. For the most part, there's a "best" core for each system, based on accuracy, but there are a few alternative cores which are *faster and less accurate*. -System | Core | Alt. Core | Special Core ---:|:--|:--|:-- -Apple II | Virtu || -Atari 2600 | Atari2600Hawk || -Atari 7800 | A7800Hawk || -Atari Lynx | Handy || -Commodore 64 | C64Hawk || -ColecoVision | ColecoHawk || -Game Boy / Color | GBHawk | Gambatte | SameBoy (on SNES with SGB) -Game Boy Advance | mGBA | VBA-Next | -IntelliVision | IntelliHawk || -N64 | Mupen64Plus || -Neo Geo Pocket / Color | NeoPop || Dual NeoPop (dual instance) -NES | NesHawk | QuickNes || -PC-FX | T.S.T. || -Playstation (PSX) | Octoshock || -Sega Game Gear | SMSHawk || -Sega Genesis | Genplus-gx || -Sega Master System | SMSHawk || -Sega Saturn | Saturnus || -Sega Pico | PicoDrive || -SNES | BSNES | Snes9x | -TI-83 | TI83Hawk || -TurboGrafx / SuperGrafx | PCEHawk || -Uzebox | Uzem || -Virtual Boy | Virtual Boyee || -WonderSwan / Color | Cygne || -ZX Spectrum | ZXHawk || +System | Core | Alt. Core +--:|:--|:-- +Apple II | Virtu | +Atari 2600 | Atari2600Hawk | +Atari 7800 | A7800Hawk | +Atari Lynx | Handy | +Commodore 64 | C64Hawk | +ColecoVision | ColecoHawk | +Game Boy / Color | GBHawk | Gambatte +Game Boy Advance | mGBA | VBA-Next +IntelliVision | IntelliHawk | +N64 | Mupen64Plus | +Neo Geo Pocket / Color | NeoPop | +NES | NesHawk | QuickNes | +PC-FX | T.S.T. | +Playstation (PSX) | Octoshock | +Sega Game Gear | SMSHawk | +Sega Genesis | Genplus-gx | +Sega Master System | SMSHawk | +Sega Saturn | Saturnus | +Sega Pico | PicoDrive | +SNES | BSNES | Snes9x +Super Game Boy | BSNES | SameBoy +TI-83 | TI83Hawk | +TurboGrafx / SuperGrafx | PCEHawk | +Uzebox | Uzem | +Virtual Boy | Virtual Boyee | +WonderSwan / Color | Cygne | +ZX Spectrum | ZXHawk | Amstrad CPC, Magnavox Odyssey², and PSP emulation are works-in-progress and there is **no ETA**. Cores for other systems are only conceptual. If you want to help speed up development, ask on IRC (see below). From 4643e2302877432facb2665dccf22e6199bdfc14 Mon Sep 17 00:00:00 2001 From: James Groom Date: Sat, 12 Jan 2019 02:24:35 +1000 Subject: [PATCH 167/301] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5a6803cfaf..9a485be01e 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). -[![unique systems emulated | 26](https://img.shields.io/badge/unique_systems_emulated-26-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) +[![unique systems emulated | 27](https://img.shields.io/badge/unique_systems_emulated-27-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) [![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&logoColor=333333&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) [![Windows prereqs | GitHub](https://img.shields.io/badge/Windows_prereqs-GitHub-darkred.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk-Prereqs/releases/latest) @@ -71,9 +71,10 @@ Supported consoles and computers: * Sega * Game Gear * Genesis + 32X + CD - * Master System + SG-1000 + * Master System * Pico * Saturn + * SG-1000 * Sinclair ZX Spectrum * Sony Playstation / PSX * Texas Instruments TI-83 From 56a834b75f562891d2a3ce0a2af35ff50df008d3 Mon Sep 17 00:00:00 2001 From: James Groom Date: Sat, 12 Jan 2019 02:56:25 +1000 Subject: [PATCH 168/301] Update README.md --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 9a485be01e..2ae334141f 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,7 @@ Jump to: * Installing * [Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#windows-78110) * [GNU+Linux and macOS](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-and-macos) +* [Testing](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) * Building * [Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#windows-78110-1) * [GNU+Linux and macOS](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-and-macos-1) @@ -27,7 +28,6 @@ Jump to: * [Cores](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) * [Support and troubleshooting](https://github.com/TASVideos/BizHawk/blob/master/README.md#support-and-troubleshooting) * [Contributing](https://github.com/TASVideos/BizHawk/blob/master/README.md#contributing) - * [Testing](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) * [Related projects](https://github.com/TASVideos/BizHawk/blob/master/README.md#related-projects) * [License](https://github.com/TASVideos/BizHawk/blob/master/README.md#license) @@ -134,6 +134,14 @@ macOS is supported from 10.11 "El Capitan" (Darwin 15.6). Apple doesn't seem to [to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) +## Testing + +Dev builds are automated with AppVeyor, every green checkmark in the [commit history](https://github.com/TASVideos/BizHawk/commits/master) is a successful build and clicking the check takes you straight there. The full list is [here](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history), in future use the "dev builds" button at the top of this readme. + +Once you're on the build page, click "Artifacts" and download `BizHawk_Developer--#.zip`. + +[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) + ## Building ### Windows 7/8.1/10 @@ -262,14 +270,6 @@ For the time being, style is not enforced in PRs, only build success is. Please Past contrbutors to the frontend and custom-built cores are listed [here](https://github.com/TASVideos/BizHawk/graphs/contributors). See a core's docs for its authors. -### Testing - -Dev builds are automated with AppVeyor, every green checkmark in the [commit history](https://github.com/TASVideos/BizHawk/commits/master) is a successful build and clicking the check takes you straight there. The full list is [here](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history), in future use the "dev builds" button at the top of this readme. - -Once you're on the build page, click "Artifacts" and download `BizHawk_Developer--#.zip`. - -[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) - ## Related projects * [DeSmuME](https://desmume.org) for DS/Lite — cross-platform From 119b4058ebd430a844fd9e930764b3fa19a6961c Mon Sep 17 00:00:00 2001 From: YoshiRulz Date: Sat, 12 Jan 2019 15:13:48 +1000 Subject: [PATCH 169/301] Revert "Update README.md" This reverts commit 56a834b75f562891d2a3ce0a2af35ff50df008d3. --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 2ae334141f..9a485be01e 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,6 @@ Jump to: * Installing * [Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#windows-78110) * [GNU+Linux and macOS](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-and-macos) -* [Testing](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) * Building * [Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#windows-78110-1) * [GNU+Linux and macOS](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-and-macos-1) @@ -28,6 +27,7 @@ Jump to: * [Cores](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) * [Support and troubleshooting](https://github.com/TASVideos/BizHawk/blob/master/README.md#support-and-troubleshooting) * [Contributing](https://github.com/TASVideos/BizHawk/blob/master/README.md#contributing) + * [Testing](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) * [Related projects](https://github.com/TASVideos/BizHawk/blob/master/README.md#related-projects) * [License](https://github.com/TASVideos/BizHawk/blob/master/README.md#license) @@ -134,14 +134,6 @@ macOS is supported from 10.11 "El Capitan" (Darwin 15.6). Apple doesn't seem to [to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) -## Testing - -Dev builds are automated with AppVeyor, every green checkmark in the [commit history](https://github.com/TASVideos/BizHawk/commits/master) is a successful build and clicking the check takes you straight there. The full list is [here](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history), in future use the "dev builds" button at the top of this readme. - -Once you're on the build page, click "Artifacts" and download `BizHawk_Developer--#.zip`. - -[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) - ## Building ### Windows 7/8.1/10 @@ -270,6 +262,14 @@ For the time being, style is not enforced in PRs, only build success is. Please Past contrbutors to the frontend and custom-built cores are listed [here](https://github.com/TASVideos/BizHawk/graphs/contributors). See a core's docs for its authors. +### Testing + +Dev builds are automated with AppVeyor, every green checkmark in the [commit history](https://github.com/TASVideos/BizHawk/commits/master) is a successful build and clicking the check takes you straight there. The full list is [here](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history), in future use the "dev builds" button at the top of this readme. + +Once you're on the build page, click "Artifacts" and download `BizHawk_Developer--#.zip`. + +[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) + ## Related projects * [DeSmuME](https://desmume.org) for DS/Lite — cross-platform From 37b1d999218399bc57058ad117aeb268847c799c Mon Sep 17 00:00:00 2001 From: James Groom Date: Sat, 12 Jan 2019 17:40:10 +1000 Subject: [PATCH 170/301] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9a485be01e..7a268ec8f5 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Jump to: The BizHawk common features (across all cores) are: * format, region, and integrity detection for game images -* 10 save slots with hotkeys and ∞ named savestates +* 10 save slots with hotkeys and infinite named savestates * speed control, including frame stepping and rewinding * memory view/search/edit in all emulated hardware components * input recording (making TAS movies) @@ -248,7 +248,7 @@ If there's no easy solution, what you've got is a bug. Or maybe a feature reques ## Contributing -BizHawk is Open Source Software, so you're free to modify it however you please, and if you do, we invite you to share! Under the MIT license, this is *optional*, just be careful with reusing cores as some have copyleft licenses. +BizHawk is Open Source Software, so you're free to modify it however you please, and if you do, we invite you to share! Under the permissive *MIT license*, this is optional, just be careful with reusing cores as some have copyleft licenses. If you'd like to fix bugs, check the issue tracker here on GitHub: From 33ac41d8b8238e9cfd4434627cbc095cd484b490 Mon Sep 17 00:00:00 2001 From: James Groom Date: Sat, 12 Jan 2019 17:40:26 +1000 Subject: [PATCH 171/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7a268ec8f5..33644089c5 100644 --- a/README.md +++ b/README.md @@ -248,7 +248,7 @@ If there's no easy solution, what you've got is a bug. Or maybe a feature reques ## Contributing -BizHawk is Open Source Software, so you're free to modify it however you please, and if you do, we invite you to share! Under the permissive *MIT license*, this is optional, just be careful with reusing cores as some have copyleft licenses. +BizHawk is Open Source Software, so you're free to modify it however you please, and if you do, we invite you to share! Under the permissive *MIT License*, this is optional, just be careful with reusing cores as some have copyleft licenses. If you'd like to fix bugs, check the issue tracker here on GitHub: From 5d1ca826c4735c61d6f7e8b010e1477e474f1289 Mon Sep 17 00:00:00 2001 From: James Groom Date: Sat, 12 Jan 2019 18:06:19 +1000 Subject: [PATCH 172/301] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 33644089c5..7f48e33775 100644 --- a/README.md +++ b/README.md @@ -279,6 +279,8 @@ Once you're on the build page, click "Artifacts" and download `BizHawk_Developer * [lsnes](http://tasvideos.org/Lsnes.html) for GB and SNES — cross-platform * [openMSX](https://openmsx.org) for MSX — cross-platform +The [TASVideos org](https://github.com/TASVideos) has some forks of other emulators and plugins. + ## License From the [full text](https://github.com/TASVideos/BizHawk/blob/master/LICENSE): From 9fdeb9f5eb5639bd73907986a4d3dd5c72df9c2b Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 12 Jan 2019 08:12:21 -0600 Subject: [PATCH 173/301] SubNESHawk: fix gambatte frameadvancepost, allow ppuviewer and nametableviewer --- .../Consoles/Nintendo/Gameboy/Gambatte.cs | 4 +- .../Consoles/Nintendo/NES/NES.Core.cs | 2 +- .../Nintendo/SubNESHawk/SubNESHawk.cs | 106 +++++++++++++++++- 3 files changed, 107 insertions(+), 5 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs index b0bdd405d9..1f1891e1a5 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/Gameboy/Gambatte.cs @@ -344,7 +344,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy LibGambatte.gambatte_setlayers(GambatteState, (_settings.DisplayBG ? 1 : 0) | (_settings.DisplayOBJ ? 2 : 0) | (_settings.DisplayWindow ? 4 : 0)); } - internal bool FrameAdvancePost() + internal void FrameAdvancePost() { if (IsLagFrame) { @@ -352,8 +352,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.Gameboy } endofframecallback?.Invoke(LibGambatte.gambatte_cpuread(GambatteState, 0xff40)); - - return true; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs index 851291e2a1..6ff0282779 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs @@ -31,7 +31,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES public int cpuclockrate { get; private set; } //user configuration - int[] palette_compiled = new int[64 * 8]; + public int[] palette_compiled = new int[64 * 8]; //variable set when VS system games are running internal bool _isVS = false; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs index a04a68f7f8..91d590f508 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs @@ -13,7 +13,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk isReleased: false)] [ServiceNotApplicable(typeof(IDriveLight))] public partial class SubNESHawk : IEmulator, ISaveRam, IDebuggable, IStatable, IInputPollable, IRegionable, - ISettable + ISettable, INESPPUViewable { public NES.NES subnes; @@ -76,5 +76,109 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk { MemoryCallbacks.CallExecutes(addr, "System Bus"); } + + #region PPU Viewable + + public int[] GetPalette() + { + return subnes.palette_compiled; + } + + public bool BGBaseHigh + { + get { return subnes.ppu.reg_2000.bg_pattern_hi; } + } + + public bool SPBaseHigh + { + get { return subnes.ppu.reg_2000.obj_pattern_hi; } + } + + public bool SPTall + { + get { return subnes.ppu.reg_2000.obj_size_16; } + } + + public byte[] GetPPUBus() + { + byte[] ret = new byte[0x3000]; + for (int i = 0; i < 0x3000; i++) + { + ret[i] = subnes.ppu.ppubus_peek(i); + } + return ret; + } + + public byte[] GetPalRam() + { + return subnes.ppu.PALRAM; + } + + public byte[] GetOam() + { + return subnes.ppu.OAM; + } + + public byte PeekPPU(int addr) + { + return subnes.Board.PeekPPU(addr); + } + + public byte[] GetExTiles() + { + if (subnes.Board is ExROM) + { + return subnes.Board.VROM ?? subnes.Board.VRAM; + } + else + { + throw new InvalidOperationException(); + } + } + + public bool ExActive + { + get { return subnes.Board is ExROM && (subnes.Board as ExROM).ExAttrActive; } + } + + public byte[] GetExRam() + { + if (subnes.Board is ExROM) + { + return (subnes.Board as ExROM).GetExRAMArray(); + } + else + { + throw new InvalidOperationException(); + } + } + + public MemoryDomain GetCHRROM() + { + return _memoryDomains["CHR VROM"]; + } + + + public void InstallCallback1(Action cb, int sl) + { + subnes.ppu.NTViewCallback = new PPU.DebugCallback { Callback = cb, Scanline = sl }; + } + + public void InstallCallback2(Action cb, int sl) + { + subnes.ppu.PPUViewCallback = new PPU.DebugCallback { Callback = cb, Scanline = sl }; + } + + public void RemoveCallback1() + { + subnes.ppu.NTViewCallback = null; + } + + public void RemoveCallback2() + { + subnes.ppu.PPUViewCallback = null; + } + + #endregion } } From 5256284ac682158000e2b85736e27b67422ee967 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 12 Jan 2019 09:32:01 -0600 Subject: [PATCH 174/301] SubNESHawk: - Use NES settings for controllers / sync settings - Clean up un-needed extra controller code - Enable Menues --- BizHawk.Client.EmuHawk/MainForm.Events.cs | 9 + .../config/NES/NESGraphicsConfig.cs | 25 ++- .../config/NES/NesControllerSettings.cs | 11 +- .../BizHawk.Emulation.Cores.csproj | 163 +++++++++--------- .../Consoles/Nintendo/NES/NES.Core.cs | 56 +----- .../Consoles/Nintendo/NES/NES.IStatable.cs | 5 - .../SubNESHawk/SubNESHawk.IEmulator.cs | 23 +-- .../SubNESHawk/SubNESHawk.ISettable.cs | 58 ------- .../SubNESHawk/SubNESHawk.IStatable.cs | 4 - .../Nintendo/SubNESHawk/SubNESHawk.cs | 64 +++++-- .../SubNESHawk/SubNESHawkControllerDeck.cs | 89 ---------- .../SubNESHawk/SubNESHawkControllers.cs | 94 ---------- 12 files changed, 183 insertions(+), 418 deletions(-) delete mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.ISettable.cs delete mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawkControllerDeck.cs delete mode 100644 BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawkControllers.cs diff --git a/BizHawk.Client.EmuHawk/MainForm.Events.cs b/BizHawk.Client.EmuHawk/MainForm.Events.cs index f524b4bb13..1475a7e2dd 100644 --- a/BizHawk.Client.EmuHawk/MainForm.Events.cs +++ b/BizHawk.Client.EmuHawk/MainForm.Events.cs @@ -10,6 +10,7 @@ using BizHawk.Emulation.Cores.Atari.A7800Hawk; using BizHawk.Emulation.Cores.Calculators; using BizHawk.Emulation.Cores.ColecoVision; using BizHawk.Emulation.Cores.Nintendo.NES; +using BizHawk.Emulation.Cores.Nintendo.SubNESHawk; using BizHawk.Emulation.Cores.Nintendo.N64; using BizHawk.Emulation.Cores.Nintendo.SNES; using BizHawk.Emulation.Cores.Nintendo.SNES9X; @@ -1634,6 +1635,10 @@ namespace BizHawk.Client.EmuHawk { new NESGraphicsConfig().ShowDialog(this); } + else if (Emulator is SubNESHawk) + { + new NESGraphicsConfig().ShowDialog(this); + } else if (Emulator is QuickNES) { new QuickNesConfig().ShowDialog(this); @@ -1704,6 +1709,10 @@ namespace BizHawk.Client.EmuHawk { new NesControllerSettings().ShowDialog(); } + else if (Emulator is SubNESHawk) + { + new NesControllerSettings().ShowDialog(); + } else if (Emulator is QuickNES) { GenericCoreConfig.DoDialog(this, "QuickNES Controller Settings", true, false); diff --git a/BizHawk.Client.EmuHawk/config/NES/NESGraphicsConfig.cs b/BizHawk.Client.EmuHawk/config/NES/NESGraphicsConfig.cs index f8c41e16ee..64b371ddc6 100644 --- a/BizHawk.Client.EmuHawk/config/NES/NESGraphicsConfig.cs +++ b/BizHawk.Client.EmuHawk/config/NES/NESGraphicsConfig.cs @@ -5,6 +5,7 @@ using System.Windows.Forms; using BizHawk.Common; using BizHawk.Client.Common; using BizHawk.Emulation.Cores.Nintendo.NES; +using BizHawk.Emulation.Cores.Nintendo.SubNESHawk; namespace BizHawk.Client.EmuHawk { @@ -15,6 +16,7 @@ namespace BizHawk.Client.EmuHawk // Hotkeys for BG & Sprite display toggle // NTSC filter settings? Hue, Tint (This should probably be a client thing, not a nes specific thing?) private NES _nes; + private SubNESHawk _subneshawk; private NES.NESSettings _settings; private Bitmap _bmp; @@ -25,8 +27,17 @@ namespace BizHawk.Client.EmuHawk private void NESGraphicsConfig_Load(object sender, EventArgs e) { - _nes = (NES)Global.Emulator; - _settings = _nes.GetSettings(); + if (Global.Emulator is NES) + { + _nes = (NES)Global.Emulator; + _settings = _nes.GetSettings(); + } + else + { + _subneshawk = (SubNESHawk)Global.Emulator; + _settings = _subneshawk.GetSettings(); + } + LoadStuff(); } @@ -146,7 +157,15 @@ namespace BizHawk.Client.EmuHawk _settings.BackgroundColor &= 0x00FFFFFF; } - _nes.PutSettings(_settings); + if (Global.Emulator is NES) + { + _nes.PutSettings(_settings); + } + else + { + _subneshawk.PutSettings(_settings); + } + Close(); } diff --git a/BizHawk.Client.EmuHawk/config/NES/NesControllerSettings.cs b/BizHawk.Client.EmuHawk/config/NES/NesControllerSettings.cs index 068711825f..4141bf067e 100644 --- a/BizHawk.Client.EmuHawk/config/NES/NesControllerSettings.cs +++ b/BizHawk.Client.EmuHawk/config/NES/NesControllerSettings.cs @@ -4,6 +4,7 @@ using System.Windows.Forms; using BizHawk.Client.Common; using BizHawk.Emulation.Cores.Nintendo.NES; +using BizHawk.Emulation.Cores.Nintendo.SubNESHawk; namespace BizHawk.Client.EmuHawk { @@ -14,7 +15,15 @@ namespace BizHawk.Client.EmuHawk public NesControllerSettings() { InitializeComponent(); - _syncSettings = ((NES)Global.Emulator).GetSyncSettings(); + if (Global.Emulator is NES) + { + _syncSettings = ((NES)Global.Emulator).GetSyncSettings(); + } + else + { + _syncSettings = ((SubNESHawk)Global.Emulator).GetSyncSettings(); + } + // TODO: use combobox extension and add descriptions to enum values comboBoxFamicom.Items.AddRange(NESControlSettings.GetFamicomExpansionValues().ToArray()); diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index dda627b813..f6bf415a2a 100644 --- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -317,9 +317,9 @@ - + - + @@ -327,23 +327,23 @@ - NECUPD765.cs - + NECUPD765.cs + - NECUPD765.cs - + NECUPD765.cs + - NECUPD765.cs - + NECUPD765.cs + - NECUPD765.cs - + NECUPD765.cs + - NECUPD765.cs - + NECUPD765.cs + - NECUPD765.cs - + NECUPD765.cs + @@ -375,93 +375,93 @@ - SpectrumBase.cs - + SpectrumBase.cs + - SpectrumBase.cs - + SpectrumBase.cs + - SpectrumBase.cs - - - SpectrumBase.cs - - - - + SpectrumBase.cs + + + SpectrumBase.cs + + + + - ZX48.cs - - - ZX48.cs - + ZX48.cs + + + ZX48.cs + - - + + - ZX128.cs - + ZX128.cs + - ZX128.cs - + ZX128.cs + - - + + - ZX128Plus2a.cs - + ZX128Plus2a.cs + - ZX128Plus2a.cs - - - + ZX128Plus2a.cs + + + - ZX128Plus3.cs - + ZX128Plus3.cs + - ZX128Plus3.cs - + ZX128Plus3.cs + - Pentagon128.cs - + Pentagon128.cs + - Pentagon128.cs - - - - + Pentagon128.cs + + + + - ZXSpectrum.cs - + ZXSpectrum.cs + - ZXSpectrum.cs - + ZXSpectrum.cs + - ZXSpectrum.cs - + ZXSpectrum.cs + - ZXSpectrum.cs - + ZXSpectrum.cs + - ZXSpectrum.cs - + ZXSpectrum.cs + - ZXSpectrum.cs - + ZXSpectrum.cs + - ZXSpectrum.cs - + ZXSpectrum.cs + - ZXSpectrum.cs - + ZXSpectrum.cs + - ZXSpectrum.cs - - - ZXSpectrum.cs - + ZXSpectrum.cs + + + ZXSpectrum.cs + Atari2600.cs @@ -789,7 +789,7 @@ VBANext.cs - + GBHawkLink.cs @@ -1201,7 +1201,7 @@ - + SubNESHawk.cs @@ -1217,14 +1217,9 @@ SubNESHawk.cs - - SubNESHawk.cs - SubNESHawk.cs - - diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs index 6ff0282779..40d3106894 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs @@ -419,17 +419,12 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES public bool current_strobe; public bool new_strobe; public bool alt_lag; - public byte ctrl_1 = 0; - public byte ctrl_2 = 0; - public byte ctrl_1_new = 0; - public byte ctrl_2_new = 0; - public int shift_1; - public int shift_2; - public bool use_sub_input = false; // this function will run one step of the ppu // it will return whether the controller is read or not. - public void do_single_step(out bool cont_read, out bool frame_done) + public void do_single_step(IController controller, out bool cont_read, out bool frame_done) { + _controller = controller; + controller_was_latched = false; frame_is_done = false; @@ -779,21 +774,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES { controller_was_latched = true; alt_lag = false; - - if (use_sub_input) - { - shift_1 = 7; - shift_2 = 7; - - ctrl_1 = ctrl_1_new; - ctrl_2 = ctrl_2_new; - } - } - - if (use_sub_input && new_strobe) - { - shift_1 = 7; - shift_2 = 7; } } @@ -803,36 +783,16 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES lagged = false; byte ret = 0; - if (use_sub_input) + if (_isVS) { - if (addr == 0x4016) - { - if (shift_1 >= 0) { ret = (byte)((ctrl_1 >> shift_1) & 1); } - else { ret = 1; } - - if (!current_strobe) { shift_1 -= 1; } - } - else - { - if (shift_2 >= 0) { ret = (byte)((ctrl_2 >> shift_2) & 1); } - else { ret = 1; } - - if (!current_strobe) { shift_2 -= 1; } - } + // for whatever reason, in VS left and right controller have swapped regs + ret = addr == 0x4017 ? ControllerDeck.ReadA(_controller) : ControllerDeck.ReadB(_controller); } else { - if (_isVS) - { - // for whatever reason, in VS left and right controller have swapped regs - ret = addr == 0x4017 ? ControllerDeck.ReadA(_controller) : ControllerDeck.ReadB(_controller); - } - else - { - ret = addr == 0x4016 ? ControllerDeck.ReadA(_controller) : ControllerDeck.ReadB(_controller); - } + ret = addr == 0x4016 ? ControllerDeck.ReadA(_controller) : ControllerDeck.ReadB(_controller); } - + ret &= 0x1f; ret |= (byte)(0xe0 & DB); return ret; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.IStatable.cs index 7c7b3f7f17..eeda0a5fd7 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.IStatable.cs @@ -85,11 +85,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES // single cycle execution related ser.Sync("current_strobe", ref current_strobe); ser.Sync("new_strobe", ref new_strobe); - ser.Sync("ctrl_1", ref ctrl_1); - ser.Sync("ctrl_2", ref ctrl_2); - ser.Sync("shift_1", ref shift_1); - ser.Sync("shift_2", ref shift_2); - ser.Sync("use_sub_input", ref use_sub_input); ser.BeginSection("Board"); Board.SyncState(ser); diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs index 3fef3f0d45..5e31027258 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs @@ -9,7 +9,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk { public IEmulatorServiceProvider ServiceProvider { get; } - public ControllerDefinition ControllerDefinition => _controllerDeck.Definition; + public ControllerDefinition ControllerDefinition => subnes.ControllerDefinition; public bool FrameAdvance(IController controller, bool render, bool rendersound) { @@ -38,9 +38,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk _islag = true; subnes.alt_lag = true; - GetControllerState(controller); + InputCallbacks.Call(); - do_frame(); + do_frame(controller); bool ret = pass_a_frame; @@ -62,31 +62,18 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk public bool stop_cur_frame; public bool pass_new_input; public bool pass_a_frame; - public byte ctrl_byte_1; - public byte ctrl_byte_2; - public void do_frame() + public void do_frame(IController controller) { stop_cur_frame = false; while (!stop_cur_frame) { - subnes.do_single_step(out pass_new_input, out pass_a_frame); + subnes.do_single_step(controller, out pass_new_input, out pass_a_frame); stop_cur_frame |= pass_a_frame; stop_cur_frame |= pass_new_input; } } - public void GetControllerState(IController controller) - { - InputCallbacks.Call(); - - ctrl_byte_1 = _controllerDeck.ReadPort1(controller); - ctrl_byte_2 = _controllerDeck.ReadPort2(controller); - - subnes.ctrl_1_new = ctrl_byte_1; - subnes.ctrl_2_new = ctrl_byte_2; - } - public int Frame => _frame; public string SystemId => "NES"; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.ISettable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.ISettable.cs deleted file mode 100644 index 9db3f0acc1..0000000000 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.ISettable.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System; - -using BizHawk.Common; -using BizHawk.Emulation.Common; -using BizHawk.Emulation.Cores.Nintendo.NES; - -namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk -{ - public partial class SubNESHawk : IEmulator, IStatable, ISettable - { - public SubNESHawkSettings GetSettings() - { - return subnesSettings.Clone(); - } - - public SubNESHawkSyncSettings GetSyncSettings() - { - return subnesSyncSettings.Clone(); - } - - public bool PutSettings(SubNESHawkSettings o) - { - subnesSettings = o; - return false; - } - - public bool PutSyncSettings(SubNESHawkSyncSettings o) - { - bool ret = SubNESHawkSyncSettings.NeedsReboot(subnesSyncSettings, o); - subnesSyncSettings = o; - return ret; - } - - private SubNESHawkSettings subnesSettings = new SubNESHawkSettings(); - public SubNESHawkSyncSettings subnesSyncSettings = new SubNESHawkSyncSettings(); - - public class SubNESHawkSettings - { - public SubNESHawkSettings Clone() - { - return (SubNESHawkSettings)MemberwiseClone(); - } - } - - public class SubNESHawkSyncSettings - { - public SubNESHawkSyncSettings Clone() - { - return (SubNESHawkSyncSettings)MemberwiseClone(); - } - - public static bool NeedsReboot(SubNESHawkSyncSettings x, SubNESHawkSyncSettings y) - { - return !DeepEquality.DeepEquals(x, y); - } - } - } -} diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs index d6a092971e..0f6a4b3e54 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs @@ -54,10 +54,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk ser.Sync("IsLag", ref _islag); ser.Sync("pass_a_frame", ref pass_a_frame); ser.Sync("pass_new_input", ref pass_new_input); - ser.Sync("ctrl_byte_1", ref ctrl_byte_1); - ser.Sync("ctrl_byte_2", ref ctrl_byte_2); - - _controllerDeck.SyncState(ser); } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs index 91d590f508..90b3904778 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs @@ -13,7 +13,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk isReleased: false)] [ServiceNotApplicable(typeof(IDriveLight))] public partial class SubNESHawk : IEmulator, ISaveRam, IDebuggable, IStatable, IInputPollable, IRegionable, - ISettable, INESPPUViewable + ISettable, INESPPUViewable { public NES.NES subnes; @@ -22,18 +22,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk { var ser = new BasicServiceProvider(this); - subnesSettings = (SubNESHawkSettings)settings ?? new SubNESHawkSettings(); - subnesSyncSettings = (SubNESHawkSyncSettings)syncSettings ?? new SubNESHawkSyncSettings(); - _controllerDeck = new SubNESHawkControllerDeck(SubNESHawkControllerDeck.DefaultControllerName, SubNESHawkControllerDeck.DefaultControllerName); + subnesSettings = (NES.NES.NESSettings)settings ?? new NES.NES.NESSettings(); + subnesSyncSettings = (NES.NES.NESSyncSettings)syncSettings ?? new NES.NES.NESSyncSettings(); CoreComm = comm; - var temp_set = new NES.NES.NESSettings(); - - var temp_sync = new NES.NES.NESSyncSettings(); - subnes = new NES.NES(new CoreComm(comm.ShowMessage, comm.Notify) { CoreFileProvider = comm.CoreFileProvider }, - game, rom, temp_set, temp_sync); + game, rom, subnesSettings, subnesSyncSettings); ser.Register(subnes.videoProvider); ser.Register(subnes.magicSoundProvider); @@ -46,9 +41,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk SetupMemoryDomains(); HardReset(); - - // input override for subframe input - subnes.use_sub_input = true; } public void HardReset() @@ -68,8 +60,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk public int _frame = 0; - private readonly SubNESHawkControllerDeck _controllerDeck; - private readonly ITraceable _tracer; private void ExecFetch(ushort addr) @@ -77,6 +67,52 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk MemoryCallbacks.CallExecutes(addr, "System Bus"); } + #region ISettable + private NES.NES.NESSettings subnesSettings = new NES.NES.NESSettings(); + public NES.NES.NESSyncSettings subnesSyncSettings = new NES.NES.NESSyncSettings(); + + public NES.NES.NESSettings GetSettings() + { + return subnesSettings.Clone(); + } + + public NES.NES.NESSyncSettings GetSyncSettings() + { + return subnesSyncSettings.Clone(); + } + + public bool PutSettings(NES.NES.NESSettings o) + { + subnesSettings = o; + if (subnesSettings.ClipLeftAndRight) + { + subnes.videoProvider.left = 8; + subnes.videoProvider.right = 247; + } + else + { + subnes.videoProvider.left = 0; + subnes.videoProvider.right = 255; + } + + CoreComm.ScreenLogicalOffsetX = subnes.videoProvider.left; + CoreComm.ScreenLogicalOffsetY = Region == DisplayType.NTSC ? subnesSettings.NTSC_TopLine : subnesSettings.PAL_TopLine; + + subnes.SetPalette(subnesSettings.Palette); + + subnes.apu.m_vol = subnesSettings.APU_vol; + + return false; + } + + public bool PutSyncSettings(NES.NES.NESSyncSettings o) + { + bool ret = NES.NES.NESSyncSettings.NeedsReboot(subnesSyncSettings, o); + subnesSyncSettings = o; + return ret; + } + #endregion + #region PPU Viewable public int[] GetPalette() diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawkControllerDeck.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawkControllerDeck.cs deleted file mode 100644 index 7f2ecfae40..0000000000 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawkControllerDeck.cs +++ /dev/null @@ -1,89 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -using BizHawk.Common; -using BizHawk.Common.ReflectionExtensions; -using BizHawk.Emulation.Common; - -namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk -{ - public class SubNESHawkControllerDeck - { - public SubNESHawkControllerDeck(string controller1Name, string controller2Name) - { - if (!ValidControllerTypes.ContainsKey(controller1Name)) - { - throw new InvalidOperationException("Invalid controller type: " + controller1Name); - } - - if (!ValidControllerTypes.ContainsKey(controller2Name)) - { - throw new InvalidOperationException("Invalid controller type: " + controller2Name); - } - - Port1 = (IPort)Activator.CreateInstance(ValidControllerTypes[controller1Name], 1); - Port2 = (IPort)Activator.CreateInstance(ValidControllerTypes[controller2Name], 2); - - Definition = new ControllerDefinition - { - Name = Port1.Definition.Name, - BoolButtons = Port1.Definition.BoolButtons - .Concat(Port2.Definition.BoolButtons) - .Concat(new[] - { - "Power", - "Reset", - }) - .ToList() - }; - } - - public byte ReadPort1(IController c) - { - return Port1.Read(c); - } - - public byte ReadPort2(IController c) - { - return Port2.Read(c); - } - - public ControllerDefinition Definition { get; } - - public void SyncState(Serializer ser) - { - ser.BeginSection("Port1"); - Port1.SyncState(ser); - ser.EndSection(); - - ser.BeginSection("Port2"); - Port2.SyncState(ser); - ser.EndSection(); - } - - private readonly IPort Port1; - private readonly IPort Port2; - - private static Dictionary _controllerTypes; - - public static Dictionary ValidControllerTypes - { - get - { - if (_controllerTypes == null) - { - _controllerTypes = typeof(SubNESHawkControllerDeck).Assembly - .GetTypes() - .Where(t => typeof(IPort).IsAssignableFrom(t)) - .Where(t => !t.IsAbstract && !t.IsInterface) - .ToDictionary(tkey => tkey.DisplayName()); - } - - return _controllerTypes; - } - } - - public static string DefaultControllerName => typeof(StandardControls).DisplayName(); - } -} diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawkControllers.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawkControllers.cs deleted file mode 100644 index 44e9e5e98d..0000000000 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawkControllers.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; - -using System.ComponentModel; -using System.Linq; - -using BizHawk.Common; -using BizHawk.Emulation.Common; - -namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk -{ - /// - /// Represents a Standard Nintendo Controller - /// - public interface IPort - { - byte Read(IController c); - - ControllerDefinition Definition { get; } - - void SyncState(Serializer ser); - - int PortNum { get; } - } - - [DisplayName("NES Controller")] - public class StandardControls : IPort - { - public StandardControls(int portNum) - { - PortNum = portNum; - Definition = new ControllerDefinition - { - Name = "NES Controller", - BoolButtons = BaseDefinition - .Select(b => "P" + PortNum + " " + b) - .ToList() - }; - } - - public int PortNum { get; } - - public ControllerDefinition Definition { get; } - - public byte Read(IController c) - { - byte result = 0; - - if (c.IsPressed(Definition.BoolButtons[0])) - { - result |= 8; - } - if (c.IsPressed(Definition.BoolButtons[1])) - { - result |= 4; - } - if (c.IsPressed(Definition.BoolButtons[2])) - { - result |= 2; - } - if (c.IsPressed(Definition.BoolButtons[3])) - { - result |= 1; - } - if (c.IsPressed(Definition.BoolButtons[4])) - { - result |= 16; - } - if (c.IsPressed(Definition.BoolButtons[5])) - { - result |= 32; - } - if (c.IsPressed(Definition.BoolButtons[6])) - { - result |= 64; - } - if (c.IsPressed(Definition.BoolButtons[7])) - { - result |= 128; - } - - return result; - } - - private static readonly string[] BaseDefinition = - { - "Up", "Down", "Left", "Right", "Start", "Select", "B", "A" - }; - - public void SyncState(Serializer ser) - { - //nothing - } - } -} \ No newline at end of file From f16c538872811fac88fce53855eb998ac58d4952 Mon Sep 17 00:00:00 2001 From: James Groom Date: Sun, 13 Jan 2019 01:47:37 +1000 Subject: [PATCH 175/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7f48e33775..8085b8e439 100644 --- a/README.md +++ b/README.md @@ -279,7 +279,7 @@ Once you're on the build page, click "Artifacts" and download `BizHawk_Developer * [lsnes](http://tasvideos.org/Lsnes.html) for GB and SNES — cross-platform * [openMSX](https://openmsx.org) for MSX — cross-platform -The [TASVideos org](https://github.com/TASVideos) has some forks of other emulators and plugins. +Emulators for other systems can be found on the [EmulatorResources page](http://tasvideos.org/EmulatorResources.html) at TASVideos. The [TASVideos org](https://github.com/TASVideos) also houses other emulators and plugins where development happens sometimes, their upstreams may be of use. ## License From 40928ad5ac953f81abcb5a504192dad79e317dbb Mon Sep 17 00:00:00 2001 From: James Groom Date: Sun, 13 Jan 2019 01:57:06 +1000 Subject: [PATCH 176/301] Update README.md --- README.md | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 8085b8e439..64e0ea4353 100644 --- a/README.md +++ b/README.md @@ -24,10 +24,10 @@ Jump to: * [GNU+Linux and macOS](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-and-macos-1) * [Usage](https://github.com/TASVideos/BizHawk/blob/master/README.md#usage) * [TASing](https://github.com/TASVideos/BizHawk/blob/master/README.md#tasing) + * [Testing](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) * [Cores](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) * [Support and troubleshooting](https://github.com/TASVideos/BizHawk/blob/master/README.md#support-and-troubleshooting) * [Contributing](https://github.com/TASVideos/BizHawk/blob/master/README.md#contributing) - * [Testing](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) * [Related projects](https://github.com/TASVideos/BizHawk/blob/master/README.md#related-projects) * [License](https://github.com/TASVideos/BizHawk/blob/master/README.md#license) @@ -196,6 +196,16 @@ TODO [to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) +### Testing + +Testing bugfixes or new features can be just as helpful as making them! If code's more your thing, see [*Contributing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#contributing) below. + +Dev builds are automated with AppVeyor, every green checkmark in the [commit history](https://github.com/TASVideos/BizHawk/commits/master) is a successful build and clicking the check takes you straight there. The full list is [here](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history), in future use the "dev builds" button at the top of this readme. + +Once you're on the build page, click "Artifacts" and download `BizHawk_Developer--#.zip`. + +[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) + ### Cores A *core* is what we call the smaller bits of software that emulate just one system or family of systems, e.g. NES/Famicom. For the most part, there's a "best" core for each system, based on accuracy, but there are a few alternative cores which are *faster and less accurate*. @@ -250,6 +260,8 @@ If there's no easy solution, what you've got is a bug. Or maybe a feature reques BizHawk is Open Source Software, so you're free to modify it however you please, and if you do, we invite you to share! Under the permissive *MIT License*, this is optional, just be careful with reusing cores as some have copyleft licenses. +Not a programmer? Something as simple as reproducing bugs with different software versions is still very helpful! See [*Testing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) above to learn about dev builds if you'd rather help us get the next release out. + If you'd like to fix bugs, check the issue tracker here on GitHub: [![GitHub open issues counter](https://img.shields.io/github/issues-raw/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/issues) @@ -262,14 +274,6 @@ For the time being, style is not enforced in PRs, only build success is. Please Past contrbutors to the frontend and custom-built cores are listed [here](https://github.com/TASVideos/BizHawk/graphs/contributors). See a core's docs for its authors. -### Testing - -Dev builds are automated with AppVeyor, every green checkmark in the [commit history](https://github.com/TASVideos/BizHawk/commits/master) is a successful build and clicking the check takes you straight there. The full list is [here](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history), in future use the "dev builds" button at the top of this readme. - -Once you're on the build page, click "Artifacts" and download `BizHawk_Developer--#.zip`. - -[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) - ## Related projects * [DeSmuME](https://desmume.org) for DS/Lite — cross-platform From e80a5779ce22fdf53c7c3e1897fdb8cf6e089eb6 Mon Sep 17 00:00:00 2001 From: James Groom Date: Sun, 13 Jan 2019 02:14:51 +1000 Subject: [PATCH 177/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 64e0ea4353..558d71de2c 100644 --- a/README.md +++ b/README.md @@ -283,7 +283,7 @@ Past contrbutors to the frontend and custom-built cores are listed [here](https: * [lsnes](http://tasvideos.org/Lsnes.html) for GB and SNES — cross-platform * [openMSX](https://openmsx.org) for MSX — cross-platform -Emulators for other systems can be found on the [EmulatorResources page](http://tasvideos.org/EmulatorResources.html) at TASVideos. The [TASVideos org](https://github.com/TASVideos) also houses other emulators and plugins where development happens sometimes, their upstreams may be of use. +Emulators for other systems can be found on the [EmulatorResources page](http://tasvideos.org/EmulatorResources.html) at TASVideos. The [TASVideos GitHub page](https://github.com/TASVideos) also houses other emulators and plugins where development happens sometimes, their upstreams may be of use. ## License From c5cfe9e412938c7c254c6cd7945d886417783713 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 12 Jan 2019 10:41:50 -0600 Subject: [PATCH 178/301] SubNESHawk: Fix up FPS viewer --- BizHawk.Client.EmuHawk/MainForm.cs | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index a7a40b17aa..b80c40533a 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -2950,10 +2950,6 @@ namespace BizHawk.Client.EmuHawk GlobalWin.Tools.UpdateToolsBefore(); } - _framesSinceLastFpsUpdate++; - - UpdateFpsDisplay(currentTimestamp, isRewinding, isFastForwarding); - CaptureRewind(isRewinding); // Set volume, if enabled @@ -3041,6 +3037,13 @@ namespace BizHawk.Client.EmuHawk AvFrameAdvance(); } + if (new_frame) + { + _framesSinceLastFpsUpdate++; + + UpdateFpsDisplay(currentTimestamp, isRewinding, isFastForwarding); + } + if (GlobalWin.Tools.IsLoaded() && GlobalWin.Tools.TAStudio.LastPositionFrame == Emulator.Frame) { From 74d20ca45cd7d4c19c979e68e60d019b28637fb9 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 12 Jan 2019 13:27:00 -0600 Subject: [PATCH 179/301] SubNEShawk: Add VBL Count to BK2 movie header --- BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs | 6 ++++++ .../movie/conversions/MovieConversionExtensions.cs | 6 ++++++ .../Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs | 1 + .../Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs | 1 + .../Consoles/Nintendo/SubNESHawk/SubNESHawk.cs | 5 +++++ 5 files changed, 19 insertions(+) diff --git a/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs b/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs index f56331b533..c7d63a4c8d 100644 --- a/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs +++ b/BizHawk.Client.Common/movie/bk2/Bk2Movie.IO.cs @@ -166,6 +166,12 @@ namespace BizHawk.Client.Common protected virtual void Write(string fn, bool backup = false) { + if (Global.Emulator is BizHawk.Emulation.Cores.Nintendo.SubNESHawk.SubNESHawk) + { + var _subnes = (BizHawk.Emulation.Cores.Nintendo.SubNESHawk.SubNESHawk)Global.Emulator; + Header["VBlankCount"] = _subnes.VBL_CNT.ToString(); + } + var file = new FileInfo(fn); if (!file.Directory.Exists) { diff --git a/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs b/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs index dd5c1e36c4..0cd32aa7ef 100644 --- a/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs +++ b/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs @@ -4,6 +4,7 @@ using System.Linq; using BizHawk.Emulation.Common; using BizHawk.Emulation.Cores.Nintendo.Gameboy; +using BizHawk.Emulation.Cores.Nintendo.SubNESHawk; using BizHawk.Emulation.Cores.Sega.MasterSystem; using BizHawk.Emulation.Common.IEmulatorExtensions; using BizHawk.Emulation.Cores.Consoles.Sega.gpgx; @@ -336,6 +337,11 @@ namespace BizHawk.Client.Common.MovieConversionExtensions movie.HeaderEntries.Add("Is32X", "1"); } + if (Global.Emulator is SubNESHawk) + { + movie.HeaderEntries.Add("VBlankCount", "0"); + } + movie.Core = ((CoreAttribute)Attribute .GetCustomAttribute(Global.Emulator.GetType(), typeof(CoreAttribute))) .CoreName; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs index 5e31027258..106ebbd9b6 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs @@ -54,6 +54,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk if (_islag) { _lagcount++; + VBL_CNT++; } return ret; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs index 0f6a4b3e54..201b6d584e 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs @@ -54,6 +54,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk ser.Sync("IsLag", ref _islag); ser.Sync("pass_a_frame", ref pass_a_frame); ser.Sync("pass_new_input", ref pass_new_input); + ser.Sync("VBL_CNT", ref VBL_CNT); } } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs index 90b3904778..05c61c4680 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs @@ -17,6 +17,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk { public NES.NES subnes; + // needed for movies to accurately calculate timing + public int VBL_CNT; + [CoreConstructor("NES")] public SubNESHawk(CoreComm comm, GameInfo game, byte[] rom, /*string gameDbFn,*/ object settings, object syncSettings) { @@ -41,6 +44,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk SetupMemoryDomains(); HardReset(); + + VBL_CNT = 0; } public void HardReset() From f6dd99a3cecff43ca0ee32a31e8811840c9fdf87 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 12 Jan 2019 14:57:25 -0600 Subject: [PATCH 180/301] GBHawkLink: Fix logic error in linking --- .../Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs | 10 +++++++++- .../Nintendo/GBHawkLink/GBHawkLink.IStatable.cs | 1 + .../Consoles/Nintendo/GBHawkLink/GBHawkLink.cs | 2 ++ 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs index 1cebe9f5b4..dee9cfa0e3 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs @@ -100,7 +100,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink R.do_single_step(); // the signal to shift out a bit is when serial_clock = 1 - if ((L.serialport.serial_clock == 1) || (L.serialport.serial_clock == 2)) + if (((L.serialport.serial_clock == 1) || (L.serialport.serial_clock == 2)) && !do_r_next) { if (LinkConnected) { @@ -118,6 +118,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink } else if ((R.serialport.serial_clock == 1) || (R.serialport.serial_clock == 2)) { + do_r_next = false; + if (LinkConnected) { R.serialport.send_external_bit((byte)(R.serialport.serial_data & 0x80)); @@ -131,6 +133,12 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink R.serialport.coming_in = L.serialport.going_out; } + + if (R.serialport.serial_clock == 2) { do_r_next = true; } + } + else + { + do_r_next = false; } // if we hit a frame boundary, update video diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IStatable.cs index 5429566225..7b3049f1e2 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IStatable.cs @@ -59,6 +59,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink ser.Sync("IsLag", ref _islag); ser.Sync("_cableconnected", ref _cableconnected); ser.Sync("_cablediscosignal", ref _cablediscosignal); + ser.Sync("do_r_next", ref do_r_next); _controllerDeck.SyncState(ser); LinkConnected = _cableconnected; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs index d007d533fb..619a17c479 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.cs @@ -30,6 +30,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink // if true, the link cable toggle signal is currently asserted private bool _cablediscosignal = false; + private bool do_r_next = false; + //[CoreConstructor("GB", "GBC")] public GBHawkLink(CoreComm comm, GameInfo game_L, byte[] rom_L, GameInfo game_R, byte[] rom_R, /*string gameDbFn,*/ object settings, object syncSettings) { From 90a3053447b743127d8da33d7115061ab73f6abe Mon Sep 17 00:00:00 2001 From: James Groom Date: Sun, 13 Jan 2019 16:25:56 +1000 Subject: [PATCH 181/301] Update README.md --- README.md | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 558d71de2c..dd2d69d194 100644 --- a/README.md +++ b/README.md @@ -145,9 +145,9 @@ git clone https://github.com/TASVideos/BizHawk.git BizHawk_master ``` ...or use a [Git GUI](https://desktop.github.com). Otherwise, you'll have to download an archive from GitHub. -On Windows 10, open a PowerShell window in BizHawk_master (Shift+Mouse2 in File Explorer) and run `C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe /p:Configuration=Release BizHawk.sln`. TODO: didn't work for me. On older versions, a similar Command Prompt script should work. +~~On Windows 10, open a PowerShell window in BizHawk_master (Shift+Mouse2 in File Explorer) and run `C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe /p:Configuration=Release BizHawk.sln`. On older versions, a similar Command Prompt script should work.~~ (Not sure what the right command is. Do let us know.) -The best free C# IDE is [VS Community 2017](https://visualstudio.microsoft.com/vs/community), which you'll need to work on the project efficiently. Open `BizHawk.sln` with VS to start. +For anything more complicated than building, you'll need an IDE like [VS Community 2017](https://visualstudio.microsoft.com/vs/community), currently the best free C# IDE. Open `BizHawk.sln` with VS to start and use the toolbar to choose EmuHawk and build. See [Compiling at TASVideos](http://tasvideos.org/Bizhawk/Compiling.html) (somewhat outdated) for more detailed instructions. [to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) @@ -176,23 +176,35 @@ Again, if your distro isn't listed there, you might get an "Unknown distro" warn ## Usage +#### Loading firmware + +You may have seen a dialog saying "You are missing the needed firmware files [...]" when trying to open a rom. Pressing "Yes" opens the Firmware Manager, or you can go to `Config` > `Firmwares...`. + +To load firmware, TODO + +#### Identifying a good rom + +TODO + +#### Rebinding keys and controllers + +TODO + +#### Changing cores + +TODO + +#### Running Lua scripts + TODO [to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) ### TASing -This section refers to BizHawk specifically. For resources on TASing in general, see [Welcome to TASVideos](http://tasvideos.org/WelcomeToTASVideos.html). +~~This section refers to BizHawk specifically. For resources on TASing in general, see [Welcome to TASVideos](http://tasvideos.org/WelcomeToTASVideos.html).~~ This section hasn't been written yet. -TODO - -[Commandline](http://tasvideos.org/Bizhawk/CommandLine.html) - -[CompactDiscInfoDump](http://tasvideos.org/Bizhawk/CompactDiscInfoDump.html) - -[Rerecording](http://tasvideos.org/Bizhawk/Rerecording.html) - -[TAS movie file format](http://tasvideos.org/Bizhawk/TASFormat.html) +For now, the best way to learn how to TAS is to browse pages like [BasicTools](http://tasvideos.org/TasingGuide/BasicTools.html) on TASVideos and watch tutorials like [Sand_Knight and dwangoAC's](https://youtu.be/6tJniMaR2Ps). [to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) @@ -283,7 +295,7 @@ Past contrbutors to the frontend and custom-built cores are listed [here](https: * [lsnes](http://tasvideos.org/Lsnes.html) for GB and SNES — cross-platform * [openMSX](https://openmsx.org) for MSX — cross-platform -Emulators for other systems can be found on the [EmulatorResources page](http://tasvideos.org/EmulatorResources.html) at TASVideos. The [TASVideos GitHub page](https://github.com/TASVideos) also houses other emulators and plugins where development happens sometimes, their upstreams may be of use. +Emulators for other systems can be found on the [EmulatorResources page](http://tasvideos.org/EmulatorResources.html) at TASVideos. The [TASVideos GitHub page](https://github.com/TASVideos) also holds copies of other emulators and plugins where development happens sometimes, their upstreams may be of use. ## License From 3aa70ba0cf4b49a42f0aac2883020f0229c76274 Mon Sep 17 00:00:00 2001 From: James Groom Date: Sun, 13 Jan 2019 17:22:02 +1000 Subject: [PATCH 182/301] Update README.md --- README.md | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index dd2d69d194..ee2a30dc77 100644 --- a/README.md +++ b/README.md @@ -180,11 +180,14 @@ Again, if your distro isn't listed there, you might get an "Unknown distro" warn You may have seen a dialog saying "You are missing the needed firmware files [...]" when trying to open a rom. Pressing "Yes" opens the Firmware Manager, or you can go to `Config` > `Firmwares...`. -To load firmware, TODO +To load firmwares, the easiest way is to click "Import" in the menubar, navigate to the dumped firmware(s), select them all, and click "Open". It's a good idea to have them copied into the `Firmware` folder, which is nicely organised, when prompted. If you were trying to open a rom, click "Close and reload ROM" to do that. Keep in mind some firmware is optional and some have multiple versions, only one of which needs to be set. #### Identifying a good rom -TODO +With a core and game loaded, look in the very left of the status bar (`View` > `Display Status Bar`): +* a green checkmark means you've loaded a "known good" rom; +* a "???" (don't remember) means you've loaded a "known bad" rom, created by incorrect dumping methods; and +* a ?-block means you've loaded something unknown, possibly a romhack or homebrew title. #### Rebinding keys and controllers @@ -192,11 +195,17 @@ TODO #### Changing cores -TODO +To change which core is used for NES, SNES, GB, or GBA, go to `Config` > `Cores`. There, you'll also find the `GB in SGB` item, which is a checkbox that makes GB games run with the *Super Game Boy*, and `N64 Video Plugin Settings`, which you shouldn't touch. #### Running Lua scripts -TODO +(Again, this feature is Windows-only for now.) + +Go to `Tools` > `Lua Console`. The opened window has two parts, the loaded script list and the console output. The buttons below the menubar are shortcuts for items in the menus, hover over them to see what they do. Any script you load is added to the list, and will start running immediately. + +Running scripts have a "⏵" beside their name, and stopped scripts (manually or due to an error) have a "⏹" beside them. Using "Pause or Resume", you can temporarily pause scripts, those have a "⏸". + +"Toggle script" does just that (paused scripts are stopped). "Remove script" stops it and removes it from the list. "Reload script" stops it and loads changes to the file, running scripts are then started again. [to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) From fdc0f26ca608a65d77eefda41d7da012b8a5fcd2 Mon Sep 17 00:00:00 2001 From: James Groom Date: Sun, 13 Jan 2019 17:23:56 +1000 Subject: [PATCH 183/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ee2a30dc77..902123e9f6 100644 --- a/README.md +++ b/README.md @@ -203,7 +203,7 @@ To change which core is used for NES, SNES, GB, or GBA, go to `Config` > `Cores` Go to `Tools` > `Lua Console`. The opened window has two parts, the loaded script list and the console output. The buttons below the menubar are shortcuts for items in the menus, hover over them to see what they do. Any script you load is added to the list, and will start running immediately. -Running scripts have a "⏵" beside their name, and stopped scripts (manually or due to an error) have a "⏹" beside them. Using "Pause or Resume", you can temporarily pause scripts, those have a "⏸". +Running scripts have a "▶️" beside their name, and stopped scripts (manually or due to an error) have a "⏹️" beside them. Using "Pause or Resume", you can temporarily pause scripts, those have a "⏸️". "Toggle script" does just that (paused scripts are stopped). "Remove script" stops it and removes it from the list. "Reload script" stops it and loads changes to the file, running scripts are then started again. From 3e780919045326f3eb800e2f493267413c98837b Mon Sep 17 00:00:00 2001 From: James Groom Date: Sun, 13 Jan 2019 17:24:36 +1000 Subject: [PATCH 184/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 902123e9f6..761554e010 100644 --- a/README.md +++ b/README.md @@ -205,7 +205,7 @@ Go to `Tools` > `Lua Console`. The opened window has two parts, the loaded scrip Running scripts have a "▶️" beside their name, and stopped scripts (manually or due to an error) have a "⏹️" beside them. Using "Pause or Resume", you can temporarily pause scripts, those have a "⏸️". -"Toggle script" does just that (paused scripts are stopped). "Remove script" stops it and removes it from the list. "Reload script" stops it and loads changes to the file, running scripts are then started again. +"Toggle script" does just that (paused scripts are stopped). "Reload script" stops it and loads changes to the file, running scripts are then started again. "Remove script" stops it and removes it from the list. [to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) From b6a0afaa1ef7a798e2c63b9ddd3e03f65e6f7ec1 Mon Sep 17 00:00:00 2001 From: James Groom Date: Sun, 13 Jan 2019 23:41:09 +1000 Subject: [PATCH 185/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 761554e010..3dc3bccec5 100644 --- a/README.md +++ b/README.md @@ -145,7 +145,7 @@ git clone https://github.com/TASVideos/BizHawk.git BizHawk_master ``` ...or use a [Git GUI](https://desktop.github.com). Otherwise, you'll have to download an archive from GitHub. -~~On Windows 10, open a PowerShell window in BizHawk_master (Shift+Mouse2 in File Explorer) and run `C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe /p:Configuration=Release BizHawk.sln`. On older versions, a similar Command Prompt script should work.~~ (Not sure what the right command is. Do let us know.) +Once it's downloaded and extracted, go into the repo's `Dist` folder and run `BuildAndPackage_Release.bat`. BizHawk will be build into the repo's `output` folder. For anything more complicated than building, you'll need an IDE like [VS Community 2017](https://visualstudio.microsoft.com/vs/community), currently the best free C# IDE. Open `BizHawk.sln` with VS to start and use the toolbar to choose EmuHawk and build. See [Compiling at TASVideos](http://tasvideos.org/Bizhawk/Compiling.html) (somewhat outdated) for more detailed instructions. From c1b85d0cb6a4a31b94e08ef560d9ff33feceed16 Mon Sep 17 00:00:00 2001 From: James Groom Date: Sun, 13 Jan 2019 23:43:32 +1000 Subject: [PATCH 186/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 3dc3bccec5..88a9faee29 100644 --- a/README.md +++ b/README.md @@ -221,7 +221,7 @@ For now, the best way to learn how to TAS is to browse pages like [BasicTools](h Testing bugfixes or new features can be just as helpful as making them! If code's more your thing, see [*Contributing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#contributing) below. -Dev builds are automated with AppVeyor, every green checkmark in the [commit history](https://github.com/TASVideos/BizHawk/commits/master) is a successful build and clicking the check takes you straight there. The full list is [here](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history), in future use the "dev builds" button at the top of this readme. +Dev builds are automated with AppVeyor, every green checkmark in the [commit history](https://github.com/TASVideos/BizHawk/commits/master) is a successful build. Clicking a checkmark and then "Details" in the box that appears takes you straight to the build page. The full list is [here](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history), in future use the "dev builds" button at the top of this readme. Once you're on the build page, click "Artifacts" and download `BizHawk_Developer--#.zip`. From 2448cf38bd715567615a85b0411963e6a63a3edd Mon Sep 17 00:00:00 2001 From: James Groom Date: Mon, 14 Jan 2019 00:10:54 +1000 Subject: [PATCH 187/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 88a9faee29..862fec4eb7 100644 --- a/README.md +++ b/README.md @@ -201,7 +201,7 @@ To change which core is used for NES, SNES, GB, or GBA, go to `Config` > `Cores` (Again, this feature is Windows-only for now.) -Go to `Tools` > `Lua Console`. The opened window has two parts, the loaded script list and the console output. The buttons below the menubar are shortcuts for items in the menus, hover over them to see what they do. Any script you load is added to the list, and will start running immediately. +Go to `Tools` > `Lua Console`. The opened window has two parts, the loaded script list and the console output. The buttons below the menubar are shortcuts for items in the menus, hover over them to see what they do. Any script you load is added to the list, and will start running immediately. Instead of using "Open script", you can drag-and-drop .lua files onto the console or game windows. Running scripts have a "▶️" beside their name, and stopped scripts (manually or due to an error) have a "⏹️" beside them. Using "Pause or Resume", you can temporarily pause scripts, those have a "⏸️". From fefce3d9f1d4a3cc0ed6f00f15903bf028bd2b04 Mon Sep 17 00:00:00 2001 From: James Groom Date: Mon, 14 Jan 2019 00:19:37 +1000 Subject: [PATCH 188/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 862fec4eb7..a5e73a2e58 100644 --- a/README.md +++ b/README.md @@ -145,7 +145,7 @@ git clone https://github.com/TASVideos/BizHawk.git BizHawk_master ``` ...or use a [Git GUI](https://desktop.github.com). Otherwise, you'll have to download an archive from GitHub. -Once it's downloaded and extracted, go into the repo's `Dist` folder and run `BuildAndPackage_Release.bat`. BizHawk will be build into the repo's `output` folder. +Once it's downloaded and extracted, go into the repo's `Dist` folder and run `BuildAndPackage_Release.bat`. BizHawk will be built as a .zip just like any other release. For anything more complicated than building, you'll need an IDE like [VS Community 2017](https://visualstudio.microsoft.com/vs/community), currently the best free C# IDE. Open `BizHawk.sln` with VS to start and use the toolbar to choose EmuHawk and build. See [Compiling at TASVideos](http://tasvideos.org/Bizhawk/Compiling.html) (somewhat outdated) for more detailed instructions. From 84d163d1cb6eb0a180c60b5d89a4d388f5b7ab32 Mon Sep 17 00:00:00 2001 From: James Groom Date: Mon, 14 Jan 2019 00:29:25 +1000 Subject: [PATCH 189/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a5e73a2e58..2c8ec241d0 100644 --- a/README.md +++ b/README.md @@ -195,7 +195,7 @@ TODO #### Changing cores -To change which core is used for NES, SNES, GB, or GBA, go to `Config` > `Cores`. There, you'll also find the `GB in SGB` item, which is a checkbox that makes GB games run with the *Super Game Boy*, and `N64 Video Plugin Settings`, which you shouldn't touch. +To change which core is used for NES, SNES, GB, or GBA, go to `Config` > `Cores`. There, you'll also find the `GB in SGB` item, which is a checkbox that makes GB games run with the *Super Game Boy*, and `N64 Video Plugin Settings`, which you shouldn't touch unless you know what you're doing. #### Running Lua scripts From c6a07396bd0f4e4bdf9b0d471acde67d9851dbbe Mon Sep 17 00:00:00 2001 From: James Groom Date: Mon, 14 Jan 2019 01:37:25 +1000 Subject: [PATCH 190/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2c8ec241d0..b6199d943b 100644 --- a/README.md +++ b/README.md @@ -195,7 +195,7 @@ TODO #### Changing cores -To change which core is used for NES, SNES, GB, or GBA, go to `Config` > `Cores`. There, you'll also find the `GB in SGB` item, which is a checkbox that makes GB games run with the *Super Game Boy*, and `N64 Video Plugin Settings`, which you shouldn't touch unless you know what you're doing. +To change which core is used for NES, SNES, GB, or GBA, go to `Config` > `Cores`. There, you'll also find the `GB in SGB` item, which is a checkbox that makes GB games run with the *Super Game Boy* on an SNES. #### Running Lua scripts From 1ae9de0921c00f70542a88c61a8b9326bd4f5618 Mon Sep 17 00:00:00 2001 From: James Groom Date: Tue, 15 Jan 2019 01:34:36 +1000 Subject: [PATCH 191/301] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b6199d943b..a4ebc4810c 100644 --- a/README.md +++ b/README.md @@ -186,8 +186,8 @@ To load firmwares, the easiest way is to click "Import" in the menubar, navigate With a core and game loaded, look in the very left of the status bar (`View` > `Display Status Bar`): * a green checkmark means you've loaded a "known good" rom; -* a "???" (don't remember) means you've loaded a "known bad" rom, created by incorrect dumping methods; and -* a ?-block means you've loaded something unknown, possibly a romhack or homebrew title. +* a "!" in a red circle means you've loaded a "known bad" rom, created by incorrect dumping methods; and +* something else, usually a ?-block, means you've loaded something unknown, a romhack, or a homebrew title. #### Rebinding keys and controllers From d144479548871ea8ff7e2eb6cb4ff575d9b62a67 Mon Sep 17 00:00:00 2001 From: James Groom Date: Tue, 15 Jan 2019 01:52:29 +1000 Subject: [PATCH 192/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a4ebc4810c..e0a0e4d3ca 100644 --- a/README.md +++ b/README.md @@ -187,7 +187,7 @@ To load firmwares, the easiest way is to click "Import" in the menubar, navigate With a core and game loaded, look in the very left of the status bar (`View` > `Display Status Bar`): * a green checkmark means you've loaded a "known good" rom; * a "!" in a red circle means you've loaded a "known bad" rom, created by incorrect dumping methods; and -* something else, usually a ?-block, means you've loaded something unknown, a romhack, or a homebrew title. +* something else, usually a ?-block, means you've loaded something that's not in the database. #### Rebinding keys and controllers From 77d099de53a7da39d8efb76fdc6d10f487d8a2db Mon Sep 17 00:00:00 2001 From: James Groom Date: Tue, 15 Jan 2019 16:00:18 +1000 Subject: [PATCH 193/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e0a0e4d3ca..3ee6bec0fc 100644 --- a/README.md +++ b/README.md @@ -199,7 +199,7 @@ To change which core is used for NES, SNES, GB, or GBA, go to `Config` > `Cores` #### Running Lua scripts -(Again, this feature is Windows-only for now.) +(Reminder that this feature is Windows-only for now.) Go to `Tools` > `Lua Console`. The opened window has two parts, the loaded script list and the console output. The buttons below the menubar are shortcuts for items in the menus, hover over them to see what they do. Any script you load is added to the list, and will start running immediately. Instead of using "Open script", you can drag-and-drop .lua files onto the console or game windows. From 7b71703223997086dc2fc255a6a2d8a69056248d Mon Sep 17 00:00:00 2001 From: James Groom Date: Tue, 15 Jan 2019 18:39:37 +1000 Subject: [PATCH 194/301] Update README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 3ee6bec0fc..5ab4123902 100644 --- a/README.md +++ b/README.md @@ -128,7 +128,11 @@ Is your distro not there? Released binaries can be found right here on GitHub (s If you download BizHawk this way, **don't mix different versions**, keep each version in its own folder. Run `EmuHawkMono.sh` to give Mono the library and executable paths — you can run it from anywhere, so putting it in a .desktop file is fine. If running the script doesn't start EmuHawk, you may need to edit it (if you use a terminal, it will say so in the output). -Linux distros are supported if the distributor is still supporting your version, you're using Linux 4.4/4.9/4.14/4.19 LTS or 4.20 for x86_64/amd64, and there are no updates available in your package manager. *Please* update and reboot. +Fixed release distro support: Debian from 8.0 "Jessie", Linux Mint from 19.1 "Tessa", Manjaro from 18.0.2 "Illyria", and Ubuntu (Kubuntu, etc.) from 18.04.1 LTS "Bionic". + +Rolling release distro support (please update and reboot before bothering anyone): Arch Linux from 2018.01.01. + +In general, Linux distros are supported if you're using Linux 4.9/4.14/4.19 LTS or Linux 4.20 on the x86_64/amd64 architecture, *unless* your distributor has ended support. Again, please check there are no updates available in your package manager. macOS is supported from 10.11 "El Capitan" (Darwin 15.6). Apple doesn't seem to care about lifecycles, so we'll go with 6 months from the last security update. From 3f8518e6f292ee33dc8e39440f428858b02d241b Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 16 Jan 2019 00:36:10 +1000 Subject: [PATCH 195/301] Update README.md --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 5ab4123902..d2f411751a 100644 --- a/README.md +++ b/README.md @@ -195,12 +195,16 @@ With a core and game loaded, look in the very left of the status bar (`View` > ` #### Rebinding keys and controllers -TODO +There are two keybind windows, `Config` > `Controllers...` and `Config` > `Hotkeys...`. These let you bind your keyboard and controllers to virtual controllers and to frontend functions, respectively. + +Using them is simple, click in a box next to an action and press the button (or bump the axis) you want bound to that action. If the "Auto Tab" checkbox at the bottom of the window is checked, the next box will be selected automatically and whatever button you press will be bound to *that* action, and so on down the list. If "Auto Tab" is unchecked, clicking a filled box will let you bind another button to the same action. Keep in mind there are multiple tabs of actions. #### Changing cores To change which core is used for NES, SNES, GB, or GBA, go to `Config` > `Cores`. There, you'll also find the `GB in SGB` item, which is a checkbox that makes GB games run with the *Super Game Boy* on an SNES. +Most cores have their own settings window too, look in the menubar for the system name after `Tools`. Some have multiple windows, like Mupen64Plus which has virtual controller settings and graphics settings. + #### Running Lua scripts (Reminder that this feature is Windows-only for now.) From 3aec48de7f63a9752ea230f2a315314eaf8ab181 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 16 Jan 2019 00:43:53 +1000 Subject: [PATCH 196/301] Update README.md --- README.md | 25 ++++--------------------- 1 file changed, 4 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index d2f411751a..1bb1e445a9 100644 --- a/README.md +++ b/README.md @@ -111,30 +111,13 @@ A "backport" release, [1.13.2](https://github.com/TASVideos/BizHawk/releases/tag ### GNU+Linux and macOS -Install BizHawk with your distro's package manager. The package name is given on each button below, and some buttons are links. For the changelog, [see TASVideos here](http://tasvideos.org/Bizhawk/ReleaseHistory.html). +**IMPORTANT**: The Mono "port" is a work-in-progress! It is *not* complete, does *not* look very nice and is *not* ready for anything that needs accuracy. -[![Arch Linux (AUR) | bizhawk](https://img.shields.io/badge/Arch_Linux_(AUR)-bizhawk-%231793D1.svg?logo=arch-linux&style=popout)](https://aur.archlinux.org/packages/bizhawk) -[![Debian (Launchpad) | bizhawk](https://img.shields.io/badge/Debian_(Launchpad)-bizhawk-%23A81D33.svg?logo=debian&style=popout)](https://example.com/bizhawk) -[![Linux Mint (Launchpad) | bizhawk](https://img.shields.io/badge/Linux_Mint_(Launchpad)-bizhawk-%2387CF3E.svg?logo=data:image/png;base64,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&style=popout)](https://example.com/bizhawk) -[![macOS (Homebrew) | bizhawk](https://img.shields.io/badge/macOS_(Homebrew)-bizhawk-%23999999.svg?logo=apple&style=popout)](https://example.com/bizhawk) -[![Manjaro (AUR) | bizhawk](https://img.shields.io/badge/Manjaro_(AUR)-bizhawk-%2335BF5C.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAABRUlEQVR4nO3bQUrDQBTG8Qdu3dS91r2CAzYE3Cm9QBURmjq7Yk9QIsELJYJ2XYqh7UJbL9NcYFyoGAQZiFMygf8Hb/vNm192IREhhJBS+ou4Fa3vM71Kitv3B1P3lHer2qFXSTFYJ2l/EbesANev46y7HJkw1yZ4GdQ+5d2qdoS5Nt3lyNy8xakV4Hw+LOq+tGuA77mY322sAL48+W0AhLk2f93b2SE+A/zuAwAAAAAAAAAAAAAAAAAAcH3IqcNpJMBWAkATAVy+E2wkgE9dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAZzrTaOPT0i67OtPI/suMyq6efVraZdfJ4+WTFWD3bP9Ypb1JMIsq/zzlHcAsKlTam+wFB0dWABHZEZFDEVHi4NO2f3S47FIi0v66GyHkJx/0rGTAdYdsEwAAAABJRU5ErkJggg==&style=popout)](https://aur.archlinux.org/packages/bizhawk) -[![Ubuntu (Launchpad) | bizhawk](https://img.shields.io/badge/Ubuntu_(Launchpad)-bizhawk-%23E95420.svg?colorA=772953&logo=ubuntu&style=popout)](https://example.com/bizhawk) +You'll need to either build BizHawk yourself (see [*Building*](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-and-macos-1) below), or download a dev build (see [*Testing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) below). -If you run `EmuHawkMono.sh` from a terminal, note that `File > Exit (Alt+F4)` doesn't terminate the process correctly, you'll need to send SIGINT (`^C`). The systems that currently work are: Game Boy + GBC (GBHawk), NES (NesHawk), Master System, Atari 7800, Commodore 64, ColecoVision, IntelliVision, TurboGrafx, and ZX Spectrum. See #1430 for progress. +Run `EmuHawkMono.sh` to give Mono the library and executable paths — you can run it from anywhere, so putting it in a .desktop file is fine. If running the script doesn't start EmuHawk, you may need to edit it (if you use a terminal, it will say so in the output). -Is your distro not there? Released binaries can be found right here on GitHub (same download as for Windows): - -[![Misc. Linux | binaries](https://img.shields.io/badge/Misc._Linux-binaries-%23FCC624.svg?logo=linux&logoColor=black&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) - -If you download BizHawk this way, **don't mix different versions**, keep each version in its own folder. Run `EmuHawkMono.sh` to give Mono the library and executable paths — you can run it from anywhere, so putting it in a .desktop file is fine. If running the script doesn't start EmuHawk, you may need to edit it (if you use a terminal, it will say so in the output). - -Fixed release distro support: Debian from 8.0 "Jessie", Linux Mint from 19.1 "Tessa", Manjaro from 18.0.2 "Illyria", and Ubuntu (Kubuntu, etc.) from 18.04.1 LTS "Bionic". - -Rolling release distro support (please update and reboot before bothering anyone): Arch Linux from 2018.01.01. - -In general, Linux distros are supported if you're using Linux 4.9/4.14/4.19 LTS or Linux 4.20 on the x86_64/amd64 architecture, *unless* your distributor has ended support. Again, please check there are no updates available in your package manager. - -macOS is supported from 10.11 "El Capitan" (Darwin 15.6). Apple doesn't seem to care about lifecycles, so we'll go with 6 months from the last security update. +If you run `EmuHawkMono.sh` from a terminal, note that `File > Exit (Alt+F4)` doesn't terminate the process correctly, you'll need to send SIGINT (`^C`). The systems that currently work are: Game Boy + GBC (GBHawk), NES (NesHawk), Sega Master System, Atari 7800, Commodore 64, ColecoVision, IntelliVision, TurboGrafx, and ZX Spectrum. See #1430 for progress. [to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) From b7fd548b73d5482d0a7de7d259e7addb26438e65 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 16 Jan 2019 00:44:47 +1000 Subject: [PATCH 197/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 1bb1e445a9..697bc9c7e3 100644 --- a/README.md +++ b/README.md @@ -111,7 +111,7 @@ A "backport" release, [1.13.2](https://github.com/TASVideos/BizHawk/releases/tag ### GNU+Linux and macOS -**IMPORTANT**: The Mono "port" is a work-in-progress! It is *not* complete, does *not* look very nice and is *not* ready for anything that needs accuracy. +**IMPORTANT**: The Mono "port" is a work-in-progress! It is *not* complete, does *not* look very nice, and is *not* ready for anything that needs accuracy. You'll need to either build BizHawk yourself (see [*Building*](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-and-macos-1) below), or download a dev build (see [*Testing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) below). From ba58fa356201812bf06fd08e7ba5233b37de1220 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 16 Jan 2019 00:54:42 +1000 Subject: [PATCH 198/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 697bc9c7e3..40d2a78d92 100644 --- a/README.md +++ b/README.md @@ -76,7 +76,7 @@ Supported consoles and computers: * Saturn * SG-1000 * Sinclair ZX Spectrum -* Sony Playstation / PSX +* Sony Playstation (PSX) * Texas Instruments TI-83 * Uzebox * [More](http://tasvideos.org/Bizhawk/CoreRoadMap.html) coming soon..? From d54b3778192b46f4bfcc271d558e9a9402b1fb8c Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 16 Jan 2019 01:08:39 +1000 Subject: [PATCH 199/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 40d2a78d92..89b65bf622 100644 --- a/README.md +++ b/README.md @@ -103,7 +103,7 @@ Before you start (by running `EmuHawk.exe`), you'll need the following Windows-o BizHawk functions like a "portable" program, you may move or rename the folder containing `EmuHawk.exe`, even to another drive — as long as you keep all the files together, and the prerequisites are installed when you go to run it. -Win7 is supported from SP1, Win8 is supported from 8.1, and Win10 is supported from 1709 "Redstone 3", following [Microsoft's support lifecycle](https://support.microsoft.com/en-us/help/13853/windows-lifecycle-fact-sheet). +Following [Microsoft's support lifecycle](https://support.microsoft.com/en-us/help/13853/windows-lifecycle-fact-sheet), Win10 is supported from 1709 "Redstone 3", Win8 is supported from 8.1, and Win7 is supported from SP1 (ends Jan 2020, upgrade to Win10 or try [ReactOS](https://reactos.org/joining/faqs)). A "backport" release, [1.13.2](https://github.com/TASVideos/BizHawk/releases/tag/1.13.2), is available for Windows XP and 32-bit users. Being in the 1.x series, many bugs remain and features are missing. From 81ba01371105ab65e0d80a627cab97fae919396f Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 16 Jan 2019 01:09:24 +1000 Subject: [PATCH 200/301] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 89b65bf622..8e73d7a960 100644 --- a/README.md +++ b/README.md @@ -83,6 +83,8 @@ Supported consoles and computers: See [*Usage*](https://github.com/TASVideos/BizHawk/blob/master/README.md#usage) below for details about specific tools and config menus. +[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) + ## Installing ### Windows 7/8.1/10 From 1ac45bbdb82c529d1ac2b0caafb4dd0a8b365528 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 16 Jan 2019 01:09:54 +1000 Subject: [PATCH 201/301] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 8e73d7a960..aefa5f6294 100644 --- a/README.md +++ b/README.md @@ -288,6 +288,8 @@ For the time being, style is not enforced in PRs, only build success is. Please Past contrbutors to the frontend and custom-built cores are listed [here](https://github.com/TASVideos/BizHawk/graphs/contributors). See a core's docs for its authors. +[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) + ## Related projects * [DeSmuME](https://desmume.org) for DS/Lite — cross-platform From 8c7375147b8ebdf3fd248d76ab870f7973046125 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 16 Jan 2019 01:10:36 +1000 Subject: [PATCH 202/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aefa5f6294..45c815bc8f 100644 --- a/README.md +++ b/README.md @@ -286,7 +286,7 @@ If you'd like to add a feature, first search the issue tracker for it. If it's a For the time being, style is not enforced in PRs, only build success is. Please use CRLF, tabs, and [Allman braces](https://en.wikipedia.org/wiki/Indentation_style#Allman_style) in new files. -Past contrbutors to the frontend and custom-built cores are listed [here](https://github.com/TASVideos/BizHawk/graphs/contributors). See a core's docs for its authors. +Past contrbutors to the frontend and custom-built cores are listed [here](https://github.com/TASVideos/BizHawk/graphs/contributors). See the wiki for core authors. [to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) From 08d9c0a724e57ae30cf18dd747096b189202446a Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 16 Jan 2019 01:13:20 +1000 Subject: [PATCH 203/301] Update README.md --- README.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 45c815bc8f..900f1ccadc 100644 --- a/README.md +++ b/README.md @@ -18,10 +18,10 @@ New user on Windows? Install the prerequisites first, click the "prereqs" button Jump to: * Installing * [Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#windows-78110) - * [GNU+Linux and macOS](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-and-macos) + * [GNU+Linux](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux) * Building * [Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#windows-78110-1) - * [GNU+Linux and macOS](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-and-macos-1) + * [GNU+Linux](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-1) * [Usage](https://github.com/TASVideos/BizHawk/blob/master/README.md#usage) * [TASing](https://github.com/TASVideos/BizHawk/blob/master/README.md#tasing) * [Testing](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) @@ -111,11 +111,11 @@ A "backport" release, [1.13.2](https://github.com/TASVideos/BizHawk/releases/tag [to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) -### GNU+Linux and macOS +### GNU+Linux **IMPORTANT**: The Mono "port" is a work-in-progress! It is *not* complete, does *not* look very nice, and is *not* ready for anything that needs accuracy. -You'll need to either build BizHawk yourself (see [*Building*](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-and-macos-1) below), or download a dev build (see [*Testing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) below). +You'll need to either build BizHawk yourself (see [*Building*](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-1) below), or download a dev build (see [*Testing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) below). Run `EmuHawkMono.sh` to give Mono the library and executable paths — you can run it from anywhere, so putting it in a .desktop file is fine. If running the script doesn't start EmuHawk, you may need to edit it (if you use a terminal, it will say so in the output). @@ -140,7 +140,7 @@ For anything more complicated than building, you'll need an IDE like [VS Communi [to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) -### GNU+Linux and macOS +### GNU+Linux *Compiling* requires MSBuild and *running* requires Mono and WINE, but **BizHawk does not run under WINE** — only the bundled libraries are required. @@ -157,7 +157,7 @@ Remove the `/p:...` flag from MSBuild if you want debugging symbols. If your distro isn't listed under *Installing* above, `libblip_buf` probably isn't in your package repos. You can easily [build it yourself](https://gitlab.com/TASVideos/libblip_buf/blob/unified/README.md). -Once built, see [*Installing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-and-macos) above, substituting the repo's `output` folder for the download. +Once built, see [*Installing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux) above, substituting the repo's `output` folder for the download. Again, if your distro isn't listed there, you might get an "Unknown distro" warning in the terminal, and BizHawk may not open or may show the missing dependencies dialog. You may need to add your distro to the case statement in the script, setting `libpath` to the location of `d3dx9_43.dll.so` (please do share if you get it working). From 934e7edde225f86b19f134a1aa6b7e6d5f529ba4 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 16 Jan 2019 01:18:41 +1000 Subject: [PATCH 204/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 900f1ccadc..7c9c1a30a1 100644 --- a/README.md +++ b/README.md @@ -119,7 +119,7 @@ You'll need to either build BizHawk yourself (see [*Building*](https://github.co Run `EmuHawkMono.sh` to give Mono the library and executable paths — you can run it from anywhere, so putting it in a .desktop file is fine. If running the script doesn't start EmuHawk, you may need to edit it (if you use a terminal, it will say so in the output). -If you run `EmuHawkMono.sh` from a terminal, note that `File > Exit (Alt+F4)` doesn't terminate the process correctly, you'll need to send SIGINT (`^C`). The systems that currently work are: Game Boy + GBC (GBHawk), NES (NesHawk), Sega Master System, Atari 7800, Commodore 64, ColecoVision, IntelliVision, TurboGrafx, and ZX Spectrum. See #1430 for progress. +If you run `EmuHawkMono.sh` from a terminal, note that `File > Exit (Alt+F4)` doesn't terminate the process correctly, you'll need to send SIGINT (`^C`). The systems that currently work are: Game Boy + GBC (GBHawk), NES (NesHawk), Sega Master System, Atari 7800, Commodore 64, ColecoVision, IntelliVision, TurboGrafx, and ZX Spectrum. See [#1430](https://github.com/TASVideos/BizHawk/issues/1430) for progress. [to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) From 01265a2893388beadd69a7d1c957b961bf5ff3ed Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 16 Jan 2019 01:26:11 +1000 Subject: [PATCH 205/301] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 7c9c1a30a1..af97a7cac2 100644 --- a/README.md +++ b/README.md @@ -117,6 +117,8 @@ A "backport" release, [1.13.2](https://github.com/TASVideos/BizHawk/releases/tag You'll need to either build BizHawk yourself (see [*Building*](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-1) below), or download a dev build (see [*Testing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) below). +The runtime dependencies are Mono (complete) + Mono VB.NET, WINE (just `libwine` if available), `libdl.so` (glibc), NVIDIA's `cgc` utility. LSB release info is optional for automatically setting the library location. + Run `EmuHawkMono.sh` to give Mono the library and executable paths — you can run it from anywhere, so putting it in a .desktop file is fine. If running the script doesn't start EmuHawk, you may need to edit it (if you use a terminal, it will say so in the output). If you run `EmuHawkMono.sh` from a terminal, note that `File > Exit (Alt+F4)` doesn't terminate the process correctly, you'll need to send SIGINT (`^C`). The systems that currently work are: Game Boy + GBC (GBHawk), NES (NesHawk), Sega Master System, Atari 7800, Commodore 64, ColecoVision, IntelliVision, TurboGrafx, and ZX Spectrum. See [#1430](https://github.com/TASVideos/BizHawk/issues/1430) for progress. From a94a970b01b217648b1cf19684c7c5ee224ab4ae Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 16 Jan 2019 01:33:55 +1000 Subject: [PATCH 206/301] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index af97a7cac2..ddd1457b35 100644 --- a/README.md +++ b/README.md @@ -173,6 +173,8 @@ You may have seen a dialog saying "You are missing the needed firmware files [.. To load firmwares, the easiest way is to click "Import" in the menubar, navigate to the dumped firmware(s), select them all, and click "Open". It's a good idea to have them copied into the `Firmware` folder, which is nicely organised, when prompted. If you were trying to open a rom, click "Close and reload ROM" to do that. Keep in mind some firmware is optional and some have multiple versions, only one of which needs to be set. +Windows users can keep the `Firmware` folder made by the firmware manager when updating, go to `Config` > `Paths...` and change "Firmware" under "Global" to point at it. + #### Identifying a good rom With a core and game loaded, look in the very left of the status bar (`View` > `Display Status Bar`): From 08c050648322d8371ad198808263c29d585c5b50 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 16 Jan 2019 03:48:09 +1000 Subject: [PATCH 207/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ddd1457b35..d89236f51c 100644 --- a/README.md +++ b/README.md @@ -117,7 +117,7 @@ A "backport" release, [1.13.2](https://github.com/TASVideos/BizHawk/releases/tag You'll need to either build BizHawk yourself (see [*Building*](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-1) below), or download a dev build (see [*Testing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) below). -The runtime dependencies are Mono (complete) + Mono VB.NET, WINE (just `libwine` if available), `libdl.so` (glibc), NVIDIA's `cgc` utility. LSB release info is optional for automatically setting the library location. +The runtime dependencies are Mono (complete) + Mono VB.NET, WINE (just `libwine` if available), `libdl.so` (glibc), NVIDIA's `cgc` utility, and `libblip_buf.so` from the repo's `Assets` folder (copy it to `/usr/lib/libblip_buf.so.1.1.0` or equivalent). LSB release info is optional for automatically setting the library location. Run `EmuHawkMono.sh` to give Mono the library and executable paths — you can run it from anywhere, so putting it in a .desktop file is fine. If running the script doesn't start EmuHawk, you may need to edit it (if you use a terminal, it will say so in the output). From 65ce3abaa94ef585c9a87e7064b9f8ef296ae2e9 Mon Sep 17 00:00:00 2001 From: Brad Smith Date: Thu, 17 Jan 2019 16:42:27 -0500 Subject: [PATCH 208/301] NES Mapper034.cs is missing SyncState (#1451) * NES Mapper034.cs is missing SyncState --- .../Consoles/Nintendo/NES/Boards/Mapper034.cs | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Mapper034.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Mapper034.cs index 34436b66cd..472f229a4d 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Mapper034.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/Mapper034.cs @@ -1,7 +1,8 @@ -using System; +using System; using System.Collections.Generic; using System.Linq; using System.Text; +using BizHawk.Common; namespace BizHawk.Emulation.Cores.Nintendo.NES { @@ -13,7 +14,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES int prg_bank_mask_32k, chr_bank_mask_4k; //state - int[] chr = new int[2]; + ByteBuffer chr = new ByteBuffer(2); int prg; @@ -38,6 +39,12 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES return true; } + public override void Dispose() + { + chr.Dispose(); + base.Dispose(); + } + public override byte ReadPPU(int addr) { if (addr < 0x2000) @@ -64,10 +71,10 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES prg = value & prg_bank_mask_32k; break; case 0x1ffe: - chr[0] = value & chr_bank_mask_4k; + chr[0] = (byte)(value & chr_bank_mask_4k); break; case 0x1fff: - chr[1] = value & chr_bank_mask_4k; + chr[1] = (byte)(value & chr_bank_mask_4k); break; default: // on NINA, the regs sit on top of WRAM @@ -75,5 +82,12 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES break; } } + + public override void SyncState(Serializer ser) + { + base.SyncState(ser); + ser.Sync("prg", ref prg); + ser.Sync("chr", ref chr); + } } } From ca9385c3c8b4befe632dcb4c67271827fb31a14c Mon Sep 17 00:00:00 2001 From: zeromus Date: Fri, 18 Jan 2019 00:59:23 -0500 Subject: [PATCH 209/301] add some little fragments i meant for the user display cropping stuff but didnt use --- .../GdiPlusGuiRenderer.cs | 19 ++++++++++++++++++- Bizware/BizHawk.Bizware.BizwareGL/Art.cs | 10 ++++++++++ .../BizHawk.Bizware.BizwareGL/GuiRenderer.cs | 2 +- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/Bizware/BizHawk.Bizware.BizwareGL.GdiPlus/GdiPlusGuiRenderer.cs b/Bizware/BizHawk.Bizware.BizwareGL.GdiPlus/GdiPlusGuiRenderer.cs index 06ed24b922..c1ee8d0644 100644 --- a/Bizware/BizHawk.Bizware.BizwareGL.GdiPlus/GdiPlusGuiRenderer.cs +++ b/Bizware/BizHawk.Bizware.BizwareGL.GdiPlus/GdiPlusGuiRenderer.cs @@ -240,7 +240,17 @@ namespace BizHawk.Bizware.BizwareGL.Drivers.GdiPlus g.Transform = new sd.Drawing2D.Matrix(mat.M11, mat.M12, mat.M21, mat.M22, mat.M41, mat.M42); } + unsafe void DrawInternal(Art art, float x, float y, float w, float h) + { + DrawInternal(art.BaseTexture, x, y, w, h, art.u0, art.v0, art.u1, art.v1); + } + unsafe void DrawInternal(Texture2d tex, float x, float y, float w, float h) + { + DrawInternal(tex, x, y, w, h, 0, 0, 1, 1); + } + + unsafe void DrawInternal(Texture2d tex, float x, float y, float w, float h, float u0, float v0, float u1, float v1) { var g = Gdi.GetCurrentGraphics(); PrepDraw(g, tex); @@ -253,9 +263,16 @@ namespace BizHawk.Bizware.BizwareGL.Drivers.GdiPlus new sd.PointF(x,y+h), }; + float sx = tex.Width * u0; + float sy = tex.Height * v0; + float sx2 = tex.Width * u1; + float sy2 = tex.Height * v1; + float sw = sx2 - sx; + float sh = sy2 - sy; + var tw = tex.Opaque as IGL_GdiPlus.TextureWrapper; g.PixelOffsetMode = sd.Drawing2D.PixelOffsetMode.Half; - g.DrawImage(tw.SDBitmap, destPoints, new sd.RectangleF(0, 0, tex.Width, tex.Height), sd.GraphicsUnit.Pixel, CurrentImageAttributes); + g.DrawImage(tw.SDBitmap, destPoints, new sd.RectangleF(sx, sy, sw, sh), sd.GraphicsUnit.Pixel, CurrentImageAttributes); g.Transform = new sd.Drawing2D.Matrix(); //.Reset() doesnt work ? ? } diff --git a/Bizware/BizHawk.Bizware.BizwareGL/Art.cs b/Bizware/BizHawk.Bizware.BizwareGL/Art.cs index 5992872e23..13db7e68a6 100644 --- a/Bizware/BizHawk.Bizware.BizwareGL/Art.cs +++ b/Bizware/BizHawk.Bizware.BizwareGL/Art.cs @@ -5,6 +5,16 @@ namespace BizHawk.Bizware.BizwareGL /// public class Art { + //bleh, didnt mean to have this here, but I need it now + public Art(Texture2d tex) + { + BaseTexture = tex; + u1 = 1; + v1 = 1; + Width = tex.Width; + Height = tex.Height; + } + internal Art(ArtManager owner) { Owner = owner; diff --git a/Bizware/BizHawk.Bizware.BizwareGL/GuiRenderer.cs b/Bizware/BizHawk.Bizware.BizwareGL/GuiRenderer.cs index 9ecf4b5e5d..d4b25aac90 100644 --- a/Bizware/BizHawk.Bizware.BizwareGL/GuiRenderer.cs +++ b/Bizware/BizHawk.Bizware.BizwareGL/GuiRenderer.cs @@ -224,7 +224,7 @@ namespace BizHawk.Bizware.BizwareGL unsafe void DrawInternal(Texture2d tex, float x, float y, float w, float h) { - Art art = new Art(null); + Art art = new Art((ArtManager)null); art.Width = w; art.Height = h; art.u0 = art.v0 = 0; From cecdff8293a14d2f8f312b2b08be224a4aba2387 Mon Sep 17 00:00:00 2001 From: zeromus Date: Fri, 18 Jan 2019 00:59:38 -0500 Subject: [PATCH 210/301] config hookup for user crop area --- BizHawk.Client.Common/config/Config.cs | 6 + .../config/DisplayConfigLite.Designer.cs | 190 ++++++++++++++---- .../config/DisplayConfigLite.cs | 10 + .../config/DisplayConfigLite.resx | 3 + 4 files changed, 167 insertions(+), 42 deletions(-) diff --git a/BizHawk.Client.Common/config/Config.cs b/BizHawk.Client.Common/config/Config.cs index b7f72ab639..1ced4b01f1 100644 --- a/BizHawk.Client.Common/config/Config.cs +++ b/BizHawk.Client.Common/config/Config.cs @@ -363,6 +363,12 @@ namespace BizHawk.Client.Common public float DispCustomUserARX = -1; public float DispCustomUserARY = -1; + //these default to 0 because by default we crop nothing + public int DispCropLeft = 0; + public int DispCropTop = 0; + public int DispCropRight = 0; + public int DispCropBottom = 0; + // Sound options #if WINDOWS public ESoundOutputMethod SoundOutputMethod = ESoundOutputMethod.DirectSound; diff --git a/BizHawk.Client.EmuHawk/config/DisplayConfigLite.Designer.cs b/BizHawk.Client.EmuHawk/config/DisplayConfigLite.Designer.cs index 4e22222325..8d6155f93d 100644 --- a/BizHawk.Client.EmuHawk/config/DisplayConfigLite.Designer.cs +++ b/BizHawk.Client.EmuHawk/config/DisplayConfigLite.Designer.cs @@ -37,6 +37,7 @@ this.lblUserFilterName = new System.Windows.Forms.Label(); this.btnSelectUserFilter = new System.Windows.Forms.Button(); this.rbUser = new System.Windows.Forms.RadioButton(); + this.tbScanlineIntensity = new BizHawk.Client.EmuHawk.TransparentTrackBar(); this.rbNone = new System.Windows.Forms.RadioButton(); this.rbScanlines = new System.Windows.Forms.RadioButton(); this.rbHq2x = new System.Windows.Forms.RadioButton(); @@ -64,6 +65,16 @@ this.label5 = new System.Windows.Forms.Label(); this.tabControl1 = new System.Windows.Forms.TabControl(); this.tpAR = new System.Windows.Forms.TabPage(); + this.groupBox6 = new System.Windows.Forms.GroupBox(); + this.label16 = new System.Windows.Forms.Label(); + this.label15 = new System.Windows.Forms.Label(); + this.txtCropBottom = new System.Windows.Forms.TextBox(); + this.label17 = new System.Windows.Forms.Label(); + this.txtCropRight = new System.Windows.Forms.TextBox(); + this.txtCropTop = new System.Windows.Forms.TextBox(); + this.label14 = new System.Windows.Forms.Label(); + this.txtCropLeft = new System.Windows.Forms.TextBox(); + this.btnDefaults = new System.Windows.Forms.Button(); this.cbAutoPrescale = new System.Windows.Forms.CheckBox(); this.label11 = new System.Windows.Forms.Label(); this.label10 = new System.Windows.Forms.Label(); @@ -95,17 +106,17 @@ this.cbStatusBarWindowed = new System.Windows.Forms.CheckBox(); this.label9 = new System.Windows.Forms.Label(); this.cbMenuWindowed = new System.Windows.Forms.CheckBox(); + this.trackbarFrameSizeWindowed = new BizHawk.Client.EmuHawk.TransparentTrackBar(); this.cbCaptionWindowed = new System.Windows.Forms.CheckBox(); this.linkLabel1 = new System.Windows.Forms.LinkLabel(); - this.tbScanlineIntensity = new BizHawk.Client.EmuHawk.TransparentTrackBar(); - this.trackbarFrameSizeWindowed = new BizHawk.Client.EmuHawk.TransparentTrackBar(); - this.btnDefaults = new System.Windows.Forms.Button(); this.toolTip1 = new System.Windows.Forms.ToolTip(this.components); this.groupBox1.SuspendLayout(); + ((System.ComponentModel.ISupportInitialize)(this.tbScanlineIntensity)).BeginInit(); this.grpFinalFilter.SuspendLayout(); this.grpARSelection.SuspendLayout(); this.tabControl1.SuspendLayout(); this.tpAR.SuspendLayout(); + this.groupBox6.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.nudPrescale)).BeginInit(); this.tpDispMethod.SuspendLayout(); this.groupBox3.SuspendLayout(); @@ -114,7 +125,6 @@ this.tabPage1.SuspendLayout(); this.groupBox4.SuspendLayout(); this.groupBox2.SuspendLayout(); - ((System.ComponentModel.ISupportInitialize)(this.tbScanlineIntensity)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.trackbarFrameSizeWindowed)).BeginInit(); this.SuspendLayout(); // @@ -196,6 +206,19 @@ this.rbUser.Text = "User"; this.rbUser.UseVisualStyleBackColor = true; // + // tbScanlineIntensity + // + this.tbScanlineIntensity.LargeChange = 32; + this.tbScanlineIntensity.Location = new System.Drawing.Point(83, 55); + this.tbScanlineIntensity.Maximum = 256; + this.tbScanlineIntensity.Name = "tbScanlineIntensity"; + this.tbScanlineIntensity.Size = new System.Drawing.Size(70, 42); + this.tbScanlineIntensity.TabIndex = 3; + this.tbScanlineIntensity.TickFrequency = 32; + this.tbScanlineIntensity.TickStyle = System.Windows.Forms.TickStyle.TopLeft; + this.tbScanlineIntensity.Scroll += new System.EventHandler(this.tbScanlineIntensity_Scroll); + this.tbScanlineIntensity.ValueChanged += new System.EventHandler(this.tbScanlineIntensity_Scroll); + // // rbNone // this.rbNone.AutoSize = true; @@ -474,6 +497,7 @@ // // tpAR // + this.tpAR.Controls.Add(this.groupBox6); this.tpAR.Controls.Add(this.btnDefaults); this.tpAR.Controls.Add(this.cbAutoPrescale); this.tpAR.Controls.Add(this.label11); @@ -492,6 +516,102 @@ this.tpAR.Text = "Scaling & Filtering"; this.tpAR.UseVisualStyleBackColor = true; // + // groupBox6 + // + this.groupBox6.Controls.Add(this.label16); + this.groupBox6.Controls.Add(this.label15); + this.groupBox6.Controls.Add(this.txtCropBottom); + this.groupBox6.Controls.Add(this.label17); + this.groupBox6.Controls.Add(this.txtCropRight); + this.groupBox6.Controls.Add(this.txtCropTop); + this.groupBox6.Controls.Add(this.label14); + this.groupBox6.Controls.Add(this.txtCropLeft); + this.groupBox6.Location = new System.Drawing.Point(218, 195); + this.groupBox6.Name = "groupBox6"; + this.groupBox6.Size = new System.Drawing.Size(302, 61); + this.groupBox6.TabIndex = 9; + this.groupBox6.TabStop = false; + this.groupBox6.Text = "Cropping"; + // + // label16 + // + this.label16.AutoSize = true; + this.label16.Location = new System.Drawing.Point(217, 25); + this.label16.Name = "label16"; + this.label16.Size = new System.Drawing.Size(43, 13); + this.label16.TabIndex = 30; + this.label16.Text = "Bottom:"; + // + // label15 + // + this.label15.AutoSize = true; + this.label15.Location = new System.Drawing.Point(74, 25); + this.label15.Name = "label15"; + this.label15.Size = new System.Drawing.Size(29, 13); + this.label15.TabIndex = 29; + this.label15.Text = "Top:"; + // + // txtCropBottom + // + this.txtCropBottom.Location = new System.Drawing.Point(261, 22); + this.txtCropBottom.Name = "txtCropBottom"; + this.txtCropBottom.Size = new System.Drawing.Size(34, 20); + this.txtCropBottom.TabIndex = 28; + this.txtCropBottom.Text = "8000"; + // + // label17 + // + this.label17.AutoSize = true; + this.label17.Location = new System.Drawing.Point(144, 25); + this.label17.Name = "label17"; + this.label17.Size = new System.Drawing.Size(35, 13); + this.label17.TabIndex = 26; + this.label17.Text = "Right:"; + // + // txtCropRight + // + this.txtCropRight.Location = new System.Drawing.Point(180, 22); + this.txtCropRight.Name = "txtCropRight"; + this.txtCropRight.Size = new System.Drawing.Size(34, 20); + this.txtCropRight.TabIndex = 25; + this.txtCropRight.Text = "8000"; + // + // txtCropTop + // + this.txtCropTop.Location = new System.Drawing.Point(104, 22); + this.txtCropTop.Name = "txtCropTop"; + this.txtCropTop.Size = new System.Drawing.Size(34, 20); + this.txtCropTop.TabIndex = 24; + this.txtCropTop.Text = "8000"; + // + // label14 + // + this.label14.AutoSize = true; + this.label14.Location = new System.Drawing.Point(6, 25); + this.label14.Name = "label14"; + this.label14.Size = new System.Drawing.Size(28, 13); + this.label14.TabIndex = 16; + this.label14.Text = "Left:"; + // + // txtCropLeft + // + this.txtCropLeft.Location = new System.Drawing.Point(34, 22); + this.txtCropLeft.Name = "txtCropLeft"; + this.txtCropLeft.Size = new System.Drawing.Size(34, 20); + this.txtCropLeft.TabIndex = 15; + this.txtCropLeft.Text = "8000"; + // + // btnDefaults + // + this.btnDefaults.Location = new System.Drawing.Point(447, 262); + this.btnDefaults.Name = "btnDefaults"; + this.btnDefaults.Size = new System.Drawing.Size(75, 23); + this.btnDefaults.TabIndex = 18; + this.btnDefaults.Text = "Defaults"; + this.toolTip1.SetToolTip(this.btnDefaults, "Unless I forgot to update the button\'s code when I changed a default"); + this.btnDefaults.UseVisualStyleBackColor = true; + this.btnDefaults.Click += new System.EventHandler(this.btnDefaults_Click); + // // cbAutoPrescale // this.cbAutoPrescale.AutoSize = true; @@ -602,8 +722,7 @@ this.label8.Name = "label8"; this.label8.Size = new System.Drawing.Size(359, 27); this.label8.TabIndex = 20; - this.label8.Text = " • Best compatibility\r\n • May have trouble with OpenGL-based cores (N64)\r\n" + - ""; + this.label8.Text = " • Best compatibility\r\n • May have trouble with OpenGL-based cores (N64)\r\n"; // // rbD3D9 // @@ -835,6 +954,17 @@ this.cbMenuWindowed.Text = "Menu"; this.cbMenuWindowed.UseVisualStyleBackColor = true; // + // trackbarFrameSizeWindowed + // + this.trackbarFrameSizeWindowed.LargeChange = 1; + this.trackbarFrameSizeWindowed.Location = new System.Drawing.Point(6, 33); + this.trackbarFrameSizeWindowed.Maximum = 2; + this.trackbarFrameSizeWindowed.Name = "trackbarFrameSizeWindowed"; + this.trackbarFrameSizeWindowed.Size = new System.Drawing.Size(99, 42); + this.trackbarFrameSizeWindowed.TabIndex = 21; + this.trackbarFrameSizeWindowed.Value = 1; + this.trackbarFrameSizeWindowed.ValueChanged += new System.EventHandler(this.trackbarFrameSizeWindowed_ValueChanged); + // // cbCaptionWindowed // this.cbCaptionWindowed.AutoSize = true; @@ -856,41 +986,6 @@ this.linkLabel1.Text = "Documentation"; this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked); // - // tbScanlineIntensity - // - this.tbScanlineIntensity.LargeChange = 32; - this.tbScanlineIntensity.Location = new System.Drawing.Point(83, 55); - this.tbScanlineIntensity.Maximum = 256; - this.tbScanlineIntensity.Name = "tbScanlineIntensity"; - this.tbScanlineIntensity.Size = new System.Drawing.Size(70, 42); - this.tbScanlineIntensity.TabIndex = 3; - this.tbScanlineIntensity.TickFrequency = 32; - this.tbScanlineIntensity.TickStyle = System.Windows.Forms.TickStyle.TopLeft; - this.tbScanlineIntensity.Scroll += new System.EventHandler(this.tbScanlineIntensity_Scroll); - this.tbScanlineIntensity.ValueChanged += new System.EventHandler(this.tbScanlineIntensity_Scroll); - // - // trackbarFrameSizeWindowed - // - this.trackbarFrameSizeWindowed.LargeChange = 1; - this.trackbarFrameSizeWindowed.Location = new System.Drawing.Point(6, 33); - this.trackbarFrameSizeWindowed.Maximum = 2; - this.trackbarFrameSizeWindowed.Name = "trackbarFrameSizeWindowed"; - this.trackbarFrameSizeWindowed.Size = new System.Drawing.Size(99, 42); - this.trackbarFrameSizeWindowed.TabIndex = 21; - this.trackbarFrameSizeWindowed.Value = 1; - this.trackbarFrameSizeWindowed.ValueChanged += new System.EventHandler(this.trackbarFrameSizeWindowed_ValueChanged); - // - // btnDefaults - // - this.btnDefaults.Location = new System.Drawing.Point(447, 262); - this.btnDefaults.Name = "btnDefaults"; - this.btnDefaults.Size = new System.Drawing.Size(75, 23); - this.btnDefaults.TabIndex = 18; - this.btnDefaults.Text = "Defaults"; - this.toolTip1.SetToolTip(this.btnDefaults, "Unless I forgot to update the button\'s code when I changed a default"); - this.btnDefaults.UseVisualStyleBackColor = true; - this.btnDefaults.Click += new System.EventHandler(this.btnDefaults_Click); - // // DisplayConfigLite // this.AcceptButton = this.btnOk; @@ -908,6 +1003,7 @@ this.Text = "Display Configuration"; this.groupBox1.ResumeLayout(false); this.groupBox1.PerformLayout(); + ((System.ComponentModel.ISupportInitialize)(this.tbScanlineIntensity)).EndInit(); this.grpFinalFilter.ResumeLayout(false); this.grpFinalFilter.PerformLayout(); this.grpARSelection.ResumeLayout(false); @@ -915,6 +1011,8 @@ this.tabControl1.ResumeLayout(false); this.tpAR.ResumeLayout(false); this.tpAR.PerformLayout(); + this.groupBox6.ResumeLayout(false); + this.groupBox6.PerformLayout(); ((System.ComponentModel.ISupportInitialize)(this.nudPrescale)).EndInit(); this.tpDispMethod.ResumeLayout(false); this.groupBox3.ResumeLayout(false); @@ -929,7 +1027,6 @@ this.groupBox4.PerformLayout(); this.groupBox2.ResumeLayout(false); this.groupBox2.PerformLayout(); - ((System.ComponentModel.ISupportInitialize)(this.tbScanlineIntensity)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.trackbarFrameSizeWindowed)).EndInit(); this.ResumeLayout(false); this.PerformLayout(); @@ -1009,5 +1106,14 @@ private System.Windows.Forms.CheckBox cbFullscreenHacks; private System.Windows.Forms.Button btnDefaults; private System.Windows.Forms.ToolTip toolTip1; + private System.Windows.Forms.GroupBox groupBox6; + private System.Windows.Forms.Label label16; + private System.Windows.Forms.Label label15; + private System.Windows.Forms.TextBox txtCropBottom; + private System.Windows.Forms.Label label17; + private System.Windows.Forms.TextBox txtCropRight; + private System.Windows.Forms.TextBox txtCropTop; + private System.Windows.Forms.Label label14; + private System.Windows.Forms.TextBox txtCropLeft; } } \ No newline at end of file diff --git a/BizHawk.Client.EmuHawk/config/DisplayConfigLite.cs b/BizHawk.Client.EmuHawk/config/DisplayConfigLite.cs index 1c5179f74f..a2cd975168 100644 --- a/BizHawk.Client.EmuHawk/config/DisplayConfigLite.cs +++ b/BizHawk.Client.EmuHawk/config/DisplayConfigLite.cs @@ -85,6 +85,11 @@ namespace BizHawk.Client.EmuHawk if (Global.Config.DispCustomUserARY != -1) txtCustomARY.Text = Global.Config.DispCustomUserARY.ToString(); + txtCropLeft.Text = Global.Config.DispCropLeft.ToString(); + txtCropTop.Text = Global.Config.DispCropTop.ToString(); + txtCropRight.Text = Global.Config.DispCropRight.ToString(); + txtCropBottom.Text = Global.Config.DispCropBottom.ToString(); + RefreshAspectRatioOptions(); } @@ -173,6 +178,11 @@ namespace BizHawk.Client.EmuHawk if(rbD3D9.Checked) Global.Config.DispMethod = Config.EDispMethod.SlimDX9; + int.TryParse(txtCropLeft.Text, out Global.Config.DispCropLeft); + int.TryParse(txtCropTop.Text, out Global.Config.DispCropTop); + int.TryParse(txtCropRight.Text, out Global.Config.DispCropRight); + int.TryParse(txtCropBottom.Text, out Global.Config.DispCropBottom); + if (oldDisplayMethod != Global.Config.DispMethod) NeedReset = true; diff --git a/BizHawk.Client.EmuHawk/config/DisplayConfigLite.resx b/BizHawk.Client.EmuHawk/config/DisplayConfigLite.resx index 60237ce856..c5e4444e45 100644 --- a/BizHawk.Client.EmuHawk/config/DisplayConfigLite.resx +++ b/BizHawk.Client.EmuHawk/config/DisplayConfigLite.resx @@ -126,4 +126,7 @@ For Windows operating systems >= Vista, with some video cards, the monitors may flicker when going 'windowed fullscreen' while the system disobeys us and goes actual fullscreen instead. This hack prevents that, but may increase frame latency (since in Microsoft's new and disimproved operating systems, windowed mode things may have higher latency) + + 17, 17 + \ No newline at end of file From 578bb546f3cc4bbbda1f0c26acf06d9f4b3d8800 Mon Sep 17 00:00:00 2001 From: zeromus Date: Fri, 18 Jan 2019 01:00:07 -0500 Subject: [PATCH 211/301] bad attempt at implementing user crop area. need to do differently. needs to happen.. like... as soon as we get the video provider. --- .../DisplayManager/DisplayManager.cs | 56 +++++++++++++++++-- .../DisplayManager/Filters/Gui.cs | 27 +++++++-- 2 files changed, 73 insertions(+), 10 deletions(-) diff --git a/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs b/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs index fc7ccbc84b..b1fa0804f1 100644 --- a/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs +++ b/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs @@ -222,6 +222,30 @@ namespace BizHawk.Client.EmuHawk //add the first filter, encompassing output from the emulator core chain.AddFilter(fInput, "input"); + Size currSize = chain_insize; + + //apply user's choice of cropping + //NOTE 1. this is going to break the positioning of elements in lua + //we COULD change how this works to apply it at a different point; but let's wait for someone to ask for it + //we can offer "fix the lua script" as a response, as well, to rebuff them + //NOTE 2. this is an inefficient way of doing it. this could be done if we use 'art' everywhere instead of textures. + //then, we could adjust the uv coords and carry on, rather than doing this extra resolving step. + //Well.... not today + int cropX = Global.Config.DispCropLeft + Global.Config.DispCropRight; + int cropY = Global.Config.DispCropTop + Global.Config.DispCropBottom; + if (cropX != 0 || cropY != 0) + { + currSize.Width -= cropX; + currSize.Height -= cropY; + + Filters.FinalPresentation fCrop = new Filters.FinalPresentation(currSize); + fCrop.Config_Crop = true; + fCrop.Crop = new Rectangle(Global.Config.DispCropLeft, Global.Config.DispCropTop, cropX, cropY); + fCrop.GuiRenderer = Renderer; + fCrop.GL = GL; + chain.AddFilter(fCrop, "crop"); + } + //if a non-zero padding is required, add a filter to allow for that //note, we have two sources of padding right now.. one can come from the videoprovider and one from the user. //we're combining these now and just using black, for sake of being lean, despite the discussion below: @@ -231,7 +255,7 @@ namespace BizHawk.Client.EmuHawk if (padding.Vertical != 0 || padding.Horizontal != 0) { //TODO - add another filter just for this, its cumbersome to use final presentation... I think. but maybe theres enough similarities to justify it. - Size size = chain_insize; + Size size = currSize; size.Width += padding.Horizontal; size.Height += padding.Vertical; Filters.FinalPresentation fPadding = new Filters.FinalPresentation(size); @@ -628,10 +652,18 @@ namespace BizHawk.Client.EmuHawk bool simulate = job.simulate; Size chain_outsize = job.chain_outsize; + int vpWidth = videoProvider.BufferWidth; + int vpHeight = videoProvider.BufferHeight; + + //the easiest way to implement crop now is to do it early by adapting the videoprovider + //it might be more performant to integrate it into the filter chain somehow, but that's hard + int cropX = Global.Config.DispCropLeft + Global.Config.DispCropRight; + int cropY = Global.Config.DispCropTop + Global.Config.DispCropBottom; + //simulate = true; - int vw = videoProvider.BufferWidth; - int vh = videoProvider.BufferHeight; + int vw = vpWidth; + int vh = vpHeight; if (Global.Config.DispFixAspectRatio) { @@ -647,7 +679,7 @@ namespace BizHawk.Client.EmuHawk } if (Global.Config.DispManagerAR == Config.EDispManagerAR.CustomRatio) { - FixRatio(Global.Config.DispCustomUserARX, Global.Config.DispCustomUserARY, videoProvider.BufferWidth, videoProvider.BufferHeight, out vw, out vh); + FixRatio(Global.Config.DispCustomUserARX, Global.Config.DispCustomUserARY, vpWidth, vpHeight, out vw, out vh); } } @@ -657,8 +689,8 @@ namespace BizHawk.Client.EmuHawk int[] videoBuffer = videoProvider.GetVideoBuffer(); - int bufferWidth = videoProvider.BufferWidth; - int bufferHeight = videoProvider.BufferHeight; + int bufferWidth = vpWidth; + int bufferHeight = vpHeight; bool isGlTextureId = videoBuffer.Length == 1; BitmapBuffer bb = null; @@ -669,6 +701,7 @@ namespace BizHawk.Client.EmuHawk { //FYI: this is a million years from happening on n64, since it's all geriatric non-FBO code //is it workable for saturn? + //TODO - this won't respect the user's selected crop. please don't crop this platform or else I'll have to implement this through the videoTexture = GL.WrapGLTexture2d(new IntPtr(videoBuffer[0]), bufferWidth, bufferHeight); } else @@ -685,6 +718,17 @@ namespace BizHawk.Client.EmuHawk } } + ////apply user's choice of cropping + //int cropX = Global.Config.DispCropLeft + Global.Config.DispCropRight; + //int cropY = Global.Config.DispCropTop + Global.Config.DispCropBottom; + //bufferWidth -= cropX; + //bufferHeight -= cropY; + + //Art videoTextureArt = new Art(videoTexture); + //videoTextureArt.Width -= cropX; + //videoTextureArt.Height -= cropY; + //videoTextureArt.u + //record the size of what we received, since lua and stuff is gonna want to draw onto it currEmuWidth = bufferWidth; currEmuHeight = bufferHeight; diff --git a/BizHawk.Client.EmuHawk/DisplayManager/Filters/Gui.cs b/BizHawk.Client.EmuHawk/DisplayManager/Filters/Gui.cs index 0e12282bd8..1ca514506f 100644 --- a/BizHawk.Client.EmuHawk/DisplayManager/Filters/Gui.cs +++ b/BizHawk.Client.EmuHawk/DisplayManager/Filters/Gui.cs @@ -181,9 +181,9 @@ namespace BizHawk.Client.EmuHawk.Filters public eFilterOption FilterOption = eFilterOption.None; public RetroShaderChain BicubicFilter; - public FinalPresentation(Size size) + public FinalPresentation(Size outputSize) { - this.OutputSize = size; + this.OutputSize = outputSize; } Size OutputSize, InputSize; @@ -194,11 +194,14 @@ namespace BizHawk.Client.EmuHawk.Filters public bool Flip; public IGL GL; bool nop; + public Rectangle Crop; LetterboxingLogic LL; Size ContentSize; public bool Config_FixAspectRatio, Config_FixScaleInteger, Config_PadOnly; + public bool Config_Crop; + /// /// only use with Config_PadOnly /// @@ -223,6 +226,15 @@ namespace BizHawk.Client.EmuHawk.Filters public override Size PresizeInput(string channel, Size size) { + if (Config_Crop) + { + LL = new LetterboxingLogic(); + LL.vx += -Crop.Left; + LL.vy += -Crop.Top; + LL.vw = size.Width - Crop.Width; + LL.vh = size.Height - Crop.Height; + } + if (FilterOption != eFilterOption.Bicubic) return size; @@ -265,7 +277,11 @@ namespace BizHawk.Client.EmuHawk.Filters FindInput().SurfaceDisposition = SurfaceDisposition.Texture; DeclareOutput(new SurfaceState(new SurfaceFormat(OutputSize), SurfaceDisposition.RenderTarget)); InputSize = state.SurfaceFormat.Size; - if (Config_PadOnly) + if (Config_Crop) + { + int zzz = 9; + } + else if (Config_PadOnly) { //TODO - redundant fix LL = new LetterboxingLogic(); @@ -286,6 +302,7 @@ namespace BizHawk.Client.EmuHawk.Filters LL.vx += Padding.Left; LL.vy += Padding.Top; } + ContentSize = new Size(LL.vw,LL.vh); if (InputSize == OutputSize) //any reason we need to check vx and vy? @@ -343,7 +360,9 @@ namespace BizHawk.Client.EmuHawk.Filters GuiRenderer.Modelview.Scale(1, -1); GuiRenderer.Modelview.Translate(0, -LL.vh); } - GuiRenderer.Draw(InputTexture,0,0,LL.vw,LL.vh); + if (Config_Crop) + GuiRenderer.Draw(InputTexture, 0, 0, InputSize.Width, InputSize.Height); + else GuiRenderer.Draw(InputTexture, 0, 0, LL.vw, LL.vh); GuiRenderer.End(); } From e53d861db48edc11d3a8807dd6d0b138ee4f64ff Mon Sep 17 00:00:00 2001 From: zeromus Date: Fri, 18 Jan 2019 01:00:24 -0500 Subject: [PATCH 212/301] Revert "bad attempt at implementing user crop area" --- .../DisplayManager/DisplayManager.cs | 56 ++----------------- .../DisplayManager/Filters/Gui.cs | 27 ++------- 2 files changed, 10 insertions(+), 73 deletions(-) diff --git a/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs b/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs index b1fa0804f1..fc7ccbc84b 100644 --- a/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs +++ b/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs @@ -222,30 +222,6 @@ namespace BizHawk.Client.EmuHawk //add the first filter, encompassing output from the emulator core chain.AddFilter(fInput, "input"); - Size currSize = chain_insize; - - //apply user's choice of cropping - //NOTE 1. this is going to break the positioning of elements in lua - //we COULD change how this works to apply it at a different point; but let's wait for someone to ask for it - //we can offer "fix the lua script" as a response, as well, to rebuff them - //NOTE 2. this is an inefficient way of doing it. this could be done if we use 'art' everywhere instead of textures. - //then, we could adjust the uv coords and carry on, rather than doing this extra resolving step. - //Well.... not today - int cropX = Global.Config.DispCropLeft + Global.Config.DispCropRight; - int cropY = Global.Config.DispCropTop + Global.Config.DispCropBottom; - if (cropX != 0 || cropY != 0) - { - currSize.Width -= cropX; - currSize.Height -= cropY; - - Filters.FinalPresentation fCrop = new Filters.FinalPresentation(currSize); - fCrop.Config_Crop = true; - fCrop.Crop = new Rectangle(Global.Config.DispCropLeft, Global.Config.DispCropTop, cropX, cropY); - fCrop.GuiRenderer = Renderer; - fCrop.GL = GL; - chain.AddFilter(fCrop, "crop"); - } - //if a non-zero padding is required, add a filter to allow for that //note, we have two sources of padding right now.. one can come from the videoprovider and one from the user. //we're combining these now and just using black, for sake of being lean, despite the discussion below: @@ -255,7 +231,7 @@ namespace BizHawk.Client.EmuHawk if (padding.Vertical != 0 || padding.Horizontal != 0) { //TODO - add another filter just for this, its cumbersome to use final presentation... I think. but maybe theres enough similarities to justify it. - Size size = currSize; + Size size = chain_insize; size.Width += padding.Horizontal; size.Height += padding.Vertical; Filters.FinalPresentation fPadding = new Filters.FinalPresentation(size); @@ -652,18 +628,10 @@ namespace BizHawk.Client.EmuHawk bool simulate = job.simulate; Size chain_outsize = job.chain_outsize; - int vpWidth = videoProvider.BufferWidth; - int vpHeight = videoProvider.BufferHeight; - - //the easiest way to implement crop now is to do it early by adapting the videoprovider - //it might be more performant to integrate it into the filter chain somehow, but that's hard - int cropX = Global.Config.DispCropLeft + Global.Config.DispCropRight; - int cropY = Global.Config.DispCropTop + Global.Config.DispCropBottom; - //simulate = true; - int vw = vpWidth; - int vh = vpHeight; + int vw = videoProvider.BufferWidth; + int vh = videoProvider.BufferHeight; if (Global.Config.DispFixAspectRatio) { @@ -679,7 +647,7 @@ namespace BizHawk.Client.EmuHawk } if (Global.Config.DispManagerAR == Config.EDispManagerAR.CustomRatio) { - FixRatio(Global.Config.DispCustomUserARX, Global.Config.DispCustomUserARY, vpWidth, vpHeight, out vw, out vh); + FixRatio(Global.Config.DispCustomUserARX, Global.Config.DispCustomUserARY, videoProvider.BufferWidth, videoProvider.BufferHeight, out vw, out vh); } } @@ -689,8 +657,8 @@ namespace BizHawk.Client.EmuHawk int[] videoBuffer = videoProvider.GetVideoBuffer(); - int bufferWidth = vpWidth; - int bufferHeight = vpHeight; + int bufferWidth = videoProvider.BufferWidth; + int bufferHeight = videoProvider.BufferHeight; bool isGlTextureId = videoBuffer.Length == 1; BitmapBuffer bb = null; @@ -701,7 +669,6 @@ namespace BizHawk.Client.EmuHawk { //FYI: this is a million years from happening on n64, since it's all geriatric non-FBO code //is it workable for saturn? - //TODO - this won't respect the user's selected crop. please don't crop this platform or else I'll have to implement this through the videoTexture = GL.WrapGLTexture2d(new IntPtr(videoBuffer[0]), bufferWidth, bufferHeight); } else @@ -718,17 +685,6 @@ namespace BizHawk.Client.EmuHawk } } - ////apply user's choice of cropping - //int cropX = Global.Config.DispCropLeft + Global.Config.DispCropRight; - //int cropY = Global.Config.DispCropTop + Global.Config.DispCropBottom; - //bufferWidth -= cropX; - //bufferHeight -= cropY; - - //Art videoTextureArt = new Art(videoTexture); - //videoTextureArt.Width -= cropX; - //videoTextureArt.Height -= cropY; - //videoTextureArt.u - //record the size of what we received, since lua and stuff is gonna want to draw onto it currEmuWidth = bufferWidth; currEmuHeight = bufferHeight; diff --git a/BizHawk.Client.EmuHawk/DisplayManager/Filters/Gui.cs b/BizHawk.Client.EmuHawk/DisplayManager/Filters/Gui.cs index 1ca514506f..0e12282bd8 100644 --- a/BizHawk.Client.EmuHawk/DisplayManager/Filters/Gui.cs +++ b/BizHawk.Client.EmuHawk/DisplayManager/Filters/Gui.cs @@ -181,9 +181,9 @@ namespace BizHawk.Client.EmuHawk.Filters public eFilterOption FilterOption = eFilterOption.None; public RetroShaderChain BicubicFilter; - public FinalPresentation(Size outputSize) + public FinalPresentation(Size size) { - this.OutputSize = outputSize; + this.OutputSize = size; } Size OutputSize, InputSize; @@ -194,14 +194,11 @@ namespace BizHawk.Client.EmuHawk.Filters public bool Flip; public IGL GL; bool nop; - public Rectangle Crop; LetterboxingLogic LL; Size ContentSize; public bool Config_FixAspectRatio, Config_FixScaleInteger, Config_PadOnly; - public bool Config_Crop; - /// /// only use with Config_PadOnly /// @@ -226,15 +223,6 @@ namespace BizHawk.Client.EmuHawk.Filters public override Size PresizeInput(string channel, Size size) { - if (Config_Crop) - { - LL = new LetterboxingLogic(); - LL.vx += -Crop.Left; - LL.vy += -Crop.Top; - LL.vw = size.Width - Crop.Width; - LL.vh = size.Height - Crop.Height; - } - if (FilterOption != eFilterOption.Bicubic) return size; @@ -277,11 +265,7 @@ namespace BizHawk.Client.EmuHawk.Filters FindInput().SurfaceDisposition = SurfaceDisposition.Texture; DeclareOutput(new SurfaceState(new SurfaceFormat(OutputSize), SurfaceDisposition.RenderTarget)); InputSize = state.SurfaceFormat.Size; - if (Config_Crop) - { - int zzz = 9; - } - else if (Config_PadOnly) + if (Config_PadOnly) { //TODO - redundant fix LL = new LetterboxingLogic(); @@ -302,7 +286,6 @@ namespace BizHawk.Client.EmuHawk.Filters LL.vx += Padding.Left; LL.vy += Padding.Top; } - ContentSize = new Size(LL.vw,LL.vh); if (InputSize == OutputSize) //any reason we need to check vx and vy? @@ -360,9 +343,7 @@ namespace BizHawk.Client.EmuHawk.Filters GuiRenderer.Modelview.Scale(1, -1); GuiRenderer.Modelview.Translate(0, -LL.vh); } - if (Config_Crop) - GuiRenderer.Draw(InputTexture, 0, 0, InputSize.Width, InputSize.Height); - else GuiRenderer.Draw(InputTexture, 0, 0, LL.vw, LL.vh); + GuiRenderer.Draw(InputTexture,0,0,LL.vw,LL.vh); GuiRenderer.End(); } From b164d8b31cb63e6adb197e445db0983d366a263b Mon Sep 17 00:00:00 2001 From: zeromus Date: Fri, 18 Jan 2019 01:15:52 -0500 Subject: [PATCH 213/301] implement user crop area as a negative padding fixes #1453 --- BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs b/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs index fc7ccbc84b..377edac627 100644 --- a/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs +++ b/BizHawk.Client.EmuHawk/DisplayManager/DisplayManager.cs @@ -181,6 +181,13 @@ namespace BizHawk.Client.EmuHawk padding.Bottom += core_padding.Height - core_padding.Height / 2; } + //apply user's crop selections as a negative padding (believe it or not, this largely works) + //is there an issue with the aspect ratio? I dont know--but if there is, there would be with the padding too + padding.Left -= Global.Config.DispCropLeft; + padding.Right -= Global.Config.DispCropRight; + padding.Top -= Global.Config.DispCropTop; + padding.Bottom -= Global.Config.DispCropBottom; + return padding; } From 054048a907d018d277b26d17eda401c7927fb296 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 18 Jan 2019 20:21:13 +1000 Subject: [PATCH 214/301] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d89236f51c..6909b3cdd5 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,9 @@ A "backport" release, [1.13.2](https://github.com/TASVideos/BizHawk/releases/tag ### GNU+Linux -**IMPORTANT**: The Mono "port" is a work-in-progress! It is *not* complete, does *not* look very nice, and is *not* ready for anything that needs accuracy. +*...or, as I’ve recently taken to calling it, Mono+GNU+Linux.* + +**IMPORTANT**: Linux support is a work-in-progress! It is *not* complete, does *not* look very nice, and is *not* ready for anything that needs accuracy. You'll need to either build BizHawk yourself (see [*Building*](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-1) below), or download a dev build (see [*Testing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) below). From 95f45da9dae0160c5f72ffa46834801593c07e19 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 18 Jan 2019 20:24:07 +1000 Subject: [PATCH 215/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6909b3cdd5..be06247a8b 100644 --- a/README.md +++ b/README.md @@ -123,7 +123,7 @@ The runtime dependencies are Mono (complete) + Mono VB.NET, WINE (just `libwine` Run `EmuHawkMono.sh` to give Mono the library and executable paths — you can run it from anywhere, so putting it in a .desktop file is fine. If running the script doesn't start EmuHawk, you may need to edit it (if you use a terminal, it will say so in the output). -If you run `EmuHawkMono.sh` from a terminal, note that `File > Exit (Alt+F4)` doesn't terminate the process correctly, you'll need to send SIGINT (`^C`). The systems that currently work are: Game Boy + GBC (GBHawk), NES (NesHawk), Sega Master System, Atari 7800, Commodore 64, ColecoVision, IntelliVision, TurboGrafx, and ZX Spectrum. See [#1430](https://github.com/TASVideos/BizHawk/issues/1430) for progress. +If you run `EmuHawkMono.sh` from a terminal, note that `File > Exit (Alt+F4)` doesn't terminate the process correctly, you'll need to send SIGINT (`^C`). The systems that currently work are: GB + GBC (GBHawk), NES (NesHawk), SMS, Atari 7800, and some classic home computers. See [#1430](https://github.com/TASVideos/BizHawk/issues/1430) for progress. [to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) From c15916d76a6f3450f8958415f044f2aaec37794f Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 18 Jan 2019 20:27:10 +1000 Subject: [PATCH 216/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index be06247a8b..0c5cf4acea 100644 --- a/README.md +++ b/README.md @@ -123,7 +123,7 @@ The runtime dependencies are Mono (complete) + Mono VB.NET, WINE (just `libwine` Run `EmuHawkMono.sh` to give Mono the library and executable paths — you can run it from anywhere, so putting it in a .desktop file is fine. If running the script doesn't start EmuHawk, you may need to edit it (if you use a terminal, it will say so in the output). -If you run `EmuHawkMono.sh` from a terminal, note that `File > Exit (Alt+F4)` doesn't terminate the process correctly, you'll need to send SIGINT (`^C`). The systems that currently work are: GB + GBC (GBHawk), NES (NesHawk), SMS, Atari 7800, and some classic home computers. See [#1430](https://github.com/TASVideos/BizHawk/issues/1430) for progress. +The systems that currently work are: GB + GBC (GBHawk), NES (NesHawk), SMS, Atari 7800, and some classic home computers. See [#1430](https://github.com/TASVideos/BizHawk/issues/1430) for progress. [to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) From ad6790cfb774ee4fe0cc9bfb0866d59f0b976943 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Fri, 18 Jan 2019 18:48:50 -0600 Subject: [PATCH 217/301] SubNESHawk: Add subframe reset --- .../Consoles/Nintendo/NES/NES.Core.cs | 9 +++++++++ .../SubNESHawk/SubNESHawk.IEmulator.cs | 18 +++++++++++++++++- .../SubNESHawk/SubNESHawk.IStatable.cs | 4 ++++ .../Consoles/Nintendo/SubNESHawk/SubNESHawk.cs | 4 +++- 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs index 40d3106894..ac9f0d3b26 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.Core.cs @@ -197,6 +197,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES } } + // Add in the reset timing float control for subneshawk + if (using_reset_timing && (ControllerDefinition.FloatControls.Count() == 0)) + { + ControllerDefinition.FloatControls.Add("Reset Cycle"); + ControllerDefinition.FloatRanges.Add(new ControllerDefinition.FloatRange(0, 0, 500000)); + } + // don't replace the magicSoundProvider on reset, as it's not needed // if (magicSoundProvider != null) magicSoundProvider.Dispose(); @@ -419,6 +426,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES public bool current_strobe; public bool new_strobe; public bool alt_lag; + // variable used with subneshawk to trigger reset at specific cycle after reset + public bool using_reset_timing = false; // this function will run one step of the ppu // it will return whether the controller is read or not. public void do_single_step(IController controller, out bool cont_read, out bool frame_done) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs index 106ebbd9b6..25a5a0b632 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs @@ -30,11 +30,15 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk HardReset(); } + reset_frame = false; if (controller.IsPressed("Reset")) { - SoftReset(); + reset_frame = true; } + reset_cycle = controller.GetFloat("Reset Cycle"); + reset_cycle_int = (int)Math.Floor(reset_cycle); + _islag = true; subnes.alt_lag = true; @@ -47,6 +51,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk if (pass_a_frame) { subnes.videoProvider.FillFrameBuffer(); + current_cycle = 0; } _islag = subnes.alt_lag; @@ -57,19 +62,30 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk VBL_CNT++; } + reset_frame = false; return ret; } public bool stop_cur_frame; public bool pass_new_input; public bool pass_a_frame; + public bool reset_frame; + public int current_cycle; + public float reset_cycle; + public int reset_cycle_int; public void do_frame(IController controller) { stop_cur_frame = false; while (!stop_cur_frame) { + if (reset_frame && (current_cycle == reset_cycle_int)) + { + SoftReset(); + reset_frame = false; + } subnes.do_single_step(controller, out pass_new_input, out pass_a_frame); + current_cycle++; stop_cur_frame |= pass_a_frame; stop_cur_frame |= pass_new_input; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs index 201b6d584e..110e5274b0 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IStatable.cs @@ -53,7 +53,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk ser.Sync("Frame", ref _frame); ser.Sync("IsLag", ref _islag); ser.Sync("pass_a_frame", ref pass_a_frame); + ser.Sync("reset_frame", ref reset_frame); ser.Sync("pass_new_input", ref pass_new_input); + ser.Sync("current_cycle", ref current_cycle); + ser.Sync("reset_cycle", ref reset_cycle); + ser.Sync("reset_cycle_int", ref reset_cycle_int); ser.Sync("VBL_CNT", ref VBL_CNT); } } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs index 05c61c4680..2bbf28d1fb 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs @@ -43,8 +43,9 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk SetupMemoryDomains(); + subnes.using_reset_timing = true; HardReset(); - + current_cycle = 0; VBL_CNT = 0; } @@ -59,6 +60,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk subnes.cpu.NESSoftReset(); subnes.apu.NESSoftReset(); subnes.ppu.NESSoftReset(); + current_cycle = 0; } public DisplayType Region => DisplayType.NTSC; From 8e99908c4776c36ab7f3ab4dcbc39cd4074c2524 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 19 Jan 2019 09:23:22 -0600 Subject: [PATCH 218/301] SubNESHawk: Add ppu cycle to tracer --- BizHawk.Emulation.Cores/CPUs/MOS 6502X/MOS6502X.cs | 9 +++++++-- .../Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs | 2 ++ .../Consoles/Nintendo/SubNESHawk/SubNESHawk.cs | 4 +++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/BizHawk.Emulation.Cores/CPUs/MOS 6502X/MOS6502X.cs b/BizHawk.Emulation.Cores/CPUs/MOS 6502X/MOS6502X.cs index 83d94aad78..2b0965e0ed 100644 --- a/BizHawk.Emulation.Cores/CPUs/MOS 6502X/MOS6502X.cs +++ b/BizHawk.Emulation.Cores/CPUs/MOS 6502X/MOS6502X.cs @@ -74,7 +74,7 @@ namespace BizHawk.Emulation.Cores.Components.M6502 "{0:X4}: {1,-9} {2} ", PC, rawbytes, disasm).PadRight(32), RegisterInfo = string.Format( - "A:{0:X2} X:{1:X2} Y:{2:X2} SP:{4:X2} P:{3:X2} {6}{7}{8}{9}{10}{11}{12}{13} Cy:{5}", + "A:{0:X2} X:{1:X2} Y:{2:X2} SP:{4:X2} P:{3:X2} {6}{7}{8}{9}{10}{11}{12}{13} Cy:{5} PPU-Cy:{15}", A, X, Y, P, S, TotalExecutedCycles, FlagN ? "N" : "n", FlagV ? "V" : "v", @@ -84,7 +84,8 @@ namespace BizHawk.Emulation.Cores.Components.M6502 FlagI ? "I" : "i", FlagZ ? "Z" : "z", FlagC ? "C" : "c", - !RDY ? "R" : "r") + !RDY ? "R" : "r", + ext_ppu_cycle) }; } @@ -120,6 +121,9 @@ namespace BizHawk.Emulation.Cores.Components.M6502 public bool NMI; public bool RDY; + // ppu cycle (used with SubNESHawk) + public int ext_ppu_cycle = 0; + public void SyncState(Serializer ser) { ser.BeginSection("MOS6502X"); @@ -143,6 +147,7 @@ namespace BizHawk.Emulation.Cores.Components.M6502 ser.Sync("interrupt_pending", ref interrupt_pending); ser.Sync("branch_irq_hack", ref branch_irq_hack); ser.Sync("rdy_freeze", ref rdy_freeze); + ser.Sync("ext_ppu_cycle", ref ext_ppu_cycle); ser.EndSection(); } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs index 25a5a0b632..ba5b1c0638 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.IEmulator.cs @@ -52,6 +52,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk { subnes.videoProvider.FillFrameBuffer(); current_cycle = 0; + subnes.cpu.ext_ppu_cycle = current_cycle; } _islag = subnes.alt_lag; @@ -86,6 +87,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk } subnes.do_single_step(controller, out pass_new_input, out pass_a_frame); current_cycle++; + subnes.cpu.ext_ppu_cycle = current_cycle; stop_cur_frame |= pass_a_frame; stop_cur_frame |= pass_new_input; } diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs index 2bbf28d1fb..d74af9ed40 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs @@ -36,7 +36,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk ser.Register(subnes.videoProvider); ser.Register(subnes.magicSoundProvider); - _tracer = new TraceBuffer { Header = subnes.cpu.TraceHeader }; + _tracer = new TraceBuffer { Header = "6502: PC, machine code, mnemonic, operands, registers (A, X, Y, P, SP), flags (NVTBDIZCR), CPU Cycle, PPU Cycle" }; ser.Register(_tracer); ServiceProvider = ser; @@ -46,6 +46,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk subnes.using_reset_timing = true; HardReset(); current_cycle = 0; + subnes.cpu.ext_ppu_cycle = current_cycle; VBL_CNT = 0; } @@ -61,6 +62,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk subnes.apu.NESSoftReset(); subnes.ppu.NESSoftReset(); current_cycle = 0; + subnes.cpu.ext_ppu_cycle = current_cycle; } public DisplayType Region => DisplayType.NTSC; From 2bddf3663e0b48dc53c01fb55dd61eaa733292c5 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 19 Jan 2019 13:30:42 -0600 Subject: [PATCH 219/301] TAStudio: Fix some bugs in new from menues --- .../conversions/MovieConversionExtensions.cs | 24 +++++++++++++++++-- .../movie/tasproj/TasStateManager.cs | 12 +++++++++- .../tools/TAStudio/TAStudio.MenuItems.cs | 22 ++++++++++------- 3 files changed, 47 insertions(+), 11 deletions(-) diff --git a/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs b/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs index 0cd32aa7ef..99716f7617 100644 --- a/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs +++ b/BizHawk.Client.Common/movie/conversions/MovieConversionExtensions.cs @@ -126,7 +126,17 @@ namespace BizHawk.Client.Common.MovieConversionExtensions public static TasMovie ConvertToSavestateAnchoredMovie(this TasMovie old, int frame, byte[] savestate) { - string newFilename = old.Filename + "." + TasMovie.Extension; + string newFilename = old.Filename; + + if (old.Filename.Contains("tasproj")) + { + newFilename = newFilename.Remove(newFilename.Length - 7, 7); + newFilename = newFilename + "nfn." + TasMovie.Extension; + } + else + { + newFilename = old.Filename + "." + TasMovie.Extension; + } if (File.Exists(newFilename)) { @@ -201,7 +211,17 @@ namespace BizHawk.Client.Common.MovieConversionExtensions public static TasMovie ConvertToSaveRamAnchoredMovie(this TasMovie old, byte[] saveRam) { - string newFilename = old.Filename + "." + TasMovie.Extension; + string newFilename = old.Filename; + + if (old.Filename.Contains("tasproj")) + { + newFilename = newFilename.Remove(newFilename.Length - 7, 7); + newFilename = newFilename + "nfsr." + TasMovie.Extension; + } + else + { + newFilename = old.Filename + "." + TasMovie.Extension; + } if (File.Exists(newFilename)) { diff --git a/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs b/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs index 3b2920814c..671fb95c05 100644 --- a/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs +++ b/BizHawk.Client.Common/movie/tasproj/TasStateManager.cs @@ -384,7 +384,17 @@ namespace BizHawk.Client.Common { if (_states.Any()) { - StateManagerState power = _states.Values.First(s => s.Frame == 0); + var temp_state = _states.Values; + StateManagerState power = null; + if (temp_state[0].Frame==0) + { + power = _states.Values.First(s => s.Frame == 0); + } + else + { + power = _states.Values[0]; + } + _states.Clear(); SetState(0, power.State); Used = (ulong)power.State.Length; diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs index f2eb9db437..9097bb66f4 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs @@ -1453,14 +1453,20 @@ namespace BizHawk.Client.EmuHawk { if (AskSaveChanges()) { - int index = TasView.SelectedRows.First(); - GoToFrame(index); - - TasMovie newProject = CurrentTasMovie.ConvertToSaveRamAnchoredMovie( - SaveRamEmulator.CloneSaveRam()); - - Mainform.PauseEmulator(); - LoadFile(new FileInfo(newProject.Filename), true); + if (SaveRamEmulator.CloneSaveRam() != null) + { + int index = 0; + if (TasView.SelectedRows.Count() > 0) { index = TasView.SelectedRows.First(); } + GoToFrame(index); + TasMovie newProject = CurrentTasMovie.ConvertToSaveRamAnchoredMovie( + SaveRamEmulator.CloneSaveRam()); + Mainform.PauseEmulator(); + LoadFile(new FileInfo(newProject.Filename), true); + } + else + { + throw new Exception("No SaveRam"); + } } } From 6e1a19b5f864da039f92ef42f96942a220190173 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 19 Jan 2019 14:02:45 -0600 Subject: [PATCH 220/301] TAStudio: Ask to override existing bk2 file when exporting --- .../tools/TAStudio/TAStudio.MenuItems.cs | 30 +++++++++++++++++-- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs index 9097bb66f4..be508b1bc9 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs @@ -267,17 +267,41 @@ namespace BizHawk.Client.EmuHawk private void ToBk2MenuItem_Click(object sender, EventArgs e) { _autosaveTimer.Stop(); - var bk2 = CurrentTasMovie.ToBk2(true); + var bk2 = CurrentTasMovie.ToBk2(true, true); MessageStatusLabel.Text = "Exporting to .bk2..."; Cursor = Cursors.WaitCursor; Update(); - bk2.Save(); + string d_exp = " not exported."; + var file = new FileInfo(bk2.Filename); + if (file.Exists) + { + GlobalWin.Sound.StopSound(); + var result = MessageBox.Show( + "Overwrite Existing File?", + "Tastudio", + MessageBoxButtons.YesNoCancel, + MessageBoxIcon.Question, + MessageBoxDefaultButton.Button3); + + GlobalWin.Sound.StartSound(); + if (result == DialogResult.Yes) + { + bk2.Save(); + d_exp = " exported."; + } + } + else + { + bk2.Save(); + d_exp = " exported."; + } + if (Settings.AutosaveInterval > 0) { _autosaveTimer.Start(); } - MessageStatusLabel.Text = bk2.Name + " exported."; + MessageStatusLabel.Text = bk2.Name + d_exp; Cursor = Cursors.Default; } From c4b3a7c3b8b6b5991f65ac10a9299a2aa153cd50 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sat, 19 Jan 2019 14:47:12 -0600 Subject: [PATCH 221/301] TAStudio: Update window name when using saveas, Fixes #1444 --- BizHawk.Client.EmuHawk/MainForm.cs | 2 +- BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index c93ebb1d99..a3d9533159 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -1428,7 +1428,7 @@ namespace BizHawk.Client.EmuHawk } } - private void SetWindowText() + public void SetWindowText() { string str = ""; diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs index be508b1bc9..61ec0e85bb 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.MenuItems.cs @@ -169,6 +169,7 @@ namespace BizHawk.Client.EmuHawk _autosaveTimer.Start(); } + Mainform.SetWindowText(); GlobalWin.Sound.StartSound(); } From 0ee9ddc9aaef35375c7f456b3ff25b08099780ac Mon Sep 17 00:00:00 2001 From: zeromus Date: Sun, 20 Jan 2019 02:30:19 -0500 Subject: [PATCH 222/301] for some reason in 482a3ab8f6af9dfbd75ff84694bdfbce8ade62f1 I changed the sln to have x64 and x86 projects instead of anycpu. maybe I had a good reason for that, but I didn't write it in that commit, and so I'm reverting this until someone articulates a good reason --- BizHawk.sln | 120 ---------------------------------------------------- 1 file changed, 120 deletions(-) diff --git a/BizHawk.sln b/BizHawk.sln index 7db07c23e3..2b1a0659ef 100644 --- a/BizHawk.sln +++ b/BizHawk.sln @@ -62,189 +62,69 @@ EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {0CE8B337-08E3-4602-BF10-C4D4C75D2F13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {0CE8B337-08E3-4602-BF10-C4D4C75D2F13}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0CE8B337-08E3-4602-BF10-C4D4C75D2F13}.Debug|x64.ActiveCfg = Debug|Any CPU - {0CE8B337-08E3-4602-BF10-C4D4C75D2F13}.Debug|x64.Build.0 = Debug|Any CPU - {0CE8B337-08E3-4602-BF10-C4D4C75D2F13}.Debug|x86.ActiveCfg = Debug|Any CPU - {0CE8B337-08E3-4602-BF10-C4D4C75D2F13}.Debug|x86.Build.0 = Debug|Any CPU {0CE8B337-08E3-4602-BF10-C4D4C75D2F13}.Release|Any CPU.ActiveCfg = Release|Any CPU {0CE8B337-08E3-4602-BF10-C4D4C75D2F13}.Release|Any CPU.Build.0 = Release|Any CPU - {0CE8B337-08E3-4602-BF10-C4D4C75D2F13}.Release|x64.ActiveCfg = Release|Any CPU - {0CE8B337-08E3-4602-BF10-C4D4C75D2F13}.Release|x64.Build.0 = Release|Any CPU - {0CE8B337-08E3-4602-BF10-C4D4C75D2F13}.Release|x86.ActiveCfg = Release|Any CPU - {0CE8B337-08E3-4602-BF10-C4D4C75D2F13}.Release|x86.Build.0 = Release|Any CPU {24A0AA3C-B25F-4197-B23D-476D6462DBA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {24A0AA3C-B25F-4197-B23D-476D6462DBA0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {24A0AA3C-B25F-4197-B23D-476D6462DBA0}.Debug|x64.ActiveCfg = Debug|Any CPU - {24A0AA3C-B25F-4197-B23D-476D6462DBA0}.Debug|x64.Build.0 = Debug|Any CPU - {24A0AA3C-B25F-4197-B23D-476D6462DBA0}.Debug|x86.ActiveCfg = Debug|Any CPU - {24A0AA3C-B25F-4197-B23D-476D6462DBA0}.Debug|x86.Build.0 = Debug|Any CPU {24A0AA3C-B25F-4197-B23D-476D6462DBA0}.Release|Any CPU.ActiveCfg = Release|Any CPU {24A0AA3C-B25F-4197-B23D-476D6462DBA0}.Release|Any CPU.Build.0 = Release|Any CPU - {24A0AA3C-B25F-4197-B23D-476D6462DBA0}.Release|x64.ActiveCfg = Release|Any CPU - {24A0AA3C-B25F-4197-B23D-476D6462DBA0}.Release|x64.Build.0 = Release|Any CPU - {24A0AA3C-B25F-4197-B23D-476D6462DBA0}.Release|x86.ActiveCfg = Release|Any CPU - {24A0AA3C-B25F-4197-B23D-476D6462DBA0}.Release|x86.Build.0 = Release|Any CPU {866F8D13-0678-4FF9-80A4-A3993FD4D8A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {866F8D13-0678-4FF9-80A4-A3993FD4D8A3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {866F8D13-0678-4FF9-80A4-A3993FD4D8A3}.Debug|x64.ActiveCfg = Debug|Any CPU - {866F8D13-0678-4FF9-80A4-A3993FD4D8A3}.Debug|x64.Build.0 = Debug|Any CPU - {866F8D13-0678-4FF9-80A4-A3993FD4D8A3}.Debug|x86.ActiveCfg = Debug|Any CPU - {866F8D13-0678-4FF9-80A4-A3993FD4D8A3}.Debug|x86.Build.0 = Debug|Any CPU {866F8D13-0678-4FF9-80A4-A3993FD4D8A3}.Release|Any CPU.ActiveCfg = Release|Any CPU {866F8D13-0678-4FF9-80A4-A3993FD4D8A3}.Release|Any CPU.Build.0 = Release|Any CPU - {866F8D13-0678-4FF9-80A4-A3993FD4D8A3}.Release|x64.ActiveCfg = Release|Any CPU - {866F8D13-0678-4FF9-80A4-A3993FD4D8A3}.Release|x64.Build.0 = Release|Any CPU - {866F8D13-0678-4FF9-80A4-A3993FD4D8A3}.Release|x86.ActiveCfg = Release|Any CPU - {866F8D13-0678-4FF9-80A4-A3993FD4D8A3}.Release|x86.Build.0 = Release|Any CPU {DD448B37-BA3F-4544-9754-5406E8094723}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {DD448B37-BA3F-4544-9754-5406E8094723}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DD448B37-BA3F-4544-9754-5406E8094723}.Debug|x64.ActiveCfg = Debug|Any CPU - {DD448B37-BA3F-4544-9754-5406E8094723}.Debug|x64.Build.0 = Debug|Any CPU - {DD448B37-BA3F-4544-9754-5406E8094723}.Debug|x86.ActiveCfg = Debug|Any CPU - {DD448B37-BA3F-4544-9754-5406E8094723}.Debug|x86.Build.0 = Debug|Any CPU {DD448B37-BA3F-4544-9754-5406E8094723}.Release|Any CPU.ActiveCfg = Release|Any CPU {DD448B37-BA3F-4544-9754-5406E8094723}.Release|Any CPU.Build.0 = Release|Any CPU - {DD448B37-BA3F-4544-9754-5406E8094723}.Release|x64.ActiveCfg = Release|Any CPU - {DD448B37-BA3F-4544-9754-5406E8094723}.Release|x64.Build.0 = Release|Any CPU - {DD448B37-BA3F-4544-9754-5406E8094723}.Release|x86.ActiveCfg = Release|Any CPU - {DD448B37-BA3F-4544-9754-5406E8094723}.Release|x86.Build.0 = Release|Any CPU {C4366030-6D03-424B-AE53-F4F43BB217C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C4366030-6D03-424B-AE53-F4F43BB217C3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C4366030-6D03-424B-AE53-F4F43BB217C3}.Debug|x64.ActiveCfg = Debug|Any CPU - {C4366030-6D03-424B-AE53-F4F43BB217C3}.Debug|x64.Build.0 = Debug|Any CPU - {C4366030-6D03-424B-AE53-F4F43BB217C3}.Debug|x86.ActiveCfg = Debug|Any CPU - {C4366030-6D03-424B-AE53-F4F43BB217C3}.Debug|x86.Build.0 = Debug|Any CPU {C4366030-6D03-424B-AE53-F4F43BB217C3}.Release|Any CPU.ActiveCfg = Release|Any CPU {C4366030-6D03-424B-AE53-F4F43BB217C3}.Release|Any CPU.Build.0 = Release|Any CPU - {C4366030-6D03-424B-AE53-F4F43BB217C3}.Release|x64.ActiveCfg = Release|Any CPU - {C4366030-6D03-424B-AE53-F4F43BB217C3}.Release|x64.Build.0 = Release|Any CPU - {C4366030-6D03-424B-AE53-F4F43BB217C3}.Release|x86.ActiveCfg = Release|Any CPU - {C4366030-6D03-424B-AE53-F4F43BB217C3}.Release|x86.Build.0 = Release|Any CPU {F51946EA-827F-4D82-B841-1F2F6D060312}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F51946EA-827F-4D82-B841-1F2F6D060312}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F51946EA-827F-4D82-B841-1F2F6D060312}.Debug|x64.ActiveCfg = Debug|Any CPU - {F51946EA-827F-4D82-B841-1F2F6D060312}.Debug|x64.Build.0 = Debug|Any CPU - {F51946EA-827F-4D82-B841-1F2F6D060312}.Debug|x86.ActiveCfg = Debug|Any CPU - {F51946EA-827F-4D82-B841-1F2F6D060312}.Debug|x86.Build.0 = Debug|Any CPU {F51946EA-827F-4D82-B841-1F2F6D060312}.Release|Any CPU.ActiveCfg = Release|Any CPU {F51946EA-827F-4D82-B841-1F2F6D060312}.Release|Any CPU.Build.0 = Release|Any CPU - {F51946EA-827F-4D82-B841-1F2F6D060312}.Release|x64.ActiveCfg = Release|Any CPU - {F51946EA-827F-4D82-B841-1F2F6D060312}.Release|x64.Build.0 = Release|Any CPU - {F51946EA-827F-4D82-B841-1F2F6D060312}.Release|x86.ActiveCfg = Release|Any CPU - {F51946EA-827F-4D82-B841-1F2F6D060312}.Release|x86.Build.0 = Release|Any CPU {E1A23168-B571-411C-B360-2229E7225E0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E1A23168-B571-411C-B360-2229E7225E0E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E1A23168-B571-411C-B360-2229E7225E0E}.Debug|x64.ActiveCfg = Debug|Any CPU - {E1A23168-B571-411C-B360-2229E7225E0E}.Debug|x64.Build.0 = Debug|Any CPU - {E1A23168-B571-411C-B360-2229E7225E0E}.Debug|x86.ActiveCfg = Debug|Any CPU - {E1A23168-B571-411C-B360-2229E7225E0E}.Debug|x86.Build.0 = Debug|Any CPU {E1A23168-B571-411C-B360-2229E7225E0E}.Release|Any CPU.ActiveCfg = Release|Any CPU {E1A23168-B571-411C-B360-2229E7225E0E}.Release|Any CPU.Build.0 = Release|Any CPU - {E1A23168-B571-411C-B360-2229E7225E0E}.Release|x64.ActiveCfg = Release|Any CPU - {E1A23168-B571-411C-B360-2229E7225E0E}.Release|x64.Build.0 = Release|Any CPU - {E1A23168-B571-411C-B360-2229E7225E0E}.Release|x86.ActiveCfg = Release|Any CPU - {E1A23168-B571-411C-B360-2229E7225E0E}.Release|x86.Build.0 = Release|Any CPU {197D4314-8A9F-49BA-977D-54ACEFAEB6BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {197D4314-8A9F-49BA-977D-54ACEFAEB6BA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {197D4314-8A9F-49BA-977D-54ACEFAEB6BA}.Debug|x64.ActiveCfg = Debug|Any CPU - {197D4314-8A9F-49BA-977D-54ACEFAEB6BA}.Debug|x64.Build.0 = Debug|Any CPU - {197D4314-8A9F-49BA-977D-54ACEFAEB6BA}.Debug|x86.ActiveCfg = Debug|Any CPU - {197D4314-8A9F-49BA-977D-54ACEFAEB6BA}.Debug|x86.Build.0 = Debug|Any CPU {197D4314-8A9F-49BA-977D-54ACEFAEB6BA}.Release|Any CPU.ActiveCfg = Release|Any CPU {197D4314-8A9F-49BA-977D-54ACEFAEB6BA}.Release|Any CPU.Build.0 = Release|Any CPU - {197D4314-8A9F-49BA-977D-54ACEFAEB6BA}.Release|x64.ActiveCfg = Release|Any CPU - {197D4314-8A9F-49BA-977D-54ACEFAEB6BA}.Release|x64.Build.0 = Release|Any CPU - {197D4314-8A9F-49BA-977D-54ACEFAEB6BA}.Release|x86.ActiveCfg = Release|Any CPU - {197D4314-8A9F-49BA-977D-54ACEFAEB6BA}.Release|x86.Build.0 = Release|Any CPU {9F84A0B2-861E-4EF4-B89B-5E2A3F38A465}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9F84A0B2-861E-4EF4-B89B-5E2A3F38A465}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9F84A0B2-861E-4EF4-B89B-5E2A3F38A465}.Debug|x64.ActiveCfg = Debug|Any CPU - {9F84A0B2-861E-4EF4-B89B-5E2A3F38A465}.Debug|x64.Build.0 = Debug|Any CPU - {9F84A0B2-861E-4EF4-B89B-5E2A3F38A465}.Debug|x86.ActiveCfg = Debug|Any CPU - {9F84A0B2-861E-4EF4-B89B-5E2A3F38A465}.Debug|x86.Build.0 = Debug|Any CPU {9F84A0B2-861E-4EF4-B89B-5E2A3F38A465}.Release|Any CPU.ActiveCfg = Release|Any CPU {9F84A0B2-861E-4EF4-B89B-5E2A3F38A465}.Release|Any CPU.Build.0 = Release|Any CPU - {9F84A0B2-861E-4EF4-B89B-5E2A3F38A465}.Release|x64.ActiveCfg = Release|Any CPU - {9F84A0B2-861E-4EF4-B89B-5E2A3F38A465}.Release|x64.Build.0 = Release|Any CPU - {9F84A0B2-861E-4EF4-B89B-5E2A3F38A465}.Release|x86.ActiveCfg = Release|Any CPU - {9F84A0B2-861E-4EF4-B89B-5E2A3F38A465}.Release|x86.Build.0 = Release|Any CPU {5160CFB1-5389-47C1-B7F6-8A0DC97641EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {5160CFB1-5389-47C1-B7F6-8A0DC97641EE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5160CFB1-5389-47C1-B7F6-8A0DC97641EE}.Debug|x64.ActiveCfg = Debug|Any CPU - {5160CFB1-5389-47C1-B7F6-8A0DC97641EE}.Debug|x64.Build.0 = Debug|Any CPU - {5160CFB1-5389-47C1-B7F6-8A0DC97641EE}.Debug|x86.ActiveCfg = Debug|Any CPU - {5160CFB1-5389-47C1-B7F6-8A0DC97641EE}.Debug|x86.Build.0 = Debug|Any CPU {5160CFB1-5389-47C1-B7F6-8A0DC97641EE}.Release|Any CPU.ActiveCfg = Release|Any CPU {5160CFB1-5389-47C1-B7F6-8A0DC97641EE}.Release|Any CPU.Build.0 = Release|Any CPU - {5160CFB1-5389-47C1-B7F6-8A0DC97641EE}.Release|x64.ActiveCfg = Release|Any CPU - {5160CFB1-5389-47C1-B7F6-8A0DC97641EE}.Release|x64.Build.0 = Release|Any CPU - {5160CFB1-5389-47C1-B7F6-8A0DC97641EE}.Release|x86.ActiveCfg = Release|Any CPU - {5160CFB1-5389-47C1-B7F6-8A0DC97641EE}.Release|x86.Build.0 = Release|Any CPU {2D2890A8-C338-4439-AD8B-CB9EE85A94F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2D2890A8-C338-4439-AD8B-CB9EE85A94F9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2D2890A8-C338-4439-AD8B-CB9EE85A94F9}.Debug|x64.ActiveCfg = Debug|Any CPU - {2D2890A8-C338-4439-AD8B-CB9EE85A94F9}.Debug|x64.Build.0 = Debug|Any CPU - {2D2890A8-C338-4439-AD8B-CB9EE85A94F9}.Debug|x86.ActiveCfg = Debug|Any CPU - {2D2890A8-C338-4439-AD8B-CB9EE85A94F9}.Debug|x86.Build.0 = Debug|Any CPU {2D2890A8-C338-4439-AD8B-CB9EE85A94F9}.Release|Any CPU.ActiveCfg = Release|Any CPU {2D2890A8-C338-4439-AD8B-CB9EE85A94F9}.Release|Any CPU.Build.0 = Release|Any CPU - {2D2890A8-C338-4439-AD8B-CB9EE85A94F9}.Release|x64.ActiveCfg = Release|Any CPU - {2D2890A8-C338-4439-AD8B-CB9EE85A94F9}.Release|x64.Build.0 = Release|Any CPU - {2D2890A8-C338-4439-AD8B-CB9EE85A94F9}.Release|x86.ActiveCfg = Release|Any CPU - {2D2890A8-C338-4439-AD8B-CB9EE85A94F9}.Release|x86.Build.0 = Release|Any CPU {337CA23E-65E7-44E1-9411-97EE08BB8116}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {337CA23E-65E7-44E1-9411-97EE08BB8116}.Debug|Any CPU.Build.0 = Debug|Any CPU - {337CA23E-65E7-44E1-9411-97EE08BB8116}.Debug|x64.ActiveCfg = Debug|Any CPU - {337CA23E-65E7-44E1-9411-97EE08BB8116}.Debug|x64.Build.0 = Debug|Any CPU - {337CA23E-65E7-44E1-9411-97EE08BB8116}.Debug|x86.ActiveCfg = Debug|Any CPU - {337CA23E-65E7-44E1-9411-97EE08BB8116}.Debug|x86.Build.0 = Debug|Any CPU {337CA23E-65E7-44E1-9411-97EE08BB8116}.Release|Any CPU.ActiveCfg = Release|Any CPU {337CA23E-65E7-44E1-9411-97EE08BB8116}.Release|Any CPU.Build.0 = Release|Any CPU - {337CA23E-65E7-44E1-9411-97EE08BB8116}.Release|x64.ActiveCfg = Release|Any CPU - {337CA23E-65E7-44E1-9411-97EE08BB8116}.Release|x64.Build.0 = Release|Any CPU - {337CA23E-65E7-44E1-9411-97EE08BB8116}.Release|x86.ActiveCfg = Release|Any CPU - {337CA23E-65E7-44E1-9411-97EE08BB8116}.Release|x86.Build.0 = Release|Any CPU {E6B436B1-A3CD-4C9A-8F76-5D7154726884}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {E6B436B1-A3CD-4C9A-8F76-5D7154726884}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E6B436B1-A3CD-4C9A-8F76-5D7154726884}.Debug|x64.ActiveCfg = Debug|Any CPU - {E6B436B1-A3CD-4C9A-8F76-5D7154726884}.Debug|x64.Build.0 = Debug|Any CPU - {E6B436B1-A3CD-4C9A-8F76-5D7154726884}.Debug|x86.ActiveCfg = Debug|Any CPU - {E6B436B1-A3CD-4C9A-8F76-5D7154726884}.Debug|x86.Build.0 = Debug|Any CPU {E6B436B1-A3CD-4C9A-8F76-5D7154726884}.Release|Any CPU.ActiveCfg = Release|Any CPU {E6B436B1-A3CD-4C9A-8F76-5D7154726884}.Release|Any CPU.Build.0 = Release|Any CPU - {E6B436B1-A3CD-4C9A-8F76-5D7154726884}.Release|x64.ActiveCfg = Release|Any CPU - {E6B436B1-A3CD-4C9A-8F76-5D7154726884}.Release|x64.Build.0 = Release|Any CPU - {E6B436B1-A3CD-4C9A-8F76-5D7154726884}.Release|x86.ActiveCfg = Release|Any CPU - {E6B436B1-A3CD-4C9A-8F76-5D7154726884}.Release|x86.Build.0 = Release|Any CPU {B95649F5-A0AE-41EB-B62B-578A2AFF5E18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B95649F5-A0AE-41EB-B62B-578A2AFF5E18}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B95649F5-A0AE-41EB-B62B-578A2AFF5E18}.Debug|x64.ActiveCfg = Debug|Any CPU - {B95649F5-A0AE-41EB-B62B-578A2AFF5E18}.Debug|x86.ActiveCfg = Debug|Any CPU {B95649F5-A0AE-41EB-B62B-578A2AFF5E18}.Release|Any CPU.ActiveCfg = Release|Any CPU {B95649F5-A0AE-41EB-B62B-578A2AFF5E18}.Release|Any CPU.Build.0 = Release|Any CPU - {B95649F5-A0AE-41EB-B62B-578A2AFF5E18}.Release|x64.ActiveCfg = Release|Any CPU - {B95649F5-A0AE-41EB-B62B-578A2AFF5E18}.Release|x86.ActiveCfg = Release|Any CPU {8E2F11F2-3955-4382-8C3A-CEBA1276CAEA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8E2F11F2-3955-4382-8C3A-CEBA1276CAEA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8E2F11F2-3955-4382-8C3A-CEBA1276CAEA}.Debug|x64.ActiveCfg = Debug|Any CPU - {8E2F11F2-3955-4382-8C3A-CEBA1276CAEA}.Debug|x64.Build.0 = Debug|Any CPU - {8E2F11F2-3955-4382-8C3A-CEBA1276CAEA}.Debug|x86.ActiveCfg = Debug|Any CPU - {8E2F11F2-3955-4382-8C3A-CEBA1276CAEA}.Debug|x86.Build.0 = Debug|Any CPU {8E2F11F2-3955-4382-8C3A-CEBA1276CAEA}.Release|Any CPU.ActiveCfg = Release|Any CPU {8E2F11F2-3955-4382-8C3A-CEBA1276CAEA}.Release|Any CPU.Build.0 = Release|Any CPU - {8E2F11F2-3955-4382-8C3A-CEBA1276CAEA}.Release|x64.ActiveCfg = Release|Any CPU - {8E2F11F2-3955-4382-8C3A-CEBA1276CAEA}.Release|x64.Build.0 = Release|Any CPU - {8E2F11F2-3955-4382-8C3A-CEBA1276CAEA}.Release|x86.ActiveCfg = Release|Any CPU - {8E2F11F2-3955-4382-8C3A-CEBA1276CAEA}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE From 0114e39489e3ba33836f8cfdaa230aa9bef077ea Mon Sep 17 00:00:00 2001 From: nattthebear Date: Sun, 20 Jan 2019 09:20:52 -0500 Subject: [PATCH 223/301] change all uses of -c:a libvo_aac to -c:a aac because the ffmpeg we're packaging now no longer supports the former --- BizHawk.Client.EmuHawk/AVOut/FFmpegWriterForm.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/BizHawk.Client.EmuHawk/AVOut/FFmpegWriterForm.cs b/BizHawk.Client.EmuHawk/AVOut/FFmpegWriterForm.cs index 12d526efd0..004c288d58 100644 --- a/BizHawk.Client.EmuHawk/AVOut/FFmpegWriterForm.cs +++ b/BizHawk.Client.EmuHawk/AVOut/FFmpegWriterForm.cs @@ -59,7 +59,7 @@ namespace BizHawk.Client.EmuHawk new FormatPreset("Matroska", "AVC video and Vorbis audio in a Matroska container.", "-c:a libvorbis -c:v libx264 -f matroska", false, "mkv"), new FormatPreset("MP4", "AVC video and AAC audio in an MP4 container.", - "-c:a libvo_aacenc -c:v libx264 -f mp4", false, "mp4"), + "-c:a aac -c:v libx264 -f mp4", false, "mp4"), new FormatPreset("WebM", "VP8 video and Vorbis audio in a WebM container.", "-c:a libvorbis -c:v libvpx -f webm", false, "webm"), new FormatPreset("Ogg", "Theora video and Vorbis audio in an Ogg contrainer.", @@ -67,9 +67,9 @@ namespace BizHawk.Client.EmuHawk new FormatPreset("Xvid", "Xvid video and MP3 audio in an AVI container.", "-c:a libmp3lame -c:v libxvid -f avi", false, "avi"), new FormatPreset("QuickTime", "AVC video and AAC audio in a QuickTime container.", - "-c:a libvo_aacenc -c:v libx264 -f mov", false, "mov"), + "-c:a aac -c:v libx264 -f mov", false, "mov"), new FormatPreset("FLV", "AVC video and AAC audio in a Flash Video container.", - "-c:a libvo_aacenc -c:v libx264 -f flv", false, "flv"), + "-c:a aac -c:v libx264 -f flv", false, "flv"), new FormatPreset("[Custom]", "Write your own ffmpeg command. For advanced users only.", "-c:a foo -c:v bar -f baz", true, "foobar"), }; From 64c3b9dcd288710c140e0927f2a47ec0d14fb139 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 20 Jan 2019 09:06:25 -0600 Subject: [PATCH 224/301] NESHawk: Implement newly found APU behaviour --- BizHawk.Emulation.Cores/Consoles/Nintendo/NES/APU.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/APU.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/APU.cs index 303073dfbc..d39606def4 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/APU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/APU.cs @@ -704,6 +704,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES sample_buffer_filled = false; out_deltacounter = 64; out_bits_remaining = 0; + user_address = 0x8000; // even though this can't be accessed by writing, it is indeed the power up address + user_length = 1; } bool irq_enabled; From a15e85639049ef50694abedd0aa41b5e65babc7a Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 20 Jan 2019 09:30:08 -0600 Subject: [PATCH 225/301] Update link text to match link status --- BizHawk.Client.EmuHawk/MainForm.cs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/BizHawk.Client.EmuHawk/MainForm.cs b/BizHawk.Client.EmuHawk/MainForm.cs index 09f671b765..ff80757b3d 100644 --- a/BizHawk.Client.EmuHawk/MainForm.cs +++ b/BizHawk.Client.EmuHawk/MainForm.cs @@ -2658,6 +2658,10 @@ namespace BizHawk.Client.EmuHawk LinkConnectStatusBarButton.Image = Emulator.AsLinkable().LinkConnected ? _linkCableOn : _linkCableOff; + + LinkConnectStatusBarButton.ToolTipText = Emulator.AsLinkable().LinkConnected + ? "Link connection is currently enabled" + : "Link connection is currently disabled"; } else { From e50272f9f4811bd8d6e39072fda5f09b254f49e6 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 20 Jan 2019 10:12:06 -0600 Subject: [PATCH 226/301] GBHawkLink: Fix frame display when loading a state --- .../Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs index df9029b226..5187308752 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/GBHawkLink/GBHawkLink.IEmulator.cs @@ -148,11 +148,13 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink { buff_L = L.GetVideoBuffer(); L.vblank_rise = false; + FillVideoBuffer(); } if (R.vblank_rise) { buff_R = R.GetVideoBuffer(); R.vblank_rise = false; + FillVideoBuffer(); } } } @@ -194,6 +196,11 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink public int[] buff_R = new int[160 * 144]; public int[] GetVideoBuffer() + { + return _vidbuffer; + } + + public void FillVideoBuffer() { // combine the 2 video buffers from the instances for (int i = 0; i < 144; i++) @@ -202,10 +209,8 @@ namespace BizHawk.Emulation.Cores.Nintendo.GBHawkLink { _vidbuffer[i * 320 + j] = buff_L[i * 160 + j]; _vidbuffer[i * 320 + j + 160] = buff_R[i * 160 + j]; - } + } } - - return _vidbuffer; } public int VirtualWidth => 160 * 2; From f65959f64c5e2663be086710c361b1f183d01da6 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Mon, 21 Jan 2019 14:13:32 -0600 Subject: [PATCH 227/301] SubNESHawk: Pass through memory domains --- .../Consoles/Nintendo/NES/NES.IMemoryDomains.cs | 2 +- .../Consoles/Nintendo/SubNESHawk/SubNESHawk.cs | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.IMemoryDomains.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.IMemoryDomains.cs index 0997f6e269..30d37f6e20 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.IMemoryDomains.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/NES.IMemoryDomains.cs @@ -8,7 +8,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES { public partial class NES { - private MemoryDomainList _memoryDomains; + public MemoryDomainList _memoryDomains; private bool _memoryDomainsSetup = false; private void SetupMemoryDomains() diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs index d74af9ed40..bc20055601 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/SubNESHawk/SubNESHawk.cs @@ -41,7 +41,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.SubNESHawk ServiceProvider = ser; - SetupMemoryDomains(); + (ServiceProvider as BasicServiceProvider).Register(subnes._memoryDomains); subnes.using_reset_timing = true; HardReset(); From 40384b0103efbf778adbe07498c7715d580e15fa Mon Sep 17 00:00:00 2001 From: Asnivor Date: Tue, 22 Jan 2019 16:48:39 +0000 Subject: [PATCH 228/301] ApiHawk: fixed incorrect case in GUIApi.cs (causing BizHawk not to build on case-intolerant linux) --- BizHawk.Client.EmuHawk/Api/Libraries/{GUIApi.cs => GuiApi.cs} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename BizHawk.Client.EmuHawk/Api/Libraries/{GUIApi.cs => GuiApi.cs} (100%) diff --git a/BizHawk.Client.EmuHawk/Api/Libraries/GUIApi.cs b/BizHawk.Client.EmuHawk/Api/Libraries/GuiApi.cs similarity index 100% rename from BizHawk.Client.EmuHawk/Api/Libraries/GUIApi.cs rename to BizHawk.Client.EmuHawk/Api/Libraries/GuiApi.cs From f2938d4895ff1af819a4252c81740b0a35c231e0 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 23 Jan 2019 02:58:24 +1000 Subject: [PATCH 229/301] Update README.md --- README.md | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 0c5cf4acea..83d47375b1 100644 --- a/README.md +++ b/README.md @@ -171,11 +171,9 @@ Again, if your distro isn't listed there, you might get an "Unknown distro" warn #### Loading firmware -You may have seen a dialog saying "You are missing the needed firmware files [...]" when trying to open a rom. Pressing "Yes" opens the Firmware Manager, or you can go to `Config` > `Firmwares...`. +The easiest way to get BizHawk to use your firmwares is to go to `Config` > `Paths...`, and change "Firmware" in the "Global" tab to be the location of them (choose the folder where they're saved). -To load firmwares, the easiest way is to click "Import" in the menubar, navigate to the dumped firmware(s), select them all, and click "Open". It's a good idea to have them copied into the `Firmware` folder, which is nicely organised, when prompted. If you were trying to open a rom, click "Close and reload ROM" to do that. Keep in mind some firmware is optional and some have multiple versions, only one of which needs to be set. - -Windows users can keep the `Firmware` folder made by the firmware manager when updating, go to `Config` > `Paths...` and change "Firmware" under "Global" to point at it. +If your firmware is scattered, you can load them individually with the Firmware Manager. Open it by choosing "Yes" in the "You are missing the needed firmware files [...]" dialog (when trying to open a rom), or by going to `Config` > `Firmwares...`. Right-click the line of the firmware you want to load, click "", and open the file to load it. Keep in mind some firmware is optional, and some have multiple versions, only one of which needs to be set. #### Identifying a good rom From 9b145c27afd14a954ae24958f2b8e5cc23b32127 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 23 Jan 2019 16:54:07 +1000 Subject: [PATCH 230/301] Update README.md --- README.md | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 83d47375b1..0081bf1f96 100644 --- a/README.md +++ b/README.md @@ -171,9 +171,11 @@ Again, if your distro isn't listed there, you might get an "Unknown distro" warn #### Loading firmware -The easiest way to get BizHawk to use your firmwares is to go to `Config` > `Paths...`, and change "Firmware" in the "Global" tab to be the location of them (choose the folder where they're saved). +The easiest way to get BizHawk to use your firmwares is to go to `Config` > `Paths...`, and change "Firmware" in the "Global" tab to be their location (choose the *folder* where they're saved). -If your firmware is scattered, you can load them individually with the Firmware Manager. Open it by choosing "Yes" in the "You are missing the needed firmware files [...]" dialog (when trying to open a rom), or by going to `Config` > `Firmwares...`. Right-click the line of the firmware you want to load, click "", and open the file to load it. Keep in mind some firmware is optional, and some have multiple versions, only one of which needs to be set. +If your firmware is scattered, you can load them individually with the Firmware Manager. Open it by choosing "Yes" in the "You are missing the needed firmware files [...]" dialog (when trying to open a rom), or by going to `Config` > `Firmwares...`. Right-click the line of the firmware you want to load, click "Set Customization", and choose the file in the dialog to load it. + +Keep in mind some firmware is optional, and some have multiple versions, only one of which needs to be set. #### Identifying a good rom From 21401636f124e55ac12b98500c6c08a12801a3c7 Mon Sep 17 00:00:00 2001 From: feos Date: Wed, 23 Jan 2019 13:23:25 +0300 Subject: [PATCH 231/301] Update README.md Come one, was it so hard? --- README.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 0081bf1f96..52ccf8ad61 100644 --- a/README.md +++ b/README.md @@ -171,11 +171,13 @@ Again, if your distro isn't listed there, you might get an "Unknown distro" warn #### Loading firmware -The easiest way to get BizHawk to use your firmwares is to go to `Config` > `Paths...`, and change "Firmware" in the "Global" tab to be their location (choose the *folder* where they're saved). +Put all your firmware to BizHawk's `Firmware` folder. All the needed firmware images will be automatically detected and loaded when you launch EmuHawk. File names and directory tree don't matter, because it's scanning the hashsums and picks the needed files according to its firmware database. -If your firmware is scattered, you can load them individually with the Firmware Manager. Open it by choosing "Yes" in the "You are missing the needed firmware files [...]" dialog (when trying to open a rom), or by going to `Config` > `Firmwares...`. Right-click the line of the firmware you want to load, click "Set Customization", and choose the file in the dialog to load it. +If you want to customize firmware (for example, when you need to select a specific firmware version) go to `Config` > `Firmwares...`, right-click the line of the firmware you want to change, click "Set Customization", and choose the file in the dialog to load it. Keep in mind some firmware is optional, and some have multiple versions, only one of which needs to be set. -Keep in mind some firmware is optional, and some have multiple versions, only one of which needs to be set. +You can change the folder to scan for firmware (for example, if you want several BizHawk releases to share the same firmware folder) by going to `Config` > `Paths...` and changing "Firmware" in the "Global" tab to the new location. + +If the firmware needed for a system can't be found, you will see the "You are missing the needed firmware files [...]" dialog when trying to open a game. #### Identifying a good rom From 248ed700a216a91945a29df781e6562f4e943080 Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 23 Jan 2019 20:38:05 +1000 Subject: [PATCH 232/301] Update README.md --- README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 52ccf8ad61..36c99889e9 100644 --- a/README.md +++ b/README.md @@ -171,13 +171,13 @@ Again, if your distro isn't listed there, you might get an "Unknown distro" warn #### Loading firmware -Put all your firmware to BizHawk's `Firmware` folder. All the needed firmware images will be automatically detected and loaded when you launch EmuHawk. File names and directory tree don't matter, because it's scanning the hashsums and picks the needed files according to its firmware database. +Put all your dumped firmware files in the `Firmware` folder and everything will be automatically detected and loaded when you try to load a game (filenames and subfolders aren't enforced, you can just throw them in there). If you're missing required or optional firmware, you will see a "You are missing the needed firmware files [...]" dialog. -If you want to customize firmware (for example, when you need to select a specific firmware version) go to `Config` > `Firmwares...`, right-click the line of the firmware you want to change, click "Set Customization", and choose the file in the dialog to load it. Keep in mind some firmware is optional, and some have multiple versions, only one of which needs to be set. +Keep in mind some firmware is optional, and some have multiple versions, only one of which needs to be set. -You can change the folder to scan for firmware (for example, if you want several BizHawk releases to share the same firmware folder) by going to `Config` > `Paths...` and changing "Firmware" in the "Global" tab to the new location. +If you want to customise firmware (when there are alternative firmwares, for example) go to `Config` > `Firmwares...`, right-click the line of the firmware you want to change, click "Set Customization", and open the file. -If the firmware needed for a system can't be found, you will see the "You are missing the needed firmware files [...]" dialog when trying to open a game. +You can change where BizHawk looks for firmware by going to `Config` > `Paths...` and changing "Firmware" in the "Global" tab to the new location. This allows multiple versions to use the same folder. #### Identifying a good rom From a7518d4e32cf9be7e68537957b689bd07a95b4df Mon Sep 17 00:00:00 2001 From: James Groom Date: Wed, 23 Jan 2019 20:43:32 +1000 Subject: [PATCH 233/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 36c99889e9..2f71078672 100644 --- a/README.md +++ b/README.md @@ -177,7 +177,7 @@ Keep in mind some firmware is optional, and some have multiple versions, only on If you want to customise firmware (when there are alternative firmwares, for example) go to `Config` > `Firmwares...`, right-click the line of the firmware you want to change, click "Set Customization", and open the file. -You can change where BizHawk looks for firmware by going to `Config` > `Paths...` and changing "Firmware" in the "Global" tab to the new location. This allows multiple versions to use the same folder. +You can change where BizHawk looks for firmware by going to `Config` > `Paths...` and changing "Firmware" in the "Global" tab to the new location. This allows multiple BizHawk releases to use the same folder. #### Identifying a good rom From ce3e3d2ed37ab890b3baf97d9d6ce4ce8a4e0379 Mon Sep 17 00:00:00 2001 From: feos Date: Wed, 23 Jan 2019 15:41:26 +0300 Subject: [PATCH 234/301] lua docs: couple hints --- BizHawk.Client.Common/lua/LuaDocumentation.cs | 4 ++-- .../tools/Lua/Libraries/EmuLuaLibrary.Gui.cs | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/BizHawk.Client.Common/lua/LuaDocumentation.cs b/BizHawk.Client.Common/lua/LuaDocumentation.cs index c52c4316fb..2fa7471105 100644 --- a/BizHawk.Client.Common/lua/LuaDocumentation.cs +++ b/BizHawk.Client.Common/lua/LuaDocumentation.cs @@ -26,10 +26,10 @@ __Types and notation__ * ? (question mark) ** A question mark next to a value indicates that it is a Nullable type (only applies to types that are not normally nullable) * [[]] (brackets) -** Brackets around a parameter indicate that the parameter is optional. optional parameters have an equals sign followed by the value that will be used if no value is supplied. +** Brackets around a parameter indicate that the parameter is optional. Optional parameters have an equals sign followed by the value that will be used if no value is supplied. ** Brackets after a parameter type indicate it is an array * null -** null is equivalent to the lua nil +** null is equivalent to the lua nil. Lua doesn't support named arguments, it checks the arguments by position. So if you're sending an optional argument that goes ''after'' other optional arguments you don't want to send, replace those with lua nil. * Color ** This is a .NET System.Drawing.Color struct. The value passed from lua is any value acceptable in the Color constructor. This means either a string with the color name such as ""red"", or a 0xAARRGGBB integer value. Unless specified, this is not a nullable value * object diff --git a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Gui.cs b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Gui.cs index 814c5ea53f..9775b41c28 100644 --- a/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Gui.cs +++ b/BizHawk.Client.EmuHawk/tools/Lua/Libraries/EmuLuaLibrary.Gui.cs @@ -511,7 +511,7 @@ namespace BizHawk.Client.EmuHawk } [LuaMethodExample("gui.drawText( 16, 32, \"Some message\", 0x7F0000FF, 0x00007FFF, 8, \"Arial Narrow\", \"bold\", \"center\", \"middle\" );")] - [LuaMethod("drawText", "Draws the given message in the emulator screen space (like all draw functions) at the given x,y coordinates and the given color. The default color is white. A fontfamily can be specified and is monospace generic if none is specified (font family options are the same as the .NET FontFamily class). The fontsize default is 12. The default font style is regular. Font style options are regular, bold, italic, strikethrough, underline. Horizontal alignment options are left (default), center, or right. Vertical alignment options are bottom (default), middle, or top. Alignment options specify which ends of the text will be drawn at the x and y coordinates.")] + [LuaMethod("drawText", "Draws the given message in the emulator screen space (like all draw functions) at the given x,y coordinates and the given color. The default color is white. A fontfamily can be specified and is monospace generic if none is specified (font family options are the same as the .NET FontFamily class). The fontsize default is 12. The default font style is regular. Font style options are regular, bold, italic, strikethrough, underline. Horizontal alignment options are left (default), center, or right. Vertical alignment options are bottom (default), middle, or top. Alignment options specify which ends of the text will be drawn at the x and y coordinates. For pixel-perfect font look, make sure to disable aspect ratio correction.")] public void DrawText( int x, int y, From 9955c55a0a700f193319a6e6b48548c72231b2f4 Mon Sep 17 00:00:00 2001 From: feos Date: Wed, 23 Jan 2019 16:07:34 +0300 Subject: [PATCH 235/301] address #1458 --- .../CPUs/68000/Instructions/IntegerMath.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/BizHawk.Emulation.Cores/CPUs/68000/Instructions/IntegerMath.cs b/BizHawk.Emulation.Cores/CPUs/68000/Instructions/IntegerMath.cs index 6d53ae61bc..46dfbd7ce8 100644 --- a/BizHawk.Emulation.Cores/CPUs/68000/Instructions/IntegerMath.cs +++ b/BizHawk.Emulation.Cores/CPUs/68000/Instructions/IntegerMath.cs @@ -189,7 +189,7 @@ namespace BizHawk.Emulation.Cores.Components.M68000 int pc = info.PC + 2; int size = (op >> 6) & 3; int mode = (op >> 3) & 7; - int reg = (op >> 0) & 3; + int reg = (op >> 0) & 7; switch (size) { @@ -516,7 +516,7 @@ namespace BizHawk.Emulation.Cores.Components.M68000 int pc = info.PC + 2; int size = (op >> 6) & 3; int mode = (op >> 3) & 7; - int reg = (op >> 0) & 3; + int reg = (op >> 0) & 7; switch (size) { @@ -1147,4 +1147,4 @@ namespace BizHawk.Emulation.Cores.Components.M68000 info.Length = pc - info.PC; } } -} \ No newline at end of file +} From 766de68e188d06468c2a1a2df7af2c19bf4f97d9 Mon Sep 17 00:00:00 2001 From: feos Date: Wed, 23 Jan 2019 17:24:21 +0300 Subject: [PATCH 236/301] tastudio: don't tell about clipboard if it's empty --- BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs index 8b0647d1f6..1462a28b47 100644 --- a/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs +++ b/BizHawk.Client.EmuHawk/tools/TAStudio/TAStudio.cs @@ -990,8 +990,9 @@ namespace BizHawk.Client.EmuHawk "Selected: " + TasView.SelectedRows.Count() + " frame" + (TasView.SelectedRows.Count() == 1 ? "" : "s") + ", States: " + CurrentTasMovie.TasStateManager.StateCount.ToString() + - ", Clipboard: " + (_tasClipboard.Any() ? _tasClipboard.Count + " frame" + - (_tasClipboard.Count == 1 ? "" : "s") : "empty"); + (_tasClipboard.Any() + ? ", Clipboard: " + _tasClipboard.Count + " frame" + (_tasClipboard.Count == 1 ? "" : "s") + : ""); } private void UpdateChangesIndicator() From 1d6bd43532f5680c0b2f9382536eef6a38e96987 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 25 Jan 2019 21:57:04 +1000 Subject: [PATCH 237/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 2f71078672..11d64e2e7c 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). -[![unique systems emulated | 27](https://img.shields.io/badge/unique_systems_emulated-27-darkgreen.svg?logo=buffer&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) +[![unique systems emulated | 27](https://img.shields.io/badge/unique_systems_emulated-27-darkgreen.svg?logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAFqklEQVR4nO2aa6hVRRTH973XMkvEnmRc6VansvY9+8z6/Svs+UGCMqEHiKRWFPShd0bZA3tQGZplhRVRgb2MIkgyikIp0IroEtGDCOlhaGkvS8tKTa99uPvU8Tj73H2e2wvnD/Npz16zfjOzZ6+ZNUHQVltttdXW0JSkIyTNAR51zp2VtT8tUy6XGwXcK+lvSTtKys1Z+9ZsdQIXS1pbBr5D0g5gM5DL2smmyDl3MtDnAy/rhCVZ+9pQ9fb2jpX0PNA/GHyxmNnpWftdtyTtLek2YFNa8JLymaQ9smaoVR3AFGBVDeCls+DqrEGqliSAFfWAl5T148aN2z9rplSKouggSU9K2tYg+OKC+EjWbBWVy+WGS7pe0oYaITcAi4EXge89z/+RlM+a0ytJkyStrGN0l+Xz+X2L9sIw3BN4wlN3aRAEHRmi7izgGOCNOqf2r8650R7zwyR95FkQz245aLny+fy+wEOStjbg234xqR0zu9VT/8tcLje8lbyl6pJ0OfBTAxe4p5Mak3SD7x0zu6mFzAMCJgCf1DjK/cBzwJnAeEm3lCyW3wRB0OVrU9LrCTY3hmF4cEvA8/n84cDL1YSvng6YWW4XEPBH/PyBIAg6y+AvHcTmwqaCh2E4ErhH0l91TvE1QRAM87UhaUEJ0HvxlL8WWDJYhwPbzey4ZrB3mtlFwHeN+MaBN5IaMrOpg3w2K4D7JL3kGwjgvaCRv0UzOxF4vxHgJU72JbUHzEx4b6uZTS6tG0XRYZK+9tSdVjd4FEXdwLPA9kbCF0fSN1V7enr2kvRFwjv3JnTYeE/91VEU7VMTeHd39whgVnExalYBvov39R1BEATOuR5gWYX645N8TgiT76qWvcPMJkv6ppngnrI2HvWKG6UaOuBPMzs0FbmZFSS93WJwX/kKmO6c63HOHV8W+3tHFFCFTltUETzepj6mgV1V1vBrwjDczwN4R3FEgQmlzyQdAHxcoQM2JbEPA64DftsNwIvOzvA5GobhnpLWx3W2x/HAbODxwfwHfvRN94lKWGkz7oAzk0YrDohqsTmrdLqMU3IcnXkBLk7g75L0Q5X2Nki6NgiCjkDSHsA8YHPWkIN0QJ9vS2tm51dhZxvwRBRFB5WO/P01OvW7pAXAIjX4LK9CWeqcOzIIBo7TzOyytPEIsFwSvu/n1ypHoh9YaGaHlNh4sIUzoR/4A9iSsv4qYEqQFP9Xs9IDPznnTiq3EScrf4zrbJY0HzgPeK5VHePxdZOk27u7u0ckrB3/dcCjVRiem2RHA3vx14tTNNYwDWRpWgneDyzq7e0dWxG8KDM7MO1nACyuYMo7xYAzWgjf55w7ORV4mZMzUjaw3fcJDCY1//e6Nv5Ndg7mi1dxNJU2+Pmg2obM7OwmjfhmSXNzudyomsDLnJyYstG3JB1QjW1gdoPB+yW90vDLEJJeq9Dot5LODao4TooPTRbVczjqKZ82Lf8fRdHRCRHhutI0VBoBVzb40OQX4Kog4bC0YZI03zP6y2uwM61B4FuBh31b4abIOTdau24utpnZsVWa6pD0bp3wS6Mo6m0KaCXJk2AA3kyonvhHAE6tEXylc+6cJuGlUpc8WVZJk4oVcrnccOA6Se8ECZ2ggROZahbAjcCNWSYy/5OZneZxfg1wAXCJds7tX1H+fhiGIyU9kwY8PslZKGlMFqyJ0kB2Jc3I/az/Y4NOM7tQCZcZPeXdZqWr6pZzrkcp83zA55LmSPogJfhqM5sa7E63N3ySdHedK3l5+dPM7qw5M9Nqxd/ymnrB423qC6mTEbuTgOl1wn8o6ZSsOepRZ41Hz+skXRok3OYYUioUCiekzQQDW4B5CTe5hq6Ap1LAv1ooFI7K2temSNIYSRuTfoPAGVn72HTFUWBpHmC9pGs0hK+nV61CoWBmditw1ZC5kd1WW2211dau+hdChUiZwhqSBAAAAABJRU5ErkJggg==&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) [![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&logoColor=333333&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) [![Windows prereqs | GitHub](https://img.shields.io/badge/Windows_prereqs-GitHub-darkred.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk-Prereqs/releases/latest) From 41f464b80cc58e515928187f20800072d3a40a9b Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 25 Jan 2019 22:09:31 +1000 Subject: [PATCH 238/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 11d64e2e7c..e8979316e3 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ A multi-system emulator written in C#. As well as quality-of-life features for c Click the "release" button above to grab the latest stable version ([changelog at TASVideos](http://tasvideos.org/Bizhawk/ReleaseHistory.html)). -New user on Windows? Install the prerequisites first, click the "prereqs" button to get that and see [*Installing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#windows-78110) for info. +New user on Windows? Install the prerequisites first, click the "prereqs" button to get that and see [*Installing*](#windows-78110) for info. **Never mix different versions** of BizHawk — Keep each version in its own folder. From 73366ef5afbe88cd44e9c25c36aa56ddb6a34869 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 25 Jan 2019 22:17:21 +1000 Subject: [PATCH 239/301] Update README.md --- README.md | 60 +++++++++++++++++++++++++++---------------------------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/README.md b/README.md index e8979316e3..0210d637d9 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ A multi-system emulator written in C#. As well as quality-of-life features for casual players, it also has recording/playback and debugging tools, making it the first choice for TASers (Tool-Assisted Speedrunners). -[![unique systems emulated | 27](https://img.shields.io/badge/unique_systems_emulated-27-darkgreen.svg?logo=data:image/png;base64,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&style=popout)](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) +[![unique systems emulated | 27](https://img.shields.io/badge/unique_systems_emulated-27-darkgreen.svg?logo=data:image/png;base64,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&style=popout)](#cores) [![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&logoColor=333333&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) [![Windows prereqs | GitHub](https://img.shields.io/badge/Windows_prereqs-GitHub-darkred.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk-Prereqs/releases/latest) @@ -17,19 +17,19 @@ New user on Windows? Install the prerequisites first, click the "prereqs" button Jump to: * Installing - * [Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#windows-78110) - * [GNU+Linux](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux) + * [Windows 7/8.1/10](#windows-78110) + * [GNU+Linux](#gnulinux) * Building - * [Windows 7/8.1/10](https://github.com/TASVideos/BizHawk/blob/master/README.md#windows-78110-1) - * [GNU+Linux](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-1) -* [Usage](https://github.com/TASVideos/BizHawk/blob/master/README.md#usage) - * [TASing](https://github.com/TASVideos/BizHawk/blob/master/README.md#tasing) - * [Testing](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) - * [Cores](https://github.com/TASVideos/BizHawk/blob/master/README.md#cores) -* [Support and troubleshooting](https://github.com/TASVideos/BizHawk/blob/master/README.md#support-and-troubleshooting) -* [Contributing](https://github.com/TASVideos/BizHawk/blob/master/README.md#contributing) -* [Related projects](https://github.com/TASVideos/BizHawk/blob/master/README.md#related-projects) -* [License](https://github.com/TASVideos/BizHawk/blob/master/README.md#license) + * [Windows 7/8.1/10](#windows-78110-1) + * [GNU+Linux](#gnulinux-1) +* [Usage](#usage) + * [TASing](#tasing) + * [Testing](#testing) + * [Cores](#cores) +* [Support and troubleshooting](#support-and-troubleshooting) +* [Contributing](#contributing) +* [Related projects](#related-projects) +* [License](#license) ## Features and systems @@ -81,9 +81,9 @@ Supported consoles and computers: * Uzebox * [More](http://tasvideos.org/Bizhawk/CoreRoadMap.html) coming soon..? -See [*Usage*](https://github.com/TASVideos/BizHawk/blob/master/README.md#usage) below for details about specific tools and config menus. +See [*Usage*](#usage) below for details about specific tools and config menus. -[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) +[to top](#bizhawk) ## Installing @@ -109,7 +109,7 @@ Following [Microsoft's support lifecycle](https://support.microsoft.com/en-us/he A "backport" release, [1.13.2](https://github.com/TASVideos/BizHawk/releases/tag/1.13.2), is available for Windows XP and 32-bit users. Being in the 1.x series, many bugs remain and features are missing. -[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) +[to top](#bizhawk) ### GNU+Linux @@ -117,7 +117,7 @@ A "backport" release, [1.13.2](https://github.com/TASVideos/BizHawk/releases/tag **IMPORTANT**: Linux support is a work-in-progress! It is *not* complete, does *not* look very nice, and is *not* ready for anything that needs accuracy. -You'll need to either build BizHawk yourself (see [*Building*](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux-1) below), or download a dev build (see [*Testing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) below). +You'll need to either build BizHawk yourself (see [*Building*](#gnulinux-1) below), or download a dev build (see [*Testing*](#testing) below). The runtime dependencies are Mono (complete) + Mono VB.NET, WINE (just `libwine` if available), `libdl.so` (glibc), NVIDIA's `cgc` utility, and `libblip_buf.so` from the repo's `Assets` folder (copy it to `/usr/lib/libblip_buf.so.1.1.0` or equivalent). LSB release info is optional for automatically setting the library location. @@ -125,7 +125,7 @@ Run `EmuHawkMono.sh` to give Mono the library and executable paths — you can r The systems that currently work are: GB + GBC (GBHawk), NES (NesHawk), SMS, Atari 7800, and some classic home computers. See [#1430](https://github.com/TASVideos/BizHawk/issues/1430) for progress. -[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) +[to top](#bizhawk) ## Building @@ -142,7 +142,7 @@ Once it's downloaded and extracted, go into the repo's `Dist` folder and run `Bu For anything more complicated than building, you'll need an IDE like [VS Community 2017](https://visualstudio.microsoft.com/vs/community), currently the best free C# IDE. Open `BizHawk.sln` with VS to start and use the toolbar to choose EmuHawk and build. See [Compiling at TASVideos](http://tasvideos.org/Bizhawk/Compiling.html) (somewhat outdated) for more detailed instructions. -[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) +[to top](#bizhawk) ### GNU+Linux @@ -161,11 +161,11 @@ Remove the `/p:...` flag from MSBuild if you want debugging symbols. If your distro isn't listed under *Installing* above, `libblip_buf` probably isn't in your package repos. You can easily [build it yourself](https://gitlab.com/TASVideos/libblip_buf/blob/unified/README.md). -Once built, see [*Installing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#gnulinux) above, substituting the repo's `output` folder for the download. +Once built, see [*Installing*](#gnulinux) above, substituting the repo's `output` folder for the download. Again, if your distro isn't listed there, you might get an "Unknown distro" warning in the terminal, and BizHawk may not open or may show the missing dependencies dialog. You may need to add your distro to the case statement in the script, setting `libpath` to the location of `d3dx9_43.dll.so` (please do share if you get it working). -[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) +[to top](#bizhawk) ## Usage @@ -208,7 +208,7 @@ Running scripts have a "▶️" beside their name, and stopped scripts (manually "Toggle script" does just that (paused scripts are stopped). "Reload script" stops it and loads changes to the file, running scripts are then started again. "Remove script" stops it and removes it from the list. -[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) +[to top](#bizhawk) ### TASing @@ -216,17 +216,17 @@ Running scripts have a "▶️" beside their name, and stopped scripts (manually For now, the best way to learn how to TAS is to browse pages like [BasicTools](http://tasvideos.org/TasingGuide/BasicTools.html) on TASVideos and watch tutorials like [Sand_Knight and dwangoAC's](https://youtu.be/6tJniMaR2Ps). -[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) +[to top](#bizhawk) ### Testing -Testing bugfixes or new features can be just as helpful as making them! If code's more your thing, see [*Contributing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#contributing) below. +Testing bugfixes or new features can be just as helpful as making them! If code's more your thing, see [*Contributing*](#contributing) below. Dev builds are automated with AppVeyor, every green checkmark in the [commit history](https://github.com/TASVideos/BizHawk/commits/master) is a successful build. Clicking a checkmark and then "Details" in the box that appears takes you straight to the build page. The full list is [here](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history), in future use the "dev builds" button at the top of this readme. Once you're on the build page, click "Artifacts" and download `BizHawk_Developer--#.zip`. -[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) +[to top](#bizhawk) ### Cores @@ -264,7 +264,7 @@ ZX Spectrum | ZXHawk | Amstrad CPC, Magnavox Odyssey², and PSP emulation are works-in-progress and there is **no ETA**. Cores for other systems are only conceptual. If you want to help speed up development, ask on IRC (see below). -[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) +[to top](#bizhawk) ## Support and troubleshooting @@ -276,19 +276,19 @@ A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk If there's no easy solution, what you've got is a bug. Or maybe a feature request. Either way, [open a new issue](https://github.com/TASVideos/BizHawk/issues/new) (you'll need a GitHub account, signup is very fast). -[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) +[to top](#bizhawk) ## Contributing BizHawk is Open Source Software, so you're free to modify it however you please, and if you do, we invite you to share! Under the permissive *MIT License*, this is optional, just be careful with reusing cores as some have copyleft licenses. -Not a programmer? Something as simple as reproducing bugs with different software versions is still very helpful! See [*Testing*](https://github.com/TASVideos/BizHawk/blob/master/README.md#testing) above to learn about dev builds if you'd rather help us get the next release out. +Not a programmer? Something as simple as reproducing bugs with different software versions is still very helpful! See [*Testing*](#testing) above to learn about dev builds if you'd rather help us get the next release out. If you'd like to fix bugs, check the issue tracker here on GitHub: [![GitHub open issues counter](https://img.shields.io/github/issues-raw/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/issues) -It's a good idea to check if anyone is already working on an issue by asking on IRC (see [*Support*](https://github.com/TASVideos/BizHawk/blob/master/README.md#support-and-troubleshooting) above). +It's a good idea to check if anyone is already working on an issue by asking on IRC (see [*Support*](#support-and-troubleshooting) above). If you'd like to add a feature, first search the issue tracker for it. If it's a new idea, make your own feature request issue before you start coding. @@ -296,7 +296,7 @@ For the time being, style is not enforced in PRs, only build success is. Please Past contrbutors to the frontend and custom-built cores are listed [here](https://github.com/TASVideos/BizHawk/graphs/contributors). See the wiki for core authors. -[to top](https://github.com/TASVideos/BizHawk/blob/master/README.md#bizhawk) +[to top](#bizhawk) ## Related projects From 4f3dc6dafcfd89dfe2508f800ea127fe4e59d42d Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 25 Jan 2019 22:25:48 +1000 Subject: [PATCH 240/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0210d637d9..aa2c0cb4a9 100644 --- a/README.md +++ b/README.md @@ -302,7 +302,7 @@ Past contrbutors to the frontend and custom-built cores are listed [here](https: * [DeSmuME](https://desmume.org) for DS/Lite — cross-platform * [Dolphin](https://dolphin-emu.org) for GameCube and (original) Wii — cross-platform -* [FCEUX](http://www.fceux.com/web/home.html) for NES/Famicom — TASing is Windows-only, but it should run on Unix +* [FCEUX](http://www.fceux.com/web/home.html) for NES/Famicom — TASing is Windows-only, but it should run cross-platform * [libTAS](https://github.com/clementgallet/libTAS) for Linux ELF — GNU+Linux-only, also emulates other emulators * [lsnes](http://tasvideos.org/Lsnes.html) for GB and SNES — cross-platform * [openMSX](https://openmsx.org) for MSX — cross-platform From 50e5978144594267385f0f211eb97e4590ce0a60 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 25 Jan 2019 22:27:11 +1000 Subject: [PATCH 241/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index aa2c0cb4a9..a76982b3cc 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ Supported consoles and computers: * Uzebox * [More](http://tasvideos.org/Bizhawk/CoreRoadMap.html) coming soon..? -See [*Usage*](#usage) below for details about specific tools and config menus. +See [*Usage*](#usage) below for an introduction to basic config menus. [to top](#bizhawk) From ca42daa157654ea2d000d177c99d8d264c3af052 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 25 Jan 2019 22:31:36 +1000 Subject: [PATCH 242/301] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a76982b3cc..d614ee5ec4 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ Supported consoles and computers: * Uzebox * [More](http://tasvideos.org/Bizhawk/CoreRoadMap.html) coming soon..? -See [*Usage*](#usage) below for an introduction to basic config menus. +See [*Usage*](#usage) below for info on basic config needed to play games. [to top](#bizhawk) @@ -107,7 +107,7 @@ BizHawk functions like a "portable" program, you may move or rename the folder c Following [Microsoft's support lifecycle](https://support.microsoft.com/en-us/help/13853/windows-lifecycle-fact-sheet), Win10 is supported from 1709 "Redstone 3", Win8 is supported from 8.1, and Win7 is supported from SP1 (ends Jan 2020, upgrade to Win10 or try [ReactOS](https://reactos.org/joining/faqs)). -A "backport" release, [1.13.2](https://github.com/TASVideos/BizHawk/releases/tag/1.13.2), is available for Windows XP and 32-bit users. Being in the 1.x series, many bugs remain and features are missing. +A "backport" release, [1.13.2](https://github.com/TASVideos/BizHawk/releases/tag/1.13.2), is available for users of Windows XP and/or 32-bit Windows. Being in the 1.x series, many bugs remain and features are missing. [to top](#bizhawk) From 363166fa909aa093251c5196e4f305b6f06755b5 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 25 Jan 2019 22:32:50 +1000 Subject: [PATCH 243/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d614ee5ec4..ce68dc1a22 100644 --- a/README.md +++ b/README.md @@ -262,7 +262,7 @@ Virtual Boy | Virtual Boyee | WonderSwan / Color | Cygne | ZX Spectrum | ZXHawk | -Amstrad CPC, Magnavox Odyssey², and PSP emulation are works-in-progress and there is **no ETA**. Cores for other systems are only conceptual. If you want to help speed up development, ask on IRC (see below). +Amstrad CPC, Magnavox Odyssey², and Sony PSP emulation are works-in-progress and there is **no ETA**. Cores for other systems are only conceptual. If you want to help speed up development, ask on IRC (see below). [to top](#bizhawk) From 530790b5152c0061322d6c92b4b37c1733f83d22 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 25 Jan 2019 22:35:41 +1000 Subject: [PATCH 244/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ce68dc1a22..31ca56affb 100644 --- a/README.md +++ b/README.md @@ -270,7 +270,7 @@ Amstrad CPC, Magnavox Odyssey², and Sony PSP emulation are works-in-progress an A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, and you can't find it in the [issue tracker search](https://github.com/TASVideos/BizHawk/issues?q=is%3Aissue+ISSUE_KEYWORDS), check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at TASVideos, or ask on IRC: -[![IRC | chat.freenode.net #bizhawk](https://img.shields.io/badge/IRC-chat.freenode.net_%23bizhawk-steelblue.svg?style=flat)](ircs://chat.freenode.net:6697/bizhawk) +
    ![IRC | chat.freenode.net #bizhawk](https://img.shields.io/badge/IRC-chat.freenode.net_%23bizhawk-steelblue.svg?style=flat) [![Matrix (IRC bridge) | #freenode_#bizhawk:matrix.org](https://img.shields.io/badge/Matrix_(IRC_bridge)-%23freenode__%23bizhawk:matrix.org-mediumpurple.svg?logo=matrix&style=flat)](https://matrix.to/#/#freenode_#bizhawk:matrix.org) [![freenode webchat | #bizhawk](https://img.shields.io/badge/freenode_webchat-%23bizhawk-lightcoral.svg?style=flat)](http://webchat.freenode.net/?channels=bizhawk) From 68575853846950ff5db32bb8c1e743c4c7fb4932 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 25 Jan 2019 22:38:42 +1000 Subject: [PATCH 245/301] Update README.md --- README.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.md b/README.md index 31ca56affb..4be281cc24 100644 --- a/README.md +++ b/README.md @@ -268,9 +268,8 @@ Amstrad CPC, Magnavox Odyssey², and Sony PSP emulation are works-in-progress an ## Support and troubleshooting -A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, and you can't find it in the [issue tracker search](https://github.com/TASVideos/BizHawk/issues?q=is%3Aissue+ISSUE_KEYWORDS), check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at TASVideos, or ask on IRC: +A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, and you can't find it in the [issue tracker search](https://github.com/TASVideos/BizHawk/issues?q=is%3Aissue+ISSUE_KEYWORDS), check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at TASVideos, or ask on IRC. Paste `ircs://chat.freenode.net:6697/bizhawk` into your address bar, connect to freenode manually with your IRC client and join `#bizhawk`, or try these: -![IRC | chat.freenode.net #bizhawk](https://img.shields.io/badge/IRC-chat.freenode.net_%23bizhawk-steelblue.svg?style=flat) [![Matrix (IRC bridge) | #freenode_#bizhawk:matrix.org](https://img.shields.io/badge/Matrix_(IRC_bridge)-%23freenode__%23bizhawk:matrix.org-mediumpurple.svg?logo=matrix&style=flat)](https://matrix.to/#/#freenode_#bizhawk:matrix.org) [![freenode webchat | #bizhawk](https://img.shields.io/badge/freenode_webchat-%23bizhawk-lightcoral.svg?style=flat)](http://webchat.freenode.net/?channels=bizhawk) From 659c80a7409d78cadb5664e8deb69a6e6c15e1e3 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 25 Jan 2019 22:39:40 +1000 Subject: [PATCH 246/301] Update README.md --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4be281cc24..afb8ef56b0 100644 --- a/README.md +++ b/README.md @@ -268,10 +268,11 @@ Amstrad CPC, Magnavox Odyssey², and Sony PSP emulation are works-in-progress an ## Support and troubleshooting -A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, and you can't find it in the [issue tracker search](https://github.com/TASVideos/BizHawk/issues?q=is%3Aissue+ISSUE_KEYWORDS), check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at TASVideos, or ask on IRC. Paste `ircs://chat.freenode.net:6697/bizhawk` into your address bar, connect to freenode manually with your IRC client and join `#bizhawk`, or try these: - -[![Matrix (IRC bridge) | #freenode_#bizhawk:matrix.org](https://img.shields.io/badge/Matrix_(IRC_bridge)-%23freenode__%23bizhawk:matrix.org-mediumpurple.svg?logo=matrix&style=flat)](https://matrix.to/#/#freenode_#bizhawk:matrix.org) -[![freenode webchat | #bizhawk](https://img.shields.io/badge/freenode_webchat-%23bizhawk-lightcoral.svg?style=flat)](http://webchat.freenode.net/?channels=bizhawk) +A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, and you can't find it in the [issue tracker search](https://github.com/TASVideos/BizHawk/issues?q=is%3Aissue+ISSUE_KEYWORDS), check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at TASVideos, or ask on IRC: +* `ircs://chat.freenode.net:6697/bizhawk` +* connect to freenode manually with your IRC client and join `#bizhawk` +* [![Matrix (IRC bridge) | #freenode_#bizhawk:matrix.org](https://img.shields.io/badge/Matrix_(IRC_bridge)-%23freenode__%23bizhawk:matrix.org-mediumpurple.svg?logo=matrix&style=flat)](https://matrix.to/#/#freenode_#bizhawk:matrix.org) +* [![freenode webchat | #bizhawk](https://img.shields.io/badge/freenode_webchat-%23bizhawk-lightcoral.svg?style=flat)](http://webchat.freenode.net/?channels=bizhawk) If there's no easy solution, what you've got is a bug. Or maybe a feature request. Either way, [open a new issue](https://github.com/TASVideos/BizHawk/issues/new) (you'll need a GitHub account, signup is very fast). From 24e3e46620aada30cd9edf731c2feb7dc5f93cfa Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 25 Jan 2019 22:42:13 +1000 Subject: [PATCH 247/301] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index afb8ef56b0..32a6781a18 100644 --- a/README.md +++ b/README.md @@ -271,8 +271,8 @@ Amstrad CPC, Magnavox Odyssey², and Sony PSP emulation are works-in-progress an A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, and you can't find it in the [issue tracker search](https://github.com/TASVideos/BizHawk/issues?q=is%3Aissue+ISSUE_KEYWORDS), check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at TASVideos, or ask on IRC: * `ircs://chat.freenode.net:6697/bizhawk` * connect to freenode manually with your IRC client and join `#bizhawk` -* [![Matrix (IRC bridge) | #freenode_#bizhawk:matrix.org](https://img.shields.io/badge/Matrix_(IRC_bridge)-%23freenode__%23bizhawk:matrix.org-mediumpurple.svg?logo=matrix&style=flat)](https://matrix.to/#/#freenode_#bizhawk:matrix.org) -* [![freenode webchat | #bizhawk](https://img.shields.io/badge/freenode_webchat-%23bizhawk-lightcoral.svg?style=flat)](http://webchat.freenode.net/?channels=bizhawk) +* connect with a Matrix client (via matrix.org's IRC bridge): [#freenode_#bizhawk:matrix.org](https://matrix.to/#/#freenode_#bizhawk:matrix.org) +* use freenode's [*webchat*](http://webchat.freenode.net/?channels=bizhawk), an IRC client in a webpage If there's no easy solution, what you've got is a bug. Or maybe a feature request. Either way, [open a new issue](https://github.com/TASVideos/BizHawk/issues/new) (you'll need a GitHub account, signup is very fast). From 7266cef5aab2d00b0b39555af6836d20ddc9ac9d Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 25 Jan 2019 22:44:02 +1000 Subject: [PATCH 248/301] Update README.md --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 32a6781a18..56f0652ccb 100644 --- a/README.md +++ b/README.md @@ -269,9 +269,8 @@ Amstrad CPC, Magnavox Odyssey², and Sony PSP emulation are works-in-progress an ## Support and troubleshooting A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, and you can't find it in the [issue tracker search](https://github.com/TASVideos/BizHawk/issues?q=is%3Aissue+ISSUE_KEYWORDS), check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at TASVideos, or ask on IRC: -* `ircs://chat.freenode.net:6697/bizhawk` -* connect to freenode manually with your IRC client and join `#bizhawk` -* connect with a Matrix client (via matrix.org's IRC bridge): [#freenode_#bizhawk:matrix.org](https://matrix.to/#/#freenode_#bizhawk:matrix.org) +* with an IRC client, join channel `#bizhawk` on `chat.freenode.net:6697` +* connect to [#freenode_#bizhawk:matrix.org](https://matrix.to/#/#freenode_#bizhawk:matrix.org) with a Matrix client (via matrix.org's IRC bridge) * use freenode's [*webchat*](http://webchat.freenode.net/?channels=bizhawk), an IRC client in a webpage If there's no easy solution, what you've got is a bug. Or maybe a feature request. Either way, [open a new issue](https://github.com/TASVideos/BizHawk/issues/new) (you'll need a GitHub account, signup is very fast). From 81920d0dee90bcba059ab16acdc75d5c6a8afec6 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 25 Jan 2019 22:48:19 +1000 Subject: [PATCH 249/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 56f0652ccb..12121e3b0b 100644 --- a/README.md +++ b/README.md @@ -271,7 +271,7 @@ Amstrad CPC, Magnavox Odyssey², and Sony PSP emulation are works-in-progress an A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, and you can't find it in the [issue tracker search](https://github.com/TASVideos/BizHawk/issues?q=is%3Aissue+ISSUE_KEYWORDS), check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at TASVideos, or ask on IRC: * with an IRC client, join channel `#bizhawk` on `chat.freenode.net:6697` * connect to [#freenode_#bizhawk:matrix.org](https://matrix.to/#/#freenode_#bizhawk:matrix.org) with a Matrix client (via matrix.org's IRC bridge) -* use freenode's [*webchat*](http://webchat.freenode.net/?channels=bizhawk), an IRC client in a webpage +* use freenode's [web-based IRC client](http://webchat.freenode.net/?channels=bizhawk) If there's no easy solution, what you've got is a bug. Or maybe a feature request. Either way, [open a new issue](https://github.com/TASVideos/BizHawk/issues/new) (you'll need a GitHub account, signup is very fast). From 462a0c59897dedada120789c27d305be9408bcb1 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 25 Jan 2019 22:50:10 +1000 Subject: [PATCH 250/301] Update README.md --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 12121e3b0b..559f72e71a 100644 --- a/README.md +++ b/README.md @@ -268,7 +268,9 @@ Amstrad CPC, Magnavox Odyssey², and Sony PSP emulation are works-in-progress an ## Support and troubleshooting -A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). If your problem is one of the many not answered there, and you can't find it in the [issue tracker search](https://github.com/TASVideos/BizHawk/issues?q=is%3Aissue+ISSUE_KEYWORDS), check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at TASVideos, or ask on IRC: +A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk wiki](http://tasvideos.org/Bizhawk.html). + +If your problem is one of the many not answered there, and you can't find it in the [issue tracker search](https://github.com/TASVideos/BizHawk/issues?q=is%3Aissue+ISSUE_KEYWORDS), check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at TASVideos, or ask on IRC: * with an IRC client, join channel `#bizhawk` on `chat.freenode.net:6697` * connect to [#freenode_#bizhawk:matrix.org](https://matrix.to/#/#freenode_#bizhawk:matrix.org) with a Matrix client (via matrix.org's IRC bridge) * use freenode's [web-based IRC client](http://webchat.freenode.net/?channels=bizhawk) From 9791df8801ca642e8807a355a0f9f6b82c6b9143 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 25 Jan 2019 22:51:32 +1000 Subject: [PATCH 251/301] Update README.md --- README.md | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 559f72e71a..8f6bfa0786 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ A multi-system emulator written in C#. As well as quality-of-life features for c [![GitHub latest release](https://img.shields.io/github/release/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/releases/latest) [![dev builds | AppVeyor](https://img.shields.io/badge/dev_builds-AppVeyor-orange.svg?logo=appveyor&logoColor=333333&style=popout)](https://ci.appveyor.com/project/zeromus/bizhawk-udexo/history) [![Windows prereqs | GitHub](https://img.shields.io/badge/Windows_prereqs-GitHub-darkred.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk-Prereqs/releases/latest) +[![GitHub open issues counter](https://img.shields.io/github/issues-raw/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/issues) *** @@ -285,9 +286,7 @@ BizHawk is Open Source Software, so you're free to modify it however you please, Not a programmer? Something as simple as reproducing bugs with different software versions is still very helpful! See [*Testing*](#testing) above to learn about dev builds if you'd rather help us get the next release out. -If you'd like to fix bugs, check the issue tracker here on GitHub: - -[![GitHub open issues counter](https://img.shields.io/github/issues-raw/TASVideos/BizHawk.svg?logo=github&logoColor=333333&style=popout)](https://github.com/TASVideos/BizHawk/issues) +If you'd like to fix bugs, check the [issue tracker](https://github.com/TASVideos/BizHawk/issues) here on GitHub. It's a good idea to check if anyone is already working on an issue by asking on IRC (see [*Support*](#support-and-troubleshooting) above). From 777d4c6a81eb00d1069108daab3f04552a4dc7b7 Mon Sep 17 00:00:00 2001 From: James Groom Date: Fri, 25 Jan 2019 22:53:45 +1000 Subject: [PATCH 252/301] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8f6bfa0786..cf537dcd71 100644 --- a/README.md +++ b/README.md @@ -273,7 +273,7 @@ A short [FAQ](http://tasvideos.org/Bizhawk/FAQ.html) is provided on the [BizHawk If your problem is one of the many not answered there, and you can't find it in the [issue tracker search](https://github.com/TASVideos/BizHawk/issues?q=is%3Aissue+ISSUE_KEYWORDS), check the [BizHawk forum](http://tasvideos.org/forum/viewforum.php?f=64) at TASVideos, or ask on IRC: * with an IRC client, join channel `#bizhawk` on `chat.freenode.net:6697` -* connect to [#freenode_#bizhawk:matrix.org](https://matrix.to/#/#freenode_#bizhawk:matrix.org) with a Matrix client (via matrix.org's IRC bridge) +* with a Matrix client, connect to [#freenode_#bizhawk:matrix.org](https://matrix.to/#/#freenode_#bizhawk:matrix.org) (via matrix.org's IRC bridge) * use freenode's [web-based IRC client](http://webchat.freenode.net/?channels=bizhawk) If there's no easy solution, what you've got is a bug. Or maybe a feature request. Either way, [open a new issue](https://github.com/TASVideos/BizHawk/issues/new) (you'll need a GitHub account, signup is very fast). From 76070cd89dce2e88ebf9afc28db3239adbeae1e5 Mon Sep 17 00:00:00 2001 From: Asnivor Date: Fri, 25 Jan 2019 15:45:15 +0000 Subject: [PATCH 253/301] OCD: Fix non-critial compiler warnings in my code --- .../config/AmstradCPC/AmstradCPCPokeMemory.cs | 2 -- .../config/ZXSpectrum/ZXSpectrumPokeMemory.cs | 2 -- .../AmstradCPC/AmstradCPC.ISettable.cs | 1 - .../AmstradCPC/Hardware/Disk/NECUPD765.FDC.cs | 22 +++++++++---------- .../Hardware/Display/AmstradGateArray.cs | 19 ++++++++-------- .../Hardware/SoundOutput/AY38912.cs | 4 ++-- .../AmstradCPC/Machine/GateArrayBase.cs | 10 ++++----- .../AmstradCPC/Media/Tape/CDT/CdtConverter.cs | 5 +++-- .../AmstradCPC/Media/Tape/TapeDataBlock.cs | 2 ++ .../Hardware/Disk/NECUPD765.FDC.cs | 17 +++++++++----- .../Hardware/Input/CursorJoystick.cs | 4 ++-- .../Hardware/Input/SinclairJoystick1.cs | 4 ++-- .../Hardware/Input/SinclairJoystick2.cs | 4 ++-- .../Media/Disk/IPFFormat/IPFFloppyDisk.cs | 2 +- .../Media/Disk/UDIFormat/UDI1_0FloppyDisk.cs | 4 ++-- .../Media/Tape/TAP/TapConverter.cs | 2 +- .../Media/Tape/TZX/TzxConverter.cs | 5 +++-- .../Media/Tape/TapeDataBlock.cs | 3 +++ .../Media/Tape/WAV/WavConverter.cs | 4 ++-- .../SinclairSpectrum/ZXSpectrum.ISettable.cs | 2 +- .../DiscFormats/MDS_Format.cs | 6 ++--- 21 files changed, 65 insertions(+), 59 deletions(-) diff --git a/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCPokeMemory.cs b/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCPokeMemory.cs index ba99cd60c5..8175e472ad 100644 --- a/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCPokeMemory.cs +++ b/BizHawk.Client.EmuHawk/config/AmstradCPC/AmstradCPCPokeMemory.cs @@ -10,8 +10,6 @@ namespace BizHawk.Client.EmuHawk { public partial class AmstradCPCPokeMemory : Form { - private AmstradCPC.AmstradCPCSettings _settings; - public AmstradCPCPokeMemory() { InitializeComponent(); diff --git a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumPokeMemory.cs b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumPokeMemory.cs index de0c799f24..9c3ec12f96 100644 --- a/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumPokeMemory.cs +++ b/BizHawk.Client.EmuHawk/config/ZXSpectrum/ZXSpectrumPokeMemory.cs @@ -10,8 +10,6 @@ namespace BizHawk.Client.EmuHawk { public partial class ZXSpectrumPokeMemory : Form { - private ZXSpectrum.ZXSpectrumSettings _settings; - public ZXSpectrumPokeMemory() { InitializeComponent(); diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.ISettable.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.ISettable.cs index bea48eedea..d6960d93e0 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.ISettable.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/AmstradCPC.ISettable.cs @@ -238,7 +238,6 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC // output the data splitting and tabbing as neccessary var arr = d.Value.Split(' '); - int cnt = 0; List builder = new List(); string working = ""; diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDC.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDC.cs index 54510a10fe..96815e78f3 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDC.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Disk/NECUPD765.FDC.cs @@ -394,6 +394,8 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC sectorSize = 0x80 << ActiveCommandParams.SectorSize; } + var mtc = maxTransferCap; + // get the current track var track = ActiveDrive.Disk.DiskTracks.Where(a => a.TrackNumber == ActiveDrive.CurrentTrackID).FirstOrDefault(); @@ -655,6 +657,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC int buffPos = 0; int sectorSize = 0; int maxTransferCap = 0; + if (maxTransferCap > 0) { } // calculate requested size of data required if (ActiveCommandParams.SectorSize == 0) @@ -967,6 +970,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC int buffPos = 0; int sectorSize = 0; int maxTransferCap = 0; + if (maxTransferCap > 0) { } // calculate requested size of data required if (ActiveCommandParams.SectorSize == 0) @@ -1031,7 +1035,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC break; } - FloppyDisk.Sector sector = null; + //FloppyDisk.Sector sector = null; ActiveDrive.SectorIndex = 0; int secCount = 0; @@ -1371,7 +1375,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC // get the first sector var track = ActiveDrive.Disk.DiskTracks[ActiveCommandParams.Cylinder]; - int secIndex = 0; + //int secIndex = 0; for (int s = 0; s < track.Sectors.Length; s++) { if (track.Sectors[s].SectorID == endSecID) @@ -1422,7 +1426,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC byte endSecID = ActiveCommandParams.EOT; bool lastSec = false; var track = ActiveDrive.Disk.DiskTracks[ActiveCommandParams.Cylinder]; - int secIndex = 0; + //int secIndex = 0; for (int s = 0; s < track.Sectors.Length; s++) { @@ -1664,7 +1668,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC // get the first sector var track = ActiveDrive.Disk.DiskTracks[ActiveCommandParams.Cylinder]; - int secIndex = 0; + //int secIndex = 0; for (int s = 0; s < track.Sectors.Length; s++) { if (track.Sectors[s].SectorID == endSecID) @@ -1715,7 +1719,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC byte endSecID = ActiveCommandParams.EOT; bool lastSec = false; var track = ActiveDrive.Disk.DiskTracks[ActiveCommandParams.Cylinder]; - int secIndex = 0; + //int secIndex = 0; for (int s = 0; s < track.Sectors.Length; s++) { @@ -2397,18 +2401,12 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC break; } - //if (!CheckTiming()) - //{ - // UnSetBit(MSR_EXM, ref StatusMain); - //} - return StatusMain; } - private int testCount = 0; + /// /// Handles CPU reading from the data register /// - /// private byte ReadDataRegister() { // default return value diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs index 659ca850c5..866fd627ca 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/Display/AmstradGateArray.cs @@ -1103,7 +1103,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC ScreenLines.Clear(); return ScreenBuffer; - + /* switch (borderType) { // crop to 768x272 (544) @@ -1139,18 +1139,19 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC } return croppedBuffer; */ + /* + var slWidth = BufferWidth; + return ScreenBuffer; - var slWidth = BufferWidth; - return ScreenBuffer; + break; - break; - - } - return ScreenBuffer; - } + } + */ + //return ScreenBuffer; + } - public void SetupScreenSize() + public void SetupScreenSize() { SysBufferWidth = 800; SysBufferHeight = 600; diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/AY38912.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/AY38912.cs index 240acb9a2c..2e2b2f0bc0 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/AY38912.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Hardware/SoundOutput/AY38912.cs @@ -28,8 +28,8 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC private short[] _audioBuffer; private int _audioBufferIndex; private int _lastStateRendered; - private int _clockCyclesPerFrame; - private int _cyclesPerSample; + //private int _clockCyclesPerFrame; + //private int _cyclesPerSample; #endregion diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/GateArrayBase.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/GateArrayBase.cs index 768a377b67..cfe9fedf05 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/GateArrayBase.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Machine/GateArrayBase.cs @@ -216,14 +216,14 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC private int CurrentPen; private int ScreenMode; private int INTScanlineCnt; - private int VSYNCDelyCnt; + //private int VSYNCDelyCnt; private int[][] Lookup = new int[4][]; - private bool DoModeUpdate; + //private bool DoModeUpdate; - private int LatchedMode; - private int buffPos; + //private int LatchedMode; + //private int buffPos; public bool FrameEnd; @@ -387,7 +387,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC for (int i = 0; i < 17; i++) PenColours[i] = 0; INTScanlineCnt = 0; - VSYNCDelyCnt = 0; + //VSYNCDelyCnt = 0; } #endregion diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/CDT/CdtConverter.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/CDT/CdtConverter.cs index 304d53d0ab..3361d96126 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/CDT/CdtConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/CDT/CdtConverter.cs @@ -77,7 +77,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC tb.PauseInMS = db.PauseInMS; double multiplier = (double)4 / (double)3.5; - double cycleScale = ((40 << 16) / 35); + //double cycleScale = ((40 << 16) / 35); double origPeriods = db.DataPeriods.Count(); for (int i = 0; i < origPeriods; i++) @@ -1372,7 +1372,8 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC // get text length int strLen = data[_position++]; - string title = "Info: "; + string title = string.Empty; + title = "Info: "; switch (type) { diff --git a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/TapeDataBlock.cs b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/TapeDataBlock.cs index 40efa71d1e..69086fc02d 100644 --- a/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/TapeDataBlock.cs +++ b/BizHawk.Emulation.Cores/Computers/AmstradCPC/Media/Tape/TapeDataBlock.cs @@ -51,6 +51,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC set { _blockData = value; } } + /* /// /// An array of bytearray encoded strings (stored in this format for easy Bizhawk serialization) /// Its basically tape information @@ -74,6 +75,7 @@ namespace BizHawk.Emulation.Cores.Computers.AmstradCPC return data; } } + */ #region Block Meta Data diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.FDC.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.FDC.cs index 62b42c7c09..b06daddf3c 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.FDC.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Disk/NECUPD765.FDC.cs @@ -362,6 +362,8 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum // calculate maximum transfer capacity if (!CMD_FLAG_MF) maxTransferCap = 3328; + + if (maxTransferCap == 0) { } } else { @@ -655,6 +657,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum int buffPos = 0; int sectorSize = 0; int maxTransferCap = 0; + if (maxTransferCap > 0) { } // calculate requested size of data required if (ActiveCommandParams.SectorSize == 0) @@ -967,6 +970,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum int buffPos = 0; int sectorSize = 0; int maxTransferCap = 0; + if (maxTransferCap > 0) { } // calculate requested size of data required if (ActiveCommandParams.SectorSize == 0) @@ -1031,7 +1035,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum break; } - FloppyDisk.Sector sector = null; + //FloppyDisk.Sector sector = null; ActiveDrive.SectorIndex = 0; int secCount = 0; @@ -1371,7 +1375,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum // get the first sector var track = ActiveDrive.Disk.DiskTracks[ActiveCommandParams.Cylinder]; - int secIndex = 0; + //int secIndex = 0; for (int s = 0; s < track.Sectors.Length; s++) { if (track.Sectors[s].SectorID == endSecID) @@ -1422,7 +1426,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum byte endSecID = ActiveCommandParams.EOT; bool lastSec = false; var track = ActiveDrive.Disk.DiskTracks[ActiveCommandParams.Cylinder]; - int secIndex = 0; + //int secIndex = 0; for (int s = 0; s < track.Sectors.Length; s++) { @@ -1664,7 +1668,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum // get the first sector var track = ActiveDrive.Disk.DiskTracks[ActiveCommandParams.Cylinder]; - int secIndex = 0; + //int secIndex = 0; for (int s = 0; s < track.Sectors.Length; s++) { if (track.Sectors[s].SectorID == endSecID) @@ -1715,7 +1719,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum byte endSecID = ActiveCommandParams.EOT; bool lastSec = false; var track = ActiveDrive.Disk.DiskTracks[ActiveCommandParams.Cylinder]; - int secIndex = 0; + //int secIndex = 0; for (int s = 0; s < track.Sectors.Length; s++) { @@ -2404,7 +2408,8 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum return StatusMain; } - private int testCount = 0; + + //private int testCount = 0; /// /// Handles CPU reading from the data register /// diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/CursorJoystick.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/CursorJoystick.cs index e0828551f2..68606406ad 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/CursorJoystick.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/CursorJoystick.cs @@ -9,7 +9,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// public class CursorJoystick : IJoystick { - private int _joyLine; + //private int _joyLine; private SpectrumBase _machine; #region Construction @@ -17,7 +17,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum public CursorJoystick(SpectrumBase machine, int playerNumber) { _machine = machine; - _joyLine = 0; + //_joyLine = 0; _playerNumber = playerNumber; ButtonCollection = new List diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick1.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick1.cs index e224646913..1b5cc0b779 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick1.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick1.cs @@ -9,7 +9,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// public class SinclairJoystick1 : IJoystick { - private int _joyLine; + //private int _joyLine; private SpectrumBase _machine; #region Construction @@ -17,7 +17,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum public SinclairJoystick1(SpectrumBase machine, int playerNumber) { _machine = machine; - _joyLine = 0; + //_joyLine = 0; _playerNumber = playerNumber; ButtonCollection = new List diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick2.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick2.cs index 6533e76f23..4c391b41a8 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick2.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Hardware/Input/SinclairJoystick2.cs @@ -9,7 +9,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// public class SinclairJoystick2 : IJoystick { - private int _joyLine; + //private int _joyLine; private SpectrumBase _machine; #region Construction @@ -17,7 +17,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum public SinclairJoystick2(SpectrumBase machine, int playerNumber) { _machine = machine; - _joyLine = 0; + //_joyLine = 0; _playerNumber = playerNumber; ButtonCollection = new List diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/IPFFormat/IPFFloppyDisk.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/IPFFormat/IPFFloppyDisk.cs index f99c0ae179..cebfd3ec04 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/IPFFormat/IPFFloppyDisk.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/IPFFormat/IPFFloppyDisk.cs @@ -59,7 +59,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum } catch (Exception ex) { - + var e = ex.ToString(); } } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/UDIFormat/UDI1_0FloppyDisk.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/UDIFormat/UDI1_0FloppyDisk.cs index d46908a73d..953ec8d4b1 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/UDIFormat/UDI1_0FloppyDisk.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Disk/UDIFormat/UDI1_0FloppyDisk.cs @@ -141,9 +141,9 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum s1Pos += blockSize; } } - catch (Exception ex) + catch (Exception) { - + } diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TAP/TapConverter.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TAP/TapConverter.cs index 97e1b448cf..a9ab6a895a 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TAP/TapConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TAP/TapConverter.cs @@ -335,7 +335,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum } // add block pause - int actualPause = PAUSE_MS * 1000; + //int actualPause = PAUSE_MS * 1000; //dataPeriods.Add(actualPause); // default pause for tap files diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TZX/TzxConverter.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TZX/TzxConverter.cs index 052be1824f..1eca78ec5a 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TZX/TzxConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TZX/TzxConverter.cs @@ -1312,9 +1312,10 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum // get text length int strLen = data[_position++]; - string title = "Info: "; + string title = String.Empty; + title = "Info: "; - switch (type) + switch (type) { case 0x00: title = "Full Title: "; diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TapeDataBlock.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TapeDataBlock.cs index adcc0eee97..82019ccf88 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TapeDataBlock.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/TapeDataBlock.cs @@ -51,6 +51,8 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum set { _blockData = value; } } + /* + /// /// An array of bytearray encoded strings (stored in this format for easy Bizhawk serialization) /// Its basically tape information @@ -74,6 +76,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum return data; } } + */ #region Block Meta Data diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavConverter.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavConverter.cs index 07c8d3e300..030900e3c1 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavConverter.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/Media/Tape/WAV/WavConverter.cs @@ -37,7 +37,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum /// /// Position counter /// - private int _position = 0; + //private int _position = 0; #region Construction @@ -91,7 +91,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum "This is not a valid WAV format file"); } - _position = 0; + //_position = 0; MemoryStream stream = new MemoryStream(); stream.Write(data, 0, data.Length); diff --git a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ISettable.cs b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ISettable.cs index 1e8e491ca6..096938717d 100644 --- a/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ISettable.cs +++ b/BizHawk.Emulation.Cores/Computers/SinclairSpectrum/ZXSpectrum.ISettable.cs @@ -390,7 +390,7 @@ namespace BizHawk.Emulation.Cores.Computers.SinclairSpectrum // output the data splitting and tabbing as neccessary var arr = d.Value.Split(' '); - int cnt = 0; + //int cnt = 0; List builder = new List(); string working = ""; diff --git a/BizHawk.Emulation.DiscSystem/DiscFormats/MDS_Format.cs b/BizHawk.Emulation.DiscSystem/DiscFormats/MDS_Format.cs index 27699da2d1..7794530401 100644 --- a/BizHawk.Emulation.DiscSystem/DiscFormats/MDS_Format.cs +++ b/BizHawk.Emulation.DiscSystem/DiscFormats/MDS_Format.cs @@ -840,7 +840,7 @@ namespace BizHawk.Emulation.DiscSystem currBlobIndex++; mdfBlob = disc.DisposableResources[currBlobIndex] as Disc.Blob_RawFile; - int userSector = 2048; + //int userSector = 2048; switch (track.SectorSize) { case 2448: @@ -848,7 +848,7 @@ namespace BizHawk.Emulation.DiscSystem { Policy = IN_DiscMountPolicy }; - userSector = 2352; + //userSector = 2352; break; case 2048: default: @@ -856,7 +856,7 @@ namespace BizHawk.Emulation.DiscSystem { Policy = IN_DiscMountPolicy }; - userSector = 2048; + //userSector = 2048; break; //throw new Exception("Not supported: Sector Size " + track.SectorSize); From 198187748729536df5486dc62db434f8b84e2d12 Mon Sep 17 00:00:00 2001 From: alyosha-tas Date: Sun, 27 Jan 2019 17:18:16 -0600 Subject: [PATCH 254/301] NESHawk: Remove GOTOs --- .../Consoles/Nintendo/NES/Boards/ExROM.cs | 6 ++- .../Consoles/Nintendo/NES/PPU.cs | 39 ++++++++++++++----- 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/ExROM.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/ExROM.cs index ce0e72510f..b1a561e271 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/ExROM.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/Boards/ExROM.cs @@ -255,7 +255,10 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES // top 2 bits of address come from chr_reg_high bank_1k += chr_reg_high << 8; ofs = addr & (4 * 1024 - 1); - goto MAPPED; + + bank_1k &= chr_bank_mask_1k; + addr = (bank_1k << 10) | ofs; + return addr; } if (NES.ppu.reg_2000.obj_size_16) @@ -278,7 +281,6 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES bank_1k = a_banks_1k[bank_1k]; } - MAPPED: bank_1k &= chr_bank_mask_1k; addr = (bank_1k<<10)|ofs; return addr; diff --git a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs index b04744f5f8..c3341b15ab 100644 --- a/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs +++ b/BizHawk.Emulation.Cores/Consoles/Nintendo/NES/PPU.cs @@ -105,6 +105,7 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES int sum = 0; int ymin = Math.Max(Math.Max(y - radius, ppur.status.sl - 20), 0); + if (ymin > 239) { ymin = 239; } int ymax = Math.Min(y + radius, 239); int xmin = Math.Max(x - radius, 0); int xmax = Math.Min(x + radius, 255); @@ -112,21 +113,39 @@ namespace BizHawk.Emulation.Cores.Nintendo.NES int ystop = ppur.status.sl - 2; int xstop = ppur.status.cycle - 20; - for (int j = ymin; j <= ymax; j++) + bool all_stop = false; + + int j = ymin; + int i = xmin; + short s = 0; + short palcolor = 0; + short intensity = 0; + + if (j >= ystop && i >= xstop || j > ystop) { all_stop = true; } + + while (!all_stop) { - for (int i = xmin; i <= xmax; i++) + s = xbuf[j * 256 + i]; + palcolor = (short)(s & 0x3F); + intensity = (short)((s >> 6) & 0x7); + + sum += _currentLuma[palcolor]; + + i++; + if (i > xmax) { - if (j >= ystop && i >= xstop || j > ystop) - goto loopout; + i = xmin; + j++; - short s = xbuf[j * 256 + i]; - - short palcolor = (short)(s & 0x3F); - short intensity = (short)((s >> 6) & 0x7); - sum += _currentLuma[palcolor]; + if (j > ymax) + { + all_stop = true; + } } + + if (j >= ystop && i >= xstop || j > ystop) { all_stop = true; } } - loopout: + return sum >= 2000; } From 104e40d8b56a23a747e752fda4306a034cc8a3b3 Mon Sep 17 00:00:00 2001 From: feos Date: Tue, 29 Jan 2019 13:47:01 +0300 Subject: [PATCH 255/301] update gliden64 --- libmupen64plus/GLideN64 | 2 +- output/dll/mupen64plus-video-GLideN64.dll | Bin 2106880 -> 2124800 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/libmupen64plus/GLideN64 b/libmupen64plus/GLideN64 index 57ba873c5e..ee91d9bf82 160000 --- a/libmupen64plus/GLideN64 +++ b/libmupen64plus/GLideN64 @@ -1 +1 @@ -Subproject commit 57ba873c5e117a42f94299cb7ddaa1066249b416 +Subproject commit ee91d9bf823457e9dcb1fe8f1213bbcf5a6f675b diff --git a/output/dll/mupen64plus-video-GLideN64.dll b/output/dll/mupen64plus-video-GLideN64.dll index c8eb531227c68a9da295708ffd0382d69d6f56c3..73298dca9a74bb601874e00340698c2a6524fb60 100644 GIT binary patch literal 2124800 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%0D%yLbgY3~QLAw_{H;_DuVOl`eVT^f#V-fe_j6 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 z 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