From 054f6e5d5303c6f5f49a3e5e7fbf2b5a4b8ddf05 Mon Sep 17 00:00:00 2001 From: blha303 Date: Tue, 8 Nov 2016 21:17:02 +0800 Subject: [PATCH 01/24] Added link to the correct version of mupen64 to README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 54c2fa1f0..4e1a39db6 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ The latest release of Stroop can be downloaded from our [Releases Page](https:// * Windows 10 / Windows 8 / Windows 7 / Windows Vista 64-bit or 32-bit * OpenGL 3.0 or greater (requirement for map tab only) * .NET Framework 4.6 (See [.NET Framework System Requirements](https://msdn.microsoft.com/en-us/library/8z6watww(v=vs.110).aspx) for more information) - * Mupen 0.5 rerecording (0.5.1 will not work) + * [Mupen 0.5 rerecording](http://adelikat.tasvideos.org/emulatordownloads/mupen64-rr/Mupen64%20v8%20installer.zip) (0.5.1 will not work) * 64 Marios (Must be super) * Marios must be American (No PAL or JAP just yet) From e3a15bfe7280b26b595397b12c845b52076d6770 Mon Sep 17 00:00:00 2001 From: danebouchie Date: Wed, 9 Nov 2016 22:20:01 -0500 Subject: [PATCH 02/24] Added multiple object slot selection --- .../Controls/WatchVariableControl.cs | 166 +++++++++++------ .../Extensions/WatchVariableExtensions.cs | 12 +- .../SM64 Diagnostic/Managers/DataManager.cs | 2 +- .../SM64 Diagnostic/Managers/MarioManager.cs | 2 +- .../SM64 Diagnostic/Managers/MiscManager.cs | 2 +- .../SM64 Diagnostic/Managers/ObjectManager.cs | 171 +++++++++++------- .../Managers/ObjectSlotsManager.cs | 110 +++++++++-- .../Managers/TriangleManager.cs | 2 +- Source/SM64 Diagnostic/SM64 Diagnostic.csproj | 2 + .../Structs/BehaviorCriteria.cs | 17 ++ .../SM64 Diagnostic/Utilities/MarioActions.cs | 29 +-- 11 files changed, 352 insertions(+), 163 deletions(-) diff --git a/Source/SM64 Diagnostic/Controls/WatchVariableControl.cs b/Source/SM64 Diagnostic/Controls/WatchVariableControl.cs index db16ad8c5..dd5505deb 100644 --- a/Source/SM64 Diagnostic/Controls/WatchVariableControl.cs +++ b/Source/SM64 Diagnostic/Controls/WatchVariableControl.cs @@ -22,11 +22,12 @@ public class WatchVariableControl : IDataContainer ProcessStream _stream; string _specialName; - public uint OtherOffset; + public List OtherOffsets = new List() { 0 }; bool _changedByUser = true; bool _editMode = false; static Image _lockedImage = new Bitmap(Image.FromStream(Assembly.GetExecutingAssembly().GetManifestResourceStream("SM64_Diagnostic.Resources.lock.png")), new Size(16, 16)); + static Image _someLockedImage = _lockedImage.GetOpaqueImage(0.5f); static WatchVariableControl _lastSelected; @@ -192,29 +193,31 @@ public WatchVariable WatchVariable } } - bool _lastLocked = false; - private bool ShowLockedImage + Image _lastLockedImage = null; + private void ShowLockedImage(bool show, bool transparent = false) { - get - { - return _lastLocked; - } - set - { - if (_lastLocked == value) - return; + Image nextImage = null; + if (show) + nextImage = transparent ? _someLockedImage : _lockedImage; - _lastLocked = value; - _nameLabel.Image = _lastLocked ? _lockedImage : null; - } + if (_lastLockedImage == nextImage) + return; + + _lastLockedImage = nextImage; + _nameLabel.Image = nextImage; } public WatchVariableControl(ProcessStream stream, WatchVariable watchVar, uint otherOffset = 0) + : this(stream, watchVar, new List() { otherOffset }) + { + } + + public WatchVariableControl(ProcessStream stream, WatchVariable watchVar, List otherOffset) { _specialName = watchVar.Name; _watchVar = watchVar; _stream = stream; - OtherOffset = otherOffset; + OtherOffsets = otherOffset; CreateControls(); @@ -222,9 +225,9 @@ public WatchVariableControl(ProcessStream stream, WatchVariable watchVar, uint o Color = watchVar.BackroundColor.Value; } - public WatchVariableLock GetVariableLock() + public WatchVariableLock GetVariableLock(uint offset) { - var lockCriteria = new WatchVariableLock(_stream, _watchVar.GetRamAddress(_stream, OtherOffset, false), new byte[_watchVar.GetByteCount()]); + var lockCriteria = new WatchVariableLock(_stream, _watchVar.GetRamAddress(_stream, offset, false), new byte[_watchVar.GetByteCount()]); if (!_stream.LockedVariables.ContainsKey(lockCriteria)) return null; @@ -250,8 +253,8 @@ private void CreateControls() else { AddressToolTip.SetToolTip(this._nameLabel, String.Format("0x{1:X8} + 0x{0:X8} = 0x{2:X8} [{4} + 0x{3:X8}]", - _watchVar.GetRamAddress(_stream, 0, false), OtherOffset, _watchVar.GetRamAddress(_stream, OtherOffset), - _watchVar.GetProcessAddress(_stream, OtherOffset), _stream.ProcessName)); + _watchVar.GetRamAddress(_stream, 0, false), OtherOffsets, _watchVar.GetRamAddress(_stream, OtherOffsets[0]), + _watchVar.GetProcessAddress(_stream, OtherOffsets[0]), _stream.ProcessName)); } }; @@ -259,7 +262,7 @@ private void CreateControls() { this._checkBoxBool = new CheckBox(); this._checkBoxBool.CheckAlign = ContentAlignment.MiddleRight; - this._checkBoxBool.CheckedChanged += OnModified; + this._checkBoxBool.CheckedChanged += OnEdited; } else { @@ -269,7 +272,7 @@ private void CreateControls() this._textBoxValue.TextAlign = HorizontalAlignment.Right; this._textBoxValue.Width = 200; this._textBoxValue.Margin = new Padding(6, 3, 6, 3); - this._textBoxValue.TextChanged += OnModified; + this._textBoxValue.TextChanged += OnEdited; this._textBoxValue.ContextMenuStrip = _watchVar.IsAngle ? WatchVariableControl.AngleMenu : WatchVariableControl.Menu; this._textBoxValue.KeyDown += OnTextValueKeyDown; this._textBoxValue.MouseEnter += _textBoxValue_MouseEnter; @@ -319,8 +322,8 @@ private void _nameLabel_Click(object sender, EventArgs e) else { varInfo = new VariableViewerForm(_watchVar.Name, typeDescr, - String.Format("0x{0:X8}", _watchVar.GetRamAddress(_stream, OtherOffset)), - String.Format("0x{0:X8}", _watchVar.GetProcessAddress(_stream, OtherOffset))); + String.Format("0x{0:X8}", _watchVar.GetRamAddress(_stream, OtherOffsets[0])), + String.Format("0x{0:X8}", _watchVar.GetProcessAddress(_stream, OtherOffsets[0]))); } varInfo.ShowDialog(); } @@ -335,11 +338,24 @@ private void _textBoxValue_DoubleClick(object sender, EventArgs e) private void _textBoxValue_MouseEnter(object sender, EventArgs e) { + var lockedStatus = CheckState.Unchecked; + if (OtherOffsets.Any(o => GetIsLocked(o))) + { + if (OtherOffsets.All(o => GetIsLocked(o))) + { + lockedStatus = CheckState.Checked; + } + else + { + lockedStatus = CheckState.Indeterminate; + } + } + _lastSelected = this; if (_watchVar.IsAngle) { (AngleMenu.Items["HexView"] as ToolStripMenuItem).Checked = _watchVar.UseHex; - (AngleMenu.Items["LockValue"] as ToolStripMenuItem).Checked = GetIsLocked(); + (AngleMenu.Items["LockValue"] as ToolStripMenuItem).CheckState = lockedStatus; (AngleDropDownMenu[0].DropDownItems[0] as ToolStripMenuItem).Checked = (_angleViewMode == AngleViewModeType.Recommended); (AngleDropDownMenu[0].DropDownItems[1] as ToolStripMenuItem).Checked = (_angleViewMode == AngleViewModeType.Unsigned); (AngleDropDownMenu[0].DropDownItems[2] as ToolStripMenuItem).Checked = (_angleViewMode == AngleViewModeType.Signed); @@ -350,7 +366,7 @@ private void _textBoxValue_MouseEnter(object sender, EventArgs e) else { (Menu.Items["HexView"] as ToolStripMenuItem).Checked = _watchVar.UseHex; - (Menu.Items["LockValue"] as ToolStripMenuItem).Checked = GetIsLocked(); + (Menu.Items["HexView"] as ToolStripMenuItem).CheckState = lockedStatus; } } @@ -392,7 +408,7 @@ public void Update() if (_watchVar.Special) return; - ShowLockedImage = GetIsLocked(); + ShowLockedImage(OtherOffsets.Any(o => GetIsLocked(o)), !OtherOffsets.All(o => GetIsLocked(o))); if (_editMode) return; @@ -401,28 +417,65 @@ public void Update() if (_watchVar.IsBool) { - _checkBoxBool.Checked = _watchVar.GetBoolValue(_stream, OtherOffset); - } - else if (_watchVar.IsAngle) - { - _textBoxValue.Text = _watchVar.GetAngleStringValue(_stream, OtherOffset, _angleViewMode, _angleTruncated); + if (OtherOffsets.Any(o => _watchVar.GetBoolValue(_stream, o))) + { + if (OtherOffsets.All(o => _watchVar.GetBoolValue(_stream, o))) + { + _checkBoxBool.CheckState = CheckState.Checked; + } + else + { + _checkBoxBool.CheckState = CheckState.Indeterminate; + } + } + else + { + _checkBoxBool.CheckState = CheckState.Unchecked; + } } else { - _textBoxValue.Text = _watchVar.GetStringValue(_stream, OtherOffset); + bool firstOffset = true; + foreach (var offset in OtherOffsets) + { + string newText = ""; + if (_watchVar.IsAngle) + { + newText = _watchVar.GetAngleStringValue(_stream, offset, _angleViewMode, _angleTruncated); + } + else + { + newText = _watchVar.GetStringValue(_stream, offset); + } + + if (firstOffset) + { + _textBoxValue.Text = newText; + } + else if (_textBoxValue.Text != newText) + { + _textBoxValue.Text = ""; + continue; + } + + firstOffset = false; + } } _changedByUser = true; } - private void OnModified(object sender, EventArgs e) + private void OnEdited(object sender, EventArgs e) { if (!_changedByUser) return; if (_watchVar.IsBool) { - _watchVar.SetBoolValue(_stream, OtherOffset, _checkBoxBool.Checked); + foreach (var offset in OtherOffsets) + { + _watchVar.SetBoolValue(_stream, offset, _checkBoxBool.Checked); + } } } @@ -446,13 +499,13 @@ private void OnMenuStripClick(object sender, ToolStripItemClickedEventArgs e) _textBoxValue.ReadOnly = true; _editMode = false; (e.ClickedItem as ToolStripMenuItem).Checked = !(e.ClickedItem as ToolStripMenuItem).Checked; - if (GetIsLocked()) + if (OtherOffsets.Any(o => GetIsLocked(o))) { - RemoveLock(); + OtherOffsets.ForEach(o => RemoveLock(o)); } else { - LockUpdate(); + OtherOffsets.ForEach(o => LockUpdate(o)); } break; } @@ -472,41 +525,44 @@ private void OnTextValueKeyDown(object sender, KeyEventArgs e) // Write new value to RAM byte[] writeBytes; - if (_watchVar.IsAngle) + foreach (var offset in OtherOffsets) { - writeBytes = _watchVar.GetBytesFromAngleString(_stream, OtherOffset, _textBoxValue.Text, _angleViewMode); - } - else - { - writeBytes = _watchVar.GetBytesFromString(_stream, OtherOffset, _textBoxValue.Text); - } - _watchVar.SetBytes(_stream, OtherOffset, writeBytes); + if (_watchVar.IsAngle) + { + writeBytes = _watchVar.GetBytesFromAngleString(_stream, _textBoxValue.Text, _angleViewMode); + } + else + { + writeBytes = _watchVar.GetBytesFromString(_stream, offset, _textBoxValue.Text); + } + _watchVar.SetBytes(_stream, offset, writeBytes); - // Update locked value - if (GetIsLocked()) - LockUpdate(writeBytes); + // Update locked value + if (GetIsLocked(offset)) + LockUpdate(offset, writeBytes); + } _stream.Resume(); } - public bool GetIsLocked() + public bool GetIsLocked(uint offset) { - return GetVariableLock() != null; + return GetVariableLock(offset) != null; } - private void RemoveLock() + private void RemoveLock(uint offset) { - var lockedVar = GetVariableLock(); + var lockedVar = GetVariableLock(offset); if (lockedVar != null) _stream.LockedVariables.Remove(lockedVar); } - private void LockUpdate(byte[] lockedBytes = null) + private void LockUpdate(uint offset, byte[] lockedBytes = null) { if (lockedBytes == null) - lockedBytes = _watchVar.GetByteData(_stream, OtherOffset); + lockedBytes = _watchVar.GetByteData(_stream, offset); - var lockedVar = new WatchVariableLock(_stream, _watchVar.GetRamAddress(_stream, OtherOffset, false), lockedBytes); + var lockedVar = new WatchVariableLock(_stream, _watchVar.GetRamAddress(_stream, offset, false), lockedBytes); _stream.LockedVariables[lockedVar] = lockedVar; } } diff --git a/Source/SM64 Diagnostic/Extensions/WatchVariableExtensions.cs b/Source/SM64 Diagnostic/Extensions/WatchVariableExtensions.cs index f6ca06ad3..c9ee4dc8f 100644 --- a/Source/SM64 Diagnostic/Extensions/WatchVariableExtensions.cs +++ b/Source/SM64 Diagnostic/Extensions/WatchVariableExtensions.cs @@ -51,12 +51,10 @@ public static byte[] GetByteData(this WatchVariable watchVar, ProcessStream stre public static string GetStringValue(this WatchVariable watchVar, ProcessStream stream, uint offset) { // Get dataBytes - var byteCount = WatchVariable.TypeSize[watchVar.Type]; - var dataBytes = stream.ReadRam(watchVar.OtherOffset ? offset + watchVar.Address - : watchVar.Address, byteCount, watchVar.AbsoluteAddressing); + var dataBytes = watchVar.GetByteData(stream, offset); // Make sure offset is a valid pointer - if (watchVar.OtherOffset && offset == 0) + if (dataBytes == null) return "(none)"; // Parse floating point @@ -84,7 +82,7 @@ public static string GetStringValue(this WatchVariable watchVar, ProcessStream s // Print hex if (watchVar.UseHex) - return "0x" + dataValue.ToString("X" + byteCount * 2); + return "0x" + dataValue.ToString("X" + WatchVariable.TypeSize[watchVar.Type] * 2); // Print signed if (watchVar.Type == typeof(Int64)) @@ -99,7 +97,7 @@ public static string GetStringValue(this WatchVariable watchVar, ProcessStream s return dataValue.ToString(); } - public static byte[] GetBytesFromAngleString(this WatchVariable watchVar, ProcessStream stream, uint offset, string value, WatchVariableControl.AngleViewModeType viewMode) + public static byte[] GetBytesFromAngleString(this WatchVariable watchVar, ProcessStream stream, string value, WatchVariableControl.AngleViewModeType viewMode) { if (watchVar.Type != typeof(UInt32) && watchVar.Type != typeof(UInt16) && watchVar.Type != typeof(Int32) && watchVar.Type != typeof(Int16)) @@ -149,7 +147,7 @@ public static byte[] GetBytesFromAngleString(this WatchVariable watchVar, Proces public static bool SetAngleStringValue(this WatchVariable watchVar, ProcessStream stream, uint offset, string value, WatchVariableControl.AngleViewModeType viewMode) { - var dataBytes = watchVar.GetBytesFromAngleString(stream, offset, value, viewMode); + var dataBytes = watchVar.GetBytesFromAngleString(stream, value, viewMode); return watchVar.SetBytes(stream, offset, dataBytes); } diff --git a/Source/SM64 Diagnostic/Managers/DataManager.cs b/Source/SM64 Diagnostic/Managers/DataManager.cs index 18d364bca..2fd7b713d 100644 --- a/Source/SM64 Diagnostic/Managers/DataManager.cs +++ b/Source/SM64 Diagnostic/Managers/DataManager.cs @@ -46,7 +46,7 @@ public DataManager(ProcessStream stream, List data, FlowLayoutPan continue; } - WatchVariableControl watchControl = new WatchVariableControl(_stream, watchVar, 0); + WatchVariableControl watchControl = new WatchVariableControl(_stream, watchVar); variableTable.Controls.Add(watchControl.Control); _dataControls.Add(watchControl); } diff --git a/Source/SM64 Diagnostic/Managers/MarioManager.cs b/Source/SM64 Diagnostic/Managers/MarioManager.cs index a36f25eed..a3e1ae921 100644 --- a/Source/SM64 Diagnostic/Managers/MarioManager.cs +++ b/Source/SM64 Diagnostic/Managers/MarioManager.cs @@ -215,7 +215,7 @@ private void OnDrop(object sender, DragEventArgs e) if (dropAction.Action != DropAction.ActionType.Object) return; - MarioActions.MoveObjectToMario(_stream, dropAction.Address); + MarioActions.RetreiveObjects(_stream, new List() { dropAction.Address }); } } } diff --git a/Source/SM64 Diagnostic/Managers/MiscManager.cs b/Source/SM64 Diagnostic/Managers/MiscManager.cs index 5bb6dc0c1..637995ce4 100644 --- a/Source/SM64 Diagnostic/Managers/MiscManager.cs +++ b/Source/SM64 Diagnostic/Managers/MiscManager.cs @@ -39,7 +39,7 @@ public MiscManager(ProcessStream stream, List watchVariables, Flo { if (!watchVar.Special) { - WatchVariableControl watchControl = new WatchVariableControl(_stream, watchVar, 0); + WatchVariableControl watchControl = new WatchVariableControl(_stream, watchVar); variableTable.Controls.Add(watchControl.Control); _watchVarControls.Add(watchControl); continue; diff --git a/Source/SM64 Diagnostic/Managers/ObjectManager.cs b/Source/SM64 Diagnostic/Managers/ObjectManager.cs index 688d294b9..04714952d 100644 --- a/Source/SM64 Diagnostic/Managers/ObjectManager.cs +++ b/Source/SM64 Diagnostic/Managers/ObjectManager.cs @@ -20,10 +20,9 @@ public class ObjectManager : DataManager object _watchVarLocker = new object(); - uint _currentAddress; - int _slotIndex; + string _slotIndex; string _slotPos; - uint _behavior; + string _behavior; bool _unclone = false; #region Fields @@ -48,31 +47,41 @@ public void SetBehaviorWatchVariables(List value, Color color) _dataControls.Add(newWatchVarControl); _objGui.ObjectFlowLayout.Controls.Add(newWatchVarControl.Control); } - _behaviorDataControls.ForEach(w => w.OtherOffset = _currentAddress); + _behaviorDataControls.ForEach(w => w.OtherOffsets = _currentAddresses); } } - public uint? CurrentAddress + List _currentAddresses = new List(); + public List CurrentAddresses { get { - return _currentAddress; + return _currentAddresses; } set { - if (_currentAddress != value) + if (_currentAddresses.SequenceEqual(value)) + return; + + _currentAddresses = value.ToList(); + + if (_currentAddresses.Count > 1) + _objGui.ObjAddressLabelValue.Text = ""; + else if (_currentAddresses.Count > 0) + _objGui.ObjAddressLabelValue.Text = "0x" + _currentAddresses[0].ToString("X8"); + else + _objGui.ObjAddressLabelValue.Text = ""; + + AddressChanged(); + + foreach (WatchVariableControl watchVar in _dataControls) { - _currentAddress = value.HasValue ? value.Value : 0x0000; - _objGui.ObjAddressLabelValue.Text = "0x" + _currentAddress.ToString("X8"); - foreach (WatchVariableControl watchVar in _dataControls) - { - watchVar.OtherOffset = _currentAddress; - } + watchVar.OtherOffsets = _currentAddresses; } } } - public int SlotIndex + public string SlotIndex { get { @@ -83,7 +92,7 @@ public int SlotIndex if (_slotIndex != value) { _slotIndex = value; - _objGui.ObjSlotIndexLabel.Text = _slotIndex.ToString(); + _objGui.ObjSlotIndexLabel.Text = _slotIndex; } } } @@ -104,7 +113,7 @@ public string SlotPos } } - public uint Behavior + public string Behavior { get { @@ -115,7 +124,7 @@ public uint Behavior if (_behavior != value) { _behavior = value; - _objGui.ObjBehaviorLabel.Text = "0x" + _behavior.ToString("X4"); + _objGui.ObjBehaviorLabel.Text = value; } } } @@ -199,42 +208,58 @@ public ObjectManager(ProcessStream stream, ObjectAssociations objAssoc, List 0) + { + int minSelect = _selectedSlotsAddresses.Min(s => ObjectSlots.First(o => o.Address == s).Index); + int maxSelect = _selectedSlotsAddresses.Max(s => ObjectSlots.First(o => o.Address == s).Index); + int startRange = Math.Min(minSelect, selectedSlot.Index); + int endRange = Math.Max(maxSelect, selectedSlot.Index); + var selectedObjects = ObjectSlots.Where(o => o.Index >= startRange && o.Index <= endRange + && !_selectedSlotsAddresses.Contains(o.Address)); + _selectedSlotsAddresses.AddRange(selectedObjects.Select(o => o.Address)); + } + else + { + if (!keyboardState.IsKeyDown(Key.ControlLeft) && !keyboardState.IsKeyDown(Key.ControlRight)) + { + _selectedSlotsAddresses.Clear(); + } + if (_selectedSlotsAddresses.Contains(selectedSlot.Address)) + { + if (_selectedSlotsAddresses.Count > 1) + { + _selectedSlotsAddresses.Remove(selectedSlot.Address); + } + } + else + { + _selectedSlotsAddresses.Add(selectedSlot.Address); + } + + } + + _objManager.CurrentAddresses = _selectedSlotsAddresses; break; case "Map": @@ -222,8 +255,6 @@ private List GetProcessedObjects(ObjectGroupsConfig groupConfig, _stream.ReadRam(currentObject + groupConfig.ProcessNextLinkOffset, 4), 0); } - // Calculate distance to Mario - return newObjectSlotData.ToList(); } @@ -295,7 +326,7 @@ public void Update() break; } - activeObjCnt = 0; + _activeObjCnt = 0; _standingOnObject = BitConverter.ToUInt32(_stream.ReadRam(Config.Mario.StandingOnObjectPointer, 4), 0); _interactingObject = BitConverter.ToUInt32(_stream.ReadRam(Config.Mario.InteractingObjectPointerOffset + Config.Mario.StructAddress, 4), 0); @@ -305,18 +336,56 @@ public void Update() : s.DistanceToMario).First().Address; // Update slots + BehaviorCriteria? multiBehavior = null; + bool firstObject = true; for (int i = 0; i < slotConfig.MaxSlots; i++) { - UpdateSlot(newObjectSlotData[i], i); + var behaviorCritera = UpdateSlot(newObjectSlotData[i], i); + if (!_selectedSlotsAddresses.Contains(newObjectSlotData[i].Address)) + continue; + + if (multiBehavior.HasValue) + { + multiBehavior = multiBehavior.Value.Generalize(behaviorCritera); + } + else if (firstObject) + { + multiBehavior = behaviorCritera; + firstObject = false; + } + } + _miscManager.ActiveObjectCount = _activeObjCnt; + + if (_selectedSlotsAddresses.Count > 1) + { + if (_selectedUpdated || _lastSelectedBehavior != multiBehavior) + { + if (multiBehavior.HasValue) + { + _objManager.Behavior = String.Format("0x{0}", ((multiBehavior.Value.BehaviorAddress + ObjectAssoc.RamOffset) & 0x00FFFFFF).ToString("X4")); + _objManager.Image = null; + _objManager.SetBehaviorWatchVariables(ObjectAssoc.GetWatchVariables(multiBehavior.Value), Config.ObjectGroups.VacantSlotColor.Lighten(0.8)); + } + else + { + _objManager.Behavior = ""; + _objManager.Image = null; + _objManager.SetBehaviorWatchVariables(new List(), Color.White); + } + _objManager.Name = "Multiple Objects Selected"; + _objManager.BackColor = Config.ObjectGroups.VacantSlotColor; + _objManager.SlotIndex = ""; + _objManager.SlotPos = ""; + _lastSelectedBehavior = multiBehavior; + } } - _miscManager.ActiveObjectCount = activeObjCnt; } - private void UpdateSlot(ObjectSlotData objectData, int index) + private BehaviorCriteria UpdateSlot(ObjectSlotData objectData, int index) { var objSlot = ObjectSlots[index]; uint currentAddress = objectData.Address; - + BehaviorCriteria behaviorCriteria; objSlot.IsActive = objectData.IsActive; objSlot.Address = currentAddress; @@ -330,13 +399,13 @@ private void UpdateSlot(ObjectSlotData objectData, int index) objSlot.DrawClosestOverlay = Config.ShowOverlays && currentAddress == _closestObject; if (objectData.IsActive) - activeObjCnt++; + _activeObjCnt++; - var gfxId = BitConverter.ToUInt32(_stream.ReadRam(currentAddress + Config.ObjectSlots.BehaviorGfxOffset, 4), 0); - var subType = BitConverter.ToInt32(_stream.ReadRam(currentAddress + Config.ObjectSlots.BehaviorSubtypeOffset, 4), 0); - var appearance = BitConverter.ToInt32(_stream.ReadRam(currentAddress + Config.ObjectSlots.BehaviorAppearance, 4), 0); + var gfxId = _stream.GetUInt32(currentAddress + Config.ObjectSlots.BehaviorGfxOffset); + var subType = _stream.GetInt32(currentAddress + Config.ObjectSlots.BehaviorSubtypeOffset); + var appearance = _stream.GetInt32(currentAddress + Config.ObjectSlots.BehaviorAppearance); - var behaviorCriteria = new BehaviorCriteria() + behaviorCriteria = new BehaviorCriteria() { BehaviorAddress = objectData.Behavior, GfxId = gfxId, @@ -391,13 +460,13 @@ private void UpdateSlot(ObjectSlotData objectData, int index) ObjectSlots[index].Text = ManagerGui.LockLabelsCheckbox.Checked ? _lastSlotLabel[currentAddress] : labelText; // Update object manager image - if (_selectedSlotsAddresses.Contains(currentAddress)) + if (_selectedSlotsAddresses.Count <= 1 && _selectedSlotsAddresses.Contains(currentAddress)) { var objAssoc = ObjectAssoc.FindObjectAssociation(behaviorCriteria); var newBehavior = objAssoc != null ? objAssoc.BehaviorCriteria : (BehaviorCriteria?)null; if (_lastSelectedBehavior != newBehavior) { - _objManager.Behavior = (objectData.Behavior + ObjectAssoc.RamOffset) & 0x00FFFFFF; + _objManager.Behavior = String.Format("0x{0}", ((objectData.Behavior + ObjectAssoc.RamOffset) & 0x00FFFFFF).ToString("X4")); _objManager.Name = ObjectAssoc.GetObjectName(behaviorCriteria); _objManager.SetBehaviorWatchVariables(ObjectAssoc.GetWatchVariables(behaviorCriteria), newColor.Lighten(0.8)); @@ -406,7 +475,7 @@ private void UpdateSlot(ObjectSlotData objectData, int index) _objManager.Image = ObjectSlots[index].ObjectImage; _objManager.BackColor = newColor; int slotPos = objectData.ObjectProcessGroup == VacantGroup ? objectData.VacantSlotIndex.Value : objectData.ProcessIndex; - _objManager.SlotIndex = _memoryAddressSlotIndex[currentAddress] + (Config.SlotIndexsFromOne ? 1 : 0); + _objManager.SlotIndex = (_memoryAddressSlotIndex[currentAddress] + (Config.SlotIndexsFromOne ? 1 : 0)).ToString(); _objManager.SlotPos = (objectData.ObjectProcessGroup == VacantGroup ? "VS " : "") + (slotPos + (Config.SlotIndexsFromOne ? 1 : 0)).ToString(); } @@ -450,6 +519,7 @@ private void UpdateSlot(ObjectSlotData objectData, int index) _mapObjects[currentAddress].UsesRotation = ObjectAssoc.GetObjectMapRotates(behaviorCriteria); } } + return behaviorCriteria; } public void OnSlotDropAction(DropAction dropAction, ObjectSlot objSlot) @@ -459,7 +529,7 @@ public void OnSlotDropAction(DropAction dropAction, ObjectSlot objSlot) case DropAction.ActionType.Mario: // Move mario to object var objectAddress = objSlot.Address; - MarioActions.MoveMarioToObject(_stream, objectAddress); + MarioActions.RetreiveObjects(_stream, new List() { objectAddress }); break; case DropAction.ActionType.Object: diff --git a/Source/SM64 Diagnostic/Managers/TriangleManager.cs b/Source/SM64 Diagnostic/Managers/TriangleManager.cs index 5a9b9d649..07bc3c088 100644 --- a/Source/SM64 Diagnostic/Managers/TriangleManager.cs +++ b/Source/SM64 Diagnostic/Managers/TriangleManager.cs @@ -35,7 +35,7 @@ uint TriangleAddress if (dataContainer is WatchVariableControl) { var watchVar = dataContainer as WatchVariableControl; - watchVar.OtherOffset = _triangleAddress; + watchVar.OtherOffsets = new List() { _triangleAddress }; } } diff --git a/Source/SM64 Diagnostic/SM64 Diagnostic.csproj b/Source/SM64 Diagnostic/SM64 Diagnostic.csproj index 05608a8dd..d0575a188 100644 --- a/Source/SM64 Diagnostic/SM64 Diagnostic.csproj +++ b/Source/SM64 Diagnostic/SM64 Diagnostic.csproj @@ -75,6 +75,7 @@ ..\packages\OpenTK.GLControl.1.1.1589.5941\lib\NET40\OpenTK.GLControl.dll True + @@ -86,6 +87,7 @@ + diff --git a/Source/SM64 Diagnostic/Structs/BehaviorCriteria.cs b/Source/SM64 Diagnostic/Structs/BehaviorCriteria.cs index cb86a762f..74e80ef75 100644 --- a/Source/SM64 Diagnostic/Structs/BehaviorCriteria.cs +++ b/Source/SM64 Diagnostic/Structs/BehaviorCriteria.cs @@ -45,6 +45,23 @@ public bool CongruentTo(BehaviorCriteria otherCriteria) return true; } + public BehaviorCriteria? Generalize(BehaviorCriteria otherCriteria) + { + if (otherCriteria.BehaviorAddress != BehaviorAddress) + return null; + + if (GfxId.HasValue && otherCriteria.GfxId.HasValue && GfxId.Value != otherCriteria.GfxId.Value) + return new BehaviorCriteria() { BehaviorAddress = BehaviorAddress}; + + if (SubType.HasValue && otherCriteria.SubType.HasValue && SubType.Value != otherCriteria.SubType.Value) + return new BehaviorCriteria() { BehaviorAddress = BehaviorAddress, GfxId = GfxId}; + + if (Appearance.HasValue && otherCriteria.Appearance.HasValue && Appearance.Value != otherCriteria.Appearance.Value) + return new BehaviorCriteria() { BehaviorAddress = BehaviorAddress, GfxId = GfxId, SubType = SubType }; + + return this; + } + public static bool operator ==(BehaviorCriteria a, BehaviorCriteria b) { return (a.BehaviorAddress == b.BehaviorAddress && a.GfxId == b.GfxId diff --git a/Source/SM64 Diagnostic/Utilities/MarioActions.cs b/Source/SM64 Diagnostic/Utilities/MarioActions.cs index 5653f1231..7eb740955 100644 --- a/Source/SM64 Diagnostic/Utilities/MarioActions.cs +++ b/Source/SM64 Diagnostic/Utilities/MarioActions.cs @@ -9,7 +9,7 @@ namespace SM64_Diagnostic.Utilities { public static class MarioActions { - public static bool MoveMarioToObject(ProcessStream stream, uint objAddress) + public static bool MoveMarioToObjects(ProcessStream stream, List objAddresses) { // Move mario to object var marioAddress = Config.Mario.StructAddress; @@ -18,9 +18,9 @@ public static bool MoveMarioToObject(ProcessStream stream, uint objAddress) // Get object position float x, y, z; - x = BitConverter.ToSingle(stream.ReadRam(objAddress + Config.ObjectSlots.ObjectXOffset, 4), 0); - y = BitConverter.ToSingle(stream.ReadRam(objAddress + Config.ObjectSlots.ObjectYOffset, 4), 0); - z = BitConverter.ToSingle(stream.ReadRam(objAddress + Config.ObjectSlots.ObjectZOffset, 4), 0); + x = objAddresses.Average(obj => BitConverter.ToSingle(stream.ReadRam(obj + Config.ObjectSlots.ObjectXOffset, 4), 0)); + y = objAddresses.Average(obj => BitConverter.ToSingle(stream.ReadRam(obj + Config.ObjectSlots.ObjectYOffset, 4), 0)); + z = objAddresses.Average(obj => BitConverter.ToSingle(stream.ReadRam(obj + Config.ObjectSlots.ObjectZOffset, 4), 0)); // Add offset y += Config.Mario.MoveToObjectYOffset; @@ -36,7 +36,7 @@ public static bool MoveMarioToObject(ProcessStream stream, uint objAddress) return success; } - public static bool MoveObjectToMario(ProcessStream stream, uint objAddress) + public static bool RetreiveObjects(ProcessStream stream, List objAddresses) { // Move object to Mario var marioAddress = Config.Mario.StructAddress; @@ -54,10 +54,12 @@ public static bool MoveObjectToMario(ProcessStream stream, uint objAddress) // Move object to Mario bool success = true; - success &= stream.WriteRam(BitConverter.GetBytes(x), objAddress + Config.ObjectSlots.ObjectXOffset); - success &= stream.WriteRam(BitConverter.GetBytes(y), objAddress + Config.ObjectSlots.ObjectYOffset); - success &= stream.WriteRam(BitConverter.GetBytes(z), objAddress + Config.ObjectSlots.ObjectZOffset); - + foreach (var objAddress in objAddresses) + { + success &= stream.WriteRam(BitConverter.GetBytes(x), objAddress + Config.ObjectSlots.ObjectXOffset); + success &= stream.WriteRam(BitConverter.GetBytes(y), objAddress + Config.ObjectSlots.ObjectYOffset); + success &= stream.WriteRam(BitConverter.GetBytes(z), objAddress + Config.ObjectSlots.ObjectZOffset); + } stream.Resume(); return success; @@ -100,9 +102,14 @@ public static bool UnCloneObject(ProcessStream stream, uint objAddress) return success; } - public static bool UnloadObject(ProcessStream stream, uint address) + public static bool UnloadObject(ProcessStream stream, List addresses) { - return stream.WriteRam(new byte[] { 0x00, 0x00 }, address + Config.ObjectSlots.ObjectActiveOffset); + bool success = true; + foreach (var address in addresses) + { + success &= stream.WriteRam(new byte[] { 0x00, 0x00 }, address + Config.ObjectSlots.ObjectActiveOffset); + } + return success; } public static bool RefillHp(ProcessStream stream) From fc68fabd5e3379824e31d246ca51dd70f575e543 Mon Sep 17 00:00:00 2001 From: danebouchie Date: Wed, 9 Nov 2016 22:32:52 -0500 Subject: [PATCH 03/24] Bugfix: Die sets health to 0 instead of 255 --- Source/SM64 Diagnostic/Utilities/MarioActions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/SM64 Diagnostic/Utilities/MarioActions.cs b/Source/SM64 Diagnostic/Utilities/MarioActions.cs index 7eb740955..8d078262d 100644 --- a/Source/SM64 Diagnostic/Utilities/MarioActions.cs +++ b/Source/SM64 Diagnostic/Utilities/MarioActions.cs @@ -119,7 +119,7 @@ public static bool RefillHp(ProcessStream stream) public static bool Die(ProcessStream stream) { - return stream.WriteRam(BitConverter.GetBytes((short)0), Config.Hud.HpAddress); + return stream.WriteRam(BitConverter.GetBytes((short)255), Config.Hud.HpAddress); } public static bool StandardHud(ProcessStream stream) From f070e9dbc902fab27c57ada78e70d03aa5b87fb7 Mon Sep 17 00:00:00 2001 From: danebouchie Date: Wed, 9 Nov 2016 22:38:22 -0500 Subject: [PATCH 04/24] Bugfix: round hill angles and steepness to nearest integer --- Source/SM64 Diagnostic/Managers/TriangleManager.cs | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Source/SM64 Diagnostic/Managers/TriangleManager.cs b/Source/SM64 Diagnostic/Managers/TriangleManager.cs index 07bc3c088..8e2bdb3f5 100644 --- a/Source/SM64 Diagnostic/Managers/TriangleManager.cs +++ b/Source/SM64 Diagnostic/Managers/TriangleManager.cs @@ -7,6 +7,7 @@ using SM64_Diagnostic.Structs; using SM64_Diagnostic.Utilities; using SM64_Diagnostic.Controls; +using SM64_Diagnostic.Extensions; namespace SM64_Diagnostic.ManagerClasses { @@ -126,7 +127,7 @@ private void ProcessSpecialVars() specialVar.Text = (marioY - floorY).ToString(); break; case "DistanceBelowCeiling": - specialVar.Text = (BitConverter.ToSingle(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.CeilingYOffset, 4), 0) + specialVar.Text = (_stream.GetSingle(Config.Mario.StructAddress + Config.Mario.CeilingYOffset) - marioY).ToString(); break; case "ClosestVertex": @@ -153,7 +154,7 @@ private void ProcessSpecialVars() specialVar.Text = "Wall"; goto case "CheckTriangleExists"; case "Steepness": - specialVar.Text = (65536 / (Math.PI * 2) * Math.Acos(normY)).ToString(); + specialVar.Text = FixAngle((65536 / (Math.PI * 2) * Math.Acos(normY))).ToString(); goto case "CheckTriangleExists"; case "NormalDistAway": specialVar.Text = (marioX * normX + marioY * normY + marioZ * normZ + normOffset).ToString(); @@ -179,6 +180,7 @@ private void ProcessSpecialVars() private double FixAngle(double angle) { + angle = Math.Round(angle); angle %= 65536; if (angle > 32768) angle -= 65536; From fbbca3a870f5620452198ff30a542b84bd5dc6c8 Mon Sep 17 00:00:00 2001 From: danebouchie Date: Fri, 11 Nov 2016 04:05:37 -0500 Subject: [PATCH 05/24] Added different angle view types for special watchvars --- .../Controls/AngleDataContainer.cs | 269 ++++++++++++++++++ .../Controls/IDataContainer.cs | 5 + .../Controls/WatchVariableControl.cs | 1 - .../SM64 Diagnostic/Managers/DataManager.cs | 2 +- .../SM64 Diagnostic/Managers/ObjectManager.cs | 2 +- .../Managers/TriangleManager.cs | 57 ++-- Source/SM64 Diagnostic/SM64 Diagnostic.csproj | 1 + 7 files changed, 307 insertions(+), 30 deletions(-) create mode 100644 Source/SM64 Diagnostic/Controls/AngleDataContainer.cs diff --git a/Source/SM64 Diagnostic/Controls/AngleDataContainer.cs b/Source/SM64 Diagnostic/Controls/AngleDataContainer.cs new file mode 100644 index 000000000..dc602b1df --- /dev/null +++ b/Source/SM64 Diagnostic/Controls/AngleDataContainer.cs @@ -0,0 +1,269 @@ +using System; +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SM64_Diagnostic.Controls +{ + public class AngleDataContainer : IDataContainer + { + Label _nameLabel; + TableLayoutPanel _tablePanel; + TextBox _textBoxValue; + string _specialName; + + static AngleDataContainer _lastSelected; + + public enum AngleViewModeType { Signed, Unsigned, Degrees, Radians }; + + AngleViewModeType _angleViewMode = AngleViewModeType.Unsigned; + bool _angleTruncated = false; + + public AngleDataContainer(string name) + { + _specialName = name; + + this._nameLabel = new Label(); + this._nameLabel.Width = 210; + this._nameLabel.Text = name; + this._nameLabel.Margin = new Padding(3, 3, 3, 3); + + this._textBoxValue = new TextBox(); + this._textBoxValue.ReadOnly = true; + this._textBoxValue.BorderStyle = BorderStyle.None; + this._textBoxValue.TextAlign = HorizontalAlignment.Right; + this._textBoxValue.Width = 200; + this._textBoxValue.Margin = new Padding(6, 3, 6, 3); + this._textBoxValue.ContextMenuStrip = AngleMenu; + this._textBoxValue.MouseEnter += _textBoxValue_MouseEnter; + + this._tablePanel = new TableLayoutPanel(); + this._tablePanel.Size = new Size(230, _nameLabel.Height + 2); + this._tablePanel.CellBorderStyle = TableLayoutPanelCellBorderStyle.Single; + this._tablePanel.RowCount = 1; + this._tablePanel.ColumnCount = 2; + this._tablePanel.RowStyles.Clear(); + this._tablePanel.RowStyles.Add(new RowStyle(SizeType.Absolute, _nameLabel.Height + 3)); + this._tablePanel.ColumnStyles.Clear(); + this._tablePanel.Margin = new Padding(0); + this._tablePanel.Padding = new Padding(0); + this._tablePanel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 120)); + this._tablePanel.ColumnStyles.Add(new ColumnStyle(SizeType.Absolute, 110)); + this._tablePanel.Controls.Add(_nameLabel, 0, 0); + this._tablePanel.Controls.Add(this._textBoxValue, 1, 0); + + AngleMenu.ItemClicked += OnMenuStripClick; + AngleDropDownMenu[0].DropDownItemClicked += AngleDropDownMenu_DropDownItemClicked; + AngleDropDownMenu[1].Click += TruncateAngleMenu_ItemClicked; + } + + private void TruncateAngleMenu_ItemClicked(object sender, EventArgs e) + { + if (this != _lastSelected) + return; + + _angleTruncated = !_angleTruncated; + + UpdateAngleValue(); + } + + private void AngleDropDownMenu_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e) + { + if (this != _lastSelected) + return; + + switch (e.ClickedItem.Text) + { + case "Unsigned (short)": + _angleViewMode = AngleViewModeType.Unsigned; + break; + case "Signed (short)": + _angleViewMode = AngleViewModeType.Signed; + break; + case "Degrees": + _angleViewMode = AngleViewModeType.Degrees; + break; + case "Radians": + _angleViewMode = AngleViewModeType.Radians; + break; + } + + UpdateAngleValue(); + } + + private void OnMenuStripClick(object sender, ToolStripItemClickedEventArgs e) + { + if (this != _lastSelected) + return; + } + + private void _textBoxValue_MouseEnter(object sender, EventArgs e) + { + _lastSelected = this; + (AngleDropDownMenu[0].DropDownItems[0] as ToolStripMenuItem).Checked = (_angleViewMode == AngleViewModeType.Unsigned); + (AngleDropDownMenu[0].DropDownItems[1] as ToolStripMenuItem).Checked = (_angleViewMode == AngleViewModeType.Signed); + (AngleDropDownMenu[0].DropDownItems[2] as ToolStripMenuItem).Checked = (_angleViewMode == AngleViewModeType.Degrees); + (AngleDropDownMenu[0].DropDownItems[3] as ToolStripMenuItem).Checked = (_angleViewMode == AngleViewModeType.Radians); + (AngleDropDownMenu[1] as ToolStripMenuItem).Checked = _angleTruncated; + } + + public Control Control + { + get + { + return _tablePanel; + } + } + + private bool _valueExists = false; + public bool ValueExists + { + get + { + return _valueExists; + } + set + { + _valueExists = value; + UpdateAngleValue(); + } + } + + public string Name + { + get + { + return _nameLabel.Text; + } + set + { + _nameLabel.Text = value; + } + } + + public string SpecialName + { + get + { + return _specialName; + } + set + { + _specialName = value; + } + } + + private double _angleValue; + public double AngleValue + { + get + { + return _angleValue; + } + set + { + _angleValue = value; + UpdateAngleValue(); + } + } + + public Color Color + { + get + { + return Control.BackColor; + } + set + { + Control.BackColor = value; + _textBoxValue.BackColor = Color; + } + } + + private static ContextMenuStrip _angleMenu; + public static ContextMenuStrip AngleMenu + { + get + { + if (_angleMenu == null) + { + _angleMenu = new ContextMenuStrip(); + //_angleMenu.Items.Add("Edit"); + //var newItem = new ToolStripMenuItem("View As Hexadecimal"); + //newItem.Name = "HexView"; + //_angleMenu.Items.Add(newItem); + //newItem = new ToolStripMenuItem("Lock Value"); + //newItem.Name = "LockValue"; + //_angleMenu.Items.Add(newItem); + + _angleMenu.Items.Add(AngleDropDownMenu[0]); + _angleMenu.Items.Add(AngleDropDownMenu[1]); + } + return _angleMenu; + } + } + + private static ToolStripMenuItem[] _angleMenuDropDown; + public static ToolStripMenuItem[] AngleDropDownMenu + { + get + { + if (_angleMenuDropDown == null) + { + _angleMenuDropDown = new ToolStripMenuItem[2]; + _angleMenuDropDown[0] = new ToolStripMenuItem("View Angle As"); + _angleMenuDropDown[0].DropDownItems.Add("Unsigned (short)"); + _angleMenuDropDown[0].DropDownItems.Add("Signed (short)"); + _angleMenuDropDown[0].DropDownItems.Add("Degrees"); + _angleMenuDropDown[0].DropDownItems.Add("Radians"); + _angleMenuDropDown[1] = new ToolStripMenuItem("Truncate Angle (by 16)"); + } + return _angleMenuDropDown; + } + } + + public void UpdateAngleValue() + { + if (!ValueExists) + { + _textBoxValue.Text = "(none)"; + return; + } + + double angleValue = _angleValue % (Math.PI * 2); + if (angleValue < 0) + angleValue += Math.PI * 2; + if (_angleTruncated) + { + double roundFactor = 65536 / (Math.PI * 2) / 16; + angleValue = Math.Floor(_angleValue * roundFactor) / roundFactor; + } + + switch (_angleViewMode) + { + case AngleViewModeType.Degrees: + _textBoxValue.Text = (angleValue / (Math.PI * 2) * 360).ToString(); + break; + + case AngleViewModeType.Radians: + _textBoxValue.Text = angleValue.ToString(); + break; + + case AngleViewModeType.Signed: + _textBoxValue.Text = (-32768 + (ushort)(angleValue / (Math.PI * 2) * 65536)).ToString(); + break; + + case AngleViewModeType.Unsigned: + _textBoxValue.Text = ((ushort)(angleValue / (Math.PI * 2) * 65536)).ToString(); + break; + } + } + + public void Update() + { + } + } +} diff --git a/Source/SM64 Diagnostic/Controls/IDataContainer.cs b/Source/SM64 Diagnostic/Controls/IDataContainer.cs index cf8f9ba1e..3aa090c28 100644 --- a/Source/SM64 Diagnostic/Controls/IDataContainer.cs +++ b/Source/SM64 Diagnostic/Controls/IDataContainer.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; @@ -24,6 +25,10 @@ Control Control get; } + Color Color + { + set; + } void Update(); } diff --git a/Source/SM64 Diagnostic/Controls/WatchVariableControl.cs b/Source/SM64 Diagnostic/Controls/WatchVariableControl.cs index dd5505deb..48272784e 100644 --- a/Source/SM64 Diagnostic/Controls/WatchVariableControl.cs +++ b/Source/SM64 Diagnostic/Controls/WatchVariableControl.cs @@ -36,7 +36,6 @@ public enum AngleViewModeType { Recommended, Signed, Unsigned, Degrees, Radians AngleViewModeType _angleViewMode = AngleViewModeType.Recommended; Boolean _angleTruncated = false; - private static ContextMenuStrip _menu; public static ContextMenuStrip Menu { diff --git a/Source/SM64 Diagnostic/Managers/DataManager.cs b/Source/SM64 Diagnostic/Managers/DataManager.cs index 2fd7b713d..bcb601562 100644 --- a/Source/SM64 Diagnostic/Managers/DataManager.cs +++ b/Source/SM64 Diagnostic/Managers/DataManager.cs @@ -15,7 +15,7 @@ public class DataManager protected List _dataControls; protected FlowLayoutPanel _variableTable; protected ProcessStream _stream; - protected List _specialWatchVars; + protected List _specialWatchVars; public DataManager(ProcessStream stream, List data, FlowLayoutPanel variableTable) { diff --git a/Source/SM64 Diagnostic/Managers/ObjectManager.cs b/Source/SM64 Diagnostic/Managers/ObjectManager.cs index 04714952d..218cb8a2b 100644 --- a/Source/SM64 Diagnostic/Managers/ObjectManager.cs +++ b/Source/SM64 Diagnostic/Managers/ObjectManager.cs @@ -175,7 +175,7 @@ public Image Image protected override void InitializeSpecialVariables() { - _specialWatchVars = new List() + _specialWatchVars = new List() { new DataContainer("MarioDistanceToObject"), new DataContainer("MarioLateralDistanceToObject"), diff --git a/Source/SM64 Diagnostic/Managers/TriangleManager.cs b/Source/SM64 Diagnostic/Managers/TriangleManager.cs index 8e2bdb3f5..39f8789f3 100644 --- a/Source/SM64 Diagnostic/Managers/TriangleManager.cs +++ b/Source/SM64 Diagnostic/Managers/TriangleManager.cs @@ -48,15 +48,15 @@ uint TriangleAddress protected override void InitializeSpecialVariables() { - _specialWatchVars = new List() + _specialWatchVars = new List() { new DataContainer("DistanceAboveFloor"), new DataContainer("DistanceBelowCeiling"), new DataContainer("ClosestVertex"), - new DataContainer("UpHillAngle"), - new DataContainer("DownHillAngle"), - new DataContainer("LeftHillAngle"), - new DataContainer("RightHillAngle"), + new AngleDataContainer("UpHillAngle"), + new AngleDataContainer("DownHillAngle"), + new AngleDataContainer("LeftHillAngle"), + new AngleDataContainer("RightHillAngle"), new DataContainer("Classification"), new DataContainer("Steepness"), new DataContainer("NormalDistAway"), @@ -113,67 +113,70 @@ private void ProcessSpecialVars() normZ = BitConverter.ToSingle(_stream.ReadRam(TriangleAddress + Config.TriangleOffsets.NormZ, 4), 0); normOffset = BitConverter.ToSingle(_stream.ReadRam(TriangleAddress + Config.TriangleOffsets.Offset, 4), 0); - var uphillAngle = (Math.Atan2(normZ, normX) / Math.PI + 0.5) / 2 * 65536; + var uphillAngle = (Math.Atan2(normZ, normX) + Math.PI / 2); if (normX == 0 && normZ == 0) uphillAngle = double.NaN; if (normY < -0.01) - uphillAngle += 32768; + uphillAngle += Math.PI; - foreach (DataContainer specialVar in _specialWatchVars) + foreach (IDataContainer specialVar in _specialWatchVars) { switch (specialVar.SpecialName) { case "DistanceAboveFloor": - specialVar.Text = (marioY - floorY).ToString(); + (specialVar as DataContainer).Text = (marioY - floorY).ToString(); break; case "DistanceBelowCeiling": - specialVar.Text = (_stream.GetSingle(Config.Mario.StructAddress + Config.Mario.CeilingYOffset) + (specialVar as DataContainer).Text = (_stream.GetSingle(Config.Mario.StructAddress + Config.Mario.CeilingYOffset) - marioY).ToString(); break; case "ClosestVertex": - specialVar.Text = String.Format("V{0}", MarioActions.GetClosestVertex(_stream, TriangleAddress)); + (specialVar as DataContainer).Text = String.Format("V{0}", MarioActions.GetClosestVertex(_stream, TriangleAddress)); goto case "CheckTriangleExists"; case "UpHillAngle": - specialVar.Text = FixAngle(uphillAngle).ToString(); - goto case "CheckTriangleExists"; + (specialVar as AngleDataContainer).AngleValue = uphillAngle; + goto case "CheckTriangleExistsAngle"; case "DownHillAngle": - specialVar.Text = FixAngle(uphillAngle + 32768).ToString(); - goto case "CheckTriangleExists"; + (specialVar as AngleDataContainer).AngleValue = uphillAngle + Math.PI; + goto case "CheckTriangleExistsAngle"; case "RightHillAngle": - specialVar.Text = FixAngle(uphillAngle - 16384).ToString(); - goto case "CheckTriangleExists"; + (specialVar as AngleDataContainer).AngleValue = uphillAngle - Math.PI / 2; + goto case "CheckTriangleExistsAngle"; case "LeftHillAngle": - specialVar.Text = FixAngle(uphillAngle + 16384).ToString(); - goto case "CheckTriangleExists"; + (specialVar as AngleDataContainer).AngleValue = uphillAngle + Math.PI / 2; + goto case "CheckTriangleExistsAngle"; case "Classification": if (normY > 0.01) - specialVar.Text = "Floor"; + (specialVar as DataContainer).Text = "Floor"; else if (normY < -0.01) - specialVar.Text = "Ceiling"; + (specialVar as DataContainer).Text = "Ceiling"; else - specialVar.Text = "Wall"; + (specialVar as DataContainer).Text = "Wall"; goto case "CheckTriangleExists"; case "Steepness": - specialVar.Text = FixAngle((65536 / (Math.PI * 2) * Math.Acos(normY))).ToString(); + (specialVar as DataContainer).Text = FixAngle((65536 / (Math.PI * 2) * Math.Acos(normY))).ToString(); goto case "CheckTriangleExists"; case "NormalDistAway": - specialVar.Text = (marioX * normX + marioY * normY + marioZ * normZ + normOffset).ToString(); + (specialVar as DataContainer).Text = (marioX * normX + marioY * normY + marioZ * normZ + normOffset).ToString(); goto case "CheckTriangleExists"; case "VerticalDistAway": - specialVar.Text = (marioY + (marioX * normX + marioZ * normZ + normOffset) / normY).ToString(); + (specialVar as DataContainer).Text = (marioY + (marioX * normX + marioZ * normZ + normOffset) / normY).ToString(); goto case "CheckTriangleExists"; case "HeightOnSlope": - specialVar.Text = ((-marioX * normX - marioZ * normZ - normOffset) / normY).ToString(); + (specialVar as DataContainer).Text = ((-marioX * normX - marioZ * normZ - normOffset) / normY).ToString(); goto case "CheckTriangleExists"; // Special case "CheckTriangleExists": if (TriangleAddress == 0x0000) { - specialVar.Text = "(none)"; + (specialVar as DataContainer).Text = "(none)"; break; } break; + case "CheckTriangleExistsAngle": + (specialVar as AngleDataContainer).ValueExists = (TriangleAddress != 0x0000); + break; } } } diff --git a/Source/SM64 Diagnostic/SM64 Diagnostic.csproj b/Source/SM64 Diagnostic/SM64 Diagnostic.csproj index d0575a188..c7a3c7347 100644 --- a/Source/SM64 Diagnostic/SM64 Diagnostic.csproj +++ b/Source/SM64 Diagnostic/SM64 Diagnostic.csproj @@ -90,6 +90,7 @@ + Component From 7abfec98e86d536ac32da439d062e8738cf9aef3 Mon Sep 17 00:00:00 2001 From: danebouchie Date: Sun, 13 Nov 2016 02:34:04 -0500 Subject: [PATCH 06/24] Bugfix: graphical tears when scrollbars used --- Source/SM64 Diagnostic/StroopMainForm.Designer.cs | 1 + Source/SM64 Diagnostic/StroopMainForm.cs | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/Source/SM64 Diagnostic/StroopMainForm.Designer.cs b/Source/SM64 Diagnostic/StroopMainForm.Designer.cs index 6108c6e8a..2dfa8b8e9 100644 --- a/Source/SM64 Diagnostic/StroopMainForm.Designer.cs +++ b/Source/SM64 Diagnostic/StroopMainForm.Designer.cs @@ -1963,6 +1963,7 @@ private void InitializeComponent() this.Controls.Add(this.buttonPauseResume); this.Controls.Add(this.labelProcessSelect); this.Controls.Add(this.comboBoxProcessSelection); + this.DoubleBuffered = true; this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Margin = new System.Windows.Forms.Padding(2); this.Name = "StroopMainForm"; diff --git a/Source/SM64 Diagnostic/StroopMainForm.cs b/Source/SM64 Diagnostic/StroopMainForm.cs index b3854e421..705a1b192 100644 --- a/Source/SM64 Diagnostic/StroopMainForm.cs +++ b/Source/SM64 Diagnostic/StroopMainForm.cs @@ -56,6 +56,16 @@ public StroopMainForm() InitializeComponent(); } + protected override CreateParams CreateParams + { + get + { + CreateParams cp = base.CreateParams; + cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED + return cp; + } + } + private void AttachToProcess(Process process) { if (!_sm64Stream.SwitchProcess(process)) From 713df90a9e1c347871bc7c17a3d236e5a3bca155 Mon Sep 17 00:00:00 2001 From: danebouchie Date: Sun, 13 Nov 2016 19:44:22 -0500 Subject: [PATCH 07/24] Added sliding angle watch variable --- Source/SM64 Diagnostic/Config/MarioData.xml | 1 + .../SM64 Diagnostic/Managers/CameraManager.cs | 42 +----- .../SM64 Diagnostic/Managers/DataManager.cs | 9 +- Source/SM64 Diagnostic/Managers/HudManager.cs | 29 +--- .../SM64 Diagnostic/Managers/MarioManager.cs | 137 ++++++++---------- .../SM64 Diagnostic/Managers/MiscManager.cs | 94 +++++------- Source/SM64 Diagnostic/StroopMainForm.cs | 2 +- 7 files changed, 105 insertions(+), 209 deletions(-) diff --git a/Source/SM64 Diagnostic/Config/MarioData.xml b/Source/SM64 Diagnostic/Config/MarioData.xml index 639c7d78b..b7e06494b 100644 --- a/Source/SM64 Diagnostic/Config/MarioData.xml +++ b/Source/SM64 Diagnostic/Config/MarioData.xml @@ -11,6 +11,7 @@ X Sliding Speed Z Sliding Speed H Sliding Speed + H Sliding Angle Yaw (Facing) Yaw (Moving) Yaw (Intended) diff --git a/Source/SM64 Diagnostic/Managers/CameraManager.cs b/Source/SM64 Diagnostic/Managers/CameraManager.cs index 16ce65018..402d23b9c 100644 --- a/Source/SM64 Diagnostic/Managers/CameraManager.cs +++ b/Source/SM64 Diagnostic/Managers/CameraManager.cs @@ -10,47 +10,11 @@ namespace SM64_Diagnostic.ManagerClasses { - public class CameraManager + public class CameraManager : DataManager { - List _cameraDataControls; - FlowLayoutPanel _variableTable; - ProcessStream _stream; - - public CameraManager(ProcessStream stream, List cameraData, Control cameraControl, FlowLayoutPanel variableTable) - { - // Register controls on the control (for drag-and-drop) - RegisterControlEvents(cameraControl); - foreach (Control control in cameraControl.Controls) - RegisterControlEvents(control); - - _variableTable = variableTable; - _stream = stream; - - _cameraDataControls = new List(); - foreach (WatchVariable watchVar in cameraData) - { - WatchVariableControl watchControl = new WatchVariableControl(_stream, watchVar, Config.Mario.StructAddress); - variableTable.Controls.Add(watchControl.Control); - _cameraDataControls.Add(watchControl); - } - } - - public void Update(bool updateView) - { - // Update watch variables - foreach (var watchVar in _cameraDataControls) - watchVar.Update(); - - if (!updateView) - return; - } - - private void RegisterControlEvents(Control control) + public CameraManager(ProcessStream stream, List cameraData, FlowLayoutPanel variableTable) + : base(stream, cameraData, variableTable) { - //control.AllowDrop = true; - //control.DragEnter += DragEnter; - //control.DragDrop += OnDrop; - //control.MouseDown += OnDrag; } } } diff --git a/Source/SM64 Diagnostic/Managers/DataManager.cs b/Source/SM64 Diagnostic/Managers/DataManager.cs index bcb601562..c772c1b56 100644 --- a/Source/SM64 Diagnostic/Managers/DataManager.cs +++ b/Source/SM64 Diagnostic/Managers/DataManager.cs @@ -17,7 +17,7 @@ public class DataManager protected ProcessStream _stream; protected List _specialWatchVars; - public DataManager(ProcessStream stream, List data, FlowLayoutPanel variableTable) + public DataManager(ProcessStream stream, List data, FlowLayoutPanel variableTable, uint otherOffset = 0) { _variableTable = variableTable; _stream = stream; @@ -46,7 +46,7 @@ public DataManager(ProcessStream stream, List data, FlowLayoutPan continue; } - WatchVariableControl watchControl = new WatchVariableControl(_stream, watchVar); + WatchVariableControl watchControl = new WatchVariableControl(_stream, watchVar, otherOffset); variableTable.Controls.Add(watchControl.Control); _dataControls.Add(watchControl); } @@ -56,14 +56,11 @@ protected virtual void InitializeSpecialVariables() { } - public virtual void Update(bool updateView) + public virtual void Update(bool updateView = false) { // Update watch variables foreach (var watchVar in _dataControls) watchVar.Update(); - - if (!updateView) - return; } } } diff --git a/Source/SM64 Diagnostic/Managers/HudManager.cs b/Source/SM64 Diagnostic/Managers/HudManager.cs index 040a998b2..16f3a6e04 100644 --- a/Source/SM64 Diagnostic/Managers/HudManager.cs +++ b/Source/SM64 Diagnostic/Managers/HudManager.cs @@ -10,27 +10,14 @@ namespace SM64_Diagnostic.ManagerClasses { - public class HudManager + public class HudManager : DataManager { - List _watchVarControls; Control _tabControl; - FlowLayoutPanel _variableTable; - ProcessStream _stream; - public HudManager(ProcessStream stream, List data, Control tabControl) + public HudManager(ProcessStream stream, List hudData, Control tabControl) + : base(stream, hudData, tabControl.Controls["flowLayoutPanelHud"] as FlowLayoutPanel) { _tabControl = tabControl; - _stream = stream; - - _variableTable = _tabControl.Controls["flowLayoutPanelHud"] as FlowLayoutPanel; - - _watchVarControls = new List(); - foreach (WatchVariable watchVar in data) - { - WatchVariableControl watchControl = new WatchVariableControl(_stream, watchVar, 0); - _variableTable.Controls.Add(watchControl.Control); - _watchVarControls.Add(watchControl); - } (_tabControl.Controls["buttonFillHp"] as Button).Click += buttonFill_Click; (_tabControl.Controls["buttonDie"] as Button).Click += buttonDie_Click; @@ -51,15 +38,5 @@ private void buttonFill_Click(object sender, EventArgs e) { MarioActions.RefillHp(_stream); } - - public virtual void Update(bool updateView) - { - // Update watch variables - foreach (var watchVar in _watchVarControls) - watchVar.Update(); - - if (!updateView) - return; - } } } diff --git a/Source/SM64 Diagnostic/Managers/MarioManager.cs b/Source/SM64 Diagnostic/Managers/MarioManager.cs index a3e1ae921..8a563f23a 100644 --- a/Source/SM64 Diagnostic/Managers/MarioManager.cs +++ b/Source/SM64 Diagnostic/Managers/MarioManager.cs @@ -11,68 +11,67 @@ namespace SM64_Diagnostic.ManagerClasses { - public class MarioManager + public class MarioManager : DataManager { - List _marioDataControls; - FlowLayoutPanel _variableTable; - ProcessStream _stream; - DataContainer _deFactoSpeed, _slidingSpeed, _slidingAngle, _fallHeight; MapManager _mapManager; public MarioManager(ProcessStream stream, List marioData, Control marioControl, FlowLayoutPanel variableTable, MapManager mapManager) + : base(stream, marioData, variableTable, Config.Mario.StructAddress) { // Register controls on the control (for drag-and-drop) RegisterControlEvents(marioControl); foreach (Control control in marioControl.Controls) RegisterControlEvents(control); - _variableTable = variableTable; - _stream = stream; _mapManager = mapManager; + } - _marioDataControls = new List(); + protected override void InitializeSpecialVariables() + { + _specialWatchVars = new List() + { + new DataContainer("DeFactoSpeed"), + new DataContainer("SlidingSpeed"), + new AngleDataContainer("SlidingAngle"), + new DataContainer("FallHeight"), + }; + } - _deFactoSpeed = new DataContainer("De Facto Speed"); - _slidingSpeed = new DataContainer("Sliding Speed"); - _slidingAngle = new DataContainer("Sliding Angle"); - _fallHeight = new DataContainer("Fall Height"); + public void ProcessSpecialVars() + { + UInt32 floorTriangle = _stream.GetUInt32(Config.Mario.StructAddress + Config.Mario.FloorTriangleOffset); + var floorY = BitConverter.ToSingle(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.GroundYOffset, 4), 0); - foreach (WatchVariable watchVar in marioData) + float slidingSpeedX = BitConverter.ToSingle(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.SlidingSpeedXOffset, 4), 0); + float slidingSpeedZ = BitConverter.ToSingle(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.SlidingSpeedZOffset, 4), 0); + foreach (var specialVar in _specialWatchVars) { - if (!watchVar.Special) - { - WatchVariableControl watchControl = new WatchVariableControl(_stream, watchVar, Config.Mario.StructAddress); - variableTable.Controls.Add(watchControl.Control); - _marioDataControls.Add(watchControl); - continue; - } - - switch (watchVar.SpecialType) + switch(specialVar.SpecialName) { case "DeFactoSpeed": - _deFactoSpeed.Name = watchVar.Name; - variableTable.Controls.Add(_deFactoSpeed.Control); + if (floorTriangle != 0x00) + { + float hSpeed = _stream.GetSingle(Config.Mario.StructAddress + Config.Mario.HSpeedOffset); + float normY = _stream.GetSingle(floorTriangle + Config.TriangleOffsets.NormY); + (specialVar as DataContainer).Text = (hSpeed * normY).ToString(); + } + else + { + (specialVar as DataContainer).Text = "(No Floor)"; + } break; case "SlidingSpeed": - _slidingSpeed.Name = watchVar.Name; - variableTable.Controls.Add(_slidingSpeed.Control); + (specialVar as DataContainer).Text = (Math.Sqrt(slidingSpeedX * slidingSpeedX + slidingSpeedZ * slidingSpeedZ)).ToString(); break; case "SlidingAngle": - _slidingAngle.Name = watchVar.Name; - //variableTable.Controls.Add(_slidingAngle.Control); + (specialVar as AngleDataContainer).AngleValue = Math.PI / 2 - Math.Atan2(slidingSpeedZ, slidingSpeedX); + (specialVar as AngleDataContainer).ValueExists = (slidingSpeedX != 0) || (slidingSpeedZ != 0); break; case "FallHeight": - _fallHeight.Name = watchVar.Name; - variableTable.Controls.Add(_fallHeight.Control); - break; - - default: - var failedContainer = new DataContainer(watchVar.Name); - failedContainer.Text = "Couldn't Find"; - variableTable.Controls.Add(failedContainer.Control); + (specialVar as DataContainer).Text = (_stream.GetSingle(Config.Mario.StructAddress + Config.Mario.PeakHeightOffset) - floorY).ToString(); break; } } @@ -83,11 +82,10 @@ public void Update(bool updateView) // Get Mario position and rotation float x, y, z, rot; var marioAddress = Config.Mario.StructAddress; - x = BitConverter.ToSingle(_stream.ReadRam(marioAddress + Config.Mario.XOffset, 4), 0); - y = BitConverter.ToSingle(_stream.ReadRam(marioAddress + Config.Mario.YOffset, 4), 0); - z = BitConverter.ToSingle(_stream.ReadRam(marioAddress + Config.Mario.ZOffset, 4), 0); - rot = (float) (((BitConverter.ToUInt32(_stream.ReadRam(marioAddress + Config.Mario.RotationOffset, 4), 0) - >> 16) % 65536) / 65536f * 360f); + x = _stream.GetSingle(marioAddress + Config.Mario.XOffset); + y = _stream.GetSingle(marioAddress + Config.Mario.YOffset); + z = _stream.GetSingle(marioAddress + Config.Mario.ZOffset); + rot = (float) (((_stream.GetUInt32(marioAddress + Config.Mario.RotationOffset) >> 16) % 65536) / 65536f * 360f); // Update Mario map object _mapManager.MarioMapObject.X = x; @@ -98,9 +96,9 @@ public void Update(bool updateView) // Get holp position float holpX, holpY, holpZ; - holpX = BitConverter.ToSingle(_stream.ReadRam(Config.HolpX, 4), 0); - holpY = BitConverter.ToSingle(_stream.ReadRam(Config.HolpY, 4), 0); - holpZ = BitConverter.ToSingle(_stream.ReadRam(Config.HolpZ, 4), 0); + holpX = _stream.GetSingle(Config.HolpX); + holpY = _stream.GetSingle(Config.HolpY); + holpZ = _stream.GetSingle(Config.HolpZ); // Update holp map object position _mapManager.HolpMapObject.X = holpX; @@ -110,24 +108,24 @@ public void Update(bool updateView) // Update camera position and rotation float cameraX, cameraY, cameraZ , cameraRot; - cameraX = BitConverter.ToSingle(_stream.ReadRam(Config.CameraX, 4), 0); - cameraY = BitConverter.ToSingle(_stream.ReadRam(Config.CameraY, 4), 0); - cameraZ = BitConverter.ToSingle(_stream.ReadRam(Config.CameraZ, 4), 0); - cameraRot = (float)(((UInt16)(BitConverter.ToUInt32(_stream.ReadRam(Config.CameraRot, 4), 0))) / 65536f * 360f); + cameraX = _stream.GetSingle(Config.CameraX); + cameraY = _stream.GetSingle(Config.CameraY); + cameraZ = _stream.GetSingle(Config.CameraZ); + cameraRot = (float)(((UInt16)(_stream.GetUInt32(Config.CameraRot)) / 65536f * 360f)); // Update floor triangle - UInt32 floorTriangle = BitConverter.ToUInt32(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.FloorTriangleOffset, 4), 0); + UInt32 floorTriangle = _stream.GetUInt32(Config.Mario.StructAddress + Config.Mario.FloorTriangleOffset); if (floorTriangle != 0x00) { - Int16 x1 = BitConverter.ToInt16(_stream.ReadRam(floorTriangle + Config.TriangleOffsets.X1, 2), 0); - Int16 y1 = BitConverter.ToInt16(_stream.ReadRam(floorTriangle + Config.TriangleOffsets.Y1, 2), 0); - Int16 z1 = BitConverter.ToInt16(_stream.ReadRam(floorTriangle + Config.TriangleOffsets.Z1, 2), 0); - Int16 x2 = BitConverter.ToInt16(_stream.ReadRam(floorTriangle + Config.TriangleOffsets.X2, 2), 0); - Int16 y2 = BitConverter.ToInt16(_stream.ReadRam(floorTriangle + Config.TriangleOffsets.Y2, 2), 0); - Int16 z2 = BitConverter.ToInt16(_stream.ReadRam(floorTriangle + Config.TriangleOffsets.Z2, 2), 0); - Int16 x3 = BitConverter.ToInt16(_stream.ReadRam(floorTriangle + Config.TriangleOffsets.X3, 2), 0); - Int16 y3 = BitConverter.ToInt16(_stream.ReadRam(floorTriangle + Config.TriangleOffsets.Y3, 2), 0); - Int16 z3 = BitConverter.ToInt16(_stream.ReadRam(floorTriangle + Config.TriangleOffsets.Z3, 2), 0); + Int16 x1 = _stream.GetInt16(floorTriangle + Config.TriangleOffsets.X1); + Int16 y1 = _stream.GetInt16(floorTriangle + Config.TriangleOffsets.Y1); + Int16 z1 = _stream.GetInt16(floorTriangle + Config.TriangleOffsets.Z1); + Int16 x2 = _stream.GetInt16(floorTriangle + Config.TriangleOffsets.X2); + Int16 y2 = _stream.GetInt16(floorTriangle + Config.TriangleOffsets.Y2); + Int16 z2 = _stream.GetInt16(floorTriangle + Config.TriangleOffsets.Z2); + Int16 x3 = _stream.GetInt16(floorTriangle + Config.TriangleOffsets.X3); + Int16 y3 = _stream.GetInt16(floorTriangle + Config.TriangleOffsets.Y3); + Int16 z3 = _stream.GetInt16(floorTriangle + Config.TriangleOffsets.Z3); _mapManager.FloorTriangleMapObject.X1 = x1; _mapManager.FloorTriangleMapObject.Z1 = z1; _mapManager.FloorTriangleMapObject.X2 = x2; @@ -144,31 +142,12 @@ public void Update(bool updateView) _mapManager.CameraMapObject.Z = cameraZ; _mapManager.CameraMapObject.Rotation = cameraRot; - // Update watch variables - foreach (var watchVar in _marioDataControls) - watchVar.Update(); - // We are done if we don't need to update the Mario Manager view if (!updateView) return; - var floorY = BitConverter.ToSingle(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.GroundYOffset, 4), 0); - - if (floorTriangle != 0x00) - { - float hSpeed = BitConverter.ToSingle(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.HSpeedOffset, 4), 0); - float normY = BitConverter.ToSingle(_stream.ReadRam(floorTriangle + Config.TriangleOffsets.NormY, 4), 0); - _deFactoSpeed.Text = (hSpeed * normY).ToString(); - } - else - _deFactoSpeed.Text = "(No Floor)"; - - float slidingSpeedX = BitConverter.ToSingle(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.SlidingSpeedXOffset, 4), 0); - float slidingSpeedZ = BitConverter.ToSingle(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.SlidingSpeedZOffset, 4), 0); - - _slidingSpeed.Text = ((float)Math.Sqrt(slidingSpeedX * slidingSpeedX + slidingSpeedZ * slidingSpeedZ)).ToString(); - - _fallHeight.Text = (BitConverter.ToSingle(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.PeakHeightOffset, 4), 0) - floorY).ToString(); + base.Update(); + ProcessSpecialVars(); } private void RegisterControlEvents(Control control) diff --git a/Source/SM64 Diagnostic/Managers/MiscManager.cs b/Source/SM64 Diagnostic/Managers/MiscManager.cs index 637995ce4..07730c54b 100644 --- a/Source/SM64 Diagnostic/Managers/MiscManager.cs +++ b/Source/SM64 Diagnostic/Managers/MiscManager.cs @@ -11,12 +11,8 @@ namespace SM64_Diagnostic.ManagerClasses { - public class MiscManager + public class MiscManager : DataManager { - List _watchVarControls; - FlowLayoutPanel _variableTable; - ProcessStream _stream; - DataContainer _rngIndex, _rngPerFrame, _activeObjCnt; Control _puController; public int ActiveObjectCount = 0; @@ -24,52 +20,10 @@ public class MiscManager enum PuControl { Home, PuUp, PuDown, PuLeft, PuRight, QpuUp, QpuDown, QpuLeft, QpuRight}; public MiscManager(ProcessStream stream, List watchVariables, FlowLayoutPanel variableTable, Control puController) + : base(stream, watchVariables, variableTable) { - _variableTable = variableTable; - _stream = stream; _puController = puController; - // Initialize special variables - _rngIndex = new DataContainer("RNG Index"); - _rngPerFrame = new DataContainer("RNG Calls/Frame"); - _activeObjCnt = new DataContainer("Num. Loaded Objs."); - - _watchVarControls = new List(); - foreach (WatchVariable watchVar in watchVariables) - { - if (!watchVar.Special) - { - WatchVariableControl watchControl = new WatchVariableControl(_stream, watchVar); - variableTable.Controls.Add(watchControl.Control); - _watchVarControls.Add(watchControl); - continue; - } - - switch (watchVar.SpecialType) - { - case "RngIndex": - _rngIndex.Name = watchVar.Name; - variableTable.Controls.Add(_rngIndex.Control); - break; - - case "RngCallsPerFrame": - _rngPerFrame.Name = watchVar.Name; - variableTable.Controls.Add(_rngPerFrame.Control); - break; - - case "NumberOfLoadedObjects": - _activeObjCnt.Name = watchVar.Name; - variableTable.Controls.Add(_activeObjCnt.Control); - break; - - default: - var failedContainer = new DataContainer(watchVar.Name); - failedContainer.Text = "Couldn't Find"; - variableTable.Controls.Add(failedContainer.Control); - break; - } - } - // Pu Controller initialize and register click events _puController.Controls["buttonPuConHome"].Click += (sender, e) => PuControl_Click(sender, e, PuControl.Home); _puController.Controls["buttonPuConZnQpu"].Click += (sender, e) => PuControl_Click(sender, e, PuControl.QpuUp); @@ -82,6 +36,16 @@ public MiscManager(ProcessStream stream, List watchVariables, Flo _puController.Controls["buttonPuConXpPu"].Click += (sender, e) => PuControl_Click(sender, e, PuControl.PuRight); } + protected override void InitializeSpecialVariables() + { + _specialWatchVars = new List() + { + new DataContainer("RngIndex"), + new DataContainer("RngCallsPerFrame"), + new DataContainer("NumberOfLoadedObjects") + }; + } + private void PuControl_Click(object sender, EventArgs e, PuControl controlType) { switch(controlType) @@ -116,22 +80,36 @@ private void PuControl_Click(object sender, EventArgs e, PuControl controlType) } } - public void Update(bool updateView) + private void ProcessSpecialVars() { - // Update watch variables - foreach (var watchVar in _watchVarControls) - watchVar.Update(); + foreach (var specialVar in _specialWatchVars) + { + switch(specialVar.SpecialName) + { + case "RngIndex": + int rngIndex = RngIndexer.GetRngIndex(_stream.GetUInt16(Config.RngAddress)); + (specialVar as DataContainer).Text = (rngIndex < 0) ? "N/A [" + (-rngIndex).ToString() + "]" : rngIndex.ToString(); + break; + case "RngCallsPerFrame": + (specialVar as DataContainer).Text = GetRngCallsPerFrame().ToString(); + break; + + case "NumberOfLoadedObjects": + (specialVar as DataContainer).Text = ActiveObjectCount.ToString(); + break; + } + } + } + + public override void Update(bool updateView) + { if (!updateView) return; - // Update the rng index - int rngIndex = RngIndexer.GetRngIndex(BitConverter.ToUInt16(_stream.ReadRam(Config.RngAddress, 2), 0)); - _rngIndex.Text = (rngIndex < 0) ? "N/A [" + (-rngIndex).ToString() + "]" : rngIndex.ToString(); - - _rngPerFrame.Text = GetRngCallsPerFrame().ToString(); + base.Update(); + ProcessSpecialVars(); - _activeObjCnt.Text = ActiveObjectCount.ToString(); _puController.Controls["labelPuConPuValue"].Text = PuUtilities.GetPuPosString(_stream); _puController.Controls["labelPuConQpuValue"].Text = PuUtilities.GetQpuPosString(_stream); } diff --git a/Source/SM64 Diagnostic/StroopMainForm.cs b/Source/SM64 Diagnostic/StroopMainForm.cs index 705a1b192..ca072f019 100644 --- a/Source/SM64 Diagnostic/StroopMainForm.cs +++ b/Source/SM64 Diagnostic/StroopMainForm.cs @@ -118,7 +118,7 @@ private void StroopMainForm_Load(object sender, EventArgs e) _marioManager = new MarioManager(_sm64Stream, _marioData, panelMarioBorder, flowLayoutPanelMario, _mapManager); _hudManager = new HudManager(_sm64Stream, _hudData, tabPageHud); _miscManager = new MiscManager(_sm64Stream, _miscData, flowLayoutPanelMisc, groupBoxPuController); - _cameraManager = new CameraManager(_sm64Stream, _cameraData, panelCameraBorder, flowLayoutPanelCamera); + _cameraManager = new CameraManager(_sm64Stream, _cameraData, flowLayoutPanelCamera); _triangleManager = new TriangleManager(_sm64Stream, tabPageTriangles, _triangleData); _debugManager = new DebugManager(); From a5fd46a3fe8e81d5087b9642a442eab9f959822f Mon Sep 17 00:00:00 2001 From: scob Date: Sat, 19 Nov 2016 18:56:34 -0500 Subject: [PATCH 08/24] fixed many things, including variable names and types --- Source/SM64 Diagnostic/Config/MarioData.xml | 2 - .../Config/ObjectAssociations.xml | 71 ++++++++++--------- Source/SM64 Diagnostic/Config/ObjectData.xml | 18 ++--- .../SM64 Diagnostic/Config/TrianglesData.xml | 6 +- Windows Build/Config/MarioData.xml | 1 - Windows Build/Config/ObjectAssociations.xml | 71 ++++++++++--------- Windows Build/Config/ObjectData.xml | 18 ++--- Windows Build/Config/TrianglesData.xml | 6 +- 8 files changed, 102 insertions(+), 91 deletions(-) diff --git a/Source/SM64 Diagnostic/Config/MarioData.xml b/Source/SM64 Diagnostic/Config/MarioData.xml index b7e06494b..ca2e7b408 100644 --- a/Source/SM64 Diagnostic/Config/MarioData.xml +++ b/Source/SM64 Diagnostic/Config/MarioData.xml @@ -11,11 +11,9 @@ X Sliding Speed Z Sliding Speed H Sliding Speed - H Sliding Angle Yaw (Facing) Yaw (Moving) Yaw (Intended) - Cannon Yaw Pitch Roll Yaw Velocity diff --git a/Source/SM64 Diagnostic/Config/ObjectAssociations.xml b/Source/SM64 Diagnostic/Config/ObjectAssociations.xml index 700f54b68..af9a9b5dc 100644 --- a/Source/SM64 Diagnostic/Config/ObjectAssociations.xml +++ b/Source/SM64 Diagnostic/Config/ObjectAssociations.xml @@ -177,12 +177,10 @@ - Angular Velocity - + - Angular Velocity @@ -441,12 +439,16 @@ Timer Max + V Speed + Height Min Height Timer Max + V Speed + Height Min Height @@ -827,7 +829,6 @@ - Angular Velocity @@ -860,7 +861,6 @@ - Angular Velocity @@ -1246,7 +1246,7 @@ - Rev Angle + Rev Angle @@ -1435,7 +1435,7 @@ Num Coins - Target Angle + Target Angle Lunging Lunging Timer @@ -1474,10 +1474,10 @@ - + - + @@ -1511,6 +1511,7 @@ Animation Timer Walking Timer Burn Timer + Cannon Yaw Relative Height @@ -1654,7 +1655,7 @@ - Rev Angle + Rev Angle Height Timer Radius Electricity @@ -1793,7 +1794,6 @@ Rolling Timer - Angular Velocity @@ -1809,7 +1809,7 @@ Breaking Num Activators - Angular Velocity + Angular Acceleration? @@ -2047,7 +2047,6 @@ - Angular Velocity @@ -2087,37 +2086,35 @@ Act Shelled - Target Angle + Target Angle Countdown Blinking - Blinking Timer + Blinking Countdown - Act Shelled - Target Angle - Countdown + Waypoint + Target Angle Blinking - Blinking Timer + Blinking Countdown - Act Shelled - Target Angle - Countdown + Waypoint + Target Angle Blinking - Blinking Timer + Blinking Countdown Act Shelled - Target Angle + Target Angle Countdown Blinking - Blinking Timer + Blinking Countdown @@ -2145,7 +2142,7 @@ - Target Angle + Target Angle Wing Flap @@ -2333,7 +2330,7 @@ Ground/Air State Countdown - Target Angle + Target Angle @@ -2456,21 +2453,27 @@ Target Ang Vel Current Ang Vel + Angle Target Ang Vel Current Ang Vel + Angle Timer Max + V Speed + Height Timer Max Direction + V Speed + Height Min Height Max Height @@ -2479,6 +2482,7 @@ Timer Max Target Angle + Angle Displacement Direction Countdown @@ -2487,6 +2491,7 @@ Timer Max Target Angle + Angle Displacement Direction Countdown @@ -2494,6 +2499,7 @@ Timer Max Direction + Angle @@ -2521,18 +2527,17 @@ - + - + - + - Angular Velocity @@ -2635,7 +2640,7 @@ - Rev Angle + Rev Angle Size Size Countdown @@ -2696,7 +2701,7 @@ - Target Angle + Target Angle Lunging diff --git a/Source/SM64 Diagnostic/Config/ObjectData.xml b/Source/SM64 Diagnostic/Config/ObjectData.xml index e553b5a9f..d04dd9a2b 100644 --- a/Source/SM64 Diagnostic/Config/ObjectData.xml +++ b/Source/SM64 Diagnostic/Config/ObjectData.xml @@ -7,15 +7,15 @@ Y Speed Z Speed H Speed - Yaw (Facing) - Pitch (Facing) - Roll (Facing) - Yaw (Moving) - Pitch (Moving) - Roll (Moving) - Yaw (Rot Speed) - Pitch (Rot Speed) - Roll (Rot Speed) + Yaw (Facing) + Pitch (Facing) + Roll (Facing) + Yaw (Moving) + Pitch (Moving) + Roll (Moving) + Yaw (Rot Speed) + Pitch (Rot Speed) + Roll (Rot Speed) Dist to Mario Act. Dist to Mario Lat. Dist to Mario diff --git a/Source/SM64 Diagnostic/Config/TrianglesData.xml b/Source/SM64 Diagnostic/Config/TrianglesData.xml index 2d62596de..bc8be0599 100644 --- a/Source/SM64 Diagnostic/Config/TrianglesData.xml +++ b/Source/SM64 Diagnostic/Config/TrianglesData.xml @@ -1,10 +1,12 @@  Classification - SurfaceType + Surface Type Flags Wind Direction - Wall Projection + Wall Projection + X Projection + Z Projection Y Min Y Max X1 diff --git a/Windows Build/Config/MarioData.xml b/Windows Build/Config/MarioData.xml index 639c7d78b..ca2e7b408 100644 --- a/Windows Build/Config/MarioData.xml +++ b/Windows Build/Config/MarioData.xml @@ -14,7 +14,6 @@ Yaw (Facing) Yaw (Moving) Yaw (Intended) - Cannon Yaw Pitch Roll Yaw Velocity diff --git a/Windows Build/Config/ObjectAssociations.xml b/Windows Build/Config/ObjectAssociations.xml index 700f54b68..af9a9b5dc 100644 --- a/Windows Build/Config/ObjectAssociations.xml +++ b/Windows Build/Config/ObjectAssociations.xml @@ -177,12 +177,10 @@ - Angular Velocity - + - Angular Velocity @@ -441,12 +439,16 @@ Timer Max + V Speed + Height Min Height Timer Max + V Speed + Height Min Height @@ -827,7 +829,6 @@ - Angular Velocity @@ -860,7 +861,6 @@ - Angular Velocity @@ -1246,7 +1246,7 @@ - Rev Angle + Rev Angle @@ -1435,7 +1435,7 @@ Num Coins - Target Angle + Target Angle Lunging Lunging Timer @@ -1474,10 +1474,10 @@ - + - + @@ -1511,6 +1511,7 @@ Animation Timer Walking Timer Burn Timer + Cannon Yaw Relative Height @@ -1654,7 +1655,7 @@ - Rev Angle + Rev Angle Height Timer Radius Electricity @@ -1793,7 +1794,6 @@ Rolling Timer - Angular Velocity @@ -1809,7 +1809,7 @@ Breaking Num Activators - Angular Velocity + Angular Acceleration? @@ -2047,7 +2047,6 @@ - Angular Velocity @@ -2087,37 +2086,35 @@ Act Shelled - Target Angle + Target Angle Countdown Blinking - Blinking Timer + Blinking Countdown - Act Shelled - Target Angle - Countdown + Waypoint + Target Angle Blinking - Blinking Timer + Blinking Countdown - Act Shelled - Target Angle - Countdown + Waypoint + Target Angle Blinking - Blinking Timer + Blinking Countdown Act Shelled - Target Angle + Target Angle Countdown Blinking - Blinking Timer + Blinking Countdown @@ -2145,7 +2142,7 @@ - Target Angle + Target Angle Wing Flap @@ -2333,7 +2330,7 @@ Ground/Air State Countdown - Target Angle + Target Angle @@ -2456,21 +2453,27 @@ Target Ang Vel Current Ang Vel + Angle Target Ang Vel Current Ang Vel + Angle Timer Max + V Speed + Height Timer Max Direction + V Speed + Height Min Height Max Height @@ -2479,6 +2482,7 @@ Timer Max Target Angle + Angle Displacement Direction Countdown @@ -2487,6 +2491,7 @@ Timer Max Target Angle + Angle Displacement Direction Countdown @@ -2494,6 +2499,7 @@ Timer Max Direction + Angle @@ -2521,18 +2527,17 @@ - + - + - + - Angular Velocity @@ -2635,7 +2640,7 @@ - Rev Angle + Rev Angle Size Size Countdown @@ -2696,7 +2701,7 @@ - Target Angle + Target Angle Lunging diff --git a/Windows Build/Config/ObjectData.xml b/Windows Build/Config/ObjectData.xml index e553b5a9f..d04dd9a2b 100644 --- a/Windows Build/Config/ObjectData.xml +++ b/Windows Build/Config/ObjectData.xml @@ -7,15 +7,15 @@ Y Speed Z Speed H Speed - Yaw (Facing) - Pitch (Facing) - Roll (Facing) - Yaw (Moving) - Pitch (Moving) - Roll (Moving) - Yaw (Rot Speed) - Pitch (Rot Speed) - Roll (Rot Speed) + Yaw (Facing) + Pitch (Facing) + Roll (Facing) + Yaw (Moving) + Pitch (Moving) + Roll (Moving) + Yaw (Rot Speed) + Pitch (Rot Speed) + Roll (Rot Speed) Dist to Mario Act. Dist to Mario Lat. Dist to Mario diff --git a/Windows Build/Config/TrianglesData.xml b/Windows Build/Config/TrianglesData.xml index 2d62596de..bc8be0599 100644 --- a/Windows Build/Config/TrianglesData.xml +++ b/Windows Build/Config/TrianglesData.xml @@ -1,10 +1,12 @@  Classification - SurfaceType + Surface Type Flags Wind Direction - Wall Projection + Wall Projection + X Projection + Z Projection Y Min Y Max X1 From 46129c3bbe2636b9815e46b25d40b42deefc097a Mon Sep 17 00:00:00 2001 From: danebouchie Date: Sat, 19 Nov 2016 20:12:48 -0500 Subject: [PATCH 09/24] Bugfix: uphill angle incorrect direction --- Source/SM64 Diagnostic/Managers/TriangleManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/SM64 Diagnostic/Managers/TriangleManager.cs b/Source/SM64 Diagnostic/Managers/TriangleManager.cs index 39f8789f3..1645b2343 100644 --- a/Source/SM64 Diagnostic/Managers/TriangleManager.cs +++ b/Source/SM64 Diagnostic/Managers/TriangleManager.cs @@ -113,7 +113,7 @@ private void ProcessSpecialVars() normZ = BitConverter.ToSingle(_stream.ReadRam(TriangleAddress + Config.TriangleOffsets.NormZ, 4), 0); normOffset = BitConverter.ToSingle(_stream.ReadRam(TriangleAddress + Config.TriangleOffsets.Offset, 4), 0); - var uphillAngle = (Math.Atan2(normZ, normX) + Math.PI / 2); + var uphillAngle = Math.PI + Math.Atan2(normX, normZ); if (normX == 0 && normZ == 0) uphillAngle = double.NaN; if (normY < -0.01) From bf2fbaada21974cfe65190ee950c5dc77cf508a1 Mon Sep 17 00:00:00 2001 From: danebouchie Date: Sun, 20 Nov 2016 16:39:13 -0500 Subject: [PATCH 10/24] Bugfix (preemptive): Map tab flickering --- .../Controls/NoTearFlowLayoutContainer.cs | 22 ++ .../SM64 Diagnostic/Managers/CameraManager.cs | 2 +- .../SM64 Diagnostic/Managers/DataManager.cs | 4 +- Source/SM64 Diagnostic/Managers/HudManager.cs | 2 +- .../SM64 Diagnostic/Managers/MarioManager.cs | 2 +- .../SM64 Diagnostic/Managers/MiscManager.cs | 2 +- .../Managers/TriangleManager.cs | 2 +- Source/SM64 Diagnostic/SM64 Diagnostic.csproj | 3 + .../StroopMainForm.Designer.cs | 236 +++++++++--------- Source/SM64 Diagnostic/StroopMainForm.cs | 38 ++- .../Structs/Gui/ObjectDataGui.cs | 2 +- .../Structs/Gui/ObjectSlotManagerGui.cs | 2 +- 12 files changed, 166 insertions(+), 151 deletions(-) create mode 100644 Source/SM64 Diagnostic/Controls/NoTearFlowLayoutContainer.cs diff --git a/Source/SM64 Diagnostic/Controls/NoTearFlowLayoutContainer.cs b/Source/SM64 Diagnostic/Controls/NoTearFlowLayoutContainer.cs new file mode 100644 index 000000000..712985344 --- /dev/null +++ b/Source/SM64 Diagnostic/Controls/NoTearFlowLayoutContainer.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; + +namespace SM64_Diagnostic.Controls +{ + public class NoTearFlowLayoutPanel : FlowLayoutPanel + { + protected override CreateParams CreateParams + { + get + { + CreateParams cp = base.CreateParams; + cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED + return cp; + } + } + } +} diff --git a/Source/SM64 Diagnostic/Managers/CameraManager.cs b/Source/SM64 Diagnostic/Managers/CameraManager.cs index 402d23b9c..f054a018f 100644 --- a/Source/SM64 Diagnostic/Managers/CameraManager.cs +++ b/Source/SM64 Diagnostic/Managers/CameraManager.cs @@ -12,7 +12,7 @@ namespace SM64_Diagnostic.ManagerClasses { public class CameraManager : DataManager { - public CameraManager(ProcessStream stream, List cameraData, FlowLayoutPanel variableTable) + public CameraManager(ProcessStream stream, List cameraData, NoTearFlowLayoutPanel variableTable) : base(stream, cameraData, variableTable) { } diff --git a/Source/SM64 Diagnostic/Managers/DataManager.cs b/Source/SM64 Diagnostic/Managers/DataManager.cs index c772c1b56..1cc9cb721 100644 --- a/Source/SM64 Diagnostic/Managers/DataManager.cs +++ b/Source/SM64 Diagnostic/Managers/DataManager.cs @@ -13,11 +13,11 @@ namespace SM64_Diagnostic.ManagerClasses public class DataManager { protected List _dataControls; - protected FlowLayoutPanel _variableTable; + protected NoTearFlowLayoutPanel _variableTable; protected ProcessStream _stream; protected List _specialWatchVars; - public DataManager(ProcessStream stream, List data, FlowLayoutPanel variableTable, uint otherOffset = 0) + public DataManager(ProcessStream stream, List data, NoTearFlowLayoutPanel variableTable, uint otherOffset = 0) { _variableTable = variableTable; _stream = stream; diff --git a/Source/SM64 Diagnostic/Managers/HudManager.cs b/Source/SM64 Diagnostic/Managers/HudManager.cs index 16f3a6e04..c458a13c8 100644 --- a/Source/SM64 Diagnostic/Managers/HudManager.cs +++ b/Source/SM64 Diagnostic/Managers/HudManager.cs @@ -15,7 +15,7 @@ public class HudManager : DataManager Control _tabControl; public HudManager(ProcessStream stream, List hudData, Control tabControl) - : base(stream, hudData, tabControl.Controls["flowLayoutPanelHud"] as FlowLayoutPanel) + : base(stream, hudData, tabControl.Controls["NoTearFlowLayoutPanelHud"] as NoTearFlowLayoutPanel) { _tabControl = tabControl; diff --git a/Source/SM64 Diagnostic/Managers/MarioManager.cs b/Source/SM64 Diagnostic/Managers/MarioManager.cs index 8a563f23a..51a4497ce 100644 --- a/Source/SM64 Diagnostic/Managers/MarioManager.cs +++ b/Source/SM64 Diagnostic/Managers/MarioManager.cs @@ -15,7 +15,7 @@ public class MarioManager : DataManager { MapManager _mapManager; - public MarioManager(ProcessStream stream, List marioData, Control marioControl, FlowLayoutPanel variableTable, MapManager mapManager) + public MarioManager(ProcessStream stream, List marioData, Control marioControl, NoTearFlowLayoutPanel variableTable, MapManager mapManager) : base(stream, marioData, variableTable, Config.Mario.StructAddress) { // Register controls on the control (for drag-and-drop) diff --git a/Source/SM64 Diagnostic/Managers/MiscManager.cs b/Source/SM64 Diagnostic/Managers/MiscManager.cs index 07730c54b..f8c123197 100644 --- a/Source/SM64 Diagnostic/Managers/MiscManager.cs +++ b/Source/SM64 Diagnostic/Managers/MiscManager.cs @@ -19,7 +19,7 @@ public class MiscManager : DataManager enum PuControl { Home, PuUp, PuDown, PuLeft, PuRight, QpuUp, QpuDown, QpuLeft, QpuRight}; - public MiscManager(ProcessStream stream, List watchVariables, FlowLayoutPanel variableTable, Control puController) + public MiscManager(ProcessStream stream, List watchVariables, NoTearFlowLayoutPanel variableTable, Control puController) : base(stream, watchVariables, variableTable) { _puController = puController; diff --git a/Source/SM64 Diagnostic/Managers/TriangleManager.cs b/Source/SM64 Diagnostic/Managers/TriangleManager.cs index 1645b2343..5fda1ab33 100644 --- a/Source/SM64 Diagnostic/Managers/TriangleManager.cs +++ b/Source/SM64 Diagnostic/Managers/TriangleManager.cs @@ -73,7 +73,7 @@ public enum TriangleMode {Floor, Wall, Ceiling, Other}; /// Manages illumanati /// public TriangleManager(ProcessStream stream, Control tabControl, List triangleWatchVars) - : base(stream, triangleWatchVars, tabControl.Controls["flowLayoutPanelTriangles"] as FlowLayoutPanel) + : base(stream, triangleWatchVars, tabControl.Controls["NoTearFlowLayoutPanelTriangles"] as NoTearFlowLayoutPanel) { _addressBox = tabControl.Controls["maskedTextBoxOtherTriangle"] as MaskedTextBox; _addressBox.LostFocus += AddressBox_LostFocus; diff --git a/Source/SM64 Diagnostic/SM64 Diagnostic.csproj b/Source/SM64 Diagnostic/SM64 Diagnostic.csproj index c7a3c7347..0d1822316 100644 --- a/Source/SM64 Diagnostic/SM64 Diagnostic.csproj +++ b/Source/SM64 Diagnostic/SM64 Diagnostic.csproj @@ -96,6 +96,9 @@ Component + + Component + diff --git a/Source/SM64 Diagnostic/StroopMainForm.Designer.cs b/Source/SM64 Diagnostic/StroopMainForm.Designer.cs index 2dfa8b8e9..c72177d7a 100644 --- a/Source/SM64 Diagnostic/StroopMainForm.Designer.cs +++ b/Source/SM64 Diagnostic/StroopMainForm.Designer.cs @@ -44,7 +44,7 @@ private void InitializeComponent() this.comboBoxMapToggleMode = new System.Windows.Forms.ComboBox(); this.checkBoxObjLockLabels = new System.Windows.Forms.CheckBox(); this.labelSortMethod = new System.Windows.Forms.Label(); - this.flowLayoutPanelObjects = new System.Windows.Forms.FlowLayoutPanel(); + this.NoTearFlowLayoutPanelObjects = new NoTearFlowLayoutPanel(); this.comboBoxSortMethod = new System.Windows.Forms.ComboBox(); this.buttonPauseResume = new System.Windows.Forms.Button(); this.splitContainerMain = new System.Windows.Forms.SplitContainer(); @@ -59,26 +59,26 @@ private void InitializeComponent() this.labelObjSlotPosValue = new System.Windows.Forms.Label(); this.labelObjBhvValue = new System.Windows.Forms.Label(); this.labelObjAdd = new System.Windows.Forms.Label(); - this.flowLayoutPanelObject = new System.Windows.Forms.FlowLayoutPanel(); + this.NoTearFlowLayoutPanelObject = new NoTearFlowLayoutPanel(); this.labelObjSlotInd = new System.Windows.Forms.Label(); this.labelObjSlotPos = new System.Windows.Forms.Label(); this.labelObjBhv = new System.Windows.Forms.Label(); this.panelObjectBorder = new System.Windows.Forms.Panel(); this.labelObjAddValue = new System.Windows.Forms.Label(); this.tabPageMario = new System.Windows.Forms.TabPage(); - this.flowLayoutPanelMario = new System.Windows.Forms.FlowLayoutPanel(); + this.NoTearFlowLayoutPanelMario = new NoTearFlowLayoutPanel(); this.panelMarioBorder = new System.Windows.Forms.Panel(); this.tabPageHud = new System.Windows.Forms.TabPage(); this.buttonStandardHud = new System.Windows.Forms.Button(); this.buttonDie = new System.Windows.Forms.Button(); this.buttonFillHp = new System.Windows.Forms.Button(); - this.flowLayoutPanelHud = new System.Windows.Forms.FlowLayoutPanel(); + this.NoTearFlowLayoutPanelHud = new NoTearFlowLayoutPanel(); this.panelHudBorder = new System.Windows.Forms.Panel(); this.tabPageCamera = new System.Windows.Forms.TabPage(); - this.flowLayoutPanelCamera = new System.Windows.Forms.FlowLayoutPanel(); + this.NoTearFlowLayoutPanelCamera = new NoTearFlowLayoutPanel(); this.panelCameraBorder = new System.Windows.Forms.Panel(); this.tabPageDebug = new System.Windows.Forms.TabPage(); - this.flowLayoutPanelDebugDisplayType = new System.Windows.Forms.FlowLayoutPanel(); + this.NoTearFlowLayoutPanelDebugDisplayType = new NoTearFlowLayoutPanel(); this.radioButtonDbgOff = new System.Windows.Forms.RadioButton(); this.radioButtonDbgObjCnt = new System.Windows.Forms.RadioButton(); this.radioButtonDbgChkInfo = new System.Windows.Forms.RadioButton(); @@ -107,7 +107,7 @@ private void InitializeComponent() this.buttonPuConZpPu = new System.Windows.Forms.Button(); this.buttonPuConZpQpu = new System.Windows.Forms.Button(); this.buttonPuConHome = new System.Windows.Forms.Button(); - this.flowLayoutPanelMisc = new System.Windows.Forms.FlowLayoutPanel(); + this.NoTearFlowLayoutPanelMisc = new NoTearFlowLayoutPanel(); this.panelMiscBorder = new System.Windows.Forms.Panel(); this.tabPageTriangles = new System.Windows.Forms.TabPage(); this.checkBoxVertexMisalignment = new System.Windows.Forms.CheckBox(); @@ -115,7 +115,7 @@ private void InitializeComponent() this.buttonGoToV3 = new System.Windows.Forms.Button(); this.buttonGoToV2 = new System.Windows.Forms.Button(); this.buttonGoToV1 = new System.Windows.Forms.Button(); - this.flowLayoutPanelTriangles = new System.Windows.Forms.FlowLayoutPanel(); + this.NoTearFlowLayoutPanelTriangles = new NoTearFlowLayoutPanel(); this.label4 = new System.Windows.Forms.Label(); this.maskedTextBoxOtherTriangle = new System.Windows.Forms.MaskedTextBox(); this.radioButtonTriOther = new System.Windows.Forms.RadioButton(); @@ -123,7 +123,7 @@ private void InitializeComponent() this.radioButtonTriWall = new System.Windows.Forms.RadioButton(); this.radioButtonTriFloor = new System.Windows.Forms.RadioButton(); this.tabPageStars = new System.Windows.Forms.TabPage(); - this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel(); + this.NoTearFlowLayoutPanel1 = new NoTearFlowLayoutPanel(); this.radioButtonFileD = new System.Windows.Forms.RadioButton(); this.radioButtonFileC = new System.Windows.Forms.RadioButton(); this.radioButtonFileB = new System.Windows.Forms.RadioButton(); @@ -193,7 +193,7 @@ private void InitializeComponent() this.tabPageCamera.SuspendLayout(); this.panelCameraBorder.SuspendLayout(); this.tabPageDebug.SuspendLayout(); - this.flowLayoutPanelDebugDisplayType.SuspendLayout(); + this.NoTearFlowLayoutPanelDebugDisplayType.SuspendLayout(); this.panelDebugBorder.SuspendLayout(); this.tabPageMisc.SuspendLayout(); this.groupBoxPuController.SuspendLayout(); @@ -258,7 +258,7 @@ private void InitializeComponent() this.groupBoxObjects.Controls.Add(this.comboBoxMapToggleMode); this.groupBoxObjects.Controls.Add(this.checkBoxObjLockLabels); this.groupBoxObjects.Controls.Add(this.labelSortMethod); - this.groupBoxObjects.Controls.Add(this.flowLayoutPanelObjects); + this.groupBoxObjects.Controls.Add(this.NoTearFlowLayoutPanelObjects); this.groupBoxObjects.Controls.Add(this.comboBoxSortMethod); this.groupBoxObjects.Location = new System.Drawing.Point(2, 2); this.groupBoxObjects.Margin = new System.Windows.Forms.Padding(2); @@ -355,18 +355,18 @@ private void InitializeComponent() this.labelSortMethod.TabIndex = 5; this.labelSortMethod.Text = "Sort Method:"; // - // flowLayoutPanelObjects + // NoTearFlowLayoutPanelObjects // - this.flowLayoutPanelObjects.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.NoTearFlowLayoutPanelObjects.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.flowLayoutPanelObjects.AutoScroll = true; - this.flowLayoutPanelObjects.Location = new System.Drawing.Point(4, 65); - this.flowLayoutPanelObjects.Margin = new System.Windows.Forms.Padding(2); - this.flowLayoutPanelObjects.Name = "flowLayoutPanelObjects"; - this.flowLayoutPanelObjects.Size = new System.Drawing.Size(996, 397); - this.flowLayoutPanelObjects.TabIndex = 0; - this.flowLayoutPanelObjects.Resize += new System.EventHandler(this.flowLayoutPanelObjects_Resize); + this.NoTearFlowLayoutPanelObjects.AutoScroll = true; + this.NoTearFlowLayoutPanelObjects.Location = new System.Drawing.Point(4, 65); + this.NoTearFlowLayoutPanelObjects.Margin = new System.Windows.Forms.Padding(2); + this.NoTearFlowLayoutPanelObjects.Name = "NoTearFlowLayoutPanelObjects"; + this.NoTearFlowLayoutPanelObjects.Size = new System.Drawing.Size(996, 397); + this.NoTearFlowLayoutPanelObjects.TabIndex = 0; + this.NoTearFlowLayoutPanelObjects.Resize += new System.EventHandler(this.NoTearFlowLayoutPanelObjects_Resize); // // comboBoxSortMethod // @@ -453,7 +453,7 @@ private void InitializeComponent() this.tabPageObjects.Controls.Add(this.labelObjSlotPosValue); this.tabPageObjects.Controls.Add(this.labelObjBhvValue); this.tabPageObjects.Controls.Add(this.labelObjAdd); - this.tabPageObjects.Controls.Add(this.flowLayoutPanelObject); + this.tabPageObjects.Controls.Add(this.NoTearFlowLayoutPanelObject); this.tabPageObjects.Controls.Add(this.labelObjSlotInd); this.tabPageObjects.Controls.Add(this.labelObjSlotPos); this.tabPageObjects.Controls.Add(this.labelObjBhv); @@ -558,18 +558,18 @@ private void InitializeComponent() this.labelObjAdd.TabIndex = 8; this.labelObjAdd.Text = "Add:"; // - // flowLayoutPanelObject + // NoTearFlowLayoutPanelObject // - this.flowLayoutPanelObject.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.NoTearFlowLayoutPanelObject.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.flowLayoutPanelObject.AutoScroll = true; - this.flowLayoutPanelObject.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; - this.flowLayoutPanelObject.Location = new System.Drawing.Point(208, 3); - this.flowLayoutPanelObject.Margin = new System.Windows.Forms.Padding(2); - this.flowLayoutPanelObject.Name = "flowLayoutPanelObject"; - this.flowLayoutPanelObject.Size = new System.Drawing.Size(786, 183); - this.flowLayoutPanelObject.TabIndex = 3; + this.NoTearFlowLayoutPanelObject.AutoScroll = true; + this.NoTearFlowLayoutPanelObject.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.NoTearFlowLayoutPanelObject.Location = new System.Drawing.Point(208, 3); + this.NoTearFlowLayoutPanelObject.Margin = new System.Windows.Forms.Padding(2); + this.NoTearFlowLayoutPanelObject.Name = "NoTearFlowLayoutPanelObject"; + this.NoTearFlowLayoutPanelObject.Size = new System.Drawing.Size(786, 183); + this.NoTearFlowLayoutPanelObject.TabIndex = 3; // // labelObjSlotInd // @@ -622,7 +622,7 @@ private void InitializeComponent() // tabPageMario // this.tabPageMario.BackColor = System.Drawing.Color.Transparent; - this.tabPageMario.Controls.Add(this.flowLayoutPanelMario); + this.tabPageMario.Controls.Add(this.NoTearFlowLayoutPanelMario); this.tabPageMario.Controls.Add(this.panelMarioBorder); this.tabPageMario.Location = new System.Drawing.Point(4, 22); this.tabPageMario.Margin = new System.Windows.Forms.Padding(2); @@ -632,18 +632,18 @@ private void InitializeComponent() this.tabPageMario.TabIndex = 1; this.tabPageMario.Text = "Mario"; // - // flowLayoutPanelMario + // NoTearFlowLayoutPanelMario // - this.flowLayoutPanelMario.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.NoTearFlowLayoutPanelMario.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.flowLayoutPanelMario.AutoScroll = true; - this.flowLayoutPanelMario.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; - this.flowLayoutPanelMario.Location = new System.Drawing.Point(65, 6); - this.flowLayoutPanelMario.Margin = new System.Windows.Forms.Padding(2); - this.flowLayoutPanelMario.Name = "flowLayoutPanelMario"; - this.flowLayoutPanelMario.Size = new System.Drawing.Size(929, 180); - this.flowLayoutPanelMario.TabIndex = 1; + this.NoTearFlowLayoutPanelMario.AutoScroll = true; + this.NoTearFlowLayoutPanelMario.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.NoTearFlowLayoutPanelMario.Location = new System.Drawing.Point(65, 6); + this.NoTearFlowLayoutPanelMario.Margin = new System.Windows.Forms.Padding(2); + this.NoTearFlowLayoutPanelMario.Name = "NoTearFlowLayoutPanelMario"; + this.NoTearFlowLayoutPanelMario.Size = new System.Drawing.Size(929, 180); + this.NoTearFlowLayoutPanelMario.TabIndex = 1; // // panelMarioBorder // @@ -659,7 +659,7 @@ private void InitializeComponent() this.tabPageHud.Controls.Add(this.buttonStandardHud); this.tabPageHud.Controls.Add(this.buttonDie); this.tabPageHud.Controls.Add(this.buttonFillHp); - this.tabPageHud.Controls.Add(this.flowLayoutPanelHud); + this.tabPageHud.Controls.Add(this.NoTearFlowLayoutPanelHud); this.tabPageHud.Controls.Add(this.panelHudBorder); this.tabPageHud.Location = new System.Drawing.Point(4, 22); this.tabPageHud.Margin = new System.Windows.Forms.Padding(2); @@ -695,18 +695,18 @@ private void InitializeComponent() this.buttonFillHp.Text = "Fill HP"; this.buttonFillHp.UseVisualStyleBackColor = true; // - // flowLayoutPanelHud + // NoTearFlowLayoutPanelHud // - this.flowLayoutPanelHud.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.NoTearFlowLayoutPanelHud.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.flowLayoutPanelHud.AutoScroll = true; - this.flowLayoutPanelHud.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; - this.flowLayoutPanelHud.Location = new System.Drawing.Point(101, 5); - this.flowLayoutPanelHud.Margin = new System.Windows.Forms.Padding(2); - this.flowLayoutPanelHud.Name = "flowLayoutPanelHud"; - this.flowLayoutPanelHud.Size = new System.Drawing.Size(891, 176); - this.flowLayoutPanelHud.TabIndex = 3; + this.NoTearFlowLayoutPanelHud.AutoScroll = true; + this.NoTearFlowLayoutPanelHud.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.NoTearFlowLayoutPanelHud.Location = new System.Drawing.Point(101, 5); + this.NoTearFlowLayoutPanelHud.Margin = new System.Windows.Forms.Padding(2); + this.NoTearFlowLayoutPanelHud.Name = "NoTearFlowLayoutPanelHud"; + this.NoTearFlowLayoutPanelHud.Size = new System.Drawing.Size(891, 176); + this.NoTearFlowLayoutPanelHud.TabIndex = 3; // // panelHudBorder // @@ -719,7 +719,7 @@ private void InitializeComponent() // // tabPageCamera // - this.tabPageCamera.Controls.Add(this.flowLayoutPanelCamera); + this.tabPageCamera.Controls.Add(this.NoTearFlowLayoutPanelCamera); this.tabPageCamera.Controls.Add(this.panelCameraBorder); this.tabPageCamera.Location = new System.Drawing.Point(4, 22); this.tabPageCamera.Margin = new System.Windows.Forms.Padding(2); @@ -728,18 +728,18 @@ private void InitializeComponent() this.tabPageCamera.TabIndex = 7; this.tabPageCamera.Text = "Camera"; // - // flowLayoutPanelCamera + // NoTearFlowLayoutPanelCamera // - this.flowLayoutPanelCamera.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.NoTearFlowLayoutPanelCamera.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.flowLayoutPanelCamera.AutoScroll = true; - this.flowLayoutPanelCamera.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; - this.flowLayoutPanelCamera.Location = new System.Drawing.Point(65, 2); - this.flowLayoutPanelCamera.Margin = new System.Windows.Forms.Padding(2); - this.flowLayoutPanelCamera.Name = "flowLayoutPanelCamera"; - this.flowLayoutPanelCamera.Size = new System.Drawing.Size(929, 180); - this.flowLayoutPanelCamera.TabIndex = 3; + this.NoTearFlowLayoutPanelCamera.AutoScroll = true; + this.NoTearFlowLayoutPanelCamera.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.NoTearFlowLayoutPanelCamera.Location = new System.Drawing.Point(65, 2); + this.NoTearFlowLayoutPanelCamera.Margin = new System.Windows.Forms.Padding(2); + this.NoTearFlowLayoutPanelCamera.Name = "NoTearFlowLayoutPanelCamera"; + this.NoTearFlowLayoutPanelCamera.Size = new System.Drawing.Size(929, 180); + this.NoTearFlowLayoutPanelCamera.TabIndex = 3; // // panelCameraBorder // @@ -752,7 +752,7 @@ private void InitializeComponent() // // tabPageDebug // - this.tabPageDebug.Controls.Add(this.flowLayoutPanelDebugDisplayType); + this.tabPageDebug.Controls.Add(this.NoTearFlowLayoutPanelDebugDisplayType); this.tabPageDebug.Controls.Add(this.label2); this.tabPageDebug.Controls.Add(this.panelDebugBorder); this.tabPageDebug.Location = new System.Drawing.Point(4, 22); @@ -762,22 +762,22 @@ private void InitializeComponent() this.tabPageDebug.TabIndex = 8; this.tabPageDebug.Text = "Debug"; // - // flowLayoutPanelDebugDisplayType - // - this.flowLayoutPanelDebugDisplayType.AutoScroll = true; - this.flowLayoutPanelDebugDisplayType.Controls.Add(this.radioButtonDbgOff); - this.flowLayoutPanelDebugDisplayType.Controls.Add(this.radioButtonDbgObjCnt); - this.flowLayoutPanelDebugDisplayType.Controls.Add(this.radioButtonDbgChkInfo); - this.flowLayoutPanelDebugDisplayType.Controls.Add(this.radioButtonDbgMapInfo); - this.flowLayoutPanelDebugDisplayType.Controls.Add(this.radioButtonDbgStgInfo); - this.flowLayoutPanelDebugDisplayType.Controls.Add(this.radioButtonDbgFxInfo); - this.flowLayoutPanelDebugDisplayType.Controls.Add(this.radioButtonDbgEnemyInfo); - this.flowLayoutPanelDebugDisplayType.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; - this.flowLayoutPanelDebugDisplayType.Location = new System.Drawing.Point(71, 23); - this.flowLayoutPanelDebugDisplayType.Name = "flowLayoutPanelDebugDisplayType"; - this.flowLayoutPanelDebugDisplayType.Size = new System.Drawing.Size(167, 177); - this.flowLayoutPanelDebugDisplayType.TabIndex = 11; - this.flowLayoutPanelDebugDisplayType.WrapContents = false; + // NoTearFlowLayoutPanelDebugDisplayType + // + this.NoTearFlowLayoutPanelDebugDisplayType.AutoScroll = true; + this.NoTearFlowLayoutPanelDebugDisplayType.Controls.Add(this.radioButtonDbgOff); + this.NoTearFlowLayoutPanelDebugDisplayType.Controls.Add(this.radioButtonDbgObjCnt); + this.NoTearFlowLayoutPanelDebugDisplayType.Controls.Add(this.radioButtonDbgChkInfo); + this.NoTearFlowLayoutPanelDebugDisplayType.Controls.Add(this.radioButtonDbgMapInfo); + this.NoTearFlowLayoutPanelDebugDisplayType.Controls.Add(this.radioButtonDbgStgInfo); + this.NoTearFlowLayoutPanelDebugDisplayType.Controls.Add(this.radioButtonDbgFxInfo); + this.NoTearFlowLayoutPanelDebugDisplayType.Controls.Add(this.radioButtonDbgEnemyInfo); + this.NoTearFlowLayoutPanelDebugDisplayType.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.NoTearFlowLayoutPanelDebugDisplayType.Location = new System.Drawing.Point(71, 23); + this.NoTearFlowLayoutPanelDebugDisplayType.Name = "NoTearFlowLayoutPanelDebugDisplayType"; + this.NoTearFlowLayoutPanelDebugDisplayType.Size = new System.Drawing.Size(167, 177); + this.NoTearFlowLayoutPanelDebugDisplayType.TabIndex = 11; + this.NoTearFlowLayoutPanelDebugDisplayType.WrapContents = false; // // radioButtonDbgOff // @@ -879,7 +879,7 @@ private void InitializeComponent() // tabPageMisc // this.tabPageMisc.Controls.Add(this.groupBoxPuController); - this.tabPageMisc.Controls.Add(this.flowLayoutPanelMisc); + this.tabPageMisc.Controls.Add(this.NoTearFlowLayoutPanelMisc); this.tabPageMisc.Controls.Add(this.panelMiscBorder); this.tabPageMisc.Location = new System.Drawing.Point(4, 22); this.tabPageMisc.Name = "tabPageMisc"; @@ -1106,18 +1106,18 @@ private void InitializeComponent() this.buttonPuConHome.TabIndex = 1; this.buttonPuConHome.UseVisualStyleBackColor = true; // - // flowLayoutPanelMisc + // NoTearFlowLayoutPanelMisc // - this.flowLayoutPanelMisc.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.NoTearFlowLayoutPanelMisc.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.flowLayoutPanelMisc.AutoScroll = true; - this.flowLayoutPanelMisc.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; - this.flowLayoutPanelMisc.Location = new System.Drawing.Point(64, 5); - this.flowLayoutPanelMisc.Margin = new System.Windows.Forms.Padding(2); - this.flowLayoutPanelMisc.Name = "flowLayoutPanelMisc"; - this.flowLayoutPanelMisc.Size = new System.Drawing.Size(702, 180); - this.flowLayoutPanelMisc.TabIndex = 5; + this.NoTearFlowLayoutPanelMisc.AutoScroll = true; + this.NoTearFlowLayoutPanelMisc.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.NoTearFlowLayoutPanelMisc.Location = new System.Drawing.Point(64, 5); + this.NoTearFlowLayoutPanelMisc.Margin = new System.Windows.Forms.Padding(2); + this.NoTearFlowLayoutPanelMisc.Name = "NoTearFlowLayoutPanelMisc"; + this.NoTearFlowLayoutPanelMisc.Size = new System.Drawing.Size(702, 180); + this.NoTearFlowLayoutPanelMisc.TabIndex = 5; // // panelMiscBorder // @@ -1135,7 +1135,7 @@ private void InitializeComponent() this.tabPageTriangles.Controls.Add(this.buttonGoToV3); this.tabPageTriangles.Controls.Add(this.buttonGoToV2); this.tabPageTriangles.Controls.Add(this.buttonGoToV1); - this.tabPageTriangles.Controls.Add(this.flowLayoutPanelTriangles); + this.tabPageTriangles.Controls.Add(this.NoTearFlowLayoutPanelTriangles); this.tabPageTriangles.Controls.Add(this.label4); this.tabPageTriangles.Controls.Add(this.maskedTextBoxOtherTriangle); this.tabPageTriangles.Controls.Add(this.radioButtonTriOther); @@ -1195,18 +1195,18 @@ private void InitializeComponent() this.buttonGoToV1.Text = "Goto V1"; this.buttonGoToV1.UseVisualStyleBackColor = true; // - // flowLayoutPanelTriangles + // NoTearFlowLayoutPanelTriangles // - this.flowLayoutPanelTriangles.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.NoTearFlowLayoutPanelTriangles.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.flowLayoutPanelTriangles.AutoScroll = true; - this.flowLayoutPanelTriangles.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; - this.flowLayoutPanelTriangles.Location = new System.Drawing.Point(167, 5); - this.flowLayoutPanelTriangles.Margin = new System.Windows.Forms.Padding(2); - this.flowLayoutPanelTriangles.Name = "flowLayoutPanelTriangles"; - this.flowLayoutPanelTriangles.Size = new System.Drawing.Size(824, 180); - this.flowLayoutPanelTriangles.TabIndex = 7; + this.NoTearFlowLayoutPanelTriangles.AutoScroll = true; + this.NoTearFlowLayoutPanelTriangles.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.NoTearFlowLayoutPanelTriangles.Location = new System.Drawing.Point(167, 5); + this.NoTearFlowLayoutPanelTriangles.Margin = new System.Windows.Forms.Padding(2); + this.NoTearFlowLayoutPanelTriangles.Name = "NoTearFlowLayoutPanelTriangles"; + this.NoTearFlowLayoutPanelTriangles.Size = new System.Drawing.Size(824, 180); + this.NoTearFlowLayoutPanelTriangles.TabIndex = 7; // // label4 // @@ -1270,7 +1270,7 @@ private void InitializeComponent() // // tabPageStars // - this.tabPageStars.Controls.Add(this.flowLayoutPanel1); + this.tabPageStars.Controls.Add(this.NoTearFlowLayoutPanel1); this.tabPageStars.Controls.Add(this.radioButtonFileD); this.tabPageStars.Controls.Add(this.radioButtonFileC); this.tabPageStars.Controls.Add(this.radioButtonFileB); @@ -1282,18 +1282,18 @@ private void InitializeComponent() this.tabPageStars.TabIndex = 10; this.tabPageStars.Text = "Stars"; // - // flowLayoutPanel1 + // NoTearFlowLayoutPanel1 // - this.flowLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + this.NoTearFlowLayoutPanel1.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) | System.Windows.Forms.AnchorStyles.Left) | System.Windows.Forms.AnchorStyles.Right))); - this.flowLayoutPanel1.AutoScroll = true; - this.flowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; - this.flowLayoutPanel1.Location = new System.Drawing.Point(63, 7); - this.flowLayoutPanel1.Name = "flowLayoutPanel1"; - this.flowLayoutPanel1.Size = new System.Drawing.Size(927, 177); - this.flowLayoutPanel1.TabIndex = 4; - this.flowLayoutPanel1.WrapContents = false; + this.NoTearFlowLayoutPanel1.AutoScroll = true; + this.NoTearFlowLayoutPanel1.FlowDirection = System.Windows.Forms.FlowDirection.TopDown; + this.NoTearFlowLayoutPanel1.Location = new System.Drawing.Point(63, 7); + this.NoTearFlowLayoutPanel1.Name = "NoTearFlowLayoutPanel1"; + this.NoTearFlowLayoutPanel1.Size = new System.Drawing.Size(927, 177); + this.NoTearFlowLayoutPanel1.TabIndex = 4; + this.NoTearFlowLayoutPanel1.WrapContents = false; // // radioButtonFileD // @@ -1988,8 +1988,8 @@ private void InitializeComponent() this.panelCameraBorder.ResumeLayout(false); this.tabPageDebug.ResumeLayout(false); this.tabPageDebug.PerformLayout(); - this.flowLayoutPanelDebugDisplayType.ResumeLayout(false); - this.flowLayoutPanelDebugDisplayType.PerformLayout(); + this.NoTearFlowLayoutPanelDebugDisplayType.ResumeLayout(false); + this.NoTearFlowLayoutPanelDebugDisplayType.PerformLayout(); this.panelDebugBorder.ResumeLayout(false); this.tabPageMisc.ResumeLayout(false); this.groupBoxPuController.ResumeLayout(false); @@ -2035,7 +2035,7 @@ private void InitializeComponent() private System.Windows.Forms.GroupBox groupBoxObjects; private System.Windows.Forms.ComboBox comboBoxSortMethod; private System.Windows.Forms.Label labelSortMethod; - private System.Windows.Forms.FlowLayoutPanel flowLayoutPanelObjects; + private NoTearFlowLayoutPanel NoTearFlowLayoutPanelObjects; private System.Windows.Forms.Button buttonPauseResume; private System.Windows.Forms.SplitContainer splitContainerMain; private System.Windows.Forms.CheckBox checkBoxObjLockLabels; @@ -2045,7 +2045,7 @@ private void InitializeComponent() private System.Windows.Forms.Label labelObjSlotPosValue; private System.Windows.Forms.Label labelObjBhvValue; private System.Windows.Forms.Label labelObjAdd; - private System.Windows.Forms.FlowLayoutPanel flowLayoutPanelObject; + private NoTearFlowLayoutPanel NoTearFlowLayoutPanelObject; private System.Windows.Forms.Label labelObjSlotInd; private System.Windows.Forms.Label labelObjSlotPos; private System.Windows.Forms.Label labelObjBhv; @@ -2053,7 +2053,7 @@ private void InitializeComponent() private IntPictureBox pictureBoxObject; private System.Windows.Forms.Label labelObjAddValue; private System.Windows.Forms.TabPage tabPageMario; - private System.Windows.Forms.FlowLayoutPanel flowLayoutPanelMario; + private NoTearFlowLayoutPanel NoTearFlowLayoutPanelMario; private System.Windows.Forms.Panel panelMarioBorder; private IntPictureBox pictureBoxMario; private System.Windows.Forms.TabPage tabPageExpressions; @@ -2099,10 +2099,10 @@ private void InitializeComponent() private System.Windows.Forms.CheckBox checkBoxUseRomHack; private System.Windows.Forms.TabPage tabPageHud; private System.Windows.Forms.TabPage tabPageCamera; - private System.Windows.Forms.FlowLayoutPanel flowLayoutPanelHud; + private NoTearFlowLayoutPanel NoTearFlowLayoutPanelHud; private System.Windows.Forms.Panel panelHudBorder; private IntPictureBox pictureBoxHud; - private System.Windows.Forms.FlowLayoutPanel flowLayoutPanelCamera; + private NoTearFlowLayoutPanel NoTearFlowLayoutPanelCamera; private System.Windows.Forms.Panel panelCameraBorder; private IntPictureBox pictureBoxCamera; private System.Windows.Forms.CheckBox checkBoxMapShowCamera; @@ -2119,11 +2119,11 @@ private void InitializeComponent() private System.Windows.Forms.Label label2; private System.Windows.Forms.Panel panelDebugBorder; private IntPictureBox pictureBoxDebug; - private System.Windows.Forms.FlowLayoutPanel flowLayoutPanelMisc; + private NoTearFlowLayoutPanel NoTearFlowLayoutPanelMisc; private System.Windows.Forms.Panel panelMiscBorder; private IntPictureBox pictureBoxMisc; private System.Windows.Forms.TabPage tabPageStars; - private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1; + private NoTearFlowLayoutPanel NoTearFlowLayoutPanel1; private System.Windows.Forms.RadioButton radioButtonFileD; private System.Windows.Forms.RadioButton radioButtonFileC; private System.Windows.Forms.RadioButton radioButtonFileB; @@ -2158,7 +2158,7 @@ private void InitializeComponent() private Label label4; private MaskedTextBox maskedTextBoxOtherTriangle; private RadioButton radioButtonTriOther; - private FlowLayoutPanel flowLayoutPanelTriangles; + private NoTearFlowLayoutPanel NoTearFlowLayoutPanelTriangles; private Button buttonStandardHud; private Button buttonDie; private Button buttonFillHp; @@ -2166,7 +2166,7 @@ private void InitializeComponent() private Label label5; private CheckedListBox checkedListBoxHacks; private Label labelPureInterpretterRequire; - private FlowLayoutPanel flowLayoutPanelDebugDisplayType; + private NoTearFlowLayoutPanel NoTearFlowLayoutPanelDebugDisplayType; private Button buttonGoToV3; private Button buttonGoToV2; private Button buttonGoToV1; diff --git a/Source/SM64 Diagnostic/StroopMainForm.cs b/Source/SM64 Diagnostic/StroopMainForm.cs index ca072f019..67f27260a 100644 --- a/Source/SM64 Diagnostic/StroopMainForm.cs +++ b/Source/SM64 Diagnostic/StroopMainForm.cs @@ -56,16 +56,6 @@ public StroopMainForm() InitializeComponent(); } - protected override CreateParams CreateParams - { - get - { - CreateParams cp = base.CreateParams; - cp.ExStyle |= 0x02000000; // Turn on WS_EX_COMPOSITED - return cp; - } - } - private void AttachToProcess(Process process) { if (!_sm64Stream.SwitchProcess(process)) @@ -115,10 +105,10 @@ private void StroopMainForm_Load(object sender, EventArgs e) mapGui.MapShowFloorTriangle = checkBoxMapShowFloor; _mapManager = new MapManager(_sm64Stream, _mapAssoc, _objectAssoc, mapGui); - _marioManager = new MarioManager(_sm64Stream, _marioData, panelMarioBorder, flowLayoutPanelMario, _mapManager); + _marioManager = new MarioManager(_sm64Stream, _marioData, panelMarioBorder, NoTearFlowLayoutPanelMario, _mapManager); _hudManager = new HudManager(_sm64Stream, _hudData, tabPageHud); - _miscManager = new MiscManager(_sm64Stream, _miscData, flowLayoutPanelMisc, groupBoxPuController); - _cameraManager = new CameraManager(_sm64Stream, _cameraData, flowLayoutPanelCamera); + _miscManager = new MiscManager(_sm64Stream, _miscData, NoTearFlowLayoutPanelMisc, groupBoxPuController); + _cameraManager = new CameraManager(_sm64Stream, _cameraData, NoTearFlowLayoutPanelCamera); _triangleManager = new TriangleManager(_sm64Stream, tabPageTriangles, _triangleData); _debugManager = new DebugManager(); @@ -126,7 +116,7 @@ private void StroopMainForm_Load(object sender, EventArgs e) var objectGui = new ObjectDataGui() { ObjectBorderPanel = panelObjectBorder, - ObjectFlowLayout = flowLayoutPanelObject, + ObjectFlowLayout = NoTearFlowLayoutPanelObject, ObjectImagePictureBox = pictureBoxObject, ObjAddressLabelValue = labelObjAddValue, ObjAddressLabel = labelObjAdd, @@ -150,7 +140,7 @@ private void StroopMainForm_Load(object sender, EventArgs e) _slotManagerGui.TabControl = tabControlMain; _slotManagerGui.LockLabelsCheckbox = checkBoxObjLockLabels; _slotManagerGui.MapObjectToggleModeComboBox = comboBoxMapToggleMode; - _slotManagerGui.FlowLayoutContainer = flowLayoutPanelObjects; + _slotManagerGui.FlowLayoutContainer = NoTearFlowLayoutPanelObjects; _slotManagerGui.SortMethodComboBox = comboBoxSortMethod; _slotManagerGui.LabelMethodComboBox = comboBoxLabelMethod; _objectSlotManager = new ObjectSlotsManager(_sm64Stream, _objectAssoc, _objectManager, _slotManagerGui, _mapManager, _miscManager); @@ -382,16 +372,16 @@ private void buttonOtherAdd_Click(object sender, EventArgs e) } } - private async void flowLayoutPanelObjects_Resize(object sender, EventArgs e) + private async void NoTearFlowLayoutPanelObjects_Resize(object sender, EventArgs e) { _resizeTimeLeft = 500; if (_resizing) return; _resizing = true; - flowLayoutPanelObjects.Visible = false; - flowLayoutPanelObject.Visible = false; - flowLayoutPanelMario.Visible = false; + NoTearFlowLayoutPanelObjects.Visible = false; + NoTearFlowLayoutPanelObject.Visible = false; + NoTearFlowLayoutPanelMario.Visible = false; if (_mapManager != null && _mapManager.IsLoaded) _mapManager.Visible = false; await Task.Run(() => @@ -402,9 +392,9 @@ await Task.Run(() => _resizeTimeLeft -= 100; } }); - flowLayoutPanelObjects.Visible = true; - flowLayoutPanelObject.Visible = true; - flowLayoutPanelMario.Visible = true; + NoTearFlowLayoutPanelObjects.Visible = true; + NoTearFlowLayoutPanelObject.Visible = true; + NoTearFlowLayoutPanelMario.Visible = true; if (_mapManager != null && _mapManager.IsLoaded) _mapManager.Visible = true; @@ -518,9 +508,9 @@ await Task.Run(() => } }); - flowLayoutPanelObjects.Visible = false; + NoTearFlowLayoutPanelObjects.Visible = false; _objectSlotManager.ChangeSlotSize(trackBarObjSlotSize.Value); - flowLayoutPanelObjects.Visible = true; + NoTearFlowLayoutPanelObjects.Visible = true; _objSlotResizing = false; } diff --git a/Source/SM64 Diagnostic/Structs/Gui/ObjectDataGui.cs b/Source/SM64 Diagnostic/Structs/Gui/ObjectDataGui.cs index 05d39a772..850ff7ad0 100644 --- a/Source/SM64 Diagnostic/Structs/Gui/ObjectDataGui.cs +++ b/Source/SM64 Diagnostic/Structs/Gui/ObjectDataGui.cs @@ -12,7 +12,7 @@ public struct ObjectDataGui { public Panel ObjectBorderPanel; public IntPictureBox ObjectImagePictureBox; - public FlowLayoutPanel ObjectFlowLayout; + public NoTearFlowLayoutPanel ObjectFlowLayout; public Button CloneButton; public Button UnloadButton; public Button MoveToMarioButton; diff --git a/Source/SM64 Diagnostic/Structs/Gui/ObjectSlotManagerGui.cs b/Source/SM64 Diagnostic/Structs/Gui/ObjectSlotManagerGui.cs index 2fa3277d8..5e0106e8b 100644 --- a/Source/SM64 Diagnostic/Structs/Gui/ObjectSlotManagerGui.cs +++ b/Source/SM64 Diagnostic/Structs/Gui/ObjectSlotManagerGui.cs @@ -23,7 +23,7 @@ public class ObjectSlotManagerGui public ComboBox MapObjectToggleModeComboBox; public ComboBox SortMethodComboBox; public ComboBox LabelMethodComboBox; - public FlowLayoutPanel FlowLayoutContainer; + public NoTearFlowLayoutPanel FlowLayoutContainer; ~ObjectSlotManagerGui() { From da485c04617dcdf75f015203edcb1f0c1c2f3491 Mon Sep 17 00:00:00 2001 From: danebouchie Date: Mon, 21 Nov 2016 04:51:36 -0500 Subject: [PATCH 11/24] Added multi object image to object tab when multiple objects are selected --- .../Managers/ObjectSlotsManager.cs | 49 +++++++++++++++---- 1 file changed, 39 insertions(+), 10 deletions(-) diff --git a/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs b/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs index 608e0a72a..4a7501d60 100644 --- a/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs +++ b/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs @@ -39,6 +39,9 @@ public class ObjectSlotsManager uint _standingOnObject, _interactingObject, _holdingObject, _usingObject, _closestObject; int _activeObjCnt; bool _selectedUpdated = false; + Image _multiImage = null; + + List _prevSelectedBehaviorCriteria = new List(); public enum SortMethodType {ProcessingOrder, MemoryOrder, DistanceToMario}; public enum MapToggleModeType {Single, ObjectType, ProcessGroup}; @@ -337,6 +340,7 @@ public void Update() // Update slots BehaviorCriteria? multiBehavior = null; + List selectedBehaviorCriterias = new List(); bool firstObject = true; for (int i = 0; i < slotConfig.MaxSlots; i++) { @@ -344,6 +348,8 @@ public void Update() if (!_selectedSlotsAddresses.Contains(newObjectSlotData[i].Address)) continue; + selectedBehaviorCriterias.Add(behaviorCritera); + if (multiBehavior.HasValue) { multiBehavior = multiBehavior.Value.Generalize(behaviorCritera); @@ -358,25 +364,48 @@ public void Update() if (_selectedSlotsAddresses.Count > 1) { - if (_selectedUpdated || _lastSelectedBehavior != multiBehavior) + if (_selectedUpdated || !selectedBehaviorCriterias.SequenceEqual(_prevSelectedBehaviorCriteria)) { - if (multiBehavior.HasValue) + if (_lastSelectedBehavior != multiBehavior) { - _objManager.Behavior = String.Format("0x{0}", ((multiBehavior.Value.BehaviorAddress + ObjectAssoc.RamOffset) & 0x00FFFFFF).ToString("X4")); - _objManager.Image = null; - _objManager.SetBehaviorWatchVariables(ObjectAssoc.GetWatchVariables(multiBehavior.Value), Config.ObjectGroups.VacantSlotColor.Lighten(0.8)); + if (multiBehavior.HasValue) + { + _objManager.Behavior = String.Format("0x{0}", ((multiBehavior.Value.BehaviorAddress + ObjectAssoc.RamOffset) & 0x00FFFFFF).ToString("X4")); + _objManager.SetBehaviorWatchVariables(ObjectAssoc.GetWatchVariables(multiBehavior.Value), Config.ObjectGroups.VacantSlotColor.Lighten(0.8)); + } + else + { + _objManager.Behavior = ""; + _objManager.SetBehaviorWatchVariables(new List(), Color.White); + } + _lastSelectedBehavior = multiBehavior; } - else + + _multiImage?.Dispose(); + var multiBitmap = new Bitmap(256, 256); + int subImageCount = Math.Min(4, selectedBehaviorCriterias.Count); + using (Graphics gfx = Graphics.FromImage(multiBitmap)) { - _objManager.Behavior = ""; - _objManager.Image = null; - _objManager.SetBehaviorWatchVariables(new List(), Color.White); + Rectangle[] subImagePlaces = + { + new Rectangle(0, 0, 128, 128), + new Rectangle(128, 0, 128, 128), + new Rectangle(0, 128, 128, 128), + new Rectangle(128, 128, 128, 128) + }; + for (int i = 0; i < subImageCount; i++) + { + gfx.DrawImage(ObjectAssoc.GetObjectImage(selectedBehaviorCriterias[i], false), subImagePlaces[i]); + } } + _multiImage = multiBitmap; + _objManager.Image = _multiImage; + _objManager.Name = "Multiple Objects Selected"; _objManager.BackColor = Config.ObjectGroups.VacantSlotColor; _objManager.SlotIndex = ""; _objManager.SlotPos = ""; - _lastSelectedBehavior = multiBehavior; + _prevSelectedBehaviorCriteria = selectedBehaviorCriterias; } } } From 795f092c315d2e728dcc20c7cd1d85bd25503fae Mon Sep 17 00:00:00 2001 From: danebouchie Date: Tue, 22 Nov 2016 23:17:43 -0500 Subject: [PATCH 12/24] Made steepness angle (rounded) --- Source/SM64 Diagnostic/Managers/TriangleManager.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Source/SM64 Diagnostic/Managers/TriangleManager.cs b/Source/SM64 Diagnostic/Managers/TriangleManager.cs index 5fda1ab33..74c7442c1 100644 --- a/Source/SM64 Diagnostic/Managers/TriangleManager.cs +++ b/Source/SM64 Diagnostic/Managers/TriangleManager.cs @@ -58,7 +58,7 @@ protected override void InitializeSpecialVariables() new AngleDataContainer("LeftHillAngle"), new AngleDataContainer("RightHillAngle"), new DataContainer("Classification"), - new DataContainer("Steepness"), + new AngleDataContainer("Steepness"), new DataContainer("NormalDistAway"), new DataContainer("VerticalDistAway"), new DataContainer("HeightOnSlope") @@ -154,8 +154,8 @@ private void ProcessSpecialVars() (specialVar as DataContainer).Text = "Wall"; goto case "CheckTriangleExists"; case "Steepness": - (specialVar as DataContainer).Text = FixAngle((65536 / (Math.PI * 2) * Math.Acos(normY))).ToString(); - goto case "CheckTriangleExists"; + (specialVar as AngleDataContainer).AngleValue = Math.Acos(normY); + goto case "CheckTriangleExistsAngle"; case "NormalDistAway": (specialVar as DataContainer).Text = (marioX * normX + marioY * normY + marioZ * normZ + normOffset).ToString(); goto case "CheckTriangleExists"; From ac72126f52b7dfac12bfe360d77588111e39c332 Mon Sep 17 00:00:00 2001 From: danebouchie Date: Tue, 22 Nov 2016 23:39:43 -0500 Subject: [PATCH 13/24] Bugfix: The background color of the object slot shown up top is darker than the default backgrounds of the object slots --- Source/SM64 Diagnostic/Managers/ObjectManager.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/SM64 Diagnostic/Managers/ObjectManager.cs b/Source/SM64 Diagnostic/Managers/ObjectManager.cs index 218cb8a2b..7ad618685 100644 --- a/Source/SM64 Diagnostic/Managers/ObjectManager.cs +++ b/Source/SM64 Diagnostic/Managers/ObjectManager.cs @@ -149,7 +149,7 @@ public Color BackColor if (_objGui.ObjectBorderPanel.BackColor != value) { _objGui.ObjectBorderPanel.BackColor = value; - _objGui.ObjectImagePictureBox.BackColor = value.Lighten(0.5); + _objGui.ObjectImagePictureBox.BackColor = value.Lighten(0.7); } } get From 922e37e4e244e366449b21fec9caf57267e9ce1c Mon Sep 17 00:00:00 2001 From: danebouchie Date: Wed, 23 Nov 2016 00:16:47 -0500 Subject: [PATCH 14/24] =?UTF-8?q?Bugfix:=20If=20the=20first=20object=20you?= =?UTF-8?q?=20select=20is=20an=20unknown=20object,=20the=20object=20name?= =?UTF-8?q?=20still=20says=20=E2=80=9CNo=20Object=20Selected=E2=80=9D=20ra?= =?UTF-8?q?ther=20than=20=E2=80=9CUnknown=20Object=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Managers/ObjectSlotsManager.cs | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs b/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs index 4a7501d60..1c1eb2e72 100644 --- a/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs +++ b/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs @@ -41,6 +41,8 @@ public class ObjectSlotsManager bool _selectedUpdated = false; Image _multiImage = null; + bool _firstSelect = true; + List _prevSelectedBehaviorCriteria = new List(); public enum SortMethodType {ProcessingOrder, MemoryOrder, DistanceToMario}; @@ -290,15 +292,15 @@ public void Update() marioZ = BitConverter.ToSingle(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.ZOffset, 4), 0); // Calculate distance to Mario - foreach(var objSlot in newObjectSlotData) - { + foreach (var objSlot in newObjectSlotData) + { // Get object relative-to-maario position float dX, dY, dZ; dX = marioX - BitConverter.ToSingle(_stream.ReadRam(objSlot.Address + Config.ObjectSlots.ObjectXOffset, 4), 0); dY = marioY - BitConverter.ToSingle(_stream.ReadRam(objSlot.Address + Config.ObjectSlots.ObjectYOffset, 4), 0); dZ = marioZ - BitConverter.ToSingle(_stream.ReadRam(objSlot.Address + Config.ObjectSlots.ObjectZOffset, 4), 0); - objSlot.DistanceToMario = (float) Math.Sqrt(dX * dX + dY * dY + dZ * dZ); + objSlot.DistanceToMario = (float)Math.Sqrt(dX * dX + dY * dY + dZ * dZ); // Check if active/loaded objSlot.IsActive = BitConverter.ToUInt16(_stream.ReadRam(objSlot.Address + Config.ObjectSlots.ObjectActiveOffset, 2), 0) != 0x0000; @@ -361,7 +363,7 @@ public void Update() } } _miscManager.ActiveObjectCount = _activeObjCnt; - + if (_selectedSlotsAddresses.Count > 1) { if (_selectedUpdated || !selectedBehaviorCriterias.SequenceEqual(_prevSelectedBehaviorCriteria)) @@ -386,7 +388,7 @@ public void Update() int subImageCount = Math.Min(4, selectedBehaviorCriterias.Count); using (Graphics gfx = Graphics.FromImage(multiBitmap)) { - Rectangle[] subImagePlaces = + Rectangle[] subImagePlaces = { new Rectangle(0, 0, 128, 128), new Rectangle(128, 0, 128, 128), @@ -408,6 +410,11 @@ public void Update() _prevSelectedBehaviorCriteria = selectedBehaviorCriterias; } } + else if (_selectedSlotsAddresses.Count == 0) + { + _objManager.Name = "No Object Selected"; + _firstSelect = true; + } } private BehaviorCriteria UpdateSlot(ObjectSlotData objectData, int index) @@ -493,13 +500,14 @@ private BehaviorCriteria UpdateSlot(ObjectSlotData objectData, int index) { var objAssoc = ObjectAssoc.FindObjectAssociation(behaviorCriteria); var newBehavior = objAssoc != null ? objAssoc.BehaviorCriteria : (BehaviorCriteria?)null; - if (_lastSelectedBehavior != newBehavior) + if (_lastSelectedBehavior != newBehavior || _firstSelect) { _objManager.Behavior = String.Format("0x{0}", ((objectData.Behavior + ObjectAssoc.RamOffset) & 0x00FFFFFF).ToString("X4")); _objManager.Name = ObjectAssoc.GetObjectName(behaviorCriteria); _objManager.SetBehaviorWatchVariables(ObjectAssoc.GetWatchVariables(behaviorCriteria), newColor.Lighten(0.8)); _lastSelectedBehavior = newBehavior; + _firstSelect = false; } _objManager.Image = ObjectSlots[index].ObjectImage; _objManager.BackColor = newColor; From 2142a3e2950df83884e5bdb8e90cdb6baac94acc Mon Sep 17 00:00:00 2001 From: danebouchie Date: Wed, 23 Nov 2016 00:28:27 -0500 Subject: [PATCH 15/24] Rounded distance variables --- Source/SM64 Diagnostic/Managers/ObjectManager.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Source/SM64 Diagnostic/Managers/ObjectManager.cs b/Source/SM64 Diagnostic/Managers/ObjectManager.cs index 7ad618685..4eee08ba9 100644 --- a/Source/SM64 Diagnostic/Managers/ObjectManager.cs +++ b/Source/SM64 Diagnostic/Managers/ObjectManager.cs @@ -292,27 +292,27 @@ private void ProcessSpecialVars() switch (specialVar.SpecialName) { case "MarioDistanceToObject": - newText = MoreMath.DistanceTo(mX, mY, mZ, objX, objY, objZ).ToString(); + newText = Math.Round(MoreMath.DistanceTo(mX, mY, mZ, objX, objY, objZ),3).ToString(); break; case "MarioLateralDistanceToObject": - newText = MoreMath.DistanceTo(mX, mZ, objX, objZ).ToString(); + newText = Math.Round(MoreMath.DistanceTo(mX, mZ, objX, objZ), 3).ToString(); break; case "MarioDistanceToObjectHome": - newText = MoreMath.DistanceTo(mX, mY, mZ, objHomeX, objHomeY, objHomeZ).ToString(); + newText = Math.Round(MoreMath.DistanceTo(mX, mY, mZ, objHomeX, objHomeY, objHomeZ), 3).ToString(); break; case "MarioLateralDistanceToObjectHome": - newText = MoreMath.DistanceTo(mX, mZ, objHomeX, objHomeZ).ToString(); + newText = Math.Round(MoreMath.DistanceTo(mX, mZ, objHomeX, objHomeZ), 3).ToString(); break; case "ObjectDistanceToHome": - newText = MoreMath.DistanceTo(objX, objY, objZ, objHomeX, objHomeY, objHomeZ).ToString(); + newText = Math.Round(MoreMath.DistanceTo(objX, objY, objZ, objHomeX, objHomeY, objHomeZ), 3).ToString(); break; case "LateralObjectDistanceToHome": - newText = MoreMath.DistanceTo(objX, objZ, objHomeX, objHomeZ).ToString(); + newText = Math.Round(MoreMath.DistanceTo(objX, objZ, objHomeX, objHomeZ), 3).ToString(); break; case "RngCallsPerFrame": From 2df8adad70a49f9f22512a38738a90a6c776055b Mon Sep 17 00:00:00 2001 From: danebouchie Date: Sat, 26 Nov 2016 13:49:33 -0500 Subject: [PATCH 16/24] Bugfix: distance calculations not using X coordinate --- Source/SM64 Diagnostic/Utilities/MoreMath.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/SM64 Diagnostic/Utilities/MoreMath.cs b/Source/SM64 Diagnostic/Utilities/MoreMath.cs index b0e25ce76..4638167f8 100644 --- a/Source/SM64 Diagnostic/Utilities/MoreMath.cs +++ b/Source/SM64 Diagnostic/Utilities/MoreMath.cs @@ -11,7 +11,7 @@ public static class MoreMath public static double DistanceTo(float x1, float y1, float z1, float x2, float y2, float z2) { float dx, dy, dz; - dx = x1 - x1; + dx = x1 - x2; dy = y1 - y2; dz = z1 - z2; return Math.Sqrt(dx * dx + dy * dy + dz * dz); @@ -20,7 +20,7 @@ public static double DistanceTo(float x1, float y1, float z1, float x2, float y2 public static double DistanceTo(float x1, float y1, float x2, float y2) { float dx, dy; - dx = x1 - x1; + dx = x1 - x2; dy = y1 - y2; return Math.Sqrt(dx * dx + dy * dy); } From 71537ef6c37cd312334df595e558267e583cd33d Mon Sep 17 00:00:00 2001 From: danebouchie Date: Sat, 26 Nov 2016 16:33:32 -0500 Subject: [PATCH 17/24] Bugfix: The Standard HUD button should also set the display variables in addition to the count variables --- Source/SM64 Diagnostic/Config/Config.xml | 3 +++ Source/SM64 Diagnostic/Managers/MarioManager.cs | 2 +- .../Structs/Configurations/HudConfig.cs | 5 ++++- Source/SM64 Diagnostic/Utilities/MarioActions.cs | 3 +++ Source/SM64 Diagnostic/Utilities/XmlConfigParser.cs | 11 ++++++++++- 5 files changed, 21 insertions(+), 3 deletions(-) diff --git a/Source/SM64 Diagnostic/Config/Config.xml b/Source/SM64 Diagnostic/Config/Config.xml index 0c9d9460f..e985ff059 100644 --- a/Source/SM64 Diagnostic/Config/Config.xml +++ b/Source/SM64 Diagnostic/Config/Config.xml @@ -73,6 +73,9 @@ 0x8033b21c 0x8033b218 0x8033b21a + 0x8033b260 + 0x8033b262 + 0x8033b268 2176 4 0 diff --git a/Source/SM64 Diagnostic/Managers/MarioManager.cs b/Source/SM64 Diagnostic/Managers/MarioManager.cs index 51a4497ce..a68d6515e 100644 --- a/Source/SM64 Diagnostic/Managers/MarioManager.cs +++ b/Source/SM64 Diagnostic/Managers/MarioManager.cs @@ -77,7 +77,7 @@ public void ProcessSpecialVars() } } - public void Update(bool updateView) + public override void Update(bool updateView) { // Get Mario position and rotation float x, y, z, rot; diff --git a/Source/SM64 Diagnostic/Structs/Configurations/HudConfig.cs b/Source/SM64 Diagnostic/Structs/Configurations/HudConfig.cs index d7df8cf13..e5d924f86 100644 --- a/Source/SM64 Diagnostic/Structs/Configurations/HudConfig.cs +++ b/Source/SM64 Diagnostic/Structs/Configurations/HudConfig.cs @@ -12,8 +12,11 @@ public struct HudConfig public uint LiveCountAddress; public uint CoinCountAddress; public uint StarCountAddress; + public uint DisplayLiveCountAddress; + public uint DisplayCoinCountAddress; + public uint DisplayStarCountAddress; public short FullHp; - public short StandardLives; + public sbyte StandardLives; public short StandardCoins; public short StandardStars; } diff --git a/Source/SM64 Diagnostic/Utilities/MarioActions.cs b/Source/SM64 Diagnostic/Utilities/MarioActions.cs index 8d078262d..579f62bb8 100644 --- a/Source/SM64 Diagnostic/Utilities/MarioActions.cs +++ b/Source/SM64 Diagnostic/Utilities/MarioActions.cs @@ -130,6 +130,9 @@ public static bool StandardHud(ProcessStream stream) success &= stream.WriteRam(BitConverter.GetBytes(Config.Hud.StandardCoins), Config.Hud.CoinCountAddress); success &= stream.WriteRam(BitConverter.GetBytes(Config.Hud.StandardLives), Config.Hud.LiveCountAddress); success &= stream.WriteRam(BitConverter.GetBytes(Config.Hud.StandardStars), Config.Hud.StarCountAddress); + success &= stream.WriteRam(BitConverter.GetBytes(Config.Hud.StandardCoins), Config.Hud.DisplayCoinCountAddress); + success &= stream.WriteRam(BitConverter.GetBytes((short)Config.Hud.StandardLives), Config.Hud.DisplayLiveCountAddress); + success &= stream.WriteRam(BitConverter.GetBytes(Config.Hud.StandardStars), Config.Hud.DisplayStarCountAddress); return success; } diff --git a/Source/SM64 Diagnostic/Utilities/XmlConfigParser.cs b/Source/SM64 Diagnostic/Utilities/XmlConfigParser.cs index d51c7003f..dd0c3ddb1 100644 --- a/Source/SM64 Diagnostic/Utilities/XmlConfigParser.cs +++ b/Source/SM64 Diagnostic/Utilities/XmlConfigParser.cs @@ -271,11 +271,20 @@ public static void OpenConfig(string path) case "StarCountAddress": Config.Hud.StarCountAddress = ParsingUtilities.ParseHex(subElement.Value); break; + case "DisplayLiveCountAddress": + Config.Hud.DisplayLiveCountAddress = ParsingUtilities.ParseHex(subElement.Value); + break; + case "DisplayCoinCountAddress": + Config.Hud.DisplayCoinCountAddress = ParsingUtilities.ParseHex(subElement.Value); + break; + case "DisplayStarCountAddress": + Config.Hud.DisplayStarCountAddress = ParsingUtilities.ParseHex(subElement.Value); + break; case "FullHp": Config.Hud.FullHp = short.Parse(subElement.Value); break; case "StandardLives": - Config.Hud.StandardLives = short.Parse(subElement.Value); + Config.Hud.StandardLives = sbyte.Parse(subElement.Value); break; case "StandardCoins": Config.Hud.StandardCoins = short.Parse(subElement.Value); From 062513772a72d2573f30453c7482fe6379075c36 Mon Sep 17 00:00:00 2001 From: danebouchie Date: Thu, 1 Dec 2016 00:21:16 -0500 Subject: [PATCH 18/24] Added object watch variable type --- Source/SM64 Diagnostic/Config/MarioData.xml | 8 +-- Source/SM64 Diagnostic/Config/ObjectData.xml | 2 +- Source/SM64 Diagnostic/Controls/ObjectSlot.cs | 2 +- .../Controls/WatchVariableControl.cs | 30 ++++++++ .../Extensions/WatchVariableExtensions.cs | 21 ++++++ .../SM64 Diagnostic/Managers/CameraManager.cs | 2 +- .../SM64 Diagnostic/Managers/DataManager.cs | 2 +- .../Managers/DisassemblyManager.cs | 2 +- .../SM64 Diagnostic/Managers/HackManager.cs | 2 +- Source/SM64 Diagnostic/Managers/HudManager.cs | 2 +- .../Managers/ManagerContext.cs | 27 +++++++ Source/SM64 Diagnostic/Managers/MapManager.cs | 3 +- .../SM64 Diagnostic/Managers/MarioManager.cs | 2 +- .../SM64 Diagnostic/Managers/MiscManager.cs | 2 +- .../SM64 Diagnostic/Managers/ObjectManager.cs | 2 +- .../Managers/ObjectSlotsManager.cs | 72 ++++++++++++------- .../Managers/OptionsManager.cs | 2 +- .../SM64 Diagnostic/Managers/ScriptManager.cs | 2 +- .../Managers/TriangleManager.cs | 4 +- Source/SM64 Diagnostic/SM64 Diagnostic.csproj | 1 + .../SM64 Diagnostic/Schemas/ReusableTypes.xsd | 1 + Source/SM64 Diagnostic/StroopMainForm.cs | 30 ++++---- .../SM64 Diagnostic/Structs/WatchVariable.cs | 1 + .../Utilities/XmlConfigParser.cs | 2 + 24 files changed, 168 insertions(+), 56 deletions(-) create mode 100644 Source/SM64 Diagnostic/Managers/ManagerContext.cs diff --git a/Source/SM64 Diagnostic/Config/MarioData.xml b/Source/SM64 Diagnostic/Config/MarioData.xml index ca2e7b408..d4c743671 100644 --- a/Source/SM64 Diagnostic/Config/MarioData.xml +++ b/Source/SM64 Diagnostic/Config/MarioData.xml @@ -18,10 +18,10 @@ Roll Yaw Velocity Flying Pull Back - Interaction Object - Using Object - Stood On Object - Held Object + Interaction Object + Using Object + Stood On Object + Held Object HOLP X HOLP Y HOLP Z diff --git a/Source/SM64 Diagnostic/Config/ObjectData.xml b/Source/SM64 Diagnostic/Config/ObjectData.xml index d04dd9a2b..d1c0003b1 100644 --- a/Source/SM64 Diagnostic/Config/ObjectData.xml +++ b/Source/SM64 Diagnostic/Config/ObjectData.xml @@ -22,7 +22,7 @@ Angle to Mario Drawing Dist RNG Calls/Frame - Parent Object + Parent Object Behavior Script Graphic/Model Visible diff --git a/Source/SM64 Diagnostic/Controls/ObjectSlot.cs b/Source/SM64 Diagnostic/Controls/ObjectSlot.cs index e04200b42..6ae61f25f 100644 --- a/Source/SM64 Diagnostic/Controls/ObjectSlot.cs +++ b/Source/SM64 Diagnostic/Controls/ObjectSlot.cs @@ -5,7 +5,7 @@ using System.Threading.Tasks; using System.Windows.Forms; using System.Drawing; -using SM64_Diagnostic.ManagerClasses; +using SM64_Diagnostic.Managers; using SM64_Diagnostic.Utilities; using SM64_Diagnostic.Structs; using SM64_Diagnostic.Controls; diff --git a/Source/SM64 Diagnostic/Controls/WatchVariableControl.cs b/Source/SM64 Diagnostic/Controls/WatchVariableControl.cs index 48272784e..415a4612a 100644 --- a/Source/SM64 Diagnostic/Controls/WatchVariableControl.cs +++ b/Source/SM64 Diagnostic/Controls/WatchVariableControl.cs @@ -9,6 +9,7 @@ using SM64_Diagnostic.Structs; using SM64_Diagnostic.Extensions; using System.Reflection; +using SM64_Diagnostic.Managers; namespace SM64_Diagnostic.Controls { @@ -99,6 +100,20 @@ public static ToolStripMenuItem[] AngleDropDownMenu } } + private static List _objectDropDownMenu; + public static List ObjectDropDownMenu + { + get + { + if (_objectDropDownMenu == null) + { + _objectDropDownMenu = new List(); + _objectDropDownMenu.Add(new ToolStripMenuItem("Select Object")); + } + return _objectDropDownMenu; + } + } + static ToolTip _toolTip; public static ToolTip AddressToolTip { @@ -366,6 +381,9 @@ private void _textBoxValue_MouseEnter(object sender, EventArgs e) { (Menu.Items["HexView"] as ToolStripMenuItem).Checked = _watchVar.UseHex; (Menu.Items["HexView"] as ToolStripMenuItem).CheckState = lockedStatus; + ObjectDropDownMenu.ForEach(d => Menu.Items.Remove(d)); + if (_watchVar.IsObject) + ObjectDropDownMenu.ForEach(d => Menu.Items.Add(d)); } } @@ -507,6 +525,18 @@ private void OnMenuStripClick(object sender, ToolStripItemClickedEventArgs e) OtherOffsets.ForEach(o => LockUpdate(o)); } break; + case "Select Object": + if (_watchVar.GetByteCount() != 4) + return; + + var slotManager = ManagerContext.Current.ObjectSlotManager; + slotManager.SelectedSlotsAddresses.Clear(); + foreach (var otherOffset in OtherOffsets) + { + var objAddress = BitConverter.ToUInt32(_watchVar.GetByteData(_stream, otherOffset), 0); + slotManager.SelectedSlotsAddresses.Add(objAddress); + } + break; } } diff --git a/Source/SM64 Diagnostic/Extensions/WatchVariableExtensions.cs b/Source/SM64 Diagnostic/Extensions/WatchVariableExtensions.cs index c9ee4dc8f..09f929efb 100644 --- a/Source/SM64 Diagnostic/Extensions/WatchVariableExtensions.cs +++ b/Source/SM64 Diagnostic/Extensions/WatchVariableExtensions.cs @@ -7,6 +7,7 @@ using System.Threading.Tasks; using SM64_Diagnostic.ManagerClasses; using SM64_Diagnostic.Controls; +using SM64_Diagnostic.Managers; namespace SM64_Diagnostic.Extensions { @@ -57,6 +58,18 @@ public static string GetStringValue(this WatchVariable watchVar, ProcessStream s if (dataBytes == null) return "(none)"; + // Parse object type + if (watchVar.IsObject) + { + var objAddress = BitConverter.ToUInt32(dataBytes, 0); + if (objAddress == 0) + return "(none)"; + + var slotName = ManagerContext.Current.ObjectSlotManager.GetSlotNameFromAddress(objAddress); + if (slotName != null) + return "Slot: " + slotName; + } + // Parse floating point if (!watchVar.UseHex && (watchVar.Type == typeof(float) || watchVar.Type == typeof(double))) { @@ -284,6 +297,14 @@ public static byte[] GetBytesFromString(this WatchVariable watchVar, ProcessStre UInt64 oldValue = BitConverter.ToUInt64(dataBytes, 0); UInt64 newValue; + + // Handle object values + uint? objectAddress; + if (watchVar.IsObject && (objectAddress = ManagerContext.Current.ObjectSlotManager.GetSlotAddressFromName(value)).HasValue) + { + newValue = objectAddress.Value; + } + else // Handle hex variable if (ParsingUtilities.IsHex(value)) { diff --git a/Source/SM64 Diagnostic/Managers/CameraManager.cs b/Source/SM64 Diagnostic/Managers/CameraManager.cs index f054a018f..571b7d2c1 100644 --- a/Source/SM64 Diagnostic/Managers/CameraManager.cs +++ b/Source/SM64 Diagnostic/Managers/CameraManager.cs @@ -8,7 +8,7 @@ using SM64_Diagnostic.Utilities; using SM64_Diagnostic.Controls; -namespace SM64_Diagnostic.ManagerClasses +namespace SM64_Diagnostic.Managers { public class CameraManager : DataManager { diff --git a/Source/SM64 Diagnostic/Managers/DataManager.cs b/Source/SM64 Diagnostic/Managers/DataManager.cs index 1cc9cb721..531b53bb6 100644 --- a/Source/SM64 Diagnostic/Managers/DataManager.cs +++ b/Source/SM64 Diagnostic/Managers/DataManager.cs @@ -8,7 +8,7 @@ using SM64_Diagnostic.Utilities; using SM64_Diagnostic.Controls; -namespace SM64_Diagnostic.ManagerClasses +namespace SM64_Diagnostic.Managers { public class DataManager { diff --git a/Source/SM64 Diagnostic/Managers/DisassemblyManager.cs b/Source/SM64 Diagnostic/Managers/DisassemblyManager.cs index 2d20c9996..60be13f30 100644 --- a/Source/SM64 Diagnostic/Managers/DisassemblyManager.cs +++ b/Source/SM64 Diagnostic/Managers/DisassemblyManager.cs @@ -8,7 +8,7 @@ using System.Drawing; using SM64_Diagnostic.Structs; -namespace SM64_Diagnostic.ManagerClasses +namespace SM64_Diagnostic.Managers { public class DisassemblyManager { diff --git a/Source/SM64 Diagnostic/Managers/HackManager.cs b/Source/SM64 Diagnostic/Managers/HackManager.cs index 0d2b82686..e17e3b39f 100644 --- a/Source/SM64 Diagnostic/Managers/HackManager.cs +++ b/Source/SM64 Diagnostic/Managers/HackManager.cs @@ -7,7 +7,7 @@ using System.Windows.Forms; using SM64_Diagnostic.Utilities; -namespace SM64_Diagnostic.ManagerClasses +namespace SM64_Diagnostic.Managers { public class HackManager { diff --git a/Source/SM64 Diagnostic/Managers/HudManager.cs b/Source/SM64 Diagnostic/Managers/HudManager.cs index c458a13c8..c62d465ae 100644 --- a/Source/SM64 Diagnostic/Managers/HudManager.cs +++ b/Source/SM64 Diagnostic/Managers/HudManager.cs @@ -8,7 +8,7 @@ using SM64_Diagnostic.Utilities; using SM64_Diagnostic.Controls; -namespace SM64_Diagnostic.ManagerClasses +namespace SM64_Diagnostic.Managers { public class HudManager : DataManager { diff --git a/Source/SM64 Diagnostic/Managers/ManagerContext.cs b/Source/SM64 Diagnostic/Managers/ManagerContext.cs new file mode 100644 index 000000000..c7f155869 --- /dev/null +++ b/Source/SM64 Diagnostic/Managers/ManagerContext.cs @@ -0,0 +1,27 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SM64_Diagnostic.Managers +{ + public class ManagerContext + { + public static ManagerContext Current; + + public CameraManager CameraManager; + public DebugManager DebugManager; + public DisassemblyManager DisassemblyManager; + public HackManager HackManager; + public HudManager HudManager; + public MapManager MapManager; + public MarioManager MarioManager; + public MiscManager MiscManager; + public ObjectManager ObjectManager; + public ObjectSlotsManager ObjectSlotManager; + public OptionsManager OptionsManager; + public ScriptManager ScriptManager; + public TriangleManager TriangleManager; + } +} diff --git a/Source/SM64 Diagnostic/Managers/MapManager.cs b/Source/SM64 Diagnostic/Managers/MapManager.cs index f443d7181..7b2f6ac77 100644 --- a/Source/SM64 Diagnostic/Managers/MapManager.cs +++ b/Source/SM64 Diagnostic/Managers/MapManager.cs @@ -10,8 +10,9 @@ using OpenTK; using OpenTK.Graphics; using OpenTK.Graphics.OpenGL; +using SM64_Diagnostic.ManagerClasses; -namespace SM64_Diagnostic.ManagerClasses +namespace SM64_Diagnostic.Managers { public class MapManager { diff --git a/Source/SM64 Diagnostic/Managers/MarioManager.cs b/Source/SM64 Diagnostic/Managers/MarioManager.cs index a68d6515e..cf61754ed 100644 --- a/Source/SM64 Diagnostic/Managers/MarioManager.cs +++ b/Source/SM64 Diagnostic/Managers/MarioManager.cs @@ -9,7 +9,7 @@ using SM64_Diagnostic.Controls; using SM64_Diagnostic.Extensions; -namespace SM64_Diagnostic.ManagerClasses +namespace SM64_Diagnostic.Managers { public class MarioManager : DataManager { diff --git a/Source/SM64 Diagnostic/Managers/MiscManager.cs b/Source/SM64 Diagnostic/Managers/MiscManager.cs index f8c123197..11dbb7493 100644 --- a/Source/SM64 Diagnostic/Managers/MiscManager.cs +++ b/Source/SM64 Diagnostic/Managers/MiscManager.cs @@ -9,7 +9,7 @@ using SM64_Diagnostic.Extensions; using SM64_Diagnostic.Controls; -namespace SM64_Diagnostic.ManagerClasses +namespace SM64_Diagnostic.Managers { public class MiscManager : DataManager { diff --git a/Source/SM64 Diagnostic/Managers/ObjectManager.cs b/Source/SM64 Diagnostic/Managers/ObjectManager.cs index 4eee08ba9..13d02fe6b 100644 --- a/Source/SM64 Diagnostic/Managers/ObjectManager.cs +++ b/Source/SM64 Diagnostic/Managers/ObjectManager.cs @@ -10,7 +10,7 @@ using SM64_Diagnostic.Controls; using SM64_Diagnostic.Extensions; -namespace SM64_Diagnostic.ManagerClasses +namespace SM64_Diagnostic.Managers { public class ObjectManager : DataManager { diff --git a/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs b/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs index 1c1eb2e72..46d8f783e 100644 --- a/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs +++ b/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs @@ -10,7 +10,7 @@ using SM64_Diagnostic.Extensions; using OpenTK.Input; -namespace SM64_Diagnostic.ManagerClasses +namespace SM64_Diagnostic.Managers { public class ObjectSlotsManager { @@ -29,7 +29,7 @@ public class ObjectSlotsManager Dictionary _mapObjects = new Dictionary(); Dictionary _memoryAddressSlotIndex; Dictionary _lastSlotLabel = new Dictionary(); - List _selectedSlotsAddresses = new List(); + public List SelectedSlotsAddresses = new List(); List _toggleMapGroups = new List(); List _toggleMapBehaviors = new List(); @@ -41,8 +41,7 @@ public class ObjectSlotsManager bool _selectedUpdated = false; Image _multiImage = null; - bool _firstSelect = true; - + bool _firstSlotSelect = true; List _prevSelectedBehaviorCriteria = new List(); public enum SortMethodType {ProcessingOrder, MemoryOrder, DistanceToMario}; @@ -106,37 +105,36 @@ private void OnClick(object sender, EventArgs e) var keyboardState = Keyboard.GetState(0); ManagerGui.TabControl.SelectedTab = ManagerGui.TabControl.TabPages["tabPageObjects"]; if (keyboardState.IsKeyDown(Key.ShiftLeft) || keyboardState.IsKeyDown(Key.ShiftRight) - && _selectedSlotsAddresses.Count > 0) + && SelectedSlotsAddresses.Count > 0) { - int minSelect = _selectedSlotsAddresses.Min(s => ObjectSlots.First(o => o.Address == s).Index); - int maxSelect = _selectedSlotsAddresses.Max(s => ObjectSlots.First(o => o.Address == s).Index); + int minSelect = SelectedSlotsAddresses.Min(s => ObjectSlots.First(o => o.Address == s).Index); + int maxSelect = SelectedSlotsAddresses.Max(s => ObjectSlots.First(o => o.Address == s).Index); int startRange = Math.Min(minSelect, selectedSlot.Index); int endRange = Math.Max(maxSelect, selectedSlot.Index); var selectedObjects = ObjectSlots.Where(o => o.Index >= startRange && o.Index <= endRange - && !_selectedSlotsAddresses.Contains(o.Address)); - _selectedSlotsAddresses.AddRange(selectedObjects.Select(o => o.Address)); + && !SelectedSlotsAddresses.Contains(o.Address)); + SelectedSlotsAddresses.AddRange(selectedObjects.Select(o => o.Address)); } else { if (!keyboardState.IsKeyDown(Key.ControlLeft) && !keyboardState.IsKeyDown(Key.ControlRight)) { - _selectedSlotsAddresses.Clear(); + SelectedSlotsAddresses.Clear(); } - if (_selectedSlotsAddresses.Contains(selectedSlot.Address)) + if (SelectedSlotsAddresses.Contains(selectedSlot.Address)) { - if (_selectedSlotsAddresses.Count > 1) + if (SelectedSlotsAddresses.Count > 1) { - _selectedSlotsAddresses.Remove(selectedSlot.Address); + SelectedSlotsAddresses.Remove(selectedSlot.Address); } } else { - _selectedSlotsAddresses.Add(selectedSlot.Address); + SelectedSlotsAddresses.Add(selectedSlot.Address); } - } - _objManager.CurrentAddresses = _selectedSlotsAddresses; + _objManager.CurrentAddresses = SelectedSlotsAddresses; break; case "Map": @@ -160,6 +158,7 @@ private void OnClick(object sender, EventArgs e) UpdateSelectedObjectSlots(); break; + case MapToggleModeType.ProcessGroup: var group = selectedSlot.ProcessGroup; if (_toggleMapGroups.Contains(group)) @@ -194,6 +193,31 @@ public void UpdateSelectedObjectSlots() } } + public string GetSlotNameFromAddress(uint address) + { + var slot = ObjectSlots.FirstOrDefault(s => s.Address == address); + if (slot == null) + return null; + + return slot.Text; + } + + public uint? GetSlotAddressFromName(string name) + { + name = name.ToLower(); + + if (!name.StartsWith("slot: ")) + return null; + + name = name.Remove(0, "slot: ".Length); + + var slot = ObjectSlots.FirstOrDefault(s => s.Text.ToLower() == name); + if (slot == null) + return null; + + return slot.Address; + } + private List GetProcessedObjects(ObjectGroupsConfig groupConfig, ObjectSlotsConfig slotConfig) { var newObjectSlotData = new ObjectSlotData[slotConfig.MaxSlots]; @@ -347,7 +371,7 @@ public void Update() for (int i = 0; i < slotConfig.MaxSlots; i++) { var behaviorCritera = UpdateSlot(newObjectSlotData[i], i); - if (!_selectedSlotsAddresses.Contains(newObjectSlotData[i].Address)) + if (!SelectedSlotsAddresses.Contains(newObjectSlotData[i].Address)) continue; selectedBehaviorCriterias.Add(behaviorCritera); @@ -364,7 +388,7 @@ public void Update() } _miscManager.ActiveObjectCount = _activeObjCnt; - if (_selectedSlotsAddresses.Count > 1) + if (SelectedSlotsAddresses.Count > 1) { if (_selectedUpdated || !selectedBehaviorCriterias.SequenceEqual(_prevSelectedBehaviorCriteria)) { @@ -410,10 +434,10 @@ public void Update() _prevSelectedBehaviorCriteria = selectedBehaviorCriterias; } } - else if (_selectedSlotsAddresses.Count == 0) + else if (SelectedSlotsAddresses.Count == 0) { _objManager.Name = "No Object Selected"; - _firstSelect = true; + _firstSlotSelect = true; } } @@ -427,7 +451,7 @@ private BehaviorCriteria UpdateSlot(ObjectSlotData objectData, int index) objSlot.Address = currentAddress; // Update Overlays - objSlot.DrawSelectedOverlay = _selectedSlotsAddresses.Contains(currentAddress); + objSlot.DrawSelectedOverlay = SelectedSlotsAddresses.Contains(currentAddress); objSlot.DrawStandingOnOverlay = Config.ShowOverlays && currentAddress == _standingOnObject; objSlot.DrawInteractingOverlay = Config.ShowOverlays && currentAddress == _interactingObject; objSlot.DrawHoldingOverlay = Config.ShowOverlays && currentAddress == _holdingObject; @@ -496,18 +520,18 @@ private BehaviorCriteria UpdateSlot(ObjectSlotData objectData, int index) ObjectSlots[index].Text = ManagerGui.LockLabelsCheckbox.Checked ? _lastSlotLabel[currentAddress] : labelText; // Update object manager image - if (_selectedSlotsAddresses.Count <= 1 && _selectedSlotsAddresses.Contains(currentAddress)) + if (SelectedSlotsAddresses.Count <= 1 && SelectedSlotsAddresses.Contains(currentAddress)) { var objAssoc = ObjectAssoc.FindObjectAssociation(behaviorCriteria); var newBehavior = objAssoc != null ? objAssoc.BehaviorCriteria : (BehaviorCriteria?)null; - if (_lastSelectedBehavior != newBehavior || _firstSelect) + if (_lastSelectedBehavior != newBehavior || _firstSlotSelect) { _objManager.Behavior = String.Format("0x{0}", ((objectData.Behavior + ObjectAssoc.RamOffset) & 0x00FFFFFF).ToString("X4")); _objManager.Name = ObjectAssoc.GetObjectName(behaviorCriteria); _objManager.SetBehaviorWatchVariables(ObjectAssoc.GetWatchVariables(behaviorCriteria), newColor.Lighten(0.8)); _lastSelectedBehavior = newBehavior; - _firstSelect = false; + _firstSlotSelect = false; } _objManager.Image = ObjectSlots[index].ObjectImage; _objManager.BackColor = newColor; diff --git a/Source/SM64 Diagnostic/Managers/OptionsManager.cs b/Source/SM64 Diagnostic/Managers/OptionsManager.cs index fe04a7160..1c1a8e25f 100644 --- a/Source/SM64 Diagnostic/Managers/OptionsManager.cs +++ b/Source/SM64 Diagnostic/Managers/OptionsManager.cs @@ -5,7 +5,7 @@ using System.Threading.Tasks; using SM64_Diagnostic.Structs; -namespace SM64_Diagnostic.ManagerClasses +namespace SM64_Diagnostic.Managers { public class OptionsManager { diff --git a/Source/SM64 Diagnostic/Managers/ScriptManager.cs b/Source/SM64 Diagnostic/Managers/ScriptManager.cs index 38bc7f4a6..f00e98da3 100644 --- a/Source/SM64 Diagnostic/Managers/ScriptManager.cs +++ b/Source/SM64 Diagnostic/Managers/ScriptManager.cs @@ -7,7 +7,7 @@ using SM64_Diagnostic.Structs; using System.Windows.Forms; -namespace SM64_Diagnostic.ManagerClasses +namespace SM64_Diagnostic.Managers { public class ScriptManager diff --git a/Source/SM64 Diagnostic/Managers/TriangleManager.cs b/Source/SM64 Diagnostic/Managers/TriangleManager.cs index 74c7442c1..dbf035fdc 100644 --- a/Source/SM64 Diagnostic/Managers/TriangleManager.cs +++ b/Source/SM64 Diagnostic/Managers/TriangleManager.cs @@ -9,9 +9,9 @@ using SM64_Diagnostic.Controls; using SM64_Diagnostic.Extensions; -namespace SM64_Diagnostic.ManagerClasses +namespace SM64_Diagnostic.Managers { - class TriangleManager : DataManager + public class TriangleManager : DataManager { MaskedTextBox _addressBox; uint _triangleAddress = 0; diff --git a/Source/SM64 Diagnostic/SM64 Diagnostic.csproj b/Source/SM64 Diagnostic/SM64 Diagnostic.csproj index 0d1822316..3e17fbdb9 100644 --- a/Source/SM64 Diagnostic/SM64 Diagnostic.csproj +++ b/Source/SM64 Diagnostic/SM64 Diagnostic.csproj @@ -114,6 +114,7 @@ + diff --git a/Source/SM64 Diagnostic/Schemas/ReusableTypes.xsd b/Source/SM64 Diagnostic/Schemas/ReusableTypes.xsd index 8755fbe1b..367996c9b 100644 --- a/Source/SM64 Diagnostic/Schemas/ReusableTypes.xsd +++ b/Source/SM64 Diagnostic/Schemas/ReusableTypes.xsd @@ -65,6 +65,7 @@ + diff --git a/Source/SM64 Diagnostic/StroopMainForm.cs b/Source/SM64 Diagnostic/StroopMainForm.cs index 67f27260a..07f46cfe0 100644 --- a/Source/SM64 Diagnostic/StroopMainForm.cs +++ b/Source/SM64 Diagnostic/StroopMainForm.cs @@ -80,12 +80,16 @@ private void StroopMainForm_Load(object sender, EventArgs e) tabControlMain.TabPages.Remove(tabPageExpressions); #endif + // Create new manager context + var currentContext = new ManagerContext(); + ManagerContext.Current = currentContext; + _sm64Stream = new ProcessStream(); _sm64Stream.OnUpdate += OnUpdate; - _disManager = new DisassemblyManager(this, richTextBoxDissasembly, maskedTextBoxDisStart, _sm64Stream, buttonDisGo); - _scriptManager = new ScriptManager(_sm64Stream, _scriptParser, checkBoxUseRomHack); - _hackManager = new HackManager(_sm64Stream, _romHacks, checkedListBoxHacks); + currentContext.DisassemblyManager = _disManager = new DisassemblyManager(this, richTextBoxDissasembly, maskedTextBoxDisStart, _sm64Stream, buttonDisGo); + currentContext.ScriptManager = _scriptManager = new ScriptManager(_sm64Stream, _scriptParser, checkBoxUseRomHack); + currentContext.HackManager = _hackManager = new HackManager(_sm64Stream, _romHacks, checkedListBoxHacks); // Create map manager MapGui mapGui = new MapGui(); @@ -103,14 +107,14 @@ private void StroopMainForm_Load(object sender, EventArgs e) mapGui.MapShowHolp = checkBoxMapShowHolp; mapGui.MapShowCamera = checkBoxMapShowCamera; mapGui.MapShowFloorTriangle = checkBoxMapShowFloor; - _mapManager = new MapManager(_sm64Stream, _mapAssoc, _objectAssoc, mapGui); + currentContext.MapManager = _mapManager = new MapManager(_sm64Stream, _mapAssoc, _objectAssoc, mapGui); - _marioManager = new MarioManager(_sm64Stream, _marioData, panelMarioBorder, NoTearFlowLayoutPanelMario, _mapManager); - _hudManager = new HudManager(_sm64Stream, _hudData, tabPageHud); - _miscManager = new MiscManager(_sm64Stream, _miscData, NoTearFlowLayoutPanelMisc, groupBoxPuController); - _cameraManager = new CameraManager(_sm64Stream, _cameraData, NoTearFlowLayoutPanelCamera); - _triangleManager = new TriangleManager(_sm64Stream, tabPageTriangles, _triangleData); - _debugManager = new DebugManager(); + currentContext.MarioManager = _marioManager = new MarioManager(_sm64Stream, _marioData, panelMarioBorder, NoTearFlowLayoutPanelMario, _mapManager); + currentContext.HudManager = _hudManager = new HudManager(_sm64Stream, _hudData, tabPageHud); + currentContext.MiscManager = _miscManager = new MiscManager(_sm64Stream, _miscData, NoTearFlowLayoutPanelMisc, groupBoxPuController); + currentContext.CameraManager = _cameraManager = new CameraManager(_sm64Stream, _cameraData, NoTearFlowLayoutPanelCamera); + currentContext.TriangleManager = _triangleManager = new TriangleManager(_sm64Stream, tabPageTriangles, _triangleData); + currentContext.DebugManager = _debugManager = new DebugManager(); // Create object manager var objectGui = new ObjectDataGui() @@ -129,12 +133,12 @@ private void StroopMainForm_Load(object sender, EventArgs e) MoveToMarioButton = buttonObjRetrieve, UnloadButton = buttonObjUnload }; - _objectManager = new ObjectManager(_sm64Stream, _objectAssoc, _objectData, objectGui); + currentContext.ObjectManager = _objectManager = new ObjectManager(_sm64Stream, _objectAssoc, _objectData, objectGui); // Create options manager var optionGui = new OptionsGui(); optionGui.CheckBoxStartFromOne = checkBoxStartSlotIndexOne; - _optionsManager = new OptionsManager(optionGui); + currentContext.OptionsManager = _optionsManager = new OptionsManager(optionGui); // Create Object Slots _slotManagerGui.TabControl = tabControlMain; @@ -143,7 +147,7 @@ private void StroopMainForm_Load(object sender, EventArgs e) _slotManagerGui.FlowLayoutContainer = NoTearFlowLayoutPanelObjects; _slotManagerGui.SortMethodComboBox = comboBoxSortMethod; _slotManagerGui.LabelMethodComboBox = comboBoxLabelMethod; - _objectSlotManager = new ObjectSlotsManager(_sm64Stream, _objectAssoc, _objectManager, _slotManagerGui, _mapManager, _miscManager); + currentContext.ObjectSlotManager = _objectSlotManager = new ObjectSlotsManager(_sm64Stream, _objectAssoc, _objectManager, _slotManagerGui, _mapManager, _miscManager); SetupViews(); diff --git a/Source/SM64 Diagnostic/Structs/WatchVariable.cs b/Source/SM64 Diagnostic/Structs/WatchVariable.cs index 14bb102c9..e4ba356f7 100644 --- a/Source/SM64 Diagnostic/Structs/WatchVariable.cs +++ b/Source/SM64 Diagnostic/Structs/WatchVariable.cs @@ -17,6 +17,7 @@ public struct WatchVariable public Boolean AbsoluteAddressing; public UInt64? Mask; public bool IsBool; + public bool IsObject; public bool UseHex; public bool OtherOffset; public bool InvertBool; diff --git a/Source/SM64 Diagnostic/Utilities/XmlConfigParser.cs b/Source/SM64 Diagnostic/Utilities/XmlConfigParser.cs index dd0c3ddb1..65387b811 100644 --- a/Source/SM64 Diagnostic/Utilities/XmlConfigParser.cs +++ b/Source/SM64 Diagnostic/Utilities/XmlConfigParser.cs @@ -874,6 +874,8 @@ public static WatchVariable GetWatchVariableFromElement(XElement element) (UInt64?) ParsingUtilities.ParseExtHex(element.Attribute(XName.Get("mask")).Value) : null; watchVar.IsBool = element.Attribute(XName.Get("isBool")) != null ? bool.Parse(element.Attribute(XName.Get("isBool")).Value) : false; + watchVar.IsObject = element.Attribute(XName.Get("isObject")) != null ? + bool.Parse(element.Attribute(XName.Get("isObject")).Value) : false; watchVar.Type = WatchVariableExtensions.GetStringType(element.Attribute(XName.Get("type")).Value); watchVar.Address = ParsingUtilities.ParseHex(element.Attribute(XName.Get("address")).Value); watchVar.InvertBool = element.Attribute(XName.Get("invertBool")) != null ? From 9dbef217b62d9ddc5dd1d62165b80a127edacaa4 Mon Sep 17 00:00:00 2001 From: danebouchie Date: Thu, 1 Dec 2016 00:26:37 -0500 Subject: [PATCH 19/24] Rounded special variables to 3 decimal places --- Source/SM64 Diagnostic/Managers/MarioManager.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/SM64 Diagnostic/Managers/MarioManager.cs b/Source/SM64 Diagnostic/Managers/MarioManager.cs index cf61754ed..04762756a 100644 --- a/Source/SM64 Diagnostic/Managers/MarioManager.cs +++ b/Source/SM64 Diagnostic/Managers/MarioManager.cs @@ -53,7 +53,7 @@ public void ProcessSpecialVars() { float hSpeed = _stream.GetSingle(Config.Mario.StructAddress + Config.Mario.HSpeedOffset); float normY = _stream.GetSingle(floorTriangle + Config.TriangleOffsets.NormY); - (specialVar as DataContainer).Text = (hSpeed * normY).ToString(); + (specialVar as DataContainer).Text = Math.Round(hSpeed * normY, 3).ToString(); } else { @@ -62,7 +62,7 @@ public void ProcessSpecialVars() break; case "SlidingSpeed": - (specialVar as DataContainer).Text = (Math.Sqrt(slidingSpeedX * slidingSpeedX + slidingSpeedZ * slidingSpeedZ)).ToString(); + (specialVar as DataContainer).Text = Math.Round(Math.Sqrt(slidingSpeedX * slidingSpeedX + slidingSpeedZ * slidingSpeedZ), 3).ToString(); break; case "SlidingAngle": From da69f083bad38911a97c53b5727c269b472e96a4 Mon Sep 17 00:00:00 2001 From: danebouchie Date: Thu, 1 Dec 2016 00:29:12 -0500 Subject: [PATCH 20/24] Added icon to loading screen --- .../SM64 Diagnostic/LoadingForm.Designer.cs | 2 + Source/SM64 Diagnostic/LoadingForm.resx | 1667 +++++++++++++++++ 2 files changed, 1669 insertions(+) diff --git a/Source/SM64 Diagnostic/LoadingForm.Designer.cs b/Source/SM64 Diagnostic/LoadingForm.Designer.cs index 5f5393d92..6f9805560 100644 --- a/Source/SM64 Diagnostic/LoadingForm.Designer.cs +++ b/Source/SM64 Diagnostic/LoadingForm.Designer.cs @@ -28,6 +28,7 @@ protected override void Dispose(bool disposing) /// private void InitializeComponent() { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LoadingForm)); this.progressBarLoading = new System.Windows.Forms.ProgressBar(); this.labelLoading = new System.Windows.Forms.Label(); this.labelLoadingStatus = new System.Windows.Forms.Label(); @@ -93,6 +94,7 @@ private void InitializeComponent() this.ClientSize = new System.Drawing.Size(671, 256); this.Controls.Add(this.tableLayoutPanel1); this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.Name = "LoadingForm"; this.Text = "LoadingForm"; this.Load += new System.EventHandler(this.LoadingForm_Load); diff --git a/Source/SM64 Diagnostic/LoadingForm.resx b/Source/SM64 Diagnostic/LoadingForm.resx index 1af7de150..2265dfb1f 100644 --- a/Source/SM64 Diagnostic/LoadingForm.resx +++ b/Source/SM64 Diagnostic/LoadingForm.resx @@ -117,4 +117,1671 @@ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + AAABAAUAEBAAAAAAIABoBAAAVgAAACAgAAAAACAAqBAAAL4EAAAwMAAAAAAgAKglAABmFQAAQEAAAAAA + IAAoQgAADjsAAICAAAAAACAAKAgBADZ9AAAoAAAAEAAAACAAAAABACAAAAAAAEAEAAAAAAAAAAAAAAAA + AAAAAAAA////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAFQAAAEsAAABtAAAAfQAAAH0AAABtAAAASwAA + ABP///8B////Af///wH///8B////Af///wEAAAAlAAAAswAAAPEAAAC7AAAAlQAAAIMAAACDAAAAlQAA + ALsAAADxAAAAswAAACX///8B////Af///wH///8BAAAA3QAAAHcAAAAhAAAATwAAAHEAAABBAAAAawAA + ADUAAABPAAAAIQAAAHcAAADd////Af///wH///8B////AQAAAN0AAADFAAAA9QAAAMEAAACZAAAARQAA + AP8AAABRAAAAwQAAAPUAAADFAAAA2////wH///8B////Af///wEAAADhAAAAfQAAACMAAABN////Af// + /wEAAAD/AAAANQAAAE8AAAAjAAAAfQAAAOH///8B////Af///wH///8BAAAA3wAAAMcAAAD1AAAAwQAA + AHUAAAB1AAAA/wAAAFEAAADBAAAA9QAAAMcAAADf////Af///wH///8B////AQAAAOEAAAB9AAAAIwAA + AE0AAAB/AAAAfwAAAP8AAAA1AAAATwAAACMAAAB9AAAA4f///wH///8B////Af///wEAAADfAAAAxwAA + APUAAAC9AAAAjwAAAIsAAAD/AAAAZwAAAMEAAAD1AAAAxwAAAN////8B////Af///wH///8BAAAA4QAA + AH0AAAANAAAAiwAAAPkAAAD/AAAA/wAAAOkAAACLAAAADQAAAH0AAADh////Af///wH///8B////AQAA + AOEAAAB9AAAADQAAAIsAAADfAAAA/QAAAP0AAADfAAAAiwAAAA0AAAB9AAAA4f///wH///8B////Af// + /wEAAAApAAAAuQAAAPUAAADBAAAAmQAAAIkAAACJAAAAmQAAAMEAAAD1AAAAuQAAACn///8B////Af// + /wH///8B////Af///wEAAAAXAAAATwAAAHEAAAB/AAAAfwAAAHEAAABPAAAAF////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA + //8AAP//AAD//wAA//8oAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAAAA////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAACQAAAEUAAAB9AAAAqQAAAM0AAADlAAAA8wAAAP8AAAD/AAAA9QAAAOcAAADNAAAAqwAA + AH0AAABFAAAACf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAALwAAAKEAAADzAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADzAAAAoQAAADH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAAwAAAIsAAAD9AAAA/wAAAP8AAADRAAAAkQAAAF8AAAA5AAAAGwAAAAv///8B////AQAA + AAkAAAAbAAAAOQAAAF8AAACRAAAA0QAAAP8AAAD/AAAA/QAAAIsAAAAD////Af///wH///8B////Af// + /wH///8B////Af///wEAAACFAAAA/wAAAPsAAACXAAAAJf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAJwAAAJMAAAD7AAAA/wAAAIX///8B////Af// + /wH///8B////Af///wH///8B////AQAAAO8AAAD/AAAASf///wEAAAANAAAATQAAAIUAAACxAAAA1QAA + AOsAAAD/////AQAAANUAAADV////AQAAANMAAACxAAAAhQAAAE0AAAAN////AQAAAEkAAAD/AAAA7/// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA7wAAAP8AAABvAAAAqwAAAPcAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////8BAAAA/wAAAP////8BAAAA/wAAAP8AAAD/AAAA/wAAAPcAAACrAAAAbwAA + AP8AAADv////Af///wH///8B////Af///wH///8B////Af///wEAAACFAAAA/wAAAP8AAAD/AAAA/wAA + ANsAAACZAAAAaQAAAEEAAAAnAAAAE////wEAAAD/AAAA/////wEAAABDAAAAaQAAAJkAAADbAAAA/wAA + AP8AAAD/AAAA/wAAAIP///8B////Af///wH///8B////Af///wH///8B////AQAAAI8AAAD/AAAA/QAA + AJ8AAAAv////Af///wH///8B////Af///wH///8B////AQAAAP8AAAD/////Af///wH///8B////Af// + /wEAAAAxAAAAnwAAAP0AAAD/AAAAjf///wH///8B////Af///wH///8B////Af///wH///8BAAAA9QAA + AP8AAABT////AQAAAA0AAABNAAAAhQAAALH///8B////Af///wH///8BAAAA/wAAAP////8BAAAA0wAA + ALEAAACFAAAATQAAAA3///8BAAAAUwAAAP8AAAD1////Af///wH///8B////Af///wH///8B////Af// + /wEAAAD1AAAA/wAAAHcAAACpAAAA9wAAAP8AAAD/AAAA/////wEAAADVAAAA1f///wEAAAD/AAAA//// + /wEAAAD/AAAA/wAAAP8AAAD/AAAA9wAAAKsAAAB3AAAA/wAAAPX///8B////Af///wH///8B////Af// + /wH///8B////AQAAAIsAAAD/AAAA/wAAAP8AAAD/AAAA2wAAAJkAAABp////AQAAAP8AAAD/////AQAA + AP8AAAD/////AQAAAEMAAABpAAAAmQAAANsAAAD/AAAA/wAAAP8AAAD/AAAAi////wH///8B////Af// + /wH///8B////Af///wH///8BAAAAjQAAAP8AAAD9AAAAnwAAADH///8B////Af///wH///8BAAAA/wAA + AP////8BAAAA/wAAAP////8B////Af///wH///8B////AQAAADEAAACfAAAA/QAAAP8AAACN////Af// + /wH///8B////Af///wH///8B////Af///wEAAAD1AAAA/wAAAFP///8BAAAADQAAAE0AAACFAAAAsf// + /wEAAAD/AAAA/////wEAAAD/AAAA/////wEAAADTAAAAsQAAAIUAAABNAAAADf///wEAAABTAAAA/wAA + APX///8B////Af///wH///8B////Af///wH///8B////AQAAAPUAAAD/AAAAdwAAAKkAAAD3AAAA/wAA + AP8AAAD/AAAAAwAAAP8AAAD/////AQAAAP8AAAD/AAAADQAAAPsAAAD/AAAA/wAAAP8AAAD3AAAAqwAA + AHcAAAD/AAAA9f///wH///8B////Af///wH///8B////Af///wH///8BAAAAiwAAAP8AAAD/AAAA/wAA + AP8AAADbAAAAmQAAAFkAAAA7AAAA/wAAAP8AAAArAAAA/wAAAP8AAABjAAAAMwAAAGkAAACZAAAA2wAA + AP8AAAD/AAAA/wAAAP8AAACL////Af///wH///8B////Af///wH///8B////Af///wEAAACNAAAA/wAA + AP0AAACfAAAAMf///wEAAAAHAAAAXwAAAOUAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPsAAACtAAAAWwAA + AAf///8BAAAAMQAAAJ8AAAD9AAAA/wAAAI3///8B////Af///wH///8B////Af///wH///8B////AQAA + APUAAAD/AAAAU////wH///8B////AQAAAMkAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAyf///wH///8B////AQAAAFMAAAD/AAAA9f///wH///8B////Af///wH///8B////Af// + /wH///8BAAAA9QAAAP8AAABT////Af///wH///8BAAAAywAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADL////Af///wH///8BAAAAUwAAAP8AAAD1////Af///wH///8B////Af// + /wH///8B////Af///wEAAACPAAAA/wAAAP0AAACfAAAAL////wEAAAAHAAAAWwAAAKcAAADZAAAA9wAA + AP8AAAD/AAAA9wAAANkAAACnAAAAWwAAAAf///8BAAAALwAAAJ8AAAD9AAAA/wAAAI////8B////Af// + /wH///8B////Af///wH///8B////AQAAAAcAAACZAAAA/QAAAP8AAAD/AAAA2wAAAJkAAABpAAAAQQAA + ACcAAAATAAAAEQAAABEAAAATAAAAJwAAAEEAAABpAAAAmQAAANsAAAD/AAAA/wAAAP0AAACZAAAAB/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAA5AAAAqwAAAPcAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPcAAACrAAAAOf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAADQAA + AE0AAACFAAAAsQAAANUAAADrAAAA/wAAAP8AAAD/AAAA/wAAAOsAAADVAAAAsQAAAIUAAABNAAAADf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAKAAAADAAAABgAAAAAQAgAAAAAACAJQAAAAAAAAAAAAAAAAAAAAAAAP// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAALAAAAGQAAAC0AAABJAAAAXQAAAGkAAAB9AAAAfwAA + AH8AAAB/AAAAbQAAAF8AAABJAAAALQAAABkAAAAL////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAMAAAA1AAAAdQAAALEAAADVAAAA7wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPEAAADVAAAAsQAAAHUAAAAzAAAAA/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAtAAAAjQAAAOUAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA5QAAAIsAAAAv////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAHQAAAKMAAADzAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD5AAAA6wAAANsAAAC7AAAApQAAAJcAAACDAAAAfwAAAH8AAACBAAAAkwAAAKMAAAC7AAAA2wAA + AOsAAAD5AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADzAAAApQAAAB3///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAABDAAAA4QAAAP8AAAD/AAAA/wAA + AP8AAADtAAAAqwAAAGcAAAA3AAAAGQAAAAP///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAAwAAABkAAAA3AAAAaQAAAKsAAADtAAAA/wAAAP8AAAD/AAAA/wAAAOEAAABD////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAADEAAADvAAAA/wAA + AP8AAAD7AAAAvwAAAE0AAAAH////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAAHAAAATwAAALkAAAD7AAAA/wAA + AP8AAADvAAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AK8AAAD/AAAA/wAAAOMAAABRAAAAB////wH///8B////AQAAAAMAAAAPAAAAHQAAADkAAABVAAAAZwAA + AH8AAABB////AQAAADkAAAB9AAAAOf///wEAAAAnAAAANwAAAB0AAAAPAAAAA////wH///8B////AQAA + AAUAAABPAAAA4wAAAP8AAAD/AAAAr////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAPUAAAD/AAAA/wAAADv///8B////AQAAAAcAAABBAAAAgQAAALkAAADbAAAA9wAA + AP8AAAD/AAAA/wAAAP8AAAB/////AQAAAOsAAAD/AAAA6////wEAAAB/AAAA/wAAAPcAAADbAAAAuQAA + AIEAAABBAAAABf///wH///8BAAAAOwAAAP8AAAD/AAAA9f///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAPMAAAD/AAAA/wAAAD8AAAA5AAAAmQAAAO8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAB/////AQAAAP8AAAD/AAAA/////wEAAAB/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA7wAAAJkAAAA5AAAAPwAAAP8AAAD/AAAA8////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAK8AAAD/AAAA/wAAAPEAAAD3AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD9AAAA7wAAAOMAAADJAAAAswAAAJ0AAABN////AQAAAP8AAAD/AAAA//// + /wEAAABpAAAA4wAAAO8AAAD9AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD3AAAA8QAAAP8AAAD/AAAAr/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAADEAAADvAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD1AAAAuQAAAHUAAABBAAAAIQAAAAn///8B////Af///wH///8B////AQAA + AP8AAAD/AAAA/////wH///8BAAAACQAAACEAAABBAAAAdQAAALkAAAD1AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAADtAAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AD0AAAD1AAAA/wAAAP8AAAD9AAAAyQAAAF0AAAAP////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAP8AAAD/AAAA/////wH///8B////Af///wH///8B////Af///wEAAAAPAAAAXwAA + AMkAAAD9AAAA/wAAAP8AAADzAAAAPf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAL8AAAD/AAAA/wAAAOkAAABdAAAACf///wH///8B////AQAAAAMAAAAPAAAAHf// + /wH///8B////Af///wH///8B////AQAAAP8AAAD/AAAA/////wEAAAAnAAAANwAAAB0AAAAPAAAAA/// + /wH///8B////AQAAAAkAAABdAAAA6QAAAP8AAAD/AAAAv////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAAwAAAPsAAAD/AAAA/wAAAEf///8B////AQAAAAUAAABBAAAAgQAA + ALkAAADbAAAA9////wH///8B////Af///wH///8B////AQAAAP8AAAD/AAAA/////wEAAAB/AAAA/wAA + APcAAADbAAAAuQAAAIEAAABBAAAABf///wH///8BAAAARwAAAP8AAAD/AAAA+////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAPsAAAD/AAAA/wAAAE8AAAA5AAAAlwAA + AO8AAAD/AAAA/wAAAP8AAAD/AAAA/////wEAAAA5AAAA6wAAAOsAAAA5////AQAAAP8AAAD/AAAA//// + /wEAAAB/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7wAAAJkAAAA5AAAATwAAAP8AAAD/AAAA+/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAL0AAAD/AAAA/wAA + APMAAAD3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAA7////wEAAAB/AAAA/wAAAP8AAAB/////AQAA + AP8AAAD/AAAA/////wEAAABpAAAA4wAAAO8AAAD9AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD3AAAA8wAA + AP8AAAD/AAAAvf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + ADkAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD1AAAAuQAAAHUAAABBAAAAIf///wEAAAB/AAAA/wAA + AP8AAAB/////AQAAAP8AAAD/AAAA/////wH///8BAAAACQAAACEAAABBAAAAdQAAALkAAAD1AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADxAAAAOf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAD0AAADzAAAA/wAAAP8AAAD9AAAAyQAAAF8AAAAP////Af///wH///8B////Af// + /wEAAAB/AAAA/wAAAP8AAAB/////AQAAAP8AAAD/AAAA/////wH///8B////Af///wH///8B////Af// + /wEAAAAPAAAAXwAAAMkAAAD9AAAA/wAAAP8AAADzAAAAPf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAL8AAAD/AAAA/wAAAOkAAABdAAAACf///wH///8B////AQAA + AAMAAAAPAAAAHf///wEAAAB/AAAA/wAAAP8AAAB/////AQAAAP8AAAD/AAAA/////wEAAAAnAAAANwAA + AB0AAAAPAAAAA////wH///8B////AQAAAAkAAABdAAAA6QAAAP8AAAD/AAAAv////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAP0AAAD/AAAA/wAAAEf///8B////AQAA + AAUAAABBAAAAgQAAALkAAADbAAAA9////wEAAAB/AAAA/wAAAP8AAACB////AQAAAP8AAAD/AAAA//// + /wEAAAB/AAAA/wAAAPkAAADbAAAAuQAAAIEAAABBAAAABf///wH///8BAAAARwAAAP8AAAD/AAAA/f// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAwAAAPsAAAD/AAAA/wAA + AE8AAAA5AAAAlwAAAO8AAAD/AAAA/wAAAP8AAAD/AAAA/////wEAAAB/AAAA/wAAAP8AAAB/////AQAA + AP8AAAD/AAAA/wAAAAkAAACDAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7wAAAJkAAAA5AAAATwAA + AP8AAAD/AAAA+////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AL0AAAD/AAAA/wAAAPMAAAD3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAA2f///wEAAACZAAAA/wAA + AP8AAAB/////AQAAAP8AAAD/AAAA/wAAADMAAABFAAAA3QAAAO8AAAD9AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD3AAAA8wAAAP8AAAD/AAAAvf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAADkAAADxAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD1AAAAuQAAAHUAAABBAAAAFQAA + ABMAAADdAAAA/wAAAP8AAACpAAAANwAAAP8AAAD/AAAA/wAAALEAAAAJAAAACQAAACEAAABBAAAAdQAA + ALkAAAD1AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADxAAAAOf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAD0AAADzAAAA/wAAAP8AAAD9AAAAyQAAAF8AAAAP////Af// + /wEAAAADAAAAMQAAAMMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADPAAAAbwAA + ACsAAAAD////Af///wEAAAAPAAAAXwAAAMkAAAD9AAAA/wAAAP8AAADzAAAAPf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAL8AAAD/AAAA/wAAAOkAAABdAAAACf// + /wH///8B////AQAAACkAAAC3AAAA9QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAPMAAAC3AAAAKf///wH///8B////AQAAAAkAAABdAAAA6QAAAP8AAAD/AAAAv/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAP0AAAD/AAAA/wAA + AEf///8B////Af///wH///8BAAAAAwAAAN8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3////wH///8B////Af///wH///8BAAAARwAA + AP8AAAD/AAAA/f///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AP0AAAD/AAAA/wAAAEf///8B////Af///wH///8BAAAAAwAAAN8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3////wH///8B////Af// + /wH///8BAAAARwAAAP8AAAD/AAAA/f///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAL8AAAD/AAAA/wAAAOkAAABdAAAACf///wH///8B////AQAAACsAAAC3AAAA8wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPMAAAC3AAAAK/// + /wH///8B////AQAAAAkAAABdAAAA6QAAAP8AAAD/AAAAv////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAD0AAAD1AAAA/wAAAP8AAAD9AAAAyQAAAF0AAAAP////Af// + /wEAAAADAAAAKwAAAG0AAACnAAAAzwAAAO0AAAD/AAAA/wAAAP8AAAD/AAAA7QAAAM8AAACnAAAAbQAA + ACsAAAAD////Af///wEAAAAPAAAAXQAAAMkAAAD9AAAA/wAAAP8AAAD1AAAAPf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAABRAAAA6wAAAP8AAAD/AAAA/wAA + AP8AAAD1AAAAuQAAAHUAAABBAAAAIQAAAAf///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAABwAAACEAAABBAAAAdQAAALkAAAD1AAAA/wAAAP8AAAD/AAAA/wAAAOsAAABR////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAKQAA + ALEAAAD3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAA7wAAAOMAAADJAAAAswAAAJ0AAACZAAAAlwAA + AJkAAACXAAAAnQAAALMAAADJAAAA4wAAAO8AAAD9AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD3AAAAsQAA + ACn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAMAAAA7AAAAmQAAAO8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7wAA + AJkAAAA7AAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAcAAABBAAAAgQAAALkAAADbAAAA9wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPcAAADbAAAAuQAA + AIEAAABBAAAAB////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AAMAAAAPAAAAHQAAADsAAABVAAAAZwAAAH8AAAB/AAAAfwAAAIEAAAB/AAAAfwAAAGcAAABVAAAAOwAA + AB0AAAAPAAAAA////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAA + AAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA + //8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//wAAAAAAAP//AAAAAAAA//8AAAAAAAD//ygA + AABAAAAAgAAAAAEAIAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAD///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAFQAAAEEAAABnAAAAiwAA + AKcAAAC/AAAA1wAAAN8AAADzAAAA/wAAAP8AAAD/AAAA/wAAAPsAAADfAAAA2wAAAL8AAACnAAAAiwAA + AGsAAABBAAAAFf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAJQAAAGcAAACnAAAA4wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADjAAAApwAAAGcAAAAh////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAABkAAAB3AAAAzwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AM8AAABzAAAAGf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAHQAA + AJsAAAD3AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPcAAACfAAAAIf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAAFAAAAcwAAAPcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPsAAADTAAAApwAA + AIMAAABfAAAAQQAAAC0AAAAhAAAADf///wH///8B////Af///wEAAAAFAAAAIQAAACkAAABBAAAAXwAA + AIMAAACnAAAA0wAAAPsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPcAAABzAAAABf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAANAAAAtwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADHAAAAfwAA + AEEAAAAJ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAANAAAAQQAAAH8AAADHAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAALcAAAAN////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAswAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA5wAA + AHcAAAAd////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AB0AAAB7AAAA4wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAs////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAYQAAAP8AAAD/AAAA/wAA + AP8AAADvAAAAbwAAAAn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAUAAABpAAAA7wAAAP8AAAD/AAAA/wAAAP8AAABh////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AMMAAAD/AAAA/wAAAP8AAADXAAAAIf///wH///8B////Af///wH///8B////Af///wEAAAAlAAAAUQAA + AHcAAACbAAAAtwAAANMAAADfAAAA/wAAAP////8B////AQAAAGkAAAD3AAAA9wAAAGn///8B////AQAA + ALcAAACXAAAAdwAAAFEAAAAl////Af///wH///8B////Af///wH///8B////AQAAACEAAADXAAAA/wAA + AP8AAAD/AAAAw////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAD7AAAA/wAAAP8AAAD/AAAALf///wH///8B////Af///wEAAAA1AAAAdwAA + ALcAAADvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af///wEAAAD3AAAA/wAA + AP8AAAD3////Af///wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO8AAAC3AAAAdwAAADH///8B////Af// + /wH///8BAAAALQAAAP8AAAD/AAAA/wAAAPv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA9wAAAP8AAAD/AAAA/wAAADH///8BAAAAJQAA + AIcAAADjAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + /wH///8BAAAA/wAAAP8AAAD/AAAA/////wH///8BAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA4wAAAIcAAAAl////AQAAADEAAAD/AAAA/wAAAP8AAAD3////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAMMAAAD/AAAA/wAA + AP8AAADXAAAArwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////8B////AQAAAP8AAAD/AAAA/wAAAP////8B////AQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAK8AAADXAAAA/wAAAP8AAAD/AAAAw/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAABhAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AOcAAAC3AAAAkwAAAG8AAABXAAAAQQAAACkAAAAh////Af///wEAAAD/AAAA/wAAAP8AAAD/////Af// + /wEAAABzAAAAkwAAALcAAADnAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAF3///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAALMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + ANsAAACTAAAAUQAAABn///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA/wAA + AP8AAAD/AAAA/////wH///8B////Af///wH///8B////AQAAABkAAABRAAAAkwAAANsAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAK////8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAUAAADHAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAADvAAAAiwAAADH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAP8AAAD/AAAA/wAAAP////8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAMQAAAI8AAADvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAADDAAAABf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAABvAAAA/wAA + AP8AAAD/AAAA/wAAAPcAAAB/AAAAEf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAEQAAAH8AAAD3AAAA/wAAAP8AAAD/AAAA/wAA + AG////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAA2wAAAP8AAAD/AAAA/wAAAN8AAAAt////Af///wH///8B////Af///wH///8B////AQAA + ACUAAABRAAAAc////wH///8B////Af///wH///8B////Af///wH///8BAAAA/wAAAP8AAAD/AAAA//// + /wH///8BAAAAtwAAAJcAAAB3AAAAUQAAACX///8B////Af///wH///8B////Af///wH///8BAAAALQAA + AOMAAAD/AAAA/wAAAP8AAADb////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAABQAAAP8AAAD/AAAA/wAAAP8AAAA9////Af///wH///8B////AQAA + ADEAAAB3AAAAtwAAAO8AAAD/AAAA/wAAAP////8B////Af///wH///8B////Af///wH///8B////AQAA + AP8AAAD/AAAA/wAAAP////8B////AQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7wAAALcAAAB3AAAAMf// + /wH///8B////Af///wEAAAA9AAAA/wAAAP8AAAD/AAAA/////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAUAAAD/AAAA/wAAAP8AAAD/AAAARf// + /wEAAAAlAAAAgwAAAOMAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af///wEAAABpAAAA9wAA + APcAAABp////Af///wEAAAD/AAAA/wAAAP8AAAD/////Af///wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADjAAAAhwAAACX///8BAAAARQAAAP8AAAD/AAAA/wAAAP////8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA1wAA + AP8AAAD/AAAA/wAAAOcAAACvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + /wH///8BAAAA9wAAAP8AAAD/AAAA9////wH///8BAAAA/wAAAP8AAAD/AAAA/////wH///8BAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAArwAAAOcAAAD/AAAA/wAA + AP8AAADX////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAGsAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA5wAAALf///8B////AQAAAP8AAAD/AAAA/wAAAP////8B////AQAAAP8AAAD/AAAA/wAA + AP////8B////AQAAAHMAAACTAAAAtwAAAOcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAa////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAFAAAAvwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA2wAAAJMAAABRAAAAGf///wH///8B////Af///wEAAAD/AAAA/wAAAP8AAAD/////Af// + /wEAAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////Af///wH///8BAAAAGQAAAFEAAACTAAAA2wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAvwAAAAX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAABQAAAMMAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAO8AAACPAAAAMf///wH///8B////Af///wH///8B////Af///wH///8BAAAA/wAA + AP8AAAD/AAAA/////wH///8BAAAA/wAAAP8AAAD/AAAA/////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAAxAAAAjwAAAO8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAMMAAAAF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AG8AAAD/AAAA/wAAAP8AAAD/AAAA9wAAAH8AAAAR////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAP8AAAD/AAAA/wAAAP////8B////AQAAAP8AAAD/AAAA/wAAAP////8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAARAAAAfwAAAPcAAAD/AAAA/wAA + AP8AAAD/AAAAb////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADbAAAA/wAAAP8AAAD/AAAA4wAAAC3///8B////Af///wH///8B////Af// + /wH///8BAAAAJQAAAFEAAABz////Af///wEAAAD/AAAA/wAAAP8AAAD/////Af///wEAAAD/AAAA/wAA + AP8AAAD/////Af///wEAAAC3AAAAlwAAAHcAAABRAAAAJf///wH///8B////Af///wH///8B////Af// + /wEAAAAtAAAA4wAAAP8AAAD/AAAA/wAAANv///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAFAAAA/wAAAP8AAAD/AAAA/wAAAD3///8B////Af// + /wH///8BAAAAMQAAAHcAAAC3AAAA7wAAAP8AAAD/AAAA/////wH///8BAAAA/wAAAP8AAAD/AAAA//// + /wH///8BAAAA/wAAAP8AAAD/AAAA/////wH///8BAAAA/wAAAP8AAAD/AAAA/wAAAP8AAADvAAAAtwAA + AHcAAAAx////Af///wH///8B////AQAAAD0AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAABQAAAP8AAAD/AAAA/wAA + AP8AAABF////AQAAACUAAACDAAAA4wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////8B////AQAA + AP8AAAD/AAAA/wAAAP////8B////AQAAAP8AAAD/AAAA/wAAAP8AAAAF////AQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOMAAACHAAAAJf///wEAAABFAAAA/wAAAP8AAAD/AAAA//// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAADXAAAA/wAAAP8AAAD/AAAA5wAAAK8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/////AQAAAA0AAAD/AAAA/wAAAP8AAAD/////Af///wEAAAD/AAAA/wAAAP8AAAD/AAAAJQAA + AAkAAADvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACvAAAA5wAA + AP8AAAD/AAAA/wAAANf///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAawAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADnAAAAe////wEAAAA9AAAA/wAAAP8AAAD/AAAA/////wEAAAAFAAAA/wAA + AP8AAAD/AAAA/wAAAG////8BAAAANQAAAJMAAAC3AAAA5wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABr////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAAUAAAC/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADbAAAAkwAAAFEAAAAZ////Af///wH///8BAAAAqwAAAP8AAAD/AAAA/wAA + AP8AAABVAAAAVQAAAP8AAAD/AAAA/wAAAP8AAADvAAAAKf///wH///8B////Af///wEAAAAZAAAAUQAA + AJMAAADbAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAC/AAAABf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAAFAAAAwwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA7wAAAI8AAAAx////Af///wH///8B////Af///wEAAAAJAAAAkwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPMAAACDAAAAMf// + /wH///8B////Af///wH///8B////AQAAADEAAACPAAAA7wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAwwAA + AAX///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAbwAAAP8AAAD/AAAA/wAAAP8AAAD3AAAAfwAAABH///8B////Af///wH///8B////AQAA + ABkAAACHAAAA5wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADjAAAAhwAAABn///8B////Af///wH///8B////AQAAABEAAAB/AAAA9wAA + AP8AAAD/AAAA/wAAAP8AAABv////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAANsAAAD/AAAA/wAAAP8AAADjAAAALf///wH///8B////Af// + /wH///8B////AQAAAEkAAADvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADvAAAASf///wH///8B////Af// + /wH///8B////AQAAAC0AAADjAAAA/wAAAP8AAAD/AAAA2////wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAD/AAAA/wAAAP8AAAD/AAAAPf// + /wH///8B////Af///wH///8B////AQAAAAUAAADvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AO////8B////Af///wH///8B////Af///wH///8BAAAAPQAAAP8AAAD/AAAA/wAAAP////8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA/wAA + AP8AAAD/AAAA/wAAAD3///8B////Af///wH///8B////Af///wEAAAAFAAAA7wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADv////Af///wH///8B////Af///wH///8B////AQAAAD0AAAD/AAAA/wAA + AP8AAAD/////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAANsAAAD/AAAA/wAAAP8AAADfAAAALf///wH///8B////Af///wH///8B////AQAA + AE0AAADvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADvAAAATf///wH///8B////Af///wH///8B////AQAA + AC0AAADfAAAA/wAAAP8AAAD/AAAA2////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAABvAAAA/wAAAP8AAAD/AAAA/wAAAPcAAAB/AAAAEf// + /wH///8B////Af///wH///8BAAAAGQAAAIcAAADjAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOMAAACHAAAAGf///wH///8B////Af// + /wH///8BAAAAEQAAAH8AAAD3AAAA/wAAAP8AAAD/AAAA/wAAAG////8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAABQAAAMcAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAO8AAACLAAAAMf///wH///8B////Af///wH///8B////AQAAADEAAABvAAAAnwAA + AMcAAADfAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3wAAAMcAAACfAAAAbwAAADH///8B////Af// + /wH///8B////Af///wEAAAAxAAAAiwAAAO8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAMcAAAAF////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAAZAAAAxwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADbAAAAkwAAAFEAAAAZ////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAAZAAAAUQAAAJMAAADbAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AMcAAAAZ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAAkAAACTAAAA+wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAOcAAAC3AAAAjwAAAG8AAABXAAAAQQAAACkAAAAhAAAAIQAAACEAAAAhAAAAIQAA + ACEAAAApAAAAQQAAAFcAAABvAAAAjwAAALcAAADnAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA+wAAAJMAAAAJ////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAADEAAACvAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAArwAAADH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAACkAAACHAAAA4wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAOMAAACHAAAAKf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAA1AAAAdwAAALcAAADvAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO8AAAC3AAAAdwAAADX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAACUAAABRAAAAdwAAAJsAAAC7AAAA0wAAAN8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAN8AAADTAAAAuwAAAJsAAAB3AAAAUQAAACX///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAoAAAAgAAAAAABAAABACAAAAAAAAAIAQAAAAAAAAAAAAAAAAAAAAAA////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAAxAAAAQQAA + AGEAAACBAAAAgQAAAJ8AAAC/AAAAvwAAAL8AAADPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAO8AAAC/AAAAvwAAAL8AAACvAAAAgQAAAIEAAABhAAAAQQAAADH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAEQAA + AEEAAABxAAAAjwAAAL8AAADfAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADvAAAAvwAAAI8AAABxAAAAQQAAABH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAADEAAABxAAAArwAAAN8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN8AAACvAAAAcQAAADH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAhAAAAcQAAAK8AAADvAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAO8AAACvAAAAYQAAACH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAACEAAABxAAAAzwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AM8AAABxAAAAIf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAGEAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAArwAAAGH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAEQAAAHEAAADfAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN8AAACBAAAAEf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AHEAAADvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAADvAAAAgf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAEEAAADfAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAL8AAAC/AAAAgQAAAIEAAABxAAAAQQAAAEEAAABBAAAAMf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAARAAAAQQAAAEEAAABBAAAAYQAAAIEAAACBAAAAvwAA + AL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3wAAAEH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAABEAAACPAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADvAAAAvwAAAI8AAABhAAAAQQAAABH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAARAAAAQQAAAGEAAACPAAAAvwAA + AO8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAI8AAAAR////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAAhAAAAzwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3wAAAJ8AAABhAAAAIf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAADEAAABhAAAAnwAAAN8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AM8AAAAh////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAMQAAAO8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACvAAAAcQAA + ACH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAACEAAABxAAAArwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO8AAAAx////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAABEAAADvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAL8AAABhAAAAEf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAEQAAAGEAAADPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAO8AAAAR////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAzwAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJ8AAAAh////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAAhAAAAnwAA + AO8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAM////8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAIEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AJ8AAAAh////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAEQAAAIEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAARAAAA7wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAL8AAAAh////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAACEAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7wAA + ABH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAGEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACB////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAMQAAAEEAAABhAAAAgQAAAI8AAAC/AAAAvwAAAL8AAAD/AAAA/wAA + AP8AAAD/////Af///wH///8B////Af///wEAAABRAAAA3wAAAP8AAAD/AAAA3wAAAFH///8B////Af// + /wH///8B////AQAAAIEAAABhAAAAQQAAACH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAACBAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAYf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAArwAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAYf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAAxAAAAYQAAAIEAAAC/AAAA3wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////8B////Af///wH///8BAAAAUQAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAFH///8B////Af///wH///8BAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAADfAAAAvwAAAIEAAABhAAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAABhAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACv////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAI////8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAARAAAAUQAAAI8AAAC/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/////wH///8B////Af///wEAAADfAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3/// + /wH///8B////Af///wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AL8AAACPAAAAUQAAABH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAACPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO////8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAIf///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AEEAAACPAAAAzwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////AQAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////AQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAM8AAACPAAAAMf// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAACEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAh////Af// + /wH///8B////Af///wH///8BAAAAQQAAAJ8AAADvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////8B////Af///wH///8BAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////8B////Af///wH///8BAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7wAAAJ8AAABB////Af///wH///8B////Af// + /wH///8BAAAAIQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADfAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJ////8B////Af///wEAAAARAAAAgQAAAN8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/////wH///8B////Af// + /wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/////wH///8B////Af///wEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADfAAAAgQAAABH///8B////Af///wEAAACfAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAN////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAK8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AGEAAAAhAAAAnwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////AQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/////Af///wH///8B////AQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AJ8AAAAhAAAAYQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAr////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAYQAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////8B////Af// + /wH///8BAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////8B////Af///wH///8BAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAABh////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAARAAAA7wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAL8AAAC/AAAAnwAA + AIEAAACBAAAAYQAAAEEAAABBAAAAQf///wH///8B////Af///wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/////wH///8B////Af///wEAAADPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7wAAABH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAACBAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAvwAA + AIEAAABhAAAAQQAAABH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////Af// + /wH///8BAAAAEQAAAEEAAABhAAAAgQAAAL8AAADfAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAABx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAADPAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAvwAAAIEAAABRAAAAEf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAARAAAAUQAAAIEAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAz////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAABEAAADvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN8AAACPAAAAUf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAUQAA + AI8AAADfAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAN8AAAAR////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAMQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3wAAAI8AAAAx////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAAxAAAAjwAAAO8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7wAAADH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAABEAAADvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAvwAAAFH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAFEAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA7wAAABH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAnwAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAvwAAAEH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAABBAAAAvwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAn/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAACEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3wAA + AEH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAQQAAAN8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAIf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAjwAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAJ8AAAAR////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////8B////Af///wH///8BAAAAgQAAAGEAAABBAAAAIf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAEQAAAJ8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAADfAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACB////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + ADEAAABhAAAAgQAAAL8AAADPAAAA/////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + /wH///8B////Af///wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN8AAAC/AAAAgQAAAGEAAAAx////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AI8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN////8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAr////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAABEAAABRAAAAjwAAAL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////AQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAvwAAAI8AAABRAAAAEf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAK8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAARAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABB////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAMQAAAI8AAADPAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////8B////Af///wH///8BAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAzwAAAI8AAAAx////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAQQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAABEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAFH///8B////Af///wH///8B////Af///wEAAAAxAAAAnwAA + AO8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + /wH///8B////Af///wH///8BAAAAUQAAAN8AAAD/AAAA/wAAAN8AAABR////Af///wH///8B////Af// + /wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/////wH///8B////Af///wEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAADvAAAAnwAAAEH///8B////Af///wH///8B////Af///wEAAABRAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAv/// + /wH///8B////AQAAABEAAACBAAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////AQAAAFEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAABR////Af///wH///8B////AQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/////Af///wH///8B////AQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN8AAACBAAAAEf// + /wH///8B////AQAAAL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAzwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAnwAAACEAAACfAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////8B////Af///wH///8BAAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN////8B////Af// + /wH///8BAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////8B////Af///wH///8BAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAnwAAACEAAACfAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADP////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAACPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/////wH///8B////Af///wEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/////wH///8B////Af///wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/////wH///8B////Af///wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAI////8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + ACEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/////Af///wH///8B////AQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af// + /wH///8B////AQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////AQAA + AM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAIf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAI8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN8AAAC/AAAAgQAAAGH///8B////Af///wH///8BAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////8B////Af///wH///8BAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////8B////Af///wH///8B////Af///wEAAAARAAAAQQAAAGEAAACBAAAAvwAA + AN8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAI////8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAEQAAAN8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAC/AAAAgQAAAFEAAAAR////Af// + /wH///8B////Af///wH///8B////Af///wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + /wH///8B////Af///wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAABEAAABRAAAAgQAAAL8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADfAAAAEf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAMQAAAO8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3wAA + AI8AAABR////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////AQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAABRAAAAjwAAAN8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7wAAADH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAAxAAAA7wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADvAAAAjwAAADH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////8B////Af///wH///8BAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAADEAAACPAAAA7wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADvAAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAEQAAAO8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAC/AAAAUf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/////wH///8B////Af///wEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAUQAA + AL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADvAAAAEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAACfAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAC/AAAAQf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/////Af///wH///8B////AQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAEEAAAC/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACf////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAIQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAQf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////8B////Af///wH///8BAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAABBAAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAAh////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAACPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAnwAA + ABH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/////wH///8B////Af///wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + /wH///8B////Af///wEAAACBAAAAYQAAAEEAAAAh////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAARAAAAnwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAI////8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAN8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAI////8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAMQAAAGEAAACBAAAAvwAAAM8AAAD/////Af// + /wH///8B////AQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////AQAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////AQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA3wAAAL8AAACBAAAAYQAAADH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAjwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA3////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACv////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAEQAAAFEAAACPAAAAvwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////8B////Af///wH///8BAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////8B////Af///wH///8BAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////8B////Af///wH///8BAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAC/AAAAjwAAAFEAAAAR////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAArwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAABEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAEH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAAxAAAAjwAAAM8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + /wH///8B////Af///wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/////wH///8B////Af// + /wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/////wH///8B////Af///wEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADPAAAAjwAA + ADH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAABBAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAAEQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAUf// + /wH///8B////Af///wH///8B////AQAAADEAAACfAAAA7wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////AQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////AQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/////Af///wH///8B////AQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO8AAACfAAAAQf///wH///8B////Af// + /wH///8B////AQAAAFEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAC/////Af///wH///8BAAAAEQAAAIEAAADfAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP////8B////Af///wH///8BAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////8B////Af// + /wH///8BAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAR////Af///wH///8BAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA3wAAAIEAAAAR////Af///wH///8BAAAAvwAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAADPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACfAAAAIQAAAJ8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/////wH///8B////Af///wEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/////wH///8B////Af///wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAEH///8B////AQAAACEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACfAAAAIQAAAJ8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAM////8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AI8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/////Af///wH///8BAAAAMQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af// + /wH///8B////AQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAUf///wH///8B////AQAA + AL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAj////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAIQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAI////8B////Af///wEAAABRAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////8B////Af///wH///8BAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAACf////Af///wH///8BAAAAEQAAAL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAh////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAjwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3wAA + AL8AAABh////Af///wH///8B////AQAAAJ8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA//// + /wH///8B////AQAAABEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAh////Af// + /wH///8B////AQAAABEAAABBAAAAYQAAAIEAAAC/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAj////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAARAAAA3wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAL8AAACBAAAAUQAAABH///8B////Af///wH///8B////Af///wEAAAARAAAA7wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAQf///wH///8BAAAAQQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAL////8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAEQAAAFEAAACBAAAAvwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN8AAAAR////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAAxAAAA7wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAjwAAAFH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAK8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAADPAAAAQQAAAEEAAADPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AJ////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AFEAAACPAAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADvAAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAADEAAADvAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO8AAACPAAAAMf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAACfAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAM8AAABB////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAMQAAAI8AAADvAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO8AAAAx////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAARAAAA7wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAL8AAABR////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAAhAAAArwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADPAAAAgQAAAEH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAABRAAAAvwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO8AAAAR////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAJ8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAL8AAABB////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAABBAAAAnwAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AO8AAACfAAAAQf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAQQAAAL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AJ////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAAhAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AN8AAABB////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAABhAAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3wAAAGH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAEEAAADfAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAACH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAAI8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACfAAAAEf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAARAAAAvwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAL8AAAAR////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAABEAAACfAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAj////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8BAAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAj/// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAIQAA + AO8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AO8AAAAh////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAACPAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADf////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAK////8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAL////8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAACvAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAQf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAEQAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/////wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAEEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/////wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAABB////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAARAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAQQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AK////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAL////8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAACvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP////8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AN8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAACEAAADvAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADvAAAAIf///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAgQAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA3////wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAjwAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAJ8AAAAR////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAACEAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAvwAAACH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8BAAAAEQAAAJ8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACP////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAAhAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN8AAABB////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAABhAAAA3wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3wAAAGH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAAEEAAADfAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAACH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAACfAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAC/AAAAQf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAQQAAAJ8AAADvAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADvAAAAnwAA + AEH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + AEEAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACf////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAABEAAADvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAvwAAAFH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAABBAAAAgQAAAL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAL8AAACBAAAAQf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAFEAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA7wAAABH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAADEAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN8AAACPAAAAMf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAAAxAAAAUQAAAIEAAACfAAAAvwAAAL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAC/AAAAvwAAAJ8AAACBAAAAUQAAADH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAMQAAAI8AAADfAAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAx////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAAGEAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA3wAAAI8AAABR////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wEAAABRAAAAjwAAAN8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAYf///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAA + ADEAAADvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAAvwAAAIEAAABRAAAAEf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAARAAAAUQAAAIEAAAC/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA7wAAADH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////AQAAACEAAADPAAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA3wAAAL8AAACBAAAAYQAAAEH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wEAAABBAAAAYQAAAIEAAAC/AAAA3wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAM8AAAAh////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAACBAAAA7wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAAvwAAAL8AAACfAAAAgQAAAIEAAABhAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAA + AEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABhAAAAgQAAAIEAAACfAAAAvwAAAL8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAO8AAACB////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAAAhAAAAnwAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAACfAAAAIf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8BAAAAIQAAAJ8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAACfAAAAIf///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAACEAAACBAAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAN8AAACBAAAAIf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8BAAAAQQAA + AJ8AAADvAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA7wAAAJ8AAABB////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wEAAABBAAAAjwAAAM8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADPAAAAjwAAAEH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////AQAAABEAAABRAAAAjwAAAL8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAvwAAAI8AAABRAAAAEf// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wEAAAAxAAAAYQAAAIEAAAC/AAAA3wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADfAAAAvwAA + AIEAAABhAAAAMf///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAADEAAABBAAAAcQAAAIEAAACPAAAAvwAAAL8AAAC/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAL8AAAC/AAAAvwAA + AI8AAACBAAAAcQAAAEEAAAAx////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af// + /wH///8B////AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAA + + \ No newline at end of file From a20892327d2c174936a702a93c2e7fd807326a09 Mon Sep 17 00:00:00 2001 From: danebouchie Date: Thu, 1 Dec 2016 00:38:09 -0500 Subject: [PATCH 21/24] Removed drag and drop functionality --- .../Controls/Map/TriangleMapObject.cs | 2 +- Source/SM64 Diagnostic/Controls/ObjectSlot.cs | 40 -------------- .../Managers/DisassemblyManager.cs | 48 ----------------- .../SM64 Diagnostic/Managers/MarioManager.cs | 52 ------------------- .../SM64 Diagnostic/Managers/ObjectManager.cs | 51 ------------------ .../Managers/ObjectSlotsManager.cs | 18 ------- Source/SM64 Diagnostic/SM64 Diagnostic.csproj | 1 - Source/SM64 Diagnostic/Structs/DropAction.cs | 21 -------- 8 files changed, 1 insertion(+), 232 deletions(-) delete mode 100644 Source/SM64 Diagnostic/Structs/DropAction.cs diff --git a/Source/SM64 Diagnostic/Controls/Map/TriangleMapObject.cs b/Source/SM64 Diagnostic/Controls/Map/TriangleMapObject.cs index 1d44d1e07..c9e2fbe0e 100644 --- a/Source/SM64 Diagnostic/Controls/Map/TriangleMapObject.cs +++ b/Source/SM64 Diagnostic/Controls/Map/TriangleMapObject.cs @@ -34,7 +34,7 @@ public override void DrawOnControl(MapGraphics graphics) GL.MatrixMode(MatrixMode.Modelview); GL.LoadIdentity(); GL.Color4(Color); - GL.Begin(BeginMode.Triangles); + GL.Begin(PrimitiveType.Triangles); GL.Vertex2(P1OnControl.X, P1OnControl.Y); GL.Vertex2(P2OnControl.X, P2OnControl.Y); GL.Vertex2(P3OnControl.X, P3OnControl.Y); diff --git a/Source/SM64 Diagnostic/Controls/ObjectSlot.cs b/Source/SM64 Diagnostic/Controls/ObjectSlot.cs index 6ae61f25f..41b076dd7 100644 --- a/Source/SM64 Diagnostic/Controls/ObjectSlot.cs +++ b/Source/SM64 Diagnostic/Controls/ObjectSlot.cs @@ -224,14 +224,10 @@ public ObjectSlot(int index, ObjectSlotsManager manager, ObjectSlotManagerGui gu Size = size; Font = new Font(FontFamily.GenericSansSerif, 6); - this.AllowDrop = true; this.MouseDown += OnDrag; this.MouseUp += (s, e) => { MouseState = MouseStateType.None; UpdateColors(); }; this.MouseEnter += (s, e) => { MouseState = MouseStateType.Over; UpdateColors(); }; this.MouseLeave += (s, e) => { MouseState = MouseStateType.None; UpdateColors(); }; - - this.DragEnter += OnDragEnter; - this.DragDrop += OnDrop; this.Cursor = Cursors.Hand; this.DoubleBuffered = true; } @@ -324,43 +320,7 @@ private void OnDrag(object sender, MouseEventArgs e) MouseState = MouseStateType.Down; UpdateColors(); Refresh(); - - // Start the drag and drop but setting the object slot index in Drag and Drop data - var objectAddress = Address; - var dropAction = new DropAction(DropAction.ActionType.Object, objectAddress); - DoDragDrop(dropAction, DragDropEffects.All); - } - - private void OnDragEnter(object sender, DragEventArgs e) - { - - // Make sure we have valid Drag and Drop data (it is an index) - if (!e.Data.GetDataPresent(typeof(DropAction))) - { - e.Effect = DragDropEffects.None; - return; - } - - var dropAction = ((DropAction) e.Data.GetData(typeof(DropAction))).Action; - if (dropAction != DropAction.ActionType.Object && dropAction != DropAction.ActionType.Mario) - { - e.Effect = DragDropEffects.None; - return; - } - - e.Effect = DragDropEffects.Move; - } - - private void OnDrop(object sender, DragEventArgs e) - { - // Make sure we have valid Drag and Drop data (it is an index) - if (!e.Data.GetDataPresent(typeof(DropAction))) - return; - - var dropAction = ((DropAction)e.Data.GetData(typeof(DropAction))); - _manager.OnSlotDropAction(dropAction, this); } - protected override void OnPaint(PaintEventArgs e) { lock (_gfxLock) diff --git a/Source/SM64 Diagnostic/Managers/DisassemblyManager.cs b/Source/SM64 Diagnostic/Managers/DisassemblyManager.cs index 60be13f30..34698b894 100644 --- a/Source/SM64 Diagnostic/Managers/DisassemblyManager.cs +++ b/Source/SM64 Diagnostic/Managers/DisassemblyManager.cs @@ -30,9 +30,6 @@ public DisassemblyManager(Form formContext, RichTextBox disTextBox, MaskedTextBo _goButton = goButton; _formContext = formContext; - RegisterControlEvents(_output); - RegisterControlEvents(_textBoxStartAdd); - goButton.Click += GoButton_Pressed; textBoxStartAdd.TextChanged += (sender, e) => { @@ -42,13 +39,6 @@ public DisassemblyManager(Form formContext, RichTextBox disTextBox, MaskedTextBo _stream.OnStatusChanged += Stream_StatusChanged; } - private void RegisterControlEvents(Control control) - { - control.AllowDrop = true; - control.DragDrop += OnDrop; - control.DragEnter += DragEnter; - } - private void GoButton_Pressed(object sender, EventArgs e) { if (!_addressChanged) @@ -154,43 +144,5 @@ private void DisassemblyLines(int numberOfLines) } _output.Visible = true; } - - private void DragEnter(object sender, DragEventArgs e) - { - // Make sure we have valid Drag and Drop data (it is an index) - if (!e.Data.GetDataPresent(typeof(DropAction))) - { - e.Effect = DragDropEffects.None; - return; - } - - var dropAction = ((DropAction)e.Data.GetData(typeof(DropAction))).Action; - if (dropAction != DropAction.ActionType.Object && dropAction != DropAction.ActionType.Mario) - { - e.Effect = DragDropEffects.None; - return; - } - - e.Effect = DragDropEffects.Move; - } - - private void OnDrop(object sender, DragEventArgs e) - { - // Make sure we have valid Drag and Drop data (it is an index) - if (!e.Data.GetDataPresent(typeof(DropAction))) - return; - - var dropAction = ((DropAction)e.Data.GetData(typeof(DropAction))); - - // Display data address - if (dropAction.Action == DropAction.ActionType.Object) - { - StartShowDisassmbly(dropAction.Address, (int) Config.Mario.StructSize / 4); - } - else if (dropAction.Action == DropAction.ActionType.Mario) - { - StartShowDisassmbly(dropAction.Address, (int) Config.ObjectSlots.StructSize / 4); - } - } } } diff --git a/Source/SM64 Diagnostic/Managers/MarioManager.cs b/Source/SM64 Diagnostic/Managers/MarioManager.cs index 04762756a..f537008d4 100644 --- a/Source/SM64 Diagnostic/Managers/MarioManager.cs +++ b/Source/SM64 Diagnostic/Managers/MarioManager.cs @@ -18,11 +18,6 @@ public class MarioManager : DataManager public MarioManager(ProcessStream stream, List marioData, Control marioControl, NoTearFlowLayoutPanel variableTable, MapManager mapManager) : base(stream, marioData, variableTable, Config.Mario.StructAddress) { - // Register controls on the control (for drag-and-drop) - RegisterControlEvents(marioControl); - foreach (Control control in marioControl.Controls) - RegisterControlEvents(control); - _mapManager = mapManager; } @@ -149,52 +144,5 @@ public override void Update(bool updateView) base.Update(); ProcessSpecialVars(); } - - private void RegisterControlEvents(Control control) - { - control.AllowDrop = true; - control.DragEnter += DragEnter; - control.DragDrop += OnDrop; - control.MouseDown += OnDrag; - } - - private void OnDrag(object sender, EventArgs e) - { - // Start the drag and drop but setting the object slot index in Drag and Drop data - var dropAction = new DropAction(DropAction.ActionType.Mario, Config.Mario.StructAddress); - (sender as Control).DoDragDrop(dropAction, DragDropEffects.All); - } - - private void DragEnter(object sender, DragEventArgs e) - { - // Make sure we have valid Drag and Drop data (it is an index) - if (!e.Data.GetDataPresent(typeof(DropAction))) - { - e.Effect = DragDropEffects.None; - return; - } - - var dropAction = ((DropAction)e.Data.GetData(typeof(DropAction))).Action; - if (dropAction != DropAction.ActionType.Object && dropAction != DropAction.ActionType.Mario) - { - e.Effect = DragDropEffects.None; - return; - } - - e.Effect = DragDropEffects.Move; - } - - private void OnDrop(object sender, DragEventArgs e) - { - // Make sure we have valid Drag and Drop data (it is an index) - if (!e.Data.GetDataPresent(typeof(DropAction))) - return; - - var dropAction = ((DropAction)e.Data.GetData(typeof(DropAction))); - if (dropAction.Action != DropAction.ActionType.Object) - return; - - MarioActions.RetreiveObjects(_stream, new List() { dropAction.Address }); - } } } diff --git a/Source/SM64 Diagnostic/Managers/ObjectManager.cs b/Source/SM64 Diagnostic/Managers/ObjectManager.cs index 13d02fe6b..7d073a8f7 100644 --- a/Source/SM64 Diagnostic/Managers/ObjectManager.cs +++ b/Source/SM64 Diagnostic/Managers/ObjectManager.cs @@ -192,11 +192,6 @@ public ObjectManager(ProcessStream stream, ObjectAssociations objAssoc, List() { objectAddress }); - break; - - case DropAction.ActionType.Object: - break; - - default: - return; - } - } } } \ No newline at end of file diff --git a/Source/SM64 Diagnostic/SM64 Diagnostic.csproj b/Source/SM64 Diagnostic/SM64 Diagnostic.csproj index 3e17fbdb9..47dc56f20 100644 --- a/Source/SM64 Diagnostic/SM64 Diagnostic.csproj +++ b/Source/SM64 Diagnostic/SM64 Diagnostic.csproj @@ -146,7 +146,6 @@ - diff --git a/Source/SM64 Diagnostic/Structs/DropAction.cs b/Source/SM64 Diagnostic/Structs/DropAction.cs deleted file mode 100644 index 8505b2aeb..000000000 --- a/Source/SM64 Diagnostic/Structs/DropAction.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; - -namespace SM64_Diagnostic.Structs -{ - public struct DropAction - { - public enum ActionType { Mario, Object }; - public ActionType Action; - public uint Address; - - public DropAction(ActionType actionType, uint address) - { - Action = actionType; - Address = address; - } - } -} From e233fe88991752cb35a14acd8dbc6c5104bf1c88 Mon Sep 17 00:00:00 2001 From: danebouchie Date: Thu, 1 Dec 2016 01:36:06 -0500 Subject: [PATCH 22/24] Added closest triangle vertex coordinates special vars --- .../SM64 Diagnostic/Config/TrianglesData.xml | 3 + .../Extensions/IEnumerableExtensions.cs | 35 +++++++ .../Managers/TriangleManager.cs | 93 +++++++++++++++++-- Source/SM64 Diagnostic/SM64 Diagnostic.csproj | 1 + .../SM64 Diagnostic/Utilities/MarioActions.cs | 41 -------- 5 files changed, 123 insertions(+), 50 deletions(-) create mode 100644 Source/SM64 Diagnostic/Extensions/IEnumerableExtensions.cs diff --git a/Source/SM64 Diagnostic/Config/TrianglesData.xml b/Source/SM64 Diagnostic/Config/TrianglesData.xml index bc8be0599..00e3c1640 100644 --- a/Source/SM64 Diagnostic/Config/TrianglesData.xml +++ b/Source/SM64 Diagnostic/Config/TrianglesData.xml @@ -32,6 +32,9 @@ Mario Y Mario Z Closest Vertex + Closest Vertex X + Closest Vertex Y + Closest Vertex Z M. Yaw (Intended) M. Yaw (Facing) Floor Triangle diff --git a/Source/SM64 Diagnostic/Extensions/IEnumerableExtensions.cs b/Source/SM64 Diagnostic/Extensions/IEnumerableExtensions.cs new file mode 100644 index 000000000..286c7c11c --- /dev/null +++ b/Source/SM64 Diagnostic/Extensions/IEnumerableExtensions.cs @@ -0,0 +1,35 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace SM64_Diagnostic.Extensions +{ + public static class IEnumerableExtensions + { + public static int IndexOfMin(this IEnumerable source) where T : IComparable + { + if (source == null) + throw new ArgumentNullException("source"); + + var enumer = source.GetEnumerator(); + + if (!enumer.MoveNext()) + throw new InvalidOperationException("Sequence was empty"); + + T minValue = enumer.Current; + int minIndex = 0; + + while (enumer.MoveNext()) + { + if (enumer.Current.CompareTo(minValue) < 0) + { + minValue = enumer.Current; + } + } + + return minIndex; + } + } +} diff --git a/Source/SM64 Diagnostic/Managers/TriangleManager.cs b/Source/SM64 Diagnostic/Managers/TriangleManager.cs index dbf035fdc..d7a9d1160 100644 --- a/Source/SM64 Diagnostic/Managers/TriangleManager.cs +++ b/Source/SM64 Diagnostic/Managers/TriangleManager.cs @@ -53,6 +53,9 @@ protected override void InitializeSpecialVariables() new DataContainer("DistanceAboveFloor"), new DataContainer("DistanceBelowCeiling"), new DataContainer("ClosestVertex"), + new DataContainer("ClosestVertexX"), + new DataContainer("ClosestVertexY"), + new DataContainer("ClosestVertexZ"), new AngleDataContainer("UpHillAngle"), new AngleDataContainer("DownHillAngle"), new AngleDataContainer("LeftHillAngle"), @@ -102,23 +105,47 @@ private void checkBoxVertexMisalignment_CheckedChanged(object sender, EventArgs private void ProcessSpecialVars() { var floorY = BitConverter.ToSingle(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.GroundYOffset, 4), 0); + + // Get Mario position float marioX, marioY, marioZ; - marioX = BitConverter.ToSingle(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.XOffset, 4), 0); - marioY = BitConverter.ToSingle(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.YOffset, 4), 0); - marioZ = BitConverter.ToSingle(_stream.ReadRam(Config.Mario.StructAddress + Config.Mario.ZOffset, 4), 0); + marioX = _stream.GetSingle(Config.Mario.StructAddress + Config.Mario.XOffset); + marioY = _stream.GetSingle(Config.Mario.StructAddress + Config.Mario.YOffset); + marioZ = _stream.GetSingle(Config.Mario.StructAddress + Config.Mario.ZOffset); float normX, normY, normZ, normOffset; - normX = BitConverter.ToSingle(_stream.ReadRam(TriangleAddress + Config.TriangleOffsets.NormX, 4), 0); - normY = BitConverter.ToSingle(_stream.ReadRam(TriangleAddress + Config.TriangleOffsets.NormY, 4), 0); - normZ = BitConverter.ToSingle(_stream.ReadRam(TriangleAddress + Config.TriangleOffsets.NormZ, 4), 0); - normOffset = BitConverter.ToSingle(_stream.ReadRam(TriangleAddress + Config.TriangleOffsets.Offset, 4), 0); + normX = _stream.GetSingle(TriangleAddress + Config.TriangleOffsets.NormX); + normY = _stream.GetSingle(TriangleAddress + Config.TriangleOffsets.NormY); + normZ = _stream.GetSingle(TriangleAddress + Config.TriangleOffsets.NormZ); + normOffset = _stream.GetSingle(TriangleAddress + Config.TriangleOffsets.Offset); var uphillAngle = Math.PI + Math.Atan2(normX, normZ); if (normX == 0 && normZ == 0) uphillAngle = double.NaN; if (normY < -0.01) uphillAngle += Math.PI; - + + short v1X, v1Y, v1Z; + short v2X, v2Y, v2Z; + short v3X, v3Y, v3Z; + v1X = _stream.GetInt16(TriangleAddress + Config.TriangleOffsets.X1); + v1Y = _stream.GetInt16(TriangleAddress + Config.TriangleOffsets.Y1); + v1Z = _stream.GetInt16(TriangleAddress + Config.TriangleOffsets.Z1); + v2X = _stream.GetInt16(TriangleAddress + Config.TriangleOffsets.X2); + v2Y = _stream.GetInt16(TriangleAddress + Config.TriangleOffsets.Y2); + v2Z = _stream.GetInt16(TriangleAddress + Config.TriangleOffsets.Z2); + v3X = _stream.GetInt16(TriangleAddress + Config.TriangleOffsets.X3); + v3Y = _stream.GetInt16(TriangleAddress + Config.TriangleOffsets.Y3); + v3Z = _stream.GetInt16(TriangleAddress + Config.TriangleOffsets.Z3); + + var disToV = new double[] + { + Math.Pow(marioX - v1X, 2) + Math.Pow(marioY - v1Y, 2) + Math.Pow(marioZ - v1Z, 2), + Math.Pow(marioX - v2X, 2) + Math.Pow(marioY - v2Y, 2) + Math.Pow(marioZ - v2Z, 2), + Math.Pow(marioX - v3X, 2) + Math.Pow(marioY - v3Y, 2) + Math.Pow(marioZ - v3Z, 2) + }; + + var closestVertex = disToV.IndexOfMin() + 1; + foreach (IDataContainer specialVar in _specialWatchVars) { switch (specialVar.SpecialName) @@ -131,7 +158,55 @@ private void ProcessSpecialVars() - marioY).ToString(); break; case "ClosestVertex": - (specialVar as DataContainer).Text = String.Format("V{0}", MarioActions.GetClosestVertex(_stream, TriangleAddress)); + (specialVar as DataContainer).Text = String.Format("V{0}", closestVertex); + goto case "CheckTriangleExists"; + case "ClosestVertexX": + short coordX = 0; + switch (closestVertex) + { + case 1: + coordX = v1X; + break; + case 2: + coordX = v2X; + break; + case 3: + coordX = v3X; + break; + } + (specialVar as DataContainer).Text = coordX.ToString(); + goto case "CheckTriangleExists"; + case "ClosestVertexY": + short coordY = 0; + switch (closestVertex) + { + case 1: + coordY = v1Y; + break; + case 2: + coordY = v2Y; + break; + case 3: + coordY = v3Y; + break; + } + (specialVar as DataContainer).Text = coordY.ToString(); + goto case "CheckTriangleExists"; + case "ClosestVertexZ": + short coordZ = 0; + switch (closestVertex) + { + case 1: + coordZ = v1Z; + break; + case 2: + coordZ = v2Z; + break; + case 3: + coordZ = v3Z; + break; + } + (specialVar as DataContainer).Text = coordZ.ToString(); goto case "CheckTriangleExists"; case "UpHillAngle": (specialVar as AngleDataContainer).AngleValue = uphillAngle; diff --git a/Source/SM64 Diagnostic/SM64 Diagnostic.csproj b/Source/SM64 Diagnostic/SM64 Diagnostic.csproj index 47dc56f20..f38892437 100644 --- a/Source/SM64 Diagnostic/SM64 Diagnostic.csproj +++ b/Source/SM64 Diagnostic/SM64 Diagnostic.csproj @@ -101,6 +101,7 @@ + diff --git a/Source/SM64 Diagnostic/Utilities/MarioActions.cs b/Source/SM64 Diagnostic/Utilities/MarioActions.cs index 579f62bb8..a8fe59ce7 100644 --- a/Source/SM64 Diagnostic/Utilities/MarioActions.cs +++ b/Source/SM64 Diagnostic/Utilities/MarioActions.cs @@ -234,46 +234,5 @@ public static bool RetrieveTriangle(ProcessStream stream, uint triangleAddress) return success; } - - public static int GetClosestVertex(ProcessStream stream, uint triangleAddress) - { - if (triangleAddress == 0x0000) - return 0; - - // Get Mario position - short marioX, marioY, marioZ; - var marioAddress = Config.Mario.StructAddress; - marioX = (short)BitConverter.ToSingle(stream.ReadRam(marioAddress + Config.Mario.XOffset, 4), 0); - marioY = (short)BitConverter.ToSingle(stream.ReadRam(marioAddress + Config.Mario.YOffset, 4), 0); - marioZ = (short)BitConverter.ToSingle(stream.ReadRam(marioAddress + Config.Mario.ZOffset, 4), 0); - - short v1X, v1Y, v1Z; - short v2X, v2Y, v2Z; - short v3X, v3Y, v3Z; - v1X = BitConverter.ToInt16(stream.ReadRam(triangleAddress + Config.TriangleOffsets.X1, 2), 0); - v1Y = BitConverter.ToInt16(stream.ReadRam(triangleAddress + Config.TriangleOffsets.Y1, 2), 0); - v1Z = BitConverter.ToInt16(stream.ReadRam(triangleAddress + Config.TriangleOffsets.Z1, 2), 0); - v2X = BitConverter.ToInt16(stream.ReadRam(triangleAddress + Config.TriangleOffsets.X2, 2), 0); - v2Y = BitConverter.ToInt16(stream.ReadRam(triangleAddress + Config.TriangleOffsets.Y2, 2), 0); - v2Z = BitConverter.ToInt16(stream.ReadRam(triangleAddress + Config.TriangleOffsets.Z2, 2), 0); - v3X = BitConverter.ToInt16(stream.ReadRam(triangleAddress + Config.TriangleOffsets.X3, 2), 0); - v3Y = BitConverter.ToInt16(stream.ReadRam(triangleAddress + Config.TriangleOffsets.Y3, 2), 0); - v3Z = BitConverter.ToInt16(stream.ReadRam(triangleAddress + Config.TriangleOffsets.Z3, 2), 0); - - double disToV1, disToV2, disToV3; - disToV1 = Math.Pow(marioX - v1X, 2) + Math.Pow(marioY - v1Y, 2) + Math.Pow(marioZ - v1Z, 2); - disToV2 = Math.Pow(marioX - v2X, 2) + Math.Pow(marioY - v2Y, 2) + Math.Pow(marioZ - v2Z, 2); - disToV3 = Math.Pow(marioX - v3X, 2) + Math.Pow(marioY - v3Y, 2) + Math.Pow(marioZ - v3Z, 2); - - double minDis = Math.Min(Math.Min(disToV1, disToV2), disToV3); - if (minDis == disToV1) - return 1; - if (minDis == disToV2) - return 2; - if (minDis == disToV3) - return 3; - - return 0; - } } } From a68df4b44361114e8a48132c90f58fd85e12385e Mon Sep 17 00:00:00 2001 From: danebouchie Date: Thu, 1 Dec 2016 03:05:20 -0500 Subject: [PATCH 23/24] Added object to Mario angle special vars --- Source/SM64 Diagnostic/Config/Config.xml | 2 +- Source/SM64 Diagnostic/Config/ObjectData.xml | 4 ++ .../Controls/AngleDataContainer.cs | 11 ++-- .../SM64 Diagnostic/Managers/ObjectManager.cs | 62 ++++++++++++++++--- .../Managers/ObjectSlotsManager.cs | 4 +- Source/SM64 Diagnostic/Utilities/MoreMath.cs | 8 +++ 6 files changed, 75 insertions(+), 16 deletions(-) diff --git a/Source/SM64 Diagnostic/Config/Config.xml b/Source/SM64 Diagnostic/Config/Config.xml index e985ff059..0118088e4 100644 --- a/Source/SM64 Diagnostic/Config/Config.xml +++ b/Source/SM64 Diagnostic/Config/Config.xml @@ -21,7 +21,7 @@ 0x164 0x168 0x16C - 0xC8 + 0xD4 240 300 diff --git a/Source/SM64 Diagnostic/Config/ObjectData.xml b/Source/SM64 Diagnostic/Config/ObjectData.xml index d1c0003b1..9177bf69a 100644 --- a/Source/SM64 Diagnostic/Config/ObjectData.xml +++ b/Source/SM64 Diagnostic/Config/ObjectData.xml @@ -20,6 +20,10 @@ Act. Dist to Mario Lat. Dist to Mario Angle to Mario + Act. Angle To Mario + Delta Angle To Mario + Mario Angle To Object + Delta Mario Angle To Object Drawing Dist RNG Calls/Frame Parent Object diff --git a/Source/SM64 Diagnostic/Controls/AngleDataContainer.cs b/Source/SM64 Diagnostic/Controls/AngleDataContainer.cs index dc602b1df..3b6b6e25f 100644 --- a/Source/SM64 Diagnostic/Controls/AngleDataContainer.cs +++ b/Source/SM64 Diagnostic/Controls/AngleDataContainer.cs @@ -165,7 +165,9 @@ public double AngleValue } set { - _angleValue = value; + _angleValue = value % (Math.PI * 2); + if (_angleValue < 0) + _angleValue += Math.PI * 2; UpdateAngleValue(); } } @@ -233,9 +235,8 @@ public void UpdateAngleValue() return; } - double angleValue = _angleValue % (Math.PI * 2); - if (angleValue < 0) - angleValue += Math.PI * 2; + var angleValue = _angleValue; + if (_angleTruncated) { double roundFactor = 65536 / (Math.PI * 2) / 16; @@ -253,7 +254,7 @@ public void UpdateAngleValue() break; case AngleViewModeType.Signed: - _textBoxValue.Text = (-32768 + (ushort)(angleValue / (Math.PI * 2) * 65536)).ToString(); + _textBoxValue.Text = ((short)(angleValue / (Math.PI * 2) * 65536)).ToString(); break; case AngleViewModeType.Unsigned: diff --git a/Source/SM64 Diagnostic/Managers/ObjectManager.cs b/Source/SM64 Diagnostic/Managers/ObjectManager.cs index 7d073a8f7..fd6ba4992 100644 --- a/Source/SM64 Diagnostic/Managers/ObjectManager.cs +++ b/Source/SM64 Diagnostic/Managers/ObjectManager.cs @@ -181,6 +181,10 @@ protected override void InitializeSpecialVariables() new DataContainer("MarioLateralDistanceToObject"), new DataContainer("MarioDistanceToObjectHome"), new DataContainer("MarioLateralDistanceToObjectHome"), + new AngleDataContainer("MarioAngleToObject"), + new AngleDataContainer("MarioDeltaAngleToObject"), + new AngleDataContainer("AngleToMario"), + new AngleDataContainer("DeltaAngleToMario"), new DataContainer("ObjectDistanceToHome"), new DataContainer("LateralObjectDistanceToHome"), new DataContainer("RngCallsPerFrame"), @@ -260,20 +264,24 @@ private void CloneButton_Click(object sender, EventArgs e) private void ProcessSpecialVars() { // Get Mario position - float mX, mY, mZ; + float mX, mY, mZ, mFacing; mX = _stream.GetSingle(Config.Mario.StructAddress + Config.Mario.XOffset); mY = _stream.GetSingle(Config.Mario.StructAddress + Config.Mario.YOffset); mZ = _stream.GetSingle(Config.Mario.StructAddress + Config.Mario.ZOffset); + mFacing = (float)(((_stream.GetUInt32(Config.Mario.StructAddress + Config.Mario.RotationOffset) >> 16) % 65536) / 65536f * 2 * Math.PI); bool firstObject = true; foreach (var objAddress in _currentAddresses) { // Get object position - float objX, objY, objZ; + float objX, objY, objZ, objFacing; objX = _stream.GetSingle(objAddress + Config.ObjectSlots.ObjectXOffset); objY = _stream.GetSingle(objAddress + Config.ObjectSlots.ObjectYOffset); objZ = _stream.GetSingle(objAddress + Config.ObjectSlots.ObjectZOffset); + objFacing = (float)((UInt16)(_stream.GetUInt32(objAddress + Config.ObjectSlots.ObjectRotationOffset)) / 65536f * 2 * Math.PI); + + double angleToMario = Math.PI / 2 - MoreMath.AngleTo(objX, objZ, mX, mZ); // Get object position float objHomeX, objHomeY, objHomeZ; @@ -281,9 +289,10 @@ private void ProcessSpecialVars() objHomeY = _stream.GetSingle(objAddress + Config.ObjectSlots.HomeYOffset); objHomeZ = _stream.GetSingle(objAddress + Config.ObjectSlots.HomeZOffset); - foreach (DataContainer specialVar in _specialWatchVars) + foreach (IDataContainer specialVar in _specialWatchVars) { var newText = ""; + double? newAngle = null; switch (specialVar.SpecialName) { case "MarioDistanceToObject": @@ -310,16 +319,53 @@ private void ProcessSpecialVars() newText = Math.Round(MoreMath.DistanceTo(objX, objZ, objHomeX, objHomeZ), 3).ToString(); break; + case "MarioAngleToObject": + newAngle = angleToMario + Math.PI; + break; + + case "MarioDeltaAngleToObject": + newAngle = mFacing - (angleToMario + Math.PI); + break; + + case "AngleToMario": + newAngle = angleToMario; + break; + + case "DeltaAngleToMario": + newAngle = objFacing - angleToMario; + break; + case "RngCallsPerFrame": newText = GetNumRngCalls(objAddress).ToString(); break; } - if (firstObject) - specialVar.Text = newText; - // Check when multiple objects have different values - else if (specialVar.Text != newText) - specialVar.Text = ""; + if (specialVar is AngleDataContainer) + { + var angleContainer = specialVar as AngleDataContainer; + if (firstObject) + { + angleContainer.ValueExists = newAngle.HasValue; + if (newAngle.HasValue) + angleContainer.AngleValue = newAngle.Value; + } + + newAngle %= Math.PI * 2; + if (newAngle < 0) + newAngle += Math.PI * 2; + + // Check when multiple objects have different values + angleContainer.ValueExists &= newAngle == angleContainer.AngleValue; + } + else if (specialVar is DataContainer) + { + var dataContainer = specialVar as DataContainer; + if (firstObject) + dataContainer.Text = newText; + // Check when multiple objects have different values + else if (dataContainer.Text != newText) + dataContainer.Text = ""; + } } firstObject = false; diff --git a/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs b/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs index c5aafbe24..add846960 100644 --- a/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs +++ b/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs @@ -575,8 +575,8 @@ private BehaviorCriteria UpdateSlot(ObjectSlotData objectData, int index) _mapObjects[currentAddress].Y = BitConverter.ToSingle(_stream.ReadRam(currentAddress + Config.ObjectSlots.ObjectYOffset, 4), 0); _mapObjects[currentAddress].Z = BitConverter.ToSingle(_stream.ReadRam(currentAddress + Config.ObjectSlots.ObjectZOffset, 4), 0); _mapObjects[currentAddress].IsActive = objectData.IsActive; - _mapObjects[currentAddress].Rotation = (float)((UInt16)(BitConverter.ToUInt32( - _stream.ReadRam(currentAddress + Config.ObjectSlots.ObjectRotationOffset, 4), 0)) / 65536f * 360f); + _mapObjects[currentAddress].Rotation = (float)((UInt16)( + _stream.GetUInt32(currentAddress + Config.ObjectSlots.ObjectRotationOffset)) / 65536f * 360f); _mapObjects[currentAddress].UsesRotation = ObjectAssoc.GetObjectMapRotates(behaviorCriteria); } } diff --git a/Source/SM64 Diagnostic/Utilities/MoreMath.cs b/Source/SM64 Diagnostic/Utilities/MoreMath.cs index 4638167f8..0143094b4 100644 --- a/Source/SM64 Diagnostic/Utilities/MoreMath.cs +++ b/Source/SM64 Diagnostic/Utilities/MoreMath.cs @@ -24,5 +24,13 @@ public static double DistanceTo(float x1, float y1, float x2, float y2) dy = y1 - y2; return Math.Sqrt(dx * dx + dy * dy); } + + public static double AngleTo(float xFrom, float yFrom, float xTo, float yTo) + { + float dx, dy; + dx = xTo - xFrom; + dy = yTo - yFrom; + return Math.Atan2(dy, dx); + } } } From 4f8c832dad16ca997dd05ea93ed83addc62696cd Mon Sep 17 00:00:00 2001 From: danebouchie Date: Fri, 2 Dec 2016 02:00:22 -0500 Subject: [PATCH 24/24] Build 0.2.7 --- Source/SM64 Diagnostic/Controls/ObjectSlot.cs | 2 - .../Controls/WatchVariableControl.cs | 15 +- .../Extensions/IEnumerableExtensions.cs | 3 +- .../Extensions/WatchVariableExtensions.cs | 49 ++--- .../Managers/ObjectSlotsManager.cs | 4 +- .../ModifyAddWatchVariableForm.Designer.cs | 193 ------------------ .../ModifyAddWatchVariableForm.cs | 81 -------- .../ModifyAddWatchVariableForm.resx | 129 ------------ Source/SM64 Diagnostic/SM64 Diagnostic.csproj | 9 - Source/SM64 Diagnostic/StroopMainForm.cs | 16 +- .../SM64 Diagnostic/Structs/WatchVariable.cs | 50 ++++- .../Utilities/XmlConfigParser.cs | 2 +- Windows Build/Config/Config.xml | 5 +- Windows Build/Config/MarioData.xml | 8 +- Windows Build/Config/ObjectData.xml | 6 +- Windows Build/Config/TrianglesData.xml | 3 + Windows Build/Stroop.exe | Bin 448512 -> 552448 bytes 17 files changed, 98 insertions(+), 477 deletions(-) delete mode 100644 Source/SM64 Diagnostic/ModifyAddWatchVariableForm.Designer.cs delete mode 100644 Source/SM64 Diagnostic/ModifyAddWatchVariableForm.cs delete mode 100644 Source/SM64 Diagnostic/ModifyAddWatchVariableForm.resx diff --git a/Source/SM64 Diagnostic/Controls/ObjectSlot.cs b/Source/SM64 Diagnostic/Controls/ObjectSlot.cs index 41b076dd7..8070bae82 100644 --- a/Source/SM64 Diagnostic/Controls/ObjectSlot.cs +++ b/Source/SM64 Diagnostic/Controls/ObjectSlot.cs @@ -315,8 +315,6 @@ void UpdateColors() private void OnDrag(object sender, MouseEventArgs e) { - OnClick(new EventArgs()); - MouseState = MouseStateType.Down; UpdateColors(); Refresh(); diff --git a/Source/SM64 Diagnostic/Controls/WatchVariableControl.cs b/Source/SM64 Diagnostic/Controls/WatchVariableControl.cs index 415a4612a..c3c3b0039 100644 --- a/Source/SM64 Diagnostic/Controls/WatchVariableControl.cs +++ b/Source/SM64 Diagnostic/Controls/WatchVariableControl.cs @@ -241,7 +241,7 @@ public WatchVariableControl(ProcessStream stream, WatchVariable watchVar, List Menu.Items.Remove(d)); if (_watchVar.IsObject) + { ObjectDropDownMenu.ForEach(d => Menu.Items.Add(d)); + } } } @@ -526,7 +528,7 @@ private void OnMenuStripClick(object sender, ToolStripItemClickedEventArgs e) } break; case "Select Object": - if (_watchVar.GetByteCount() != 4) + if (_watchVar.ByteCount != 4) return; var slotManager = ManagerContext.Current.ObjectSlotManager; @@ -534,7 +536,8 @@ private void OnMenuStripClick(object sender, ToolStripItemClickedEventArgs e) foreach (var otherOffset in OtherOffsets) { var objAddress = BitConverter.ToUInt32(_watchVar.GetByteData(_stream, otherOffset), 0); - slotManager.SelectedSlotsAddresses.Add(objAddress); + if (ManagerContext.Current.ObjectSlotManager.ObjectSlots.Count(s => s.Address == objAddress) > 0) + slotManager.SelectedSlotsAddresses.Add(objAddress); } break; } diff --git a/Source/SM64 Diagnostic/Extensions/IEnumerableExtensions.cs b/Source/SM64 Diagnostic/Extensions/IEnumerableExtensions.cs index 286c7c11c..edeb04449 100644 --- a/Source/SM64 Diagnostic/Extensions/IEnumerableExtensions.cs +++ b/Source/SM64 Diagnostic/Extensions/IEnumerableExtensions.cs @@ -21,11 +21,12 @@ public static int IndexOfMin(this IEnumerable source) where T : IComparabl T minValue = enumer.Current; int minIndex = 0; - while (enumer.MoveNext()) + for (int index = 1; enumer.MoveNext(); index++) { if (enumer.Current.CompareTo(minValue) < 0) { minValue = enumer.Current; + minIndex = index; } } diff --git a/Source/SM64 Diagnostic/Extensions/WatchVariableExtensions.cs b/Source/SM64 Diagnostic/Extensions/WatchVariableExtensions.cs index 09f929efb..6312916ea 100644 --- a/Source/SM64 Diagnostic/Extensions/WatchVariableExtensions.cs +++ b/Source/SM64 Diagnostic/Extensions/WatchVariableExtensions.cs @@ -21,7 +21,7 @@ public static uint GetRamAddress(this WatchVariable watchVar, ProcessStream stre if (watchVar.AbsoluteAddressing) address = LittleEndianessAddressing.AddressFix((uint)(offsetedAddress - stream.ProcessMemoryOffset), - watchVar.GetByteCount()); + watchVar.ByteCount); else address = offsetedAddress; @@ -32,15 +32,14 @@ public static uint GetProcessAddress(this WatchVariable watchVar, ProcessStream { uint address = GetRamAddress(watchVar, stream, offset, false); return (uint)LittleEndianessAddressing.AddressFix( - (int)(address + stream.ProcessMemoryOffset), watchVar.GetByteCount()); + (int)(address + stream.ProcessMemoryOffset), watchVar.ByteCount); } public static byte[] GetByteData(this WatchVariable watchVar, ProcessStream stream, uint offset) { // Get dataBytes - var byteCount = WatchVariable.TypeSize[watchVar.Type]; var dataBytes = stream.ReadRam(watchVar.OtherOffset ? offset + watchVar.Address - : watchVar.Address, byteCount, watchVar.AbsoluteAddressing); + : watchVar.Address, watchVar.ByteCount, watchVar.AbsoluteAddressing); // Make sure offset is a valid pointer if (watchVar.OtherOffset && offset == 0) @@ -95,7 +94,7 @@ public static string GetStringValue(this WatchVariable watchVar, ProcessStream s // Print hex if (watchVar.UseHex) - return "0x" + dataValue.ToString("X" + WatchVariable.TypeSize[watchVar.Type] * 2); + return "0x" + dataValue.ToString("X" + watchVar.ByteCount * 2); // Print signed if (watchVar.Type == typeof(Int64)) @@ -154,8 +153,7 @@ public static byte[] GetBytesFromAngleString(this WatchVariable watchVar, Proces } } - var byteCount = WatchVariable.TypeSize[watchVar.Type]; - return BitConverter.GetBytes(writeValue).Take(byteCount).ToArray(); + return BitConverter.GetBytes(writeValue).Take(watchVar.ByteCount).ToArray(); } public static bool SetAngleStringValue(this WatchVariable watchVar, ProcessStream stream, uint offset, string value, WatchVariableControl.AngleViewModeType viewMode) @@ -167,9 +165,8 @@ public static bool SetAngleStringValue(this WatchVariable watchVar, ProcessStrea public static string GetAngleStringValue(this WatchVariable watchVar, ProcessStream stream, uint offset, WatchVariableControl.AngleViewModeType viewMode, bool truncated = false) { // Get dataBytes - var byteCount = WatchVariable.TypeSize[watchVar.Type]; var dataBytes = stream.ReadRam(watchVar.OtherOffset ? offset + watchVar.Address - : watchVar.Address, byteCount, watchVar.AbsoluteAddressing); + : watchVar.Address, watchVar.ByteCount, watchVar.AbsoluteAddressing); // Make sure offset is a valid pointer if (watchVar.OtherOffset && offset == 0) @@ -195,7 +192,7 @@ public static string GetAngleStringValue(this WatchVariable watchVar, ProcessStr // Print hex if (watchVar.UseHex) { - if (viewMode == WatchVariableControl.AngleViewModeType.Recommended && WatchVariable.TypeSize[watchVar.Type] == 4) + if (viewMode == WatchVariableControl.AngleViewModeType.Recommended && watchVar.ByteCount == 4) return "0x" + dataValue.ToString("X8"); else return "0x" + ((UInt16)dataValue).ToString("X4"); @@ -232,9 +229,8 @@ public static string GetAngleStringValue(this WatchVariable watchVar, ProcessStr public static bool GetBoolValue(this WatchVariable watchVar, ProcessStream stream, uint offset) { // Get dataBytes - var byteCount = WatchVariable.TypeSize[watchVar.Type]; var dataBytes = stream.ReadRam(watchVar.OtherOffset ? offset + watchVar.Address - : watchVar.Address, byteCount, watchVar.AbsoluteAddressing); + : watchVar.Address, watchVar.ByteCount, watchVar.AbsoluteAddressing); // Get Uint64 value var intBytes = new byte[8]; @@ -255,9 +251,8 @@ public static bool GetBoolValue(this WatchVariable watchVar, ProcessStream strea public static void SetBoolValue(this WatchVariable watchVar, ProcessStream stream, uint offset, bool value) { // Get dataBytes - var byteCount = WatchVariable.TypeSize[watchVar.Type]; var address = watchVar.OtherOffset ? offset + watchVar.Address : watchVar.Address; - var dataBytes = stream.ReadRam(address, byteCount, watchVar.AbsoluteAddressing); + var dataBytes = stream.ReadRam(address, watchVar.ByteCount, watchVar.AbsoluteAddressing); if (watchVar.InvertBool) value = !value; @@ -280,9 +275,9 @@ public static void SetBoolValue(this WatchVariable watchVar, ProcessStream strea dataValue = value ? 1U : 0U; } - var writeBytes = new byte[byteCount]; + var writeBytes = new byte[watchVar.ByteCount]; var valueBytes = BitConverter.GetBytes(dataValue); - Array.Copy(valueBytes, 0, writeBytes, 0, byteCount); + Array.Copy(valueBytes, 0, writeBytes, 0, watchVar.ByteCount); stream.WriteRam(writeBytes, address, watchVar.AbsoluteAddressing); } @@ -290,10 +285,9 @@ public static void SetBoolValue(this WatchVariable watchVar, ProcessStream strea public static byte[] GetBytesFromString(this WatchVariable watchVar, ProcessStream stream, uint offset, string value) { // Get dataBytes - var byteCount = WatchVariable.TypeSize[watchVar.Type]; var address = watchVar.OtherOffset ? offset + watchVar.Address : watchVar.Address; var dataBytes = new byte[8]; - stream.ReadRam(address, byteCount, watchVar.AbsoluteAddressing).CopyTo(dataBytes, 0); + stream.ReadRam(address, watchVar.ByteCount, watchVar.AbsoluteAddressing).CopyTo(dataBytes, 0); UInt64 oldValue = BitConverter.ToUInt64(dataBytes, 0); UInt64 newValue; @@ -353,9 +347,9 @@ public static byte[] GetBytesFromString(this WatchVariable watchVar, ProcessStre if (watchVar.Mask.HasValue) newValue = (newValue & watchVar.Mask.Value) | ((~watchVar.Mask.Value) & oldValue); - var writeBytes = new byte[byteCount]; + var writeBytes = new byte[watchVar.ByteCount]; var valueBytes = BitConverter.GetBytes(newValue); - Array.Copy(valueBytes, 0, writeBytes, 0, byteCount); + Array.Copy(valueBytes, 0, writeBytes, 0, watchVar.ByteCount); return writeBytes; } @@ -374,20 +368,5 @@ public static bool SetBytes(this WatchVariable watchVar, ProcessStream stream, u return stream.WriteRam(dataBytes, watchVar.OtherOffset ? offset + watchVar.Address : watchVar.Address, watchVar.AbsoluteAddressing); } - - public static int GetByteCount(this WatchVariable watchVar) - { - return WatchVariable.TypeSize[watchVar.Type]; - } - - public static Type GetStringType(string str) - { - return WatchVariable.StringToType[str]; - } - - public static string GetTypeString(this WatchVariable watchVar) - { - return WatchVariable.StringToType.First(t => t.Value == watchVar.Type).Key; - } } } diff --git a/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs b/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs index add846960..236e4b442 100644 --- a/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs +++ b/Source/SM64 Diagnostic/Managers/ObjectSlotsManager.cs @@ -117,7 +117,7 @@ private void OnClick(object sender, EventArgs e) } else { - if (!keyboardState.IsKeyDown(Key.ControlLeft) && !keyboardState.IsKeyDown(Key.ControlRight)) + if (!(keyboardState.IsKeyDown(Key.ControlLeft) || keyboardState.IsKeyDown(Key.ControlRight))) { SelectedSlotsAddresses.Clear(); } @@ -493,7 +493,7 @@ private BehaviorCriteria UpdateSlot(ObjectSlotData objectData, int index) case SlotLabelType.SlotIndex: labelText = String.Format("{0}", (objectData.Address - Config.ObjectSlots.LinkStartAddress) - / Config.ObjectSlots.StructSize); + / Config.ObjectSlots.StructSize + (Config.SlotIndexsFromOne ? 1 : 0)); break; case SlotLabelType.SlotPos: diff --git a/Source/SM64 Diagnostic/ModifyAddWatchVariableForm.Designer.cs b/Source/SM64 Diagnostic/ModifyAddWatchVariableForm.Designer.cs deleted file mode 100644 index bb66c87d1..000000000 --- a/Source/SM64 Diagnostic/ModifyAddWatchVariableForm.Designer.cs +++ /dev/null @@ -1,193 +0,0 @@ -namespace SM64_Diagnostic -{ - partial class ModifyAddWatchVariableForm - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.buttonOk = new System.Windows.Forms.Button(); - this.fileSystemWatcher1 = new System.IO.FileSystemWatcher(); - this.textBoxName = new System.Windows.Forms.TextBox(); - this.label1 = new System.Windows.Forms.Label(); - this.labelType = new System.Windows.Forms.Label(); - this.comboBoxType = new System.Windows.Forms.ComboBox(); - this.maskedTextBoxAddress = new System.Windows.Forms.MaskedTextBox(); - this.labelAddress = new System.Windows.Forms.Label(); - this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components); - this.checkBoxAbsolute = new System.Windows.Forms.CheckBox(); - this.buttonCancel = new System.Windows.Forms.Button(); - ((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcher1)).BeginInit(); - ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit(); - this.SuspendLayout(); - // - // buttonOk - // - this.buttonOk.Anchor = System.Windows.Forms.AnchorStyles.Bottom; - this.buttonOk.Location = new System.Drawing.Point(90, 195); - this.buttonOk.Name = "buttonOk"; - this.buttonOk.Size = new System.Drawing.Size(104, 38); - this.buttonOk.TabIndex = 0; - this.buttonOk.Text = "OK"; - this.buttonOk.UseVisualStyleBackColor = true; - this.buttonOk.Click += new System.EventHandler(this.buttonOk_Click); - // - // fileSystemWatcher1 - // - this.fileSystemWatcher1.EnableRaisingEvents = true; - this.fileSystemWatcher1.SynchronizingObject = this; - // - // textBoxName - // - this.textBoxName.Anchor = System.Windows.Forms.AnchorStyles.None; - this.textBoxName.Location = new System.Drawing.Point(164, 50); - this.textBoxName.Name = "textBoxName"; - this.textBoxName.Size = new System.Drawing.Size(211, 26); - this.textBoxName.TabIndex = 1; - // - // label1 - // - this.label1.Anchor = System.Windows.Forms.AnchorStyles.None; - this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(107, 53); - this.label1.Name = "label1"; - this.label1.Size = new System.Drawing.Size(51, 20); - this.label1.TabIndex = 2; - this.label1.Text = "Name"; - // - // labelType - // - this.labelType.Anchor = System.Windows.Forms.AnchorStyles.None; - this.labelType.AutoSize = true; - this.labelType.Location = new System.Drawing.Point(111, 85); - this.labelType.Name = "labelType"; - this.labelType.Size = new System.Drawing.Size(47, 20); - this.labelType.TabIndex = 3; - this.labelType.Text = "Type:"; - // - // comboBoxType - // - this.comboBoxType.Anchor = System.Windows.Forms.AnchorStyles.None; - this.comboBoxType.FormattingEnabled = true; - this.comboBoxType.Items.AddRange(new object[] { - "char", - "byte", - "int16", - "uint16", - "int32", - "uint32", - "int64", - "uint64"}); - this.comboBoxType.Location = new System.Drawing.Point(164, 82); - this.comboBoxType.Name = "comboBoxType"; - this.comboBoxType.Size = new System.Drawing.Size(125, 28); - this.comboBoxType.TabIndex = 4; - // - // maskedTextBoxAddress - // - this.maskedTextBoxAddress.Anchor = System.Windows.Forms.AnchorStyles.None; - this.maskedTextBoxAddress.Location = new System.Drawing.Point(164, 116); - this.maskedTextBoxAddress.Mask = "\\0xaaAAAAAA"; - this.maskedTextBoxAddress.Name = "maskedTextBoxAddress"; - this.maskedTextBoxAddress.Size = new System.Drawing.Size(125, 26); - this.maskedTextBoxAddress.TabIndex = 6; - // - // labelAddress - // - this.labelAddress.Anchor = System.Windows.Forms.AnchorStyles.None; - this.labelAddress.AutoSize = true; - this.labelAddress.Location = new System.Drawing.Point(86, 119); - this.labelAddress.Name = "labelAddress"; - this.labelAddress.Size = new System.Drawing.Size(72, 20); - this.labelAddress.TabIndex = 7; - this.labelAddress.Text = "Address:"; - // - // checkBoxAbsolute - // - this.checkBoxAbsolute.AutoSize = true; - this.checkBoxAbsolute.Location = new System.Drawing.Point(90, 148); - this.checkBoxAbsolute.Name = "checkBoxAbsolute"; - this.checkBoxAbsolute.Size = new System.Drawing.Size(182, 24); - this.checkBoxAbsolute.TabIndex = 8; - this.checkBoxAbsolute.Text = "Absolute Addressing"; - this.checkBoxAbsolute.UseVisualStyleBackColor = true; - // - // buttonCancel - // - this.buttonCancel.Anchor = System.Windows.Forms.AnchorStyles.Bottom; - this.buttonCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.buttonCancel.Location = new System.Drawing.Point(242, 195); - this.buttonCancel.Name = "buttonCancel"; - this.buttonCancel.Size = new System.Drawing.Size(104, 38); - this.buttonCancel.TabIndex = 9; - this.buttonCancel.Text = "Cancel"; - this.buttonCancel.UseVisualStyleBackColor = true; - this.buttonCancel.Click += new System.EventHandler(this.buttonCancel_Click); - // - // ModifyAddWatchVariableForm - // - this.AcceptButton = this.buttonOk; - this.AutoScaleDimensions = new System.Drawing.SizeF(9F, 20F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.CancelButton = this.buttonCancel; - this.ClientSize = new System.Drawing.Size(428, 264); - this.Controls.Add(this.buttonCancel); - this.Controls.Add(this.checkBoxAbsolute); - this.Controls.Add(this.labelAddress); - this.Controls.Add(this.maskedTextBoxAddress); - this.Controls.Add(this.comboBoxType); - this.Controls.Add(this.labelType); - this.Controls.Add(this.label1); - this.Controls.Add(this.textBoxName); - this.Controls.Add(this.buttonOk); - this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog; - this.MaximizeBox = false; - this.MinimizeBox = false; - this.Name = "ModifyAddWatchVariableForm"; - this.ShowIcon = false; - this.Text = "Watch Variable"; - ((System.ComponentModel.ISupportInitialize)(this.fileSystemWatcher1)).EndInit(); - ((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit(); - this.ResumeLayout(false); - this.PerformLayout(); - - } - - #endregion - - private System.Windows.Forms.Button buttonOk; - private System.Windows.Forms.BindingSource bindingSource1; - private System.IO.FileSystemWatcher fileSystemWatcher1; - private System.Windows.Forms.MaskedTextBox maskedTextBoxAddress; - private System.Windows.Forms.ComboBox comboBoxType; - private System.Windows.Forms.Label labelType; - private System.Windows.Forms.Label label1; - private System.Windows.Forms.TextBox textBoxName; - private System.Windows.Forms.Label labelAddress; - private System.Windows.Forms.CheckBox checkBoxAbsolute; - private System.Windows.Forms.Button buttonCancel; - } -} \ No newline at end of file diff --git a/Source/SM64 Diagnostic/ModifyAddWatchVariableForm.cs b/Source/SM64 Diagnostic/ModifyAddWatchVariableForm.cs deleted file mode 100644 index 06f9af16d..000000000 --- a/Source/SM64 Diagnostic/ModifyAddWatchVariableForm.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Data; -using System.Drawing; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using System.Windows.Forms; -using SM64_Diagnostic.Utilities; -using SM64_Diagnostic.Structs; -using SM64_Diagnostic.Extensions; - -namespace SM64_Diagnostic -{ - public partial class ModifyAddWatchVariableForm : Form - { - WatchVariable _value = new WatchVariable(); - - public WatchVariable Value - { - get - { - return _value; - } - } - - public ModifyAddWatchVariableForm() - { - InitializeComponent(); - } - - public ModifyAddWatchVariableForm(WatchVariable watchVar) - { - InitializeComponent(); - textBoxName.Text = watchVar.Name; - comboBoxType.SelectedItem = watchVar.Type; - maskedTextBoxAddress.Text = watchVar.Address.ToString(); - checkBoxAbsolute.Checked = watchVar.AbsoluteAddressing; - } - - private void buttonOk_Click(object sender, EventArgs e) - { - // Parse data and close - if (ResultValid()) - { - this.DialogResult = DialogResult.OK; - this.Close(); - } - } - - private bool ResultValid() - { - uint address; - if (comboBoxType.SelectedIndex < 0) - { - MessageBox.Show("Select a value type!"); - return false; - } - else if (ParsingUtilities.TryParseHex(maskedTextBoxAddress.Text, out address)) - { - MessageBox.Show("Enter a valid address!"); - return false; - } - - WatchVariable watchVar = new WatchVariable(); - watchVar.Name = textBoxName.Text; - watchVar.Type = WatchVariableExtensions.GetStringType((string)comboBoxType.SelectedItem); - watchVar.Address = address; - watchVar.AbsoluteAddressing = checkBoxAbsolute.Checked; - _value = watchVar; - - return true; - } - - private void buttonCancel_Click(object sender, EventArgs e) - { - this.Close(); - } - } -} diff --git a/Source/SM64 Diagnostic/ModifyAddWatchVariableForm.resx b/Source/SM64 Diagnostic/ModifyAddWatchVariableForm.resx deleted file mode 100644 index be9529c2d..000000000 --- a/Source/SM64 Diagnostic/ModifyAddWatchVariableForm.resx +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - 207, 17 - - - True - - - 17, 17 - - \ No newline at end of file diff --git a/Source/SM64 Diagnostic/SM64 Diagnostic.csproj b/Source/SM64 Diagnostic/SM64 Diagnostic.csproj index f38892437..da016bb45 100644 --- a/Source/SM64 Diagnostic/SM64 Diagnostic.csproj +++ b/Source/SM64 Diagnostic/SM64 Diagnostic.csproj @@ -129,12 +129,6 @@ - - Form - - - ModifyAddWatchVariableForm.cs - Component @@ -598,9 +592,6 @@ PreserveNewest - - ModifyAddWatchVariableForm.cs - StroopMainForm.cs diff --git a/Source/SM64 Diagnostic/StroopMainForm.cs b/Source/SM64 Diagnostic/StroopMainForm.cs index 07f46cfe0..ecbb19c53 100644 --- a/Source/SM64 Diagnostic/StroopMainForm.cs +++ b/Source/SM64 Diagnostic/StroopMainForm.cs @@ -18,7 +18,7 @@ namespace SM64_Diagnostic { public partial class StroopMainForm : Form { - const string _version = "v0.2.6"; + const string _version = "v0.2.7"; ProcessStream _sm64Stream = null; ObjectSlotManagerGui _slotManagerGui = new ObjectSlotManagerGui(); @@ -282,7 +282,7 @@ private void SetupViews() var watchVar = _miscData[index]; if (watchVar.Special) continue; - var row = _tableOtherData.Rows.Add(watchVar.Name, watchVar.Type.ToString(), "", watchVar.Address); + var row = _tableOtherData.Rows.Add(watchVar.Name, watchVar.TypeName, "", watchVar.Address); _otherDataRowAssoc.Add(index, row); } @@ -311,8 +311,8 @@ private void buttonOtherModify_Click(object sender, EventArgs e) var row = _tableOtherData.Rows[dataGridViewExpressions.SelectedRows[0].Index]; int assoc = _otherDataRowAssoc.FirstOrDefault(v => v.Value == row).Key; - var modifyVar = new ModifyAddWatchVariableForm(_miscData[assoc]); - modifyVar.ShowDialog(); + //var modifyVar = new ModifyAddWatchVariableForm(_miscData[assoc]); + //modifyVar.ShowDialog(); } private void buttonOtherDelete_Click(object sender, EventArgs e) @@ -351,13 +351,13 @@ private void dataGridViewOther_CellMouseDoubleClick(object sender, DataGridViewC var row = _tableOtherData.Rows[dataGridViewExpressions.SelectedRows[0].Index]; int assoc = _otherDataRowAssoc.FirstOrDefault(v => v.Value == row).Key; - var modifyVar = new ModifyAddWatchVariableForm(_miscData[assoc]); - modifyVar.ShowDialog(); + //var modifyVar = new ModifyAddWatchVariableForm(_miscData[assoc]); + //modifyVar.ShowDialog(); } private void buttonOtherAdd_Click(object sender, EventArgs e) { - var modifyVar = new ModifyAddWatchVariableForm(); + /*var modifyVar = new ModifyAddWatchVariableForm(); if(modifyVar.ShowDialog() == DialogResult.OK) { var watchVar = modifyVar.Value; @@ -373,7 +373,7 @@ private void buttonOtherAdd_Click(object sender, EventArgs e) _otherDataRowAssoc.Add(newIndex, row); XmlConfigParser.AddWatchVariableOtherData(watchVar); - } + }*/ } private async void NoTearFlowLayoutPanelObjects_Resize(object sender, EventArgs e) diff --git a/Source/SM64 Diagnostic/Structs/WatchVariable.cs b/Source/SM64 Diagnostic/Structs/WatchVariable.cs index e4ba356f7..fcc578bad 100644 --- a/Source/SM64 Diagnostic/Structs/WatchVariable.cs +++ b/Source/SM64 Diagnostic/Structs/WatchVariable.cs @@ -7,9 +7,25 @@ namespace SM64_Diagnostic.Structs { - public struct WatchVariable + public class WatchVariable { - public Type Type; + Type _type; + public Type Type + { + get + { + return _type; + } + set + { + if (_type == value) + return; + + _type = value; + _byteCount = TypeSize[_type]; + _typeName = StringToType.First(s => s.Value == _type).Key; + } + } public uint Address; public String Name; public String SpecialType; @@ -24,8 +40,34 @@ public struct WatchVariable public bool IsAngle; public Color? BackroundColor; + int _byteCount; + public int ByteCount + { + get + { + return _byteCount; + } + } + + string _typeName; + public string TypeName + { + get + { + return _typeName; + } + set + { + if (_typeName == value || !StringToType.ContainsKey(value)) + return; + + _typeName = value; + _type = StringToType[_typeName]; + _byteCount = TypeSize[_type]; + } + } - public static Dictionary TypeSize = new Dictionary() + readonly static Dictionary TypeSize = new Dictionary() { {typeof(byte), 1}, {typeof(sbyte), 1}, @@ -39,7 +81,7 @@ public struct WatchVariable {typeof(double), 4} }; - public static Dictionary StringToType = new Dictionary() + readonly static Dictionary StringToType = new Dictionary() { { "byte", typeof(byte) }, { "sbyte", typeof(sbyte) }, diff --git a/Source/SM64 Diagnostic/Utilities/XmlConfigParser.cs b/Source/SM64 Diagnostic/Utilities/XmlConfigParser.cs index 65387b811..20eeff96c 100644 --- a/Source/SM64 Diagnostic/Utilities/XmlConfigParser.cs +++ b/Source/SM64 Diagnostic/Utilities/XmlConfigParser.cs @@ -876,7 +876,7 @@ public static WatchVariable GetWatchVariableFromElement(XElement element) bool.Parse(element.Attribute(XName.Get("isBool")).Value) : false; watchVar.IsObject = element.Attribute(XName.Get("isObject")) != null ? bool.Parse(element.Attribute(XName.Get("isObject")).Value) : false; - watchVar.Type = WatchVariableExtensions.GetStringType(element.Attribute(XName.Get("type")).Value); + watchVar.TypeName = (element.Attribute(XName.Get("type")).Value); watchVar.Address = ParsingUtilities.ParseHex(element.Attribute(XName.Get("address")).Value); watchVar.InvertBool = element.Attribute(XName.Get("invertBool")) != null ? bool.Parse(element.Attribute(XName.Get("invertBool")).Value) : false; diff --git a/Windows Build/Config/Config.xml b/Windows Build/Config/Config.xml index 0c9d9460f..0118088e4 100644 --- a/Windows Build/Config/Config.xml +++ b/Windows Build/Config/Config.xml @@ -21,7 +21,7 @@ 0x164 0x168 0x16C - 0xC8 + 0xD4 240 300 @@ -73,6 +73,9 @@ 0x8033b21c 0x8033b218 0x8033b21a + 0x8033b260 + 0x8033b262 + 0x8033b268 2176 4 0 diff --git a/Windows Build/Config/MarioData.xml b/Windows Build/Config/MarioData.xml index ca2e7b408..d4c743671 100644 --- a/Windows Build/Config/MarioData.xml +++ b/Windows Build/Config/MarioData.xml @@ -18,10 +18,10 @@ Roll Yaw Velocity Flying Pull Back - Interaction Object - Using Object - Stood On Object - Held Object + Interaction Object + Using Object + Stood On Object + Held Object HOLP X HOLP Y HOLP Z diff --git a/Windows Build/Config/ObjectData.xml b/Windows Build/Config/ObjectData.xml index d04dd9a2b..9177bf69a 100644 --- a/Windows Build/Config/ObjectData.xml +++ b/Windows Build/Config/ObjectData.xml @@ -20,9 +20,13 @@ Act. Dist to Mario Lat. Dist to Mario Angle to Mario + Act. Angle To Mario + Delta Angle To Mario + Mario Angle To Object + Delta Mario Angle To Object Drawing Dist RNG Calls/Frame - Parent Object + Parent Object Behavior Script Graphic/Model Visible diff --git a/Windows Build/Config/TrianglesData.xml b/Windows Build/Config/TrianglesData.xml index bc8be0599..00e3c1640 100644 --- a/Windows Build/Config/TrianglesData.xml +++ b/Windows Build/Config/TrianglesData.xml @@ -32,6 +32,9 @@ Mario Y Mario Z Closest Vertex + Closest Vertex X + Closest Vertex Y + Closest Vertex Z M. Yaw (Intended) M. Yaw (Facing) Floor Triangle diff --git a/Windows Build/Stroop.exe b/Windows Build/Stroop.exe index 88e99a4dc47bc0ae4346afd1f08e50a879511fb2..c4d8dcb85e245ac015a4861ed4715694f41b4d67 100644 GIT binary patch literal 552448 zcmd?Sd7NBD)dqa$c2DeQ*KyY$_C$t6zAahy2*KKQ_KzJW9U&6neb4{MO!p8ICI^R?zDHu*-wZcl8o z-%%^e`Qw#$q&no-{9%V2cbs=({?HY9b<%P9mB;0G*mK|fvEJb;M%vm^oBE>nTIe{t zHN>1beG3*DZNGD-I4upEJI?b7$GN0I;3M7xohO;Z-+WEG+HRuA)&IWNp0`(e|Ywjn#Gv_xqAwobmm{Eb@^HPbW@Yl3hMcH6VAj)#)l;Gjsr`Ae@#g59Hbm) zwx#h_yR>f}QT zbvoV~4AS|tU_)-F@(|gE132T22u=NgNG7r#8V0gRE2upl*3Vy%?a7oeG*aFcK_(DO zwXp9Us%BcN-rZKMHH50w(JV4E5Sq(-vn0XB$oe(av^I-$ej@6azaIT(Tfm&2@|HAm zb|6BXADTpl+#b0JwmrnU{iYzT?g{N-^Jl%SM3!{L)*!pl9FK2TE>g`lI85`qX^yb5 zdYOz@l7y7eI7Mf=N8@yaOxD74t+`gaQk0<{4eP*kkN2@q{#=mVQ})}xal7)iAia4w z7@Pi=dHM6;G5Ocoyq42w&C+vdg7FJ*xM@LoKGYQ!;NWHp+wqjgD01=~SW>vKJ;A~b zJZgVlNHSB{k*9=ugH_uJ^of^YG!_sKQm(>;aC|{LSV-+2?)n5IC(65krSNg`iM))r zYe0Jl9h6OE;OncCXse-yfeGsqpc3WXftL5cp+D>G$y3JL3nvdwn;JMc*HVVfi8U-F zB@6oyKU8RlXr_o9Vu7c_z=&jc`;uw0Ti8#ZD;+34Fb5Hcgj?7YrI1~jU|mVfj4p9Olv4s*dJ<9MYoaxM=H~j=x8V$01T2?W?d>d zlt>f~1oFIFz)Z*3*8r)m)9s|EJ1K~BARm@-2(1!Ld5+D3x>%K@FA?Pt zTZMsVpMhk^fUqkJJo^kJLk0v`Vc^+kAQ>{C)rEm)pMhk^koOsQ_8Ca}45%k#K1P!K za|?^n80956RNI9sOpjwat2?mFeyy@`-NI6ksChRN@hY3lZLFdN<8FJrAc3{;39w*X zd~bgFAW%A1!f*TOI|lnA3;p_eftm}nI0gA5-A*pqjxyTthWLubfwd` zdEB`M!vb*!KG6yS!=eqRmQ1TF&NwFtw{|P+&`wM#S)LQ=M0R9BI?+9Am79)F)lKrd zc?C2_qDmp7(2xi1l&Dg};F6H*^?7X1u1+(RKZG)1^)$-h5Z+}a~6 zi#Y|$*vWeDLw;wYTj7vMHgV8+ZQ z^sY2OYGg={`P$m2>efEfhB~twl7%DSIm?-3KPOCbXpg$$DjXXpU4xjR`Mo3Qeie=o zAEi)1qYd6P9B&?O7zhSm1Kitn{^N9xYk*$T|8D4PbA5Ujck4Bp-pB2((nWRbalNAg zKTkTh!p|GU&ufBR%v&jD(b$go`mSlPHw_W1fR>NO!8-;A!$sq}yWPUEzS!K!%$M=+LuI|}ZXC1wya6HO}Bi>h3zzmRZy%Q)`;n3O<(@Kx- za0_JsixDZD`AdB%08b=XI0?tmA_^x1ZuU;WQMS8ggW_HVWZ~Wh4l2_!dT4oPASXI;phprzgNBVEuaa*VtF5b|gTcF|$kY!h z!U>_K$dnH$!bzs4$R;0Bgp)>1kxf6ONPcvY{tXrxa2CKaxT}L%!Z`?`>InRy-Q?dK zH)HuYrrWHY{FPgNnV}S+2AhG^C{`U2@=TI5NM@^ZdGdEWSTZFBE^;gA{dml~4XNP? zD%;>3ulB|vlN(=HgObw*2JUn#Scb*DvykN2w34S`P`H&pBbUpr!~o{XCg&bZDp>TT z%Ui-r`qyL_j3<ZG=3NJ>--TcdTjV3u7_JH?tay1R3hInkQ6ip> zS9>54>|(iF84~VKk?&05YpiZXzQ*d52;Z>q{g`}P2w$Q)hkS`@FZjy8gALfsRWRh^ z)edwMXbh=%wM)|&NAYS#(-@ZVDw>Ks7^m^-1WjX<#jBl~#u$oMyETpB1FJQSo{3lc zG>xu_S9>*mE@|vfDD#t~Cu#a((vvlPKj|Fku=Z$nwABEPiSqtZtz>meq|(Xi#7On~ zh4B+|#EJxk$W}gB$~0AHB9U&YVoPfY$7%z7=aFw%_?oL*ldrkj7vV#Y2H*8^`~taW z3wNrD-A+86s$wf_Nu4Hq7m^Pyj*e}qZbQD7YBs|6knmwO6EB}9e67_I`C6+}g|9p$ zXj}DTMBA#}Ks(ykccG?kN4r}&5ODQmv=$TlGI6S(z=AejJ;hI8=8ad+_7nRsah9Lh zn~Bwa;%p{xeL$q`$ppMj5_>VR#!p~Yh*wYZ6CM+1_zBD#@hUDUNEt-_c=dE7((Nr_ zXR;gJ%BDCb%h-;iX~tD&A(b9i#SS7~eg!_-+T>O+H^r-{JsP#C44c3>zB-$X zM<6(@XJPevt0Yg8fZU@?%%NH24CeE7K(c!Zcun573+JQRY$fZ60zlh!Rfrbxdu8bg0QyCm^kxvhXD3v4Lai?i#LVkXG;W&>uJQ zILc#cF4DHV6-cW~aq#Wq2#l$3)o{H)u5pbx%)>$3$I%y42O(|CyMRph;^52MOt^ko z!<9@x%2TwTK?+tOZA&?b`A;){Nb=9A$-j~L@U}#ip*yA?X1?^r0QN7ga|~w1CRx`7 zz3Y7jJ?U0H4u17Zu9nSg; zy1&oM19*Nw?}3M$Ee>+pp&mZtI@{yi3_A)Jfu(#g4k_%S1_zT(*T8M*qTVGqtbPb% zMkw!6B!`lTX795gnzD;po01o;ocW~8pE2h(3dTRT!ZG9BgaPDM^yuP%_AWyqx3ULF ztnPP|T#P4-H!F9Eoy+JN$%XTWWf{>Uxfmv4F2`^r7uv&I#^XpXV|HK_qd@;~Y}#OB z;XpBy^RkCXiTcbTISZs7cfWQ~De23DkfA5E%8_ia%cZt@-r_i@cto!d)Z!&NRkxeJ zP4s!tDMlV5hmnWwH7G9M7i(Yo^BMyBLZp*;AVL5~mRS-eE+%EQ{nlw29gyEa5m z2<2J4MC;1CF)X<%ly^gjVq!7%wRnlvk*8k5C@Nox)=nj|-c>j!p86awxJ?1+fr2NF zK(==^vpkF=8&H2lX^S7VV$cl=sJA~Pzafe8Ukvp5=q9V zlWKD-Gbpp!y9udec2P@GYw>PIdgfZ+?{7iEtsKlYxK&6Qg&IXcjSetQEY$9aagD}{ zSN?^=&_tc^?nD5pjavhL-W_3HCv26NhLM2S6L-Ht=`^Rh-@?QoxBQ{JaQwNqFIID;*?5C~(i?w4ysNnovzuQq{Zbs!GC zxy=h}z%X(CpP{>a7f4%|_ay)=gNu^h-5^d}faYv1_d^9Q9R$WTS;pKJ7}LByF)dn0>m+77~bO$yg*5?&tg^9k=OICUlmx9Uh1?j?!U z66=|6^1h0s?m#5&lZ2o1H6*5aSX`%2>gzZSKa9YiT%TzQ0)L|LEA+yE(=ZWn8FzpV zzs#9{>Vv+=+5T^4E{HpbNKPC3V>9+g+x&+E<4UId$(2gOMcnAq%2dq zY%C}nbCyFd|G5?PZhW}lRw_8F(~NJrvZB*R?>JcGeG`Ylyw7)8ly5b9F)kcfPf{SR zSyg$)m}zvdvfv$2T%+We$*x7`H=Owc4Ajc&IAkz8cVX)7OVHaA@L86@vVByU{!I3| zvCEB?{zhHt9CMA%{{NNy(31a49o>Fy|1Wj)Y)HqBZUrML?tKegzvdTc%>f|a4v=3G zK|B7x(Vo24U-A9@9`Sdkw78dqA(v7vFRS<}cT*$VfoTf_#ehel{erNHr*yu7<>_){s|* zBz71Ey9PMyllt^LlV=XLGKL7yF&6yA$hlu z(q>-{Nlb^3Am~>@^4^gAYDnG}lDCKC7en$6A*BnkjD}pPCf1T5rJ5M^AjQ|87E%xlXim=m#{5jI@<$5!3l=*{NGY~TNNGt<{eI7XD@3_O@SFNmA$hcrA^~H{ z6hmVe683}qCAC4gK~EL(c?R7@A$d?pUJ#NOh2(W1c_YcnjyUS4rz)3_{1x>0t67VD z7O2m)E4hAMlio~9?HiH<6lTR`_ z`6Q#0PjX!QB*(Q+a!mOo2Zv8`aQMw2q*ZrGTXmPTt~*D8Uy45LlXOO3>|r5F2lG)n zjZd=oeUd%uOJI-sBzx2+*`q$m9`#A~s3!d<;dTI!YxAEEVyoK1SaZ`)yDX z@K69hFYrQen+NVl=bCf=@@pW-@6L2*$}b@4Kh{P*_1n-WDR)w?&9+F(9SLNph9+|r zRmMf|#Gecj*o={Z&=mJj5Tu17gw#R5Ru`3FHcG;py1ZO)jn=kXU3BNV=q`29ouX)W zx81?4SEPdpsA0B^?qG{yUCHJJ;9JDnOR_BHar2MW? zhZ3ySQlM@Rt4MD!I!Nb^%XQich^a?H1;R5csz9(7Ux5^OF;qau%HQt5@Nu?W!nwn} z-$}bmVx0FI&XtM~G@~xBtb6H?!V1(KCaXbYEF_HCjoFkq8G!2Th z9pQ+Z5l{z))-atrJ?dtHHT%{uVYGAHnie44o9nPUicmxu0d-EOjOpBdxwPFs#3uQ= zg#Vtf=1gb3SEUsg9fF!OVGJRi{}|mpVhrKht{|o!3+-V#w?nimi1qpQ2>)xLJ&Z*` zOl2bL{f`(&x;MALZVW<^#vq^?Qh^^Zo&P=T&aZ8V#vJCDiH0;Bvluw$Yod_xFK7)W zOt>Mf!%f5w2uG|Tph}@NOxK1RV!eJ-e4P0vzA=&C3#L!BYfLnvgMd0D)FCqFM}3W$ zt;4zzC^rU8_mdCpFe_+>*QFh}mg}u$R&!E?Q1a$oUPED6HC*%Ds zkgHy!7(E%Y=Q7^kC69Et38{H^hMBnqeRhB(6tR&&*84{&?CsEAo%eQ-m%jj3=6db$ zA}YrF0h$Tb*%C3d+xw@Kr(1)(iW=R3H{c%UX+ zF~`hM48Eq;q*3dL!w{=&W@74*P?MC~CR%G^W|c1duY|Q`Xg4}ZLubT)h}G&Orrry6 zO1UkfI*Cp6TUz-0+Jctm#9?%jhR%pP5v$cnOwFJS9pR*0P45yjgHiZ*3U$h~q~~wB zzNKdwYPbAWn1k~Q4Vy1K3f7D%xW$cSq1k_2PP${%)bZ;e? z+0HXz1_zgo_R>U_k-BP2k>xKIxIBnS2RFYD_>~6&hzT=*gEr{mGX(S%2~s zG53Z&K-+@x#e^AOntn&dmoP1e>`Vwn>?5Ea3hiS$e=`Ty*J=hAbFzNFNF(T0lB=4! zJ&5-9+GCkWL>&S3_fQ?vwGKecZ2DyVt`$8B*zXPt{b617vAXE_b@Z!w|Clq;?>{Lu$Wl5!vNApSbJ@h!{6bXC3S~2$J1Ey}4-aA{76|`=QK@E< zWW)62j>aSd5BMFx5Hx7xE;~x z&PotF77XTr3;rgiHJ(}Kw5Wk)G|+T|7_066EMVVm3%$B7`nkI3RdvxT>!MfGMK6z{Sx-9%?aA$g@G>3E z>aU=Qsr$mlVOlP9=kKiBfN2vRNyCDV)mXp|HWrZX$!%du41$10v0qLIHGP?~3slSI7 zFrE8&)B<8=Vcc}1Ey;&5X|i5q`wKVM5YM> z>bX!c)3wtCF*6@s2HKw{zCcn>6Bc@XUG#=1S~E?sxOy)%g6aCR0&{S~;cpUTq*!N1 z;EyyYm-6qnigmh09suqeYN6k#i#}Kv{bpVC&bsJbbovh z1X2h6YF+fcy6Ek7(J$6T?}(!L7?zZ|f7tHLW>-1(lpg0y=dl8C@>sS}nx-Wl!%?Kx2yYVNcR)jV&ovXPqE!YHqg(L;e3{9W|852kw z6G-RLht4Q7m{V&8F?CsJ2GhBT(UC8h*#=612SYRHvBnJ2#thOqZ#Aq8FvZQ%GYHjp+pkj{NQy)3v4%%hi}Bn7QvDg?!T(_Kj(z6Y9u%rZLNyMmjeo zY8NqeM`#z*wRTCl8oLBDmk_0pZx<&XV;AX!`bj;zm}TrDom&vKi>`~|gOpzDV$3pjk%o&!T%DLYHnfZBTDzoNja`D7)uR;h?c(HX z>>`~|7uU0kS;j8X`A?2=F~aJ}&@`rNO(Rz8VuG3FwG{GA;|jo-MmnM1s%ILrjA^9N zWT)7!PfX3o1YOB=tzA;Crpbtzjfa%+&EgWom_<6F_N4HgYJvr`j9H{}hvuRHAtV;O1ncW_N{@H>l{o^Jbh7MY1n z@xFFzN`b~~(3-+C84tG%q5l3aJQ6b(r!}p&>Rg!zSF)HemrykQjzlJ5njhIS5Q^*> z2&n$h2&VJjaqClSi6S*u;B%+RhS{$llx^{~~%HSW|EKs*7FKXn*mLam^exWQMF5`f@v&?B6ki1 zGx1&u9L55=v6wb0=w7)4bI03boR}(y3WTRdfnX+TOM$ha0;Y`udg{ced_wB_P(IVO z6(DA!ukb$*if7u0r^^R1g$WZ=G_7L_X}Pc&2`fY+TEJISy6io-OwTkb%+e~3j4C!jWCq4hEv zBt0)wDnbs7{`M>}6B#+`O%+Jz(z!*pLSpKqP@eE?6&*Ol%rzR}zdo!4)2721ON=hk z&=q+=m6*CK)FnK{s4imWcXNgR*-#hLMi(QL(M1}%2JCtfQ?G@(gl8nGOUoFMb`}1% z-k@`Io{k5Mdq$V0-<2|?p*Qk8HZhf@9K9MBp3S3riJ2WYX>%=H%FYXI(0SU1o51H! zJU5fn6OV=7QWw3oF8cYp=xtH7CcIOX+BK{g(~50+Xtc28!p#r9J zTSj}5m>C(u|8Q6_rj56<8;mN_6QjFJLh8v-71Ov}6q&tAbr%segHrUUV7gW-F*7Pi zn^7TU_YN)4d9R8ytpuMxD$XIfFhFa(myD6PN$Id!! z?5s1!&RRWoR(0&G%Gg;ajh&^&&N{s&>(}Tv-?xq#JL|-;vrZU0t2}nrDbcL_E3rC@ z6!w39mxkamf2Pf2{-kr}+8cew3{ld3xzp`gl90MNbUCJTheQL9VCKT86!=N#?@XJ> zLnk!4NaLx_h%#d8kD)T*`9xHiVCJf*6v$2tVh__s8Qt0_BMoIo*fk@jX0WV|IKs1k zRGDCDe|07W4h)qsZIp4K7-gjUqPhsFqeERx=V~e@nCTTMaA~NEX`_oH&*;*$)4;2e znr;YaRCsT@!pv89g+?%)+b3FK!OWFXDe%kC2&Rn@9OK3a(qlez&dlz}s#uVkH%mpt zA4A)i&V4MpQYL1mQsHl$6m&e}N^Vtj&LkEIpTcBb+GC>6e`k-h>Y_C53c`4B^qoD; z?@H@RzS&^;iI*jaYpz#>W5_NaH?Hq%y?R!=W5o=MFtfv! z0>2HFF<_hfIHY^>pW{MpI>YRMm_Ss$7OG%6wWg`D9tjJ?s7%_!8wRe$-spRCqk3`gQ(H04wg_!wIyXCN8!@x96@F`kaq{bn4lqKI0Y)HrE0zhh zcc@S@mqrH_u|7`^D#&lC+A+k;eqH!)CjU$^n2QKw0cm3a>D>0COdwqAx5U(gp$Ss7X5`kNRjby(QitV|FinJ~>wI)6|M&3#8rb2BGm2?13J zEs>(1LaFHVMA*bjDRNiT3=_@SlEwi@=T^x@KRYZEj+j6|JsX-JKZOY67YhTE#RjW=4LFgqRr{!oN7QO6TdN1Zh~cb&XZ@<&2k* zz^ZBddMH-5nr;G}EHvZjr2;tVwFGo9N01*IoYo+x+iMHy$b-^kjWj+1bx2rEroDEQ z&Q0*fg+jdX0iE^I0iAz22H(HQiOwmMVdfOlsQOl{dI!pR__cpj@o>O)d8lbQ6l`CSYGim-L&VEh3}lGCDC6 zo7nOu3X<-QT;39-X5uHNdNv7$In%X2!a>YLAK{-(em%_DtAWciq4q`Q6!>24j}I}k zC;Ip|p-BBjz|o;KOlQ5fWx^tzf03SjOO0nU$9T3#;BO)O_N_vm@50|Exlm+T=(p;k zU$2XPsxEqT6s>V=s*2Q+fVw)YBh&RAn>l^HV@s(A!ggn6Oiydt5hvHQ-hY$s$t|>J zA42M}P&w23$*{;(T*79ZB}Lw<)%>coBl8eP76c&_Um3wjW1AY|NSkd#yw)d}*^_^W z{b_Bmq{#4;z$cm3`_{;hJP|g7P>PgTM7t&X&sd;o-8`Ds%|p5;H)3lhq)rGmGcE2G zT@Da7Lr#iZU#nR+5A)DG^J|)iZe)xj-Gf)Utm+ercnkscOlTF;`7fZ+qE<;ce>RpP z?}k<}ZGsa0)u<;Oz1~YCqMd-6J~ikKrsY+&sCL3;5K57QSVZ>*(?qN1Ujf46WtzuUmw3{PC7aUB-dVc5)hxypUqe`1oJ(7 zLi79GUbjW}2z?OCnNQm?VXPw^wN7$v>j>1hjydYG z&^o4Tts`cvBWj>1hjydYS&^o4Tts`cvBWj>1hjydYd&^o4Tts`cvBWr=|I53()&d`|1uzXoi|h~p`g5aW ze5_Ybl?8nL3?J^Dfg1ZC?%kc0mmq`%050n3{kZ?(-W?&^e7Kji{&27UnO1yL4PinI zeimWIunF+%S|DULe7jqs_o$(LH3wSo5{v$XMW1KUpRwpqTl89szO;t+RsGb0N&E1% z7JQjSf1!r<*>AAmhiYh_s^K8*bF8vp(mu?kiQy*g!<<`u`{l3`IW4aqp8HWSZ2U zi*^gU!M6r(80^a(Ucl%3Qr;x`p<9^;#@ykHt32yeX7lFUZAbfxL7nBsQ{*tH0 z>aTcek5|#J{DN~~Ul!r_80_!V{Ekc&7W9_|FA6{rKJbD76y^gj2|%d=_&?we=a3)p z=h@3cmH7dG{(k?Hs0jc0pRj+967+AH|3=7u@K=8ulFtkIBvDbXe@}c}$RJi~^miez zwv5vCPYU}#2uvV|<4kn>Uv3x9t)ZoR%GIlWx*+o9b}MhmtCvT=>MnV6SjP(O&-VCV zX}54zCQ}Dz&4RDJTl}nM)_eut!dd6wEAST12FRMP!&^98Blya^g|lfQcGiAPp1f*l zI4v>V>wisNRldoDZ#-T4pT@_4b+86xy5XgtwZ4V4g z{aeqkOA)$7u&ZIhtnnqIH~O>%F?D@tkMPWj{+yeZq3sd=`$K!^Yk@K*j55*_qrXB% zNIe(olCm}XHDYFKFZ_QEbHLl8fat|T!sc?C6yJiy z^@fE*A*c=$raF=_nA_IAP(V!W66zM7Dbd{#F|#`o{=-6LGQPYS(rKhow}^aV$_wQS z&(2Z##LV4V;lC`DFXPmAP|~I@+F6MhXC)o(cWZtykeN9Zy+$Gh?g>p3p2bnqh?%Xf z@c$?@jiCb7t=i2=OuZV)lyKsACFwd{DPqjtR?4?*X8Ll2i&uQ(*2(|OskeBQfFf5# zGKEbzl=Cad{13ydH=daSJ`O!P4ID=yhnOu&E&X24-Qv?r8?BzZ}&;1uIO9 zchSzZfU6e<17BYKGU`4&Sz)?4{wd7M`r9-fJ^`I7;~T80HOv>Lf!@`xfW|z$M$Wyf zf3K5;&A>NsK>0w<>IKjzHbc%D$;Dh9cMd`2Cg9sQ`42#ha|+YJv-p_U5}!O~QOe{D zggGRSS=3^3@U>S{hU77eT2UHbmrW&BCRaACEa20>TpEbJ{e69zy1Iyt) z(9wlDxs8is?eWE_czfgGmi{G)#F9nH3xjKpNZQ1*|i}1Xh=cfj;Ot3Uad4 z<86-O9zGzAZ;6)Vvty|fv6O6R>CPm*nScuiqfBelYJA%=RoD`T;R%_xrowWdZOxg@ z-)<6h(-QhSb`PzakkH?;!-uW$9Xq``GT#|(b#~fUe`k(1EQ1Z*wKmM&I2+oV3MihK z7S;a9y0q5b);xr-k>=sO&*K|+XfzjJ{adiRlZHxJ6ZYZUL*23R41U>e^_y_eSm7kd zye8q{bI&O>1^;XQTYG6CJchPaNLIsK5C94)4i?4{mO6M=jH$Soh&AgRN>OV2Q#Uf(fsL)2ifgGv83V z2CyD~u7kN;>KT*IRu(=6*5RbkgDqlaOiNk)8v4h*M$7cq_3#~MBHO5f_wDfehRaf` z-vC$Q8drB9#|!(};*oAkt^R|}CjM|%l&|CPNy~;3YH!#(pv4zXWiKQa#=+>~uM>Zp z;%_$o26s@4!RdPQ;YwoffI6!dxV;v5vKA0+6pe54l~cNXV~E78UEvg{Z%HnkkNigb zVSD4;jK8<=$MxY^_m5#;V9r$|{fA}n?a}fTn#@{dTm&QDUZ%8=jyzA#m)5^Q zX~Q2;+SVJCHt!=!+ohhgNv7TQwxk^-wB2q;3Szh0X+(5u1v09ZjL~g>-iBmMGb1dZA1deFjgpfd2>o~y zp=<5gOwbSOlew0h`t{m#qvRY}PtIuogZ9B^+-t^Gz4p1{L*?AQQF6X($qCvgV$YKs zCFfO3PS8FPIqz&pPT+gv2E+cEBsBV~A4JeT(*+IstHyV?u2+7cU4EAhmOrpw`A9uh zY_NQ}UipaspS8jA7hC187Mk%xN7-I=cTm=fvO(KDXqA2RBbI&kzbN~PRraqRQE$Ug z*xw(u?707;?4FhkYKdX z30XteUu*wy)LI*NrmQu2;bd7@ch62GvLjuI?vd=^aAM*}HZggmCz0zO=^dP`9)WQK z>IpeMC&yRi_?8^s#1a+Dwy40DP$f$EQkyRIHqFY_6i5_*8CVJKNn&?xvYGR_g zLlcwKJ(`%T?$<<4eT&4JSJ7}`6Fn@MS@ndRyVbLD?on^ZxmUd>=RVak!ls<4Cdqk{ znl9(bYKENAL<=;LQoC!SMIEGxR&}f<+EiH+?dnWTj8o@nV!XOk6KQp|COXv3n&?#b zYGQ(VSQB09N1Di}r!|pP&uOAty`%|LKoh;{ubSvn?`mSAYMH^h-q>1KAW>zhfbGO=E&OK^>IrplA?Dov!+&6;RYcWI(k-LHu@^<7Q0s~>4%oO(tR z_Mu%u zsK&nE?PH59ti#6^TUe)$EwQi(KDN}tx_s;t7H0bE zAPX}ccCdw+9$RK%rpuOFnCY`aEX;J;p%!L(?Jx^7-FCQznSNVgVL87ZM_5?i$BwkH zO?>Pq3!CC&D=loQkFBz>O?~WW3+wl>V=Qc%j~#1aoB7yr7FO^v&%&nr*zp!N;A1CP z*r1Oo3mfvWvV{%%*ohW4;$tUS*bE;#*}^vWu~RH;3m-ex!e;u|X%;ri$4MD3o{|`3JWtK@Jb6CKVf|W zPh*(|%9-$YmBnMi-{&mMgukmT%!I#dEX;(zYc0%#zw0c_gum-8%=Fd`7G}EZMhi3j zb(4je4!haHOpo1SVW!J&wJ_6Xc)vDi7Zd(&3$QhRsN;TL2(knByFG+Vg}xX`osS>0=9-!F$OIpccwSeS9WuUMFIy?ZUpxZYPS z%(x!D+!-{ValNlu7+vqvmThUI&$rUX?e4eA7`OYng-t-Y&sgQUkj7JNfo|h&4_IZ4 zyM4pLOz%8sVWxY&X+zGY#igT8HHriUJ~Fw;f2Llf9%-0iy-X58(20k($Q;@W8U zaF89i+xJ7rROpcqGWGdE2$||&3296+wfSKPnaVsCLZ&W{hmfhtk3uMjc0aZ-<8nW- zFynGRwJ_syPgt07xu02>ak(cg%(&cB7G@TFPg|IYct5u=<9g3nm~p*dSeS`;zqBwD z@qT4t#s#0XFyn&1wlLFU&smu1vfo&k>9gNjnCZ0VEzI=V3l?U&ZJmXgetXfvj0^rQ zz}E1pNU-O?DEnkM%Cbma6edkYUJ45Ln|iz)LZ%w8gpjGl??cE`;?)o`b@-nUGF5mj zgaX%l-NKCPy znAu~rTi8s$>^KXX^YQR$KXHJ1uN$ADdudMIXa+2SM3wd@N&O zb9^joVI?2ywy=-+SdWFx^|4+H+t$bWENq^SO$@L#e9C8l&uIT0*M2AA@q+RsWTp~s z6_aE9%N$rLdUmtqQdW?`_EP%Z+s5z0rP&UmvHxCaC- zYRhVoO@##zlhipoGAGl~xV{TdH1wq#y}O}rnPzOZ8F$(MV>)hg?z{m`?@ovxaQaYx zXy$Wi>9EQvS8D4fEYo^z+rEUtnZkCkzQr(!Sz|D@8YZ!545qfGGarV*mCI>$Yqm2U z^R|bA&O{NDk<*bVpfggPc#OkyxK;Ls#iX%Uo&DbbJ8MrN}d8pL4F7(a_HO3iPqVaL%EPv!fe1RzL@& z{HESbt8UO_#hF=5zi% zYSy1dn`Jov7Ulfo*qr}}a=tk>XN~r^#^$Wi{^zkdYqbBR4yVM_ZSlO>Cg`8ou$vi( zXBRKT^Jem}+8H?i1%Jh5XjM0MCLUCaSKh;6QFo>z?gziPrvnVaMe1n0Poug1vmve) z!}b1#xLS)0_J(!+hFAl&A8d##Q0rid7_$nkgJ&9@4IAPMbh;bj3UtOc#MO$2Cabug zP{vPfrcQ4h8c8Ikpzh9$Bv0QRY~*R)qEu5;J-AiR09Lqaa}yGF{fW$BG;ujh&dRY*RAdu zM4OU)HF7YONX~kZb0D7&uU8K1%#Tp+pLO*S-LSr}oULzExyf$jZ;*vY;VTHgal8@o z5ZV#*M9jfeLiy*G_k_jOcaZI7tMBqu*pDxqto{yI`Q-eW%c>ND=EL-Xmniol|6fT~ zctn6WeTUWG2J_KNS9*IRQ{#BEQ~YBA-wv#V3HL{mDb>ORthZK2CixHJ_Os7 z|8&MsR-Ym0u0YVf5VS7o7Vua;-zqR`KFoQWICxSSt3tfLlEMtPsq`le%y|2WQFux_ zUO0lv+{(W|4<+2fok)I&w%BlwTVc!g567krwzy@yER^yNz#%hW+9Y4ZQ_&eM$U6{O zg%uE7rAD_RdKUrQfFQrhS#L4;)-_Jcq}F}BPVJW<*UeOEJxNe2e<~~ zTF!Cqa@rqs8uvhQAKeJU=q<|0tZx{|XuocBwgM*~`_>k4A&~(a>(Mxz!edKxhed-8 zvBFZ=6OUiCQiu+xa3pFCA$)fJe=XxEBO~T4pvm~>o7&{t(=Y%}#S2(yTXCRO?8K~Y z6~8&$X#-YA4gA6HaZ7?Ox{^ix2CZN8PBSXR*^Mu0f2h$S^;WPKYu&VV^i)ibpz#gk z;)PG3wT7BO90X#x)klU~8;6_m-p~UuWqd>9P+ROc-NLIDA3MGwc3gbbB0YL9TDfYA zq!v4%k=SvG%&PdR!oiT27}yr?8pSSJ$=8kUF>ToB90z-*!Jc;Cphn-ISS+5%fOQ$l zj!PKZ656&l9~o|MM~_pYSck5s>$S8eId<+~+chTI8w+0q1*|za><=ltVH3;n#i#bh zY~jmd49De_uw^s)RpAT3;Bsz--3VgY5IQxZI~C)I;UQDF9ZbW(BQ4KZEF&@L#$^<` z6~-=aIqH!b?1B>>0;&bunnQ8+9*2x+01rcA_+{*Iob`BfEZ94WXgy5)G2%LlohcQw z--$V!!)6%^^4^ShIMpP&X0^I`ECQXv3Zw_zME4@^2v8Pwy6c7|BH2f>2;!8>cgQ48 z#oWTZuyen4P19nT{V?`jd(0xzrJN?b0M>x#0QvHccd5)=jCC&GA2Tw(3K{#aYle(f z`v*ewxEC4ClwqFFE3hBXFh{|fVeA6eccmdPIglu?q9NK?wOxk%196mPZYoB}XrYgSmx=P~QMxy>Kl__Z8+O zXQxFtuGwkn%9P9GV_U`(*~J(ppt(&#adW4Aa?WER?G5GGwS7-&*<+$!s=O!dMn~H`dg7vjH`cvDh?e%3-om&X|XX> zr^H5Sv@tkZGzZ(QE{E)&2mU|p7lm(Q%!K`(Xc8do`((2Kp$EWCYRbS@Y6_)l%KZP# zYxH^tZzl5E*oNXsxYe$671!)D>oFxI)V0d7O}&e23r!b3g#q3y$AUtP6yNX;pK4n?_Plw{CY5O&oFJkSO*bS8KSaS)Q+CnQtxY0u=I^^&GHrvs!qI#=rf^LqZ%Aerw=`!L zwKWTH(aM?JSa6SYIP{G`pPNq|;5f5lnemQ0`Ov3vr{WMCCLflVeCYD0$72%0>&MQr ztjWo*K{}B=?2xBh64_6FQSQUl& zTRLb1{<6;dIO+N~O1ohhk9E25RD`8Mj@oOkN4NsJ!gA5d@=2UsPo|%&iVZczPQt3e z<+@%|Zs8|vdyW_21#F<+u=7ce19Np2qcu;xD+FCWZ+eR6wX zeHWIUZaI!0^;`2jgxu9Uluv;T)hmPKsZ3slWZ^VW)5@pg*k7K4TR2_?WGbQBX5uaB z199-qAV)$~2s{!3UKO}oSk00N+yH(SRVkl|RACJc-dQ}H&BHl3v=r~d&N1nI5_D^m zcP{Zy;n3Dxn24L4ymygz|G8q{?e0U5f-c4m8JN8%h7wUDFg(dJJ@NOU-!1yV-@ar-SSBCmgy5KFZzqG?NY*%XJmZ-Z!7jLEz>luElsBl&-F;=U0a-V`|PFQ zx;R~0DLSrrXT^S{KFvPm@VA$iexWNzh7v1Uyg?V8Giyq<^pegz@S3-8D1A@U6j@qF zMtt*+2K>IE^92!o%@)I7E=|y)@7e0cZs(jDCYYrwEB9Gf zdPR#)HFmyO;?Hjsd%@VOUPZ?i_Q!H{&NBq@p+ta6#oZgG^=f*;EMt-jDkNFaPI)zmfG(Z@Sp%J z5xhyjV*{{A@B#s=0XUoB$pWqoz?lRO5%A^!oI!9m0iO=QA%a`u(Bz$m@mBaW4r_SP zs5m76*YM(0u_H*!rf3Z>Llxi0R>?1UFUI#8UP&sxE?_XWI~$9y#^GR%GP*kx=|uhU zec0j2CEH!A-S5hue|FOB?ctM;-SX6U8Q-x>#*Ht1Mms7&?Zp>Ta6EtIz$RU#9-Yae zrGIfycslc$)@|}4;*HkrawTl`S%P3`HxAETG}rbAEZM(==gye<)S=16B{T-%U3@UK-Sy&)s_Ck4w0jK{eyP zy80I*i;HJ~t69AkbT8tqQ#?|@w%NvE5nY|)J_61NzzYb@6>ygTyp&);Kzy9V4*-}J zoFX1|fTHUI@OpxHMg`zw0eCAxJbVQ3j{$fGK|ELnFuRqJc@IH66bNu`0NzjVP5}=K zz;6*`ylqzJ1t4ydJH<5u-W7ln*N+zP$pFOG&M6)s;A;W+6u|`oeh`2X=Y|B#Zf)%R z6*;p4&JMum2;!1DOj;U%&l7wT2bpx?^D?|RNUE6d;>DlW&BFW_FFsH=3%wRE(k(^{ z#7r44VnVHx1+DQSE`ij^!cdPFalfHX*7?lZylxhTV7%B>Hw!KlFa8@YJ=#Lv<1W5f zH)}1keo!~-B4*)oRvm#CGwY(dSs1MG!IMYZ0B4R59y}WVEb$#j^@!r58mbiI7+@)0hMh>RRx z#LZ-eh~ZOSxpicB5D&h0!w*M}EB+pEvpOyC*mEcgn{a@)1>pGvzbW8z0eCUN+XVa| z0Iwj(K-sKj7tMHKI4@$w2yj^dVh7-ePd2Ny0r*pbjC8UdMSFzfajUvn*D|ZG zZWe}0yy(=;La>S#UxmWax;}?2A5{<1IQVbxx6v-$(D3WeV^oXw;iql)2D9!pDX6dWSD%>YmnJ1 z{&=%fqQfAUV2J^|n51BQBj7tH#Y(upOnS?$zL6<0^7>**OF(x0h)xn|$wJGWd|%InO@yOq|K#%q%)rt}sWx7Li0{`{=3%X)jtC51anjKHwu z+Pn9-zjUj%gbaG6(x^+U+U~+{ltwh;o~uV5GVAR>kDL5V>2oysd6`+C4hDwImyZb; z&Vu*Qh_4D5&Vn*uUN2xc3x127pBC_)K&H%>WdZxPF=JKc%Yy|h1)$8Ay9l^{0Ls+3 zrGV7{lvxnZ{b8uz9DpxUJ09f(_+kLE*^77v7hu;Mqy3Kre<$Eh0r*#fcyJz^D+2Hx zf_Nzc;8_9qKEay>yfy%NC!lztfR6+q-LH6xfNum~Gr>az>?#?PcqzKLyMS{8a2&y+ zfGYy9gWyygLGfS2Tqq25kmMjrQ zW$n)_St5+eTF5L}BG_3n)$PG7St8h3vWWROvt)@dDhmbtCBmpI+`adg2&1xgXO=7x zMrC2c>Ms#SW$nu>St5+e+J{-PL>QH|C$g|a7=`ae{NT|z<|Qr>M)4m&d}K6!Ao0v- z92@OmiE#P95sn|ic6RJ={2jQBSt8(ifBkTL-*@&rVfHSFJ4@gB%N&VqH}5g%nms+i z(i9Gk6DTa6fB2bC?O3`@N2l+sitjmc5; zz!wP8*_+iv0r(0*Y&-$J7=UjO{GxyjA2Y-BErM9Afpd!h#O+9@h-*&(4+%io6|NNU z(g1vqoV+B`tZocIT)}gS^91}>05%|991!r?0E`oq_3$I?+*WJo{{etr50A=1wDX;P zRMwxE^#kaaCpRMk5i5LWA5{v|m+$POvM^!M*+=1jA%1WKzl5tB1YJ72&3`HJzY!ma z;KKiR;+fI-KY*LH$5vc>JcSE7V>eu6nxsbv!P4oVi{I8ufVWx?8&~2CjFIyFFEx%Y?W`FornHLgbeU%S@iUK45OMo| zxiMX8(_92g^C|9F&2{+=M@}pqq{V&n<|8MUp42ogEPayVcF>FqW6Lj^y&IH1)%oU% z*}Wi6{OO$iMyftilC^rb=FK_FFD&71KW+SK!}7J}3I=7A7E|b3nADLubo!CkiL9ns z_gqrqc=f@NImMr9mP=lE?!=^{)U}NPJuM%)! z0Alg)6welL?*P1s;IRT88-QORxJbYY0`N-&w-@k=0Q@S!5dm)uz;6)5n-quxw*??B zaydo30t4`_0EBm;{^){cb#DOvm>}L;1NcAyK1GmEYa+4*pj<=vihz#<;Pd3XR=^(x z;L8L*CE$|*2p8AEyjlG+0A=;`3E_Mx0A)$LlYnmqpe(6o3ixgSVyHSr`fIaFZfoMI ztg~e0@+e17yEV+-2B23iqq6?VECzFVL^)Cl0{xZCs8auCmaJSxW&Mj;vT_-f^)9ny zM_~511t@mr+>`9+TC2JBqi{Z|iC{hohaUvN{6(%@V(8*% zFb~$eYktTEc^T2ezBK$8!6$0K#|eI;2K*7hTWdg!FWn}#%%1=pJi|tQN@SIdUZwIy{Yi|c8 z)pW#>n7%idv~L9_KkQau>)5y8!Qb|)!(77@IbhSIVR;_Cb@cDs%a?UUnG%x*?cC;byhh?|57&r>%R_- zy#?zJhfjQj`kw=X)hjq`R2#^TI=9NPO^&!_&(CvqHtJJCpY)GEcQ)x%vp%KtsYRc( zkWODpy9USU(|CPK>r;n5b?VcEOlMc7GgEV4wliCN5_j^`S$*%OJKY`jNoP;GM=ywa z)4h4Qb2=YHF@{^SlRzBbdsMpA#4w@3(&yny#WfVyo8RyLzbz>J5&&ox9XYXhgwB!s zq*=hP{jOux$QB@ojBH!nQRh$p@d+=ED8Rot{GwM&-_atDtL*mLNVzzbEIn${JTr&g zPnB&N4R0bMQaQzU@R$O4!@G#x7)8aGG#cJU+>_`}G&&f_<)mD^U!zllTaFJAy-}mH z175s!=@ie`=)3^kf@oQzuceH=4)=)fY#bak zWMVMylX%e3r{w-%XICQKRXqvA4tC2m@sHt|^%u_K(z_oQC;R=2lieyiANGERmAwK7 zH8n_HK-BAAACP(R1U_W zLdV2Wpq|?A#X=yD23xbda3wgw)x5y;hZLPO3ep9?&J_eRdq(p|A&Y-9_%|X7Q5u9AII{&e>gjB^KlcImdS!EJvBXD zR$RWj41XSXrmWy!#yy%uf5*W3E<8@;b_}HZs<>en2QjgVi)|z(Rb5R?u3`ZePY+aa z^&#G$&Q(7l=X@2HK9HVLT_WdAs!QcOwR$Mdotq}on|ipyml$qQyP%!)yPsIj+=I9< zr~e(S+FR3EOh;Kg9bt*sB;TkgT#eT8u-{7nY7U_)wwqi?rjr(Sq>r^)*wKRNWtfga z^*Fz@t>q{mONIPZT(}g?Ef%&)u*S4yboE#tYq$805iEn@S3MDA zES*S?v$AooOR(`4wuz6WEo_R9by(O`AM3QRO?_;Fh4lkVc(??c@Ni8h)j3$?mDrBK z!nI5drH3l)(QWo)OxLt5O!Y%&+Y*iYcqp`UI6drLhw?{HK@`}2DN@&msRH&tsm_t~ zP?~I#ksevP(i9;rFEEsEK$+^n&<N0Qz zhFSO_z|qh*qMCCqK*YxDHiPRk*zEZ~)xgcqf-mWPX%)eo^VP0cpW6G(%dpnKTFl8| zacbkQV{yG4{5vCt*f_7Xzl^-!)ZkZPzq=RmUaQ&nZi&LgKZ&y~XCLsL0lhy1*p7Vu z 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

hZ>UTSY+CP+SlI(^5J}2LiXaEgKmQhPe7@9S$ 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

R(4{MPefAsC3A-v>O6Ln5i$X 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