From 91fd01686801d455ee2faf9ffcae405e28ee5673 Mon Sep 17 00:00:00 2001 From: feos Date: Sun, 21 Aug 2016 21:19:48 +0300 Subject: [PATCH] setup psx tracer because why not arguments string doesn't arrive for some reason, otherwise all looks good move psx disasm functionality to separate files (disassembler doesn't do anything yet) --- .../BizHawk.Emulation.Cores.csproj | 9 ++ .../Sony/PSX/Octoshock.IDebuggable.cs | 91 ++++++++++++ .../Sony/PSX/Octoshock.IDisassemblable.cs | 38 +++++ .../Consoles/Sony/PSX/Octoshock.ITraceable.cs | 38 +++++ .../Consoles/Sony/PSX/Octoshock.cs | 137 +++--------------- output/dll/octoshock.dll | Bin 927744 -> 927744 bytes psx/octoshock/psx/cpu.cpp | 42 +++--- psx/octoshock/psx/cpu.h | 4 +- psx/octoshock/psx/psx.cpp | 6 +- 9 files changed, 228 insertions(+), 137 deletions(-) create mode 100644 BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.IDebuggable.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.IDisassemblable.cs create mode 100644 BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.ITraceable.cs diff --git a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj index cd722ecb05..527b2b44b6 100644 --- a/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj +++ b/BizHawk.Emulation.Cores/BizHawk.Emulation.Cores.csproj @@ -984,6 +984,15 @@ Code + + Octoshock.cs + + + Octoshock.cs + + + Octoshock.cs + diff --git a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.IDebuggable.cs b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.IDebuggable.cs new file mode 100644 index 0000000000..f94fce366a --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.IDebuggable.cs @@ -0,0 +1,91 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Sony.PSX +{ + public unsafe partial class Octoshock : IDebuggable + { + // TODO: don't cast to int, and are any of these not 32 bit? + public IDictionary GetCpuFlagsAndRegisters() + { + Dictionary ret = new Dictionary(); + var regs = new OctoshockDll.ShockRegisters_CPU(); + + OctoshockDll.shock_GetRegisters_CPU(psx, ref regs); + + //ret[ "r1"] = (int)regs.GPR[ 1]; ret[ "r2"] = (int)regs.GPR[ 2]; ret[ "r3"] = (int)regs.GPR[ 3]; + //ret[ "r4"] = (int)regs.GPR[ 4]; ret[ "r5"] = (int)regs.GPR[ 5]; ret[ "r6"] = (int)regs.GPR[ 6]; ret[ "r7"] = (int)regs.GPR[ 7]; + //ret[ "r8"] = (int)regs.GPR[ 8]; ret[ "r9"] = (int)regs.GPR[ 9]; ret["r10"] = (int)regs.GPR[10]; ret["r11"] = (int)regs.GPR[11]; + //ret["r12"] = (int)regs.GPR[12]; ret["r13"] = (int)regs.GPR[13]; ret["r14"] = (int)regs.GPR[14]; ret["r15"] = (int)regs.GPR[15]; + //ret["r16"] = (int)regs.GPR[16]; ret["r17"] = (int)regs.GPR[17]; ret["r18"] = (int)regs.GPR[18]; ret["r19"] = (int)regs.GPR[19]; + //ret["r20"] = (int)regs.GPR[20]; ret["r21"] = (int)regs.GPR[21]; ret["r22"] = (int)regs.GPR[22]; ret["r23"] = (int)regs.GPR[23]; + //ret["r24"] = (int)regs.GPR[24]; ret["r25"] = (int)regs.GPR[25]; ret["r26"] = (int)regs.GPR[26]; ret["r27"] = (int)regs.GPR[27]; + //ret["r28"] = (int)regs.GPR[28]; ret["r29"] = (int)regs.GPR[29]; ret["r30"] = (int)regs.GPR[30]; ret["r31"] = (int)regs.GPR[31]; + + ret[ "at"] = (int)regs.GPR[ 1]; + ret[ "v0"] = (int)regs.GPR[ 2]; ret[ "v1"] = (int)regs.GPR[ 3]; + ret[ "a0"] = (int)regs.GPR[ 4]; ret[ "a1"] = (int)regs.GPR[ 5]; ret[ "a2"] = (int)regs.GPR[ 6]; ret[ "a3"] = (int)regs.GPR[ 7]; + ret[ "t0"] = (int)regs.GPR[ 8]; ret[ "t1"] = (int)regs.GPR[ 9]; ret[ "t2"] = (int)regs.GPR[10]; ret[ "t3"] = (int)regs.GPR[11]; + ret[ "t4"] = (int)regs.GPR[12]; ret[ "t5"] = (int)regs.GPR[13]; ret[ "t6"] = (int)regs.GPR[14]; ret[ "t7"] = (int)regs.GPR[15]; + ret[ "s0"] = (int)regs.GPR[16]; ret[ "s1"] = (int)regs.GPR[17]; ret[ "s2"] = (int)regs.GPR[18]; ret[ "s3"] = (int)regs.GPR[19]; + ret[ "s4"] = (int)regs.GPR[20]; ret[ "s5"] = (int)regs.GPR[21]; ret[ "s6"] = (int)regs.GPR[22]; ret[ "s7"] = (int)regs.GPR[23]; + ret[ "t8"] = (int)regs.GPR[24]; ret[ "t9"] = (int)regs.GPR[25]; + ret[ "k0"] = (int)regs.GPR[26]; ret[ "k1"] = (int)regs.GPR[27]; + ret[ "gp"] = (int)regs.GPR[28]; + ret[ "sp"] = (int)regs.GPR[29]; + ret[ "fp"] = (int)regs.GPR[30]; + ret[ "ra"] = (int)regs.GPR[31]; + + ret[ "pc"] = (int)regs.PC; + ret[ "lo"] = (int)regs.LO; + ret[ "hi"] = (int)regs.HI; + ret[ "sr"] = (int)regs.SR; + ret["cause"] = (int)regs.CAUSE; + ret[ "epc"] = (int)regs.EPC; + + return ret; + } + + static Dictionary CpuRegisterIndices = new Dictionary() { + { "r1", 1 }, { "r2", 2 }, { "r3", 3 }, { "r4", 4 }, { "r5", 5 }, { "r6", 6 }, { "r7", 7 }, + { "r8", 8 }, { "r9", 9 }, { "r10", 10 }, { "r11", 11 }, { "r12", 12 }, { "r13", 13 }, { "r14", 14 }, { "r15", 15 }, + { "r16", 16 }, { "r17", 17 }, { "r18", 18 }, { "r19", 19 }, { "r20", 20 }, { "r21", 21 }, { "r22", 22 }, { "r23", 23 }, + { "r24", 24 }, { "r25", 25 }, { "r26", 26 }, { "r27", 27 }, { "r28", 28 }, { "r29", 29 }, { "r30", 30 }, { "r31", 31 }, + + { "at", 1 }, { "v0", 2 }, { "v1", 3 }, + { "a0", 4 }, { "a1", 5 }, { "a2", 6 }, { "a3", 7 }, + { "t0", 8 }, { "t1", 9 }, { "t2", 10 }, { "t3", 11 }, { "t4", 12 }, { "t5", 13 }, { "t6", 14 }, { "t7", 15 }, + { "s0", 16 }, { "s1", 17 }, { "s2", 18 }, { "s3", 19 }, { "s4", 20 }, { "s5", 21 }, { "s6", 22 }, { "s7", 23 }, + { "t8", 24 }, { "t9", 25 }, + { "k0", 26 }, { "k1", 27 }, + { "gp", 28 }, { "sp", 29 }, { "fp", 30 }, { "ra", 31 }, + + { "pc", 32 }, + //33 - PC_NEXT + //34 - IN_BD_SLOT + { "lo", 35 }, + { "hi", 36 }, + { "sr", 37 }, + {"cause", 38 }, + { "epc", 39 }, + }; + + public void SetCpuRegister(string register, int value) + { + int index = CpuRegisterIndices[register]; + OctoshockDll.shock_SetRegister_CPU(psx, index, (uint)value); + } + + private readonly MemoryCallbackSystem _memoryCallbacks = new MemoryCallbackSystem(); + public IMemoryCallbackSystem MemoryCallbacks { get { return _memoryCallbacks; } } + + public bool CanStep(StepType type) { return false; } + + [FeatureNotImplemented] + public void Step(StepType type) { throw new NotImplementedException(); } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.IDisassemblable.cs b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.IDisassemblable.cs new file mode 100644 index 0000000000..780c335fcb --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.IDisassemblable.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using BizHawk.Emulation.Common; + +namespace BizHawk.Emulation.Cores.Sony.PSX +{ + public partial class Octoshock : IDisassemblable + { + public string Cpu + { + get { return "R3000A"; } + set { } + } + + public IEnumerable AvailableCpus + { + get + { + yield return "R3000A"; + } + } + + public string PCRegisterName + { + get { return "pc"; } + } + + public string Disassemble(MemoryDomain m, uint addr, out int length) + { + length = 4; + //var result = OctoshockDll.shock_Util_DisassembleMIPS(); + return ""; + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.ITraceable.cs b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.ITraceable.cs new file mode 100644 index 0000000000..1cf9814c73 --- /dev/null +++ b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.ITraceable.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +using BizHawk.Emulation.Common; +using BizHawk.Common.NumberExtensions; + +namespace BizHawk.Emulation.Cores.Sony.PSX +{ + public partial class Octoshock + { + public ITraceable Tracer { get { return tracer; } } + + public static string TraceHeader = "R3000A: PC, raw bytes, mnemonic, registers (GPRs, lo, hi, sr, cause, epc)"; + + public void ShockTraceCallback(IntPtr opaque, uint PC, uint inst, string dis) + { + var regs = GetCpuFlagsAndRegisters(); + StringBuilder sb = new StringBuilder(); + + foreach (var r in regs) + { + if (r.Key != "pc") + sb.Append( + string.Format("{0}:{1} ", + r.Key, + r.Value.Value.ToHexString(r.Value.BitSize / 4))); + } + + Tracer.Put(new TraceInfo + { + Disassembly = string.Format("{0:X8}: {1:X8} {2}", PC, inst, dis.PadRight(20)), + RegisterInfo = sb.ToString().Trim() + }); + } + } +} diff --git a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs index abe3b051c0..2c6b4a8bf8 100644 --- a/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs +++ b/BizHawk.Emulation.Cores/Consoles/Sony/PSX/Octoshock.cs @@ -18,7 +18,6 @@ using System.Linq; using System.Collections.Generic; using Newtonsoft.Json; - using BizHawk.Emulation.Common; using BizHawk.Common; @@ -32,7 +31,7 @@ namespace BizHawk.Emulation.Cores.Sony.PSX isPorted: true, isReleased: true )] - public unsafe class Octoshock : IEmulator, IVideoProvider, ISyncSoundProvider, ISaveRam, IStatable, IDriveLight, ISettable, IDebuggable, IRegionable, IInputPollable + public unsafe partial class Octoshock : IEmulator, IVideoProvider, ISyncSoundProvider, ISaveRam, IStatable, IDriveLight, ISettable, IRegionable, IInputPollable { public string SystemId { get { return "PSX"; } } @@ -40,15 +39,15 @@ namespace BizHawk.Emulation.Cores.Sony.PSX { ControllerDefinition definition = new ControllerDefinition(); definition.Name = "PSX DualShock Controller"; // <-- for compatibility - //ControllerDefinition.Name = "PSX FrontIO"; // TODO - later rename to this, I guess, so it's less misleading. don't want to wreck keybindings yet. + //ControllerDefinition.Name = "PSX FrontIO"; // TODO - later rename to this, I guess, so it's less misleading. don't want to wreck keybindings yet. var cfg = syncSettings.FIOConfig.ToLogical(); for (int i = 0; i < cfg.NumPlayers; i++) { int pnum = i + 1; - definition.BoolButtons.AddRange(new[] - { + definition.BoolButtons.AddRange(new[] + { "P" + pnum + " Up", "P" + pnum + " Down", "P" + pnum + " Left", @@ -59,34 +58,34 @@ namespace BizHawk.Emulation.Cores.Sony.PSX "P" + pnum + " Triangle", "P" + pnum + " Circle", "P" + pnum + " Cross", - "P" + pnum + " L1", + "P" + pnum + " L1", "P" + pnum + " R1", "P" + pnum + " L2", "P" + pnum + " R2", }); - var type = cfg.DevicesPlayer[i]; + var type = cfg.DevicesPlayer[i]; - if (type == OctoshockDll.ePeripheralType.DualShock || type == OctoshockDll.ePeripheralType.DualAnalog) + if (type == OctoshockDll.ePeripheralType.DualShock || type == OctoshockDll.ePeripheralType.DualAnalog) + { + definition.BoolButtons.Add("P" + pnum + " L3"); + definition.BoolButtons.Add("P" + pnum + " R3"); + definition.BoolButtons.Add("P" + pnum + " MODE"); + + definition.FloatControls.AddRange(new[] { - definition.BoolButtons.Add("P" + pnum + " L3"); - definition.BoolButtons.Add("P" + pnum + " R3"); - definition.BoolButtons.Add("P" + pnum + " MODE"); - - definition.FloatControls.AddRange(new[] - { "P" + pnum + " LStick X", "P" + pnum + " LStick Y", "P" + pnum + " RStick X", "P" + pnum + " RStick Y" }); - definition.FloatRanges.Add(new[] { 0.0f, 128.0f, 255.0f }); - definition.FloatRanges.Add(new[] { 255.0f, 128.0f, 0.0f }); - definition.FloatRanges.Add(new[] { 0.0f, 128.0f, 255.0f }); - definition.FloatRanges.Add(new[] { 255.0f, 128.0f, 0.0f }); - } + definition.FloatRanges.Add(new[] { 0.0f, 128.0f, 255.0f }); + definition.FloatRanges.Add(new[] { 255.0f, 128.0f, 0.0f }); + definition.FloatRanges.Add(new[] { 0.0f, 128.0f, 255.0f }); + definition.FloatRanges.Add(new[] { 255.0f, 128.0f, 0.0f }); } + } definition.BoolButtons.AddRange(new[] { @@ -122,7 +121,10 @@ namespace BizHawk.Emulation.Cores.Sony.PSX static Octoshock CurrOctoshockCore; IntPtr psx; - TraceBuffer tracer = new TraceBuffer(); + TraceBuffer tracer = new TraceBuffer() + { + Header = TraceHeader + }; bool disposed = false; public void Dispose() @@ -1247,100 +1249,5 @@ namespace BizHawk.Emulation.Cores.Sony.PSX } #endregion - - #region IDebuggable - - // TODO: don't cast to int, and are any of these not 32 bit? - public IDictionary GetCpuFlagsAndRegisters() - { - Dictionary ret = new Dictionary(); - var regs = new OctoshockDll.ShockRegisters_CPU(); - - OctoshockDll.shock_GetRegisters_CPU(psx, ref regs); - - ret["r1"] = (int)regs.GPR[1]; ret["r2"] = (int)regs.GPR[2]; ret["r3"] = (int)regs.GPR[3]; - ret["r4"] = (int)regs.GPR[4]; ret["r5"] = (int)regs.GPR[5]; ret["r6"] = (int)regs.GPR[6]; ret["r7"] = (int)regs.GPR[7]; - ret["r8"] = (int)regs.GPR[8]; ret["r9"] = (int)regs.GPR[9]; ret["r10"] = (int)regs.GPR[10]; ret["r11"] = (int)regs.GPR[11]; - ret["r12"] = (int)regs.GPR[12]; ret["r13"] = (int)regs.GPR[13]; ret["r14"] = (int)regs.GPR[14]; ret["r15"] = (int)regs.GPR[15]; - ret["r16"] = (int)regs.GPR[16]; ret["r17"] = (int)regs.GPR[17]; ret["r18"] = (int)regs.GPR[18]; ret["r19"] = (int)regs.GPR[19]; - ret["r20"] = (int)regs.GPR[20]; ret["r21"] = (int)regs.GPR[21]; ret["r22"] = (int)regs.GPR[22]; ret["r23"] = (int)regs.GPR[23]; - ret["r24"] = (int)regs.GPR[24]; ret["r25"] = (int)regs.GPR[25]; ret["r26"] = (int)regs.GPR[26]; ret["r27"] = (int)regs.GPR[27]; - ret["r28"] = (int)regs.GPR[28]; ret["r29"] = (int)regs.GPR[29]; ret["r30"] = (int)regs.GPR[30]; ret["r31"] = (int)regs.GPR[31]; - - ret["at"] = (int)regs.GPR[1]; - ret["v0"] = (int)regs.GPR[2]; ret["v1"] = (int)regs.GPR[3]; - ret["a0"] = (int)regs.GPR[4]; ret["a1"] = (int)regs.GPR[5]; ret["a2"] = (int)regs.GPR[6]; ret["a3"] = (int)regs.GPR[7]; - ret["t0"] = (int)regs.GPR[8]; ret["t1"] = (int)regs.GPR[9]; ret["t2"] = (int)regs.GPR[10]; ret["t3"] = (int)regs.GPR[11]; - ret["t4"] = (int)regs.GPR[12]; ret["t5"] = (int)regs.GPR[13]; ret["t6"] = (int)regs.GPR[14]; ret["t7"] = (int)regs.GPR[15]; - ret["s0"] = (int)regs.GPR[16]; ret["s1"] = (int)regs.GPR[17]; ret["s2"] = (int)regs.GPR[18]; ret["s3"] = (int)regs.GPR[19]; - ret["s4"] = (int)regs.GPR[20]; ret["s5"] = (int)regs.GPR[21]; ret["s6"] = (int)regs.GPR[22]; ret["s7"] = (int)regs.GPR[23]; - ret["t8"] = (int)regs.GPR[24]; ret["t9"] = (int)regs.GPR[25]; - ret["k0"] = (int)regs.GPR[26]; ret["k1"] = (int)regs.GPR[27]; - ret["gp"] = (int)regs.GPR[28]; - ret["sp"] = (int)regs.GPR[29]; - ret["fp"] = (int)regs.GPR[30]; - ret["ra"] = (int)regs.GPR[31]; - - ret["pc"] = (int)regs.PC; - ret["lo"] = (int)regs.LO; - ret["hi"] = (int)regs.HI; - ret["sr"] = (int)regs.SR; - ret["cause"] = (int)regs.CAUSE; - ret["epc"] = (int)regs.EPC; - - return ret; - } - - static Dictionary CpuRegisterIndices = new Dictionary() { - {"r1",1},{"r2",2},{"r3",3},{"r4",4},{"r5",5},{"r6",6},{"r7",7}, - {"r8",8},{"r9",9},{"r10",10},{"r11",11},{"r12",12},{"r13",13},{"r14",14},{"r15",15}, - {"r16",16},{"r17",17},{"r18",18},{"r19",19},{"r20",20},{"r21",21},{"r22",22},{"r23",23}, - {"r24",24},{"r25",25},{"r26",26},{"r27",27},{"r28",28},{"r29",29},{"r30",30},{"r31",31}, - {"at",1},{"v0",2},{"v1",3}, - {"a0",4},{"a1",5},{"a2",6},{"a3",7}, - {"t0",8},{"t1",9},{"t2",10},{"t3",11}, - {"t4",12},{"t5",13},{"t6",14},{"t7",15}, - {"s0",16},{"s1",17},{"s2",18},{"s3",19}, - {"s4",20},{"s5",21},{"s6",22},{"s7",23}, - {"t8",24},{"t9",25}, - {"k0",26},{"k1",27}, - {"gp",28},{"sp",29},{"fp",30},{"ra",31}, - {"pc",32}, - //33 - PC_NEXT - //34 - IN_BD_SLOT - {"lo",35}, - {"hi",36}, - {"sr",37}, - {"cause",38}, - {"epc",39}, - }; - - public void SetCpuRegister(string register, int value) - { - int index = CpuRegisterIndices[register]; - OctoshockDll.shock_SetRegister_CPU(psx, index, (uint)value); - } - - public ITraceable Tracer { get { return tracer; } } - - public void ShockTraceCallback(IntPtr opaque, uint PC, uint inst, string dis) - { - // Tracer refactor TODO: fix this - Tracer.Put(new TraceInfo - { - Disassembly = dis, - RegisterInfo = "TODO" - }); - } - - private readonly MemoryCallbackSystem _memoryCallbacks = new MemoryCallbackSystem(); - public IMemoryCallbackSystem MemoryCallbacks { get { return _memoryCallbacks; } } - - public bool CanStep(StepType type) { return false; } - - [FeatureNotImplemented] - public void Step(StepType type) { throw new NotImplementedException(); } - - #endregion //IDebuggable } } diff --git a/output/dll/octoshock.dll b/output/dll/octoshock.dll index 42d56035e3adc525ddb843c3312bcac0c4ba6b16..235f335ec05dfdccdeb5c68d5af0abe6f3997f0a 100644 GIT binary patch delta 81855 zcmcG%3s@CZ_dh;+&fzwI=O`EPf}n_+w^YzHZ&;#Ml4z;*rj}iJi7sA3?Va*VBzd{r4M_rYi>6A63E-QHf-S?`yAG!I+k%#U2 zm#+wdZEQiY7u~^HA$bMlioK4Tx5Zv%W@@+BX-XA)RpTN;($?53O-EWk`7Gg&)VBoq z3(4zw@qT8ZVz0Qm)L=8EZ!qLHugXB-o-iO;m_?X$PbL(5t*%S0HBC>Er zK>L`nDPbv04^SKdoy4+5`RfCkS(tzRURy0=LCW67XIPi~^-VNO)0YyV5DmKNMs02F zlM|kh6RKnO>tmJKp)WNpA7SKyx9KL&j@kc&{*59w?c6!;6sl!+M%+nUlKK`-KQU$# z3>JDE-a#x|M4VvTSTe`kQZQ#>obr#R&DkPlTGKA_GX0xRb5+;JiMGmlNP_SjR=$+ofBwsFp_MMK0namuQ&p0{gc zamw|uaJE5d)~w?Qqex~rskd$XQ9d{~-Cz|svwDLkS0^PU*&;Hjm0|S;%FMC0vS|fL zeY0XAFxAV8)gntP;1<8rtPS*k*{oNy4L`t-d3{MoLd~Z2h>9mCP!%1@w>A%C-O^JZ zw%?y|oto74=1tV#giXYH!t52J}1L@oSP_;1V!%7vNu%7bTOj3T*G9rVA2B>RI_EZSN67 zz8lB`vCt}@o_iELNpepen7`zI;6Z8|eseydJ57;CJw?D7@+ zJ^y5vFfrt4FC&&y7^c0YVB!vR|#js6_p_4*X8H2y{1AnI7MTJ)o?L z@4-TqAL7TdmzBGRJj({qoCwvW&fn+uwS1v&|%ob&4EcebW{+`tZ)9_td?v<)aYu<=t@_4h~q?r z>yp3YTm&MwIKCR1(1eYQCd|BtU*}}gMea9WJ}AdmIjzg*X0L|WoXl37pFK0$OPP|@ zH0=T+A3<$P5yp5rFPQ^~1mb0l(xH*)T<4-%YdH0L2bY}A&7+>w~GySTZyo1QaPa6FNYn(GQ_RTfy zKiH7Z%3bSQ1pk+BIrmwWg*hQ@tvh7$647^@x;D9K%dEvbpCXJbufP@cqNL3UwbV|l zM1kP2Q7OI<)IYoI?o1O~k@dF-1&vDaBcbQ(gj%*zPB>dpn>jlx%{Md&o&%qq)*a;= z!qK$mxzOB(Hls#O}v?d%B`oXfeI#bk8(7s|c)1Hz(Fu&zjaO^0mV?U-wB4DZyhj2? z9$n_?rv_IZecbG-*7VS=~wNDPTSyWcU|`2bt#Xojv9R$gW>MX0i0phAuNsD z+~nwU*mV$`9mKWIb>$VTS}`f_gJdr(MsfJk=+dM+-kR?=4;85@zurgmE>IJ9$RK& zFzRXN!SdDAmv?OG#il4OrLEU;m(lDIUNE|RIC$;Z=SsQK3T-+tCnUPetgC?eIo8Hb z#EmPa5P=!9_eyD$>l5fsr}DX5y9O-3O4W7T8Jt~yQaQ0TmhDzTx82L;Dv2qzO1gLb*Z8Gl4B zruNtU5sNfV!yP#Ao ziR>woZmp3ZII1BhBHkR;qAl|(da0$6TY@A1v2F)sdJ-|78k@l-J)I#`Ri$C z-7VAuf)oWtJNu^kVXbG&Y6dQ>=EoW68SZY(!{u_R(Ur;4_+Jc5U#dpr_s?&s#4T%% z5SzHGOUOL~p?H>V+kw`tMk8ViQ2vVYxhsSnQU3j28|!egtn|IRI$a>koY}`wdl*x( zj@J90aa;FG0P4M<@AxBTkWAbaq?EnaZ65oiw^~ zqY>N`+3`n|gyqeeACax|Da5hM_;FeQQoFM!pgDw!2uzw0X>uXL(otq{R9kFswSp=H z(YFX9976!qak54}fX(Pu%!=gTM&Oo3V_Xnir^5V?&{l^#Tz=jk?Q~0#VFQdJ8Wq7g ziR+ZTeu2#>kRqgXWq<(Cs6<55$M^CgGB2?aC4B3bn1d3^TOYJSovtft6?S~J#g^rT zsNi*$A{e!nBA}kzM4-;7zMwc!XNFd6v&dGoOr@ms&2QytzD~XSdAxHsU#bKipSSGw zW-SgKd>rABbpylq|J7V6redlCx8k#Yq}bhDd?3P(#NAv?k6`so4JFU2ayL{Pik|;! zs}$%#Tb)K*p&o@%@`3V4P#Z|IQSe(nkf%Aj{c)6ia);Q2I5Q%{*O9W`G?BYS)q;ujdUjf1l-iB$24`fM}cX4O=T z^ayB!vqe*28C48w1p?h5kiukZwoCU-gerH_b-breB#`$&aHI-;>_+vZp|Qn=N|E>7gD z`4q;Jl_)RKp!|>9vZOw4$I6cqYBBW$9tyPjHV0=*a5i_dZvPmgytpHX zCg0BTQRnC**biPVvZS^)#(C%RdgJNppWNf=6JE;xJuUmj#R3qk+fx1PSAJCO)D;nj z9lWUSF!dPofhFJ;NN2(k`Jj?p&@=7U$waJE|0PyLGS(6Yr~===f}Y24IK|yx7Q=ls zf!-#;`fg(VVPe9~LcT&jz1ou6&h*AJJ9z2J@%wKN>Mq9iw{HoCyx}Eu&X90KpI7WB zB-Tzl4tVPL{mEw@U`Dh=u4*5Bq5KTy^S|Knm|H#GdCXm*Q>i=;n9OI9{4;awWQTAp zG%O;Fk8T%~179}{xPVAUJ5P&;UG=xYgGQzJ(+)SXPQf=g!*SP>gVtnkWBr3=RW}46 zI$tm@^5_c~fRCEf<F`?Eh&I6^|_e zEuvnkpnhCMj&yhHKd66tg5ti0w%BxVg0L)q57+b^AK<@W%Q`{>=dJA#GAf037Wz9! z%*L-6cAG>R7QZBsXh@htE_4GaD*iNg!xCR9mtvjgDB=4E;Kl%oXO*`@s@Vd;9u0~C z4FZh@30A9>fkcqS79liQDA>Q;AlPT(x)Jm{sOLL^JuMCY_J9s3f_>~F!Ttg01jzZW zU_STn3@MV0J;iV3UjxBj)88j5jxq=!0t-WbxEM5Ui_k2^5wnb$ z&ZUda_-~D)A}N3u9Yp3aT$F~V|d@GNx!U^u+NUkdWThGZX!#)** z+~DKfmcdHdrvsFyvpR_+n#Sx&2dOCfE^;&o$7CLcnft&tFQ6j-4L$9oYud7X>7vj%mTO|$LqGN&DWIZgB_TzB+PlTF;^{2WxW*tuF2nzLeG45<@Ij^u z=P%_wl}%19pnhrPjk(i9DvDthKVg|^$HECc3PyJ6oEq?fdjM4!$>Wi z08OM5AnS5hMU)b`HR^5|=d!n-{QoI%VR;C&;gCoUSm-(Qd09zc6w5a9L!a3=^jR7J zqi9}%C(l$VUAOn(=R7O6VKddQ>=0`5s{KzH1El`FISAG)*sa#yAyGrGz z+C1v>ZHSgq%D{I0K=eR5XvwC77G0&BjmRMzdUzU4GMHnZ+v z+z!}Aqwz%KdKPEygOqsU@|JdYOn#<<4#Nk}%cZLshK%z2(bneqNjDtzOj*{nnb;J| z5)8Pbt86=}p#qCIjI-sdFDbdp!j%p0jkf7HDzR)g;oDwPjxFom>H-2IQ9mDAS9WK; zvZcz4@4udQ17`+ks(olGzT3UvKF~-D;iWQ8Ap)_!tFmpRvaWMs{?}=QM|d~KanG$~ z{5?oowM{E>owNI6EI4f#TwZ?B*nRT@jSKuhBjS0SP?BR5z4&&E>zr@>5}TCF4;d>jd2Dcjb`P|ca9fjc3PWoxtVg{VjWPmjOru`-X~6x4MI?vTftMV! zPP+B2(xbhN3Q@X!80vkx{P*+l&^RuL4n#eqk}_;@F-3RD?c~eHqw?wJl@TT3%Imr9 z6lq0hcRj^RKd(_Fm~&l4EA$ulHvdBHw0(*CwYq9T^C%-%bYM?6Prr4` z4&cZpO4*7~FQnpwl4Dd+uYYc zZPG~jIrl-a<|n1&%GS-Hs}jvxP9I>@?Tx{F->y8ja^zUPfsL%cf#t)JRUi1J8Rbu% zLxQi^vDahR>*d5>ND&^Pg$Wwz2qIff_!isR*~_rJ=T?@tKc@udJ=K%?>as6PH9K(p zDaY?K_NkLR`&5|HhwC8!%HKJwtjufEoc5t@>Tm40QC@nFFO;A2TDHdCX`g=ghwi;5 zH>Au^f~Kc>YO$)T_}dw>;$E`i$$Zm_bR2WS3hb3LCn5PK5V3C2(Pxx1tDcJCYYBh7 zaD%Dg6pn*EV-7ZiKV#U&aNXf&KGp}|qTKuOU@NVul!A{!nmkVRf~m^v1Lb2*E1!Ja zFNCkT5{~PSyoYRKTJbuq^!|8=r{q7E-db|eDJt32U2@Qpx{~)}{P-Wnh@=suvJnD=5$NrRU+v3tT(IVF-TE&p`}=Lc>?ZE zY1m_I!X5%N81w|__8nET&4N8(F9t+hw}Y;M`fU;H*`QL;kgbA!z&31jKv-7Wx|*h3yjTPlMKgp7{z}IZ)%> zxCfm9NyXT8fG&eNm0-gIS`L!-2=@CxuYzXJOF8|=Ei73@LZVQ2NdV1EzSH+~T8hmm&W=ayPnNFpkLD&Yd?v#$mF zAE4>V=0j0l#7$C8912S7g_N7_LO!MM!Sz{GM!b1_%;YEGx(JjCihx;D49Hk?d^c}-wm7f@f&KVaT-pvj;t(8q8y`A4CNz3GpF{YOy8qu33CrYl*8d$1St zHyu96aGCRMIb$Wt)bIBN4T!8kRq@053V;2AGV+Hw59nmt(|Oj>=8%mcjx!~ zNfVn_|H6CP7r3NYllQ$EXdk(IaNA*meopZ&>&&(&F=cnL1+ zJ7mH*e4kXU5bS{$1$!URI~N3d6(|?!;h=V)a?mmG3PDdIErT>rDQFs~_M$T8)Ke@~ z(M}CW8(A4>?^|knr+|O;xZc-o|2vu9KjcSzB~=crJdLj!x@_;_3qwuYl)B1oNxAgx zL+Q|%^pnh{Rc^k5@5jsu35Il1lq)HZGBXdSMkF~(e2qKvi;4%L9{da6R1A3!U+<(Z zb~>(l&lrru(*>1qa_1R8!O_1IUjmMt+T@B?xAV$pr$f_@V3t_Vih2|j<(9!pm)^21 zD=L5eXGus}FdW53f+m4pHR%mpXM@PwM|vEK*;DWPs&YmmR749t0>j5P0-Gi!IW|8A zmM~+K!xffsbv3wCf0RSg!MjpOBFg<|THiGjxA;~L8@9OwyuL2mP*+~rD~;?G0r?DH zuSN=NRO5?E&Y72k_x*-mTZGTWJ|kv=uk45K2HMVsuq8_L*~pHhn^^^B8|;z;Q&YRz zS8kwhFU9-TcGLau#>Y=H4YuA$nS?@{l&rITv5Rz_4Z`WbcW3XpYaA3%+v)?4OLRK0 z?pMKH3_1zA3)lle6G1O2J`9P!LDyT=_gdgm`8m@nT9o=Ji+kgtm zY^_iOjX;ahi{#%RFTHWEdi} z9;;|~rAV2l`$cer4D8!gK;xsz7kXRvs`8`WE{)8~3CNHKw++TO>}n$fX9hVyQpmYn zB&K>fbZdnL+s^tPZNf5INMeRBwE^6I7>6oP?QE8n1Gwq%m#oP+K?d41qlAA6{3pk3 zbqzKxff`H6DG%?~77b%60guF}tf{ENKcgSlNGti&APNEHXnBh?YG<&1$$8NJO<9%~ z_5Dm2|BL$!N<1f&?@8_#mWXzjX{-6n8Am_AfS?1Jy6kx8W%!#UH6- zCjO42N6=)@J0_j^L$IeK9k>*U382@Al#KJOSfaAxd)}FM+ zvg-;?+|wO;y2X`8Og#}FSZ{*y_C8*8ZyW9vr|i5iA&qJvkLpD~gJTBMHD`D~e9c}j z!a~vHxX;OGP{28v^%|cAs;&xlWA~I}o$hS;6}4&kM-VY?sgcST(`~=$vh@ZvhFn5z zE-+_;Z|dEM4dsK2L8z1U7lYHN1IR^=o8HrG(GVHwC=v6@z^e#|w)o7L;xrUw?U@#h za!`>P9#fDrGHwjI!42MdtT(9N>*+Y2Ky~OkKZ>c@0$F>X5OSIyI@^ZxbWX6SPuKn2 zjcJRp360=Q6sQNN*HVPI%#p84U_l!_oQ0;<`;SQgd(|T zKV|zbEkiCC)p8scl*+L_Ajf_+O!?)Prm<8NC@JqX3K&^bA&{%bUxbotLAyW)l##zQ zRT3`+;ztD&E`{AoO;Vd^mA&Ny$^G64r0JI|aI=OJizQQgx>@54RdMQe%;@Y zgp@F6e2voe*N*-}DvO6yLsHPI@^gPpW-L#Ues7JTzVq*$eP;@cKGR87p89=QXevI+ zx?B{OIa`oC^J&oQxydr7pq$Pl`yVjJyV+g zQ691fxgp@Z0D2R&6tqkUx%?7)PjOtn`)QilZCYtk)b1pIbD}qEW1@YHlT*~n)%l}`MoKm(_e~L;%2~fBo9F=9QEAxBQ*)zA`>a)SJD7&!7%tyxxp2Y+diHe0bf<{!x7qrXNshulHs5 zDSc}OH43YjrN=09Ywl}QGRdP*zh5~D)~oed-zXh#^y(B_pY`EtOtvjj!t_@4xtnoP zR)IaIBHtJUWB1>9Fs-g4U7H0Q_WnNjA$-$5C;TJBo+H#To!dR)AV`URYmR<_9>n}b{KZC%$mz)@fPM0V&vg?o4@k;Lo zuhb6SU=J^m~R%k2U3i zX#Q}A{SR(AwP1;@v#^QUu0WP9-sfpktgpqt-#fxy*0SwvE>k0$uwE@HBbi;!KGMjJ zIqHM#CvbiKdM276qqtO^(uB=nG3vD@?49@p<$8COaZ+0`i_ERKy-H-xYUSgKkR!n*pF zM!}4|`c|z+DD!75SRK%m{Wjr1Yi2(V@@>QHZ9qLh_ko@R%>k_eZ3UH}^q_zRpR;&re zQ1#OYmWSJskt`ZpP<2LYHpvW+2dF&}9lIx_GZR5P|#7^?(yudo1W*fu2#ZHtLfD$G6u20)0Nv;zpk!d$da9&UyPm6nu zone2gMB+dGZi%PH{oN9iC;Z(K=}-OL5(}RGyCqgU`*%yMPx`wh3X)kP5xx9i3JYs$ zHZnGFEo~e3c$)cU3hN^_t7~R#fnxE=Y+a+Oi7&AbR;nev#Jc|lvE7sYl32T`e@QGm z^)HE?o&J}^hP?Kd#6EuGFNt~2{!3y>=@?y@qP~~GhOptZtRDH_HqWq{4&>tI>s`H%e2^O#EPWDCarw}=tS~OQ#$}~( z$ulmiSgmvjU&g`q4Wop*eI47bcKn#NWoOk9AG1s1<(*pkr!cTl`C5j-vBvn-?iXst zYIc$BRwsP|neVr0PZhCP7PzCH$Rag&4MaXx-(Jfuv5i{Vr)&_7zOK*MMKN1b*Pmc} z)z{YpX|eXcI`rIz8V&wmtuAJ+-kLRPjr8K^*eATKOgWMI5tU zD?146Mxy93FL<5WW)px}2MmVaJIU{l-G2A1rx<>_48IHE)c4wxMdTD*-37HD=c)_VLhV0x!znnt+jO{? z9A0iZyvJ~O4|n(j_2gc|;jhWz_uLM@UJo*MsVW{IhnJ|82gqTS9FAjR@M5*iA#(Cv za&oVF^f0{XwP@ovrl;SMr|*!bzlfm=$w{=(r}Z?$;U5f#kC4MTZijc&lYzrW4Tp~z z4j(ri{)rr(V>Fv@XunR;;Jy`K_MPM;+S9Q_RWO9___5n3Kgm z>DrC63_k|`M4P7*quDGi{5&z7+S&@5wXbUZF4FaRZQn0+{ZSiNNrDed(=Pr>f}6FO zzq5@@6sKyjf3VM(IBK$Xx`(JRX&jFp{8Il5Eu)%!4w09%*lS$m1?{wrL|&{Xa)XN` zla^@q?&G3U9F_FtY4HQbP+k{~&Nvf%X+6yWT;y>> zv--G=RF5SK4Bd@+_M`6XV9Fk)oenm$LwWWHEjEk;BoH)AFRlmBf{Q$;#fEc{VWth= z*At24BJpmJC<3`(I~`?$MDy%8Ew(+^FhD!q!OZE%bNXtroq0|l6W+?3)u`ONxkxX! z?jEE&mTWNmi{;tf-P!k0_TAd)d(7-UJiD_N+m{1$M4iLE9`*DO;1cb%*f=f`ZJIEs zp2+=Nq>US62w_BOr-zsr!+3VM7W*LA&_X-?keQRfbHcRP5j-cdW(!Lu< zLWzF23Z0uE28waM+T{siBPMmjch1d$n(OzOh}=kTEp#H~+P&&>XTK~iRg0e%BgF)( zTK+T!kXhQMXT%{)>?JOKPAq0GsU^>e2iY=hNfL3#)T(8(#eb=9C5w@koSVMt`KQIT z>X_%n)@-}>>hlm`)770RVhQ_Ho$~?;{-izjB5@b1AHD?cel_`JaBpb6CxL6(c-dEF z&xs$Y?WRD(MRnK|@t_#~ht_PW7>@@vs87BkmRJIRH(|a{6J> z>{6-v&4AtGwIee~W#})a%H6L)I^m*P{+i*{>&O**RV)HcbjqE6MlDEz&;NW=j3l?-G~99^kKD>M+{!ZC$_Cf6@jq_2<`{0xA-8_knmJ9k z=8{{--EPU`)-mm>Y`T?0ZvCkG%{SbdPbx!yaJ#jD-1=TEUtqYkkWB3L?PA4nOEKJ9 zMBFil)UtQUtx~sJs^OMOxzi7rZY?$3T57oU9`b0WeP5i!#CCf%`!exmCT=XzR=h7h z%^JOqulr(l=a1wVQmj>eNV(sCW#k4nAMMFa(hjbK4t7}^xQcXTyG#|*a~`440xj}i zP{BUd-d+tUORw#|YR0E5LW}&jh{Gq0^J_#J=eKC#pNjJsleK?;CNAXT{CZ^2IRCkr z!`LzHANk;m4{Xpbejys;{6=Jmoz`joo5Tf-E!95QOsf3WYF)OHsyDPP+elTpHhc$V zJpM23r=67XwU*){U42$*HwsA?tk^}mTI6aic9Sm5HpPUF*=7%+zo6~iOR6y2>?2hV zEY&XVCskXu*AJ4ayB2GKhe#EyI83Vi6|K{^r0O+o+jpc2R{TJ!p3sgSAyt_2j*_ZA zvUcMbsam7W{fSgHo1=yQhg89cGAeOhyZ0oOKvkR~O)%mNK|GYMRh%UVOnEw~x@(pe zc%D?fuf116s{CHpx?ChxFya?dRiQmtNg0n%(|-DuGGN8;q^s{#?RpjILRDNQUCkzG z;nk!I4RV#xQ5Dw-9ahwkDm2JVQuV+;wTrc+3RW-+RCRh*^S4-_3RPjXK$YJ_t&6t> zs?Z=lmUdP#;BobEE6Z2fzXB|Wc@;LYY_za#YWF6VuMkdGnh+aR9!%^P)r>H(Kh}me z16yn{Tx-$7@}-5fR1ZN18>6WaB#t(1P2&61*3p))MDKx`9&I_qG20V=raGk)#5Zd9 zbS5>O`e^=LNljZ&j*7)U7Hb4;;81KmR44lsXqS@*gLelhg(iEF{+ss^swb!t2nrcn(~lk z7n`k3dITBlls0O#CDbZr`Wt){_y;fGuLX^>gjmI0RwLu4cIhc9@Qil&X%w(nF+#ua zkfjJ`0qg!r8F|_}&r`7WA4tTH@n^;RYR*45| znThow$8veFR+(5IbF3{MtTo6Gqqb;4pK^!tJs_W(Ao(2RQxC`{6J!eq`Pc)p(*$vG zkPkf|yE({*T2KiGS>gfNXM!ByAn$lUzM&#{3pM3=%K@fM{DG=qu>BF93OBJL zIMyH!R$CLR9ml%YgVo8z>cX*NJXk%DAx6b$L9tef>&_mK-X_Ss9HgBGWS|K$h=W9U zK!%tg!#GHo2PA=mglRz|I7nj;$Rj4mXb$4<0r>|N$&=h+FoCLIu+@V#(ZqU&W8LsE zIu|->GRL~11*LGT%VrKb>dPk9WR6v7W?(d!Mj2?K8I&=&+{{2nooRy1<{&3MAPx?4 zQVYuBAjdo)P7_4tAm4dF7MLLKaF7EY5Y+@(%0Y@fAj^?qi7NJXj|RCs3<^A0t4yqq zIo1{r)*2J*Q;wDI!P;PAeZjHTdayPlLyTIh1#RUHedGbzX@a;o$cG+~-6lv02U+3) z*>8dzE-Y zob@Y~t^HF6TRb~cOZ4)>7}4s2^*)iNn_rNN>E;sUwwtcmf3@1JG|By8#UwXL)BmuZ zWn$7Kt+WXhTYeSA#DM4Pz-mmen+C+O@LgU0~LG8VKt>U3R>iD)^yF~v!+Nn-nzwimJi7@+7;^d&e_^!22SOZ2h}MGc;|Q%xgjU+AAtu5wju2LdkYFN= z;0TTD5FRxV#&86w4&e!oAZbD4IfBJRuxO_ynh4LJgr)HfZ*@XjuOf0H*@Q@;jFFek z40tig#F#=E3on@&aAP_LxugZX3J}X7-N+IBb?wwl6J<6>Iq5-hm?&8s<(LO$u8A^_ zqkQW@S;$eo)q)g`vfqueUpu9mC`&m?u?J{im@j=D3Z6)Q35Dqsl&jdD~wHP=L$$5FoZpe!^|6ppgrgR;a# zd5@#)_Mm*oQFd!Vxg2Gu8)c_<>LU~7UmRt#2W72^@)<|j;6ceZQNHwUgp+h_;zsXg zjBU~0(7Y#OulSjEag(~K; zLDzq2RXe>GiEORrEcC{nvSpsue3v(No%6I$zVcqn*nhM!#oiw>ao}?8N{RP!#y->* z@AdA(*mGLx*WLq}82z5sc)#}m#?EMo2fQER+tY*IBVg2G?P96-!+eK(*!xW!aA`Zg z@lN9h8{g3t_urfMN6h;l&HH2K{c-dDXY>9)=KTrt{-k+-+Pptw-k&q?b@Tqbd0%1P zUo`K3G4CtQ`(Mrb-_83f^Zv4TcgA*UQ?7X5jZY)A+-kZ$s~x(Es~G#DCSLdM%9vGU z*S)LM=o{XBsflio&?;@=O}eIPu38cvob=^yK9CK5_g9}PHN@i6mz~x|T6`da<8Lcn zGqumXa1|eYN;~OIvTfB9-VpZkgK(8L$d80zj6_!$<4;!@6F`MxAJ@c2R0zg2LZN6o z3c(mV3Bj1gbcHcZd_ET=Js&y7?@Ka1R~C&ADe<{-X7f^YMhl4HB1ASt+ZBVWII_ETrl-$U9E0AimEGfW6NxTbSs$M0q?PsMiMzD2{yfoMD;vlY z(OTIco`}-Q?&pctT3I|#L}+D0c_LgZdw?feXk`!aL^G`{fhU@3Wg~bZL@OJ~6G2+p zBRtVqD;v!dHmz(dPXuaZkMo4TR`vu>_-SS1dBR64dy*%-w6cjjVbRK-;R*Iu*>lK# z&Ub1KKJGmc;n&8$^bCFNqSUrAqf|@(-FE|hRR3QYPhIvc{L_rYt9K~Tt>z9H_S!pS zR5HIm$0)P<{kc^IK6l7iA>AP(J@5_~lkImXkr?DBS^lI-)JBnh&9#-GekFfaFGlW$ zW`39Nl-o|LY3XvPuv}&?tpu6bVIo79&ZTuzVZJj?#-v}fNOi!@AW_Rw|1&umew!X z@5Y~1lZsr2cK!vwh&z|vHpwsK&vG@CeecgQNNJWfd`3f%*IsW3a^LJbK-%7H2y$F@ zLy*$kh9HmU+yOFTp%RhLm>6Ybdwl#|=S-e{u)N$~6rsz4%!}x#vG`2=b>d?f|)7Ye?y*TN=v!_x6S$ zmlfOra&l2aN?+RDP;Sbeh9Jl9y8~pmgAFO|a=4+~j^8x|8Ghsrkd;RpQhM>HhH}rB zH3a$7sXIWfKiiPfPs=~N(~GJ;Xcxz4+WKe4Jo}C&`|DqTSJgPHMs-i`jCc{ej3(L?!Q|!1i7r$9Uv#S zZb<1%Z5zr>Y2Og!_>Omg?AE0rrCqu;l-n_;A;|DvcYv(y-H_6YeH+R>KcFGVp9b9l za{b_jlzuw2q1=Bz*bwBhggZb^PHaf&OOG^^n=+;$$nlTg0kYe;hLm=BvZ36LPd5Om zhCe5jq;)%kA6eo@nM|1a;flM@(tBuDcEbg)nn|YLrr^CJI&Sr}PE1Hi#N9Bun?iSS zxLZwk&)_Zw?_3IiE)+3dz|_{faqMcFl-CkBNqL>|Kd%bEGE2(y<&3a1Y50LvW3Oa< z{XcINR3+KI_j(mKNqI|fm-hkvTY-O&iKX;B%7cuZisPDzd*oF^XI=-=KA5D^!KEKm z%hsGF>4EmBQanA{nnP~*7dnlE<7(I|(RdMudMZh3oVEyA6N)UmCpd$%$iE_oOLtuL znQ?)B?)!>lcZQH_Ma~d%swl}BLjKT|JOZ11qFeHcu3>bQ3!{ayx6-a0X;F}IQmCv= zqu(s1`xoXtOXe;3Vya}{3M!l`rP=o)aTxR?=me-7%^w2=2HcxN<{sIUp*7YQS;TnkqT22H^L(SA(aqB}EGczS3Q?$3yc& zphrMYfF^>T2TcLdBTlcj!ef8&8)8(*@oAD>?Vl{gromHcEIb7jsn^LXTxZf%E}RoW z?TN>guKWmB{!$Cq`LLBA<7Q6Czwn=AsgdbQ?M&C@=9QY9?y1cU?Y&G+?>f%CXAwI9 zf>=Ld>Ij+vNZ>w>E_wIie^D+KFj;w|E|&{)i%B4l@^h&`9%T?H#TH$gnAc$Q8frA^ zoDd2+a!g(JycC8fBhLw$V{)9h*10+tH*-Q{{O8p{p-ZK5>dVaMGH;WNGlYk&GlYT} zcQwXEAXI0F)c~hQ;g@PJ`K3zs#-N^{{-AhJ0%!%=eKfBB1ic1Y z3fcoY1o{zl0#ptPgj{!$1&sqe14;o+0lf-33TnL?|J(tN_=-8~xQb`BBpMO6>s3V9 zA1TtHG>wN9Uem+l?4;elR4y#C?c_m5sf|38@Z(#GE7wV1|I%C@b|-yp8~4!*g^tU^rQk8jQur7t z3LqmzA*8HSx@dU+_T$qMD3Mta91(L%_uB$%!Tlfh$?x`wl8*zqv)dxR#(x(_)swz~d ze;xmE;uC`_rZD3P3N6wbAxxVt*=5kXpf#W`L0^Nuo1P}&DHD=i0tJIwfjWSCfQEr4 zfKowoL5o1kL90OmqG@N0Q> z`%98NEfOYg!h2MNPQ|u0E@vR!S9r_(nsHNrdugFFtyza(v2SW|tCVfk_rXuPP6pf7 z{ub=I87vpd-%r4+4fpNKB^_CZr*-;-o)C~47%1R}sCmSUDJc4crrA`xn->CfdLBYi z)}GgFF?&q5I`L)nPbwk1NMrrKTndUUD1ygpP>bf#P?XEt{;D;PGCBSg7oK}io7xl_ zBMopMSY!57c=g?D8?kpzAeF#-9D(7wYON=2cT1<;BF=}bK#CWScxNd0HN;oYaK4fP z6fnNKd5j80CKLs1kw;=qAZNIplKC*ljmBi`I%~_BkGBuh_8oF)RsaA5CLiLJmvOB& zO%P_=IByH3Iot37qaDR&&SGA4FE5!c$b0i5)g6WtkaBXeK+9^jI3 zcuWFUHX-9G2MGm8oS}acF_QB5SPBg*)mD?GmMl{3J6Y-^g<``8wEjH8^9I zZwa*Ffsxbt;%S>jazcRqk~(>c6pk|Ur%3p4Mct30xKvJ&V(upmShTqVbdNhgi)?Fl zJ9`@X4+gtVK>yWXS8cHDf=2lVJ);J{eVBy@gDM{ZKpzOBip)C+fK)WJO#DKk!{7(o535d{x((W z7Qv0X_TR>#kCAcepjV_p|EEyyUlC%dQbgpoYxH}LA$@z>{+1 zS@zr-H7-?Z{tOw_pEqygi~|%{ylIWPGN#jPO2EQ-)8IO6PM~on5F&xbH;R8v<0R$-t*ZnX}GsURCjW9bM zmW6!QJ4Daf@D;B7*kX@uU4i370M-$XlkA)7JgP-V@o8XP0T@&%U{F7R=r`5qTh=q` zk!e!m;}kHCbIftoGA#n0kme*j$`MH_j^s5YsbEDUp5n4U8N-2*Z{43_q#b^I$auyxbHJV3U5x@$KauG0ZVJA`QjY|*%#6FCGxf0 z0Cn;VshLsv2WaFqstbcTDj%~)GicZ}L+aX&ng``g@1SMrs6?NkK)$nL7OI|H#eQ(ZHp$j*^&48FqjEG?nzJ}C37E1%5kr{=yYg*2lT`WTPx z?G3cwa;wyXuVNiZFo9$`AB-xzjG5%}%-}R%YUJ9q=@JGeW@K|iVAZbyuA2b}mQb2L zu=nC+VFE31Fd=2&IVFgWfX#IAcion2#)ItIf>u$JUXvpHDR}UTMyvr^staC|dW$X3 zs5NO)xO(n2$rebBr!T~)gT+*+YI$Aij_;rMd|m1?=m_v~g1;hx&Eu#pH{+?VW;o=G zu7=8bL9uxlf21LU84&q2Uz_v zJpRv7c`}RC)VR88#fiL%sB}kSM740u-0V~DxSEG`3Bl@u*^-y%6q9j)WzviTh>P1 zipwB!T0jp)I8gUnVq520ioxkO2vTFZXH^R(&6=R^^#d5YMkU7V(ci^W9`WkUyc#t! zLux(LP?HV|uqz2CO}2GKZbf9%?TS*kqRpr$LGNnn63(b|GNj1+4P{v3B-G%&C|psc ze9a7{Iz_vKe$XXD3pQYaet_N&kWfWNAsj0*q@IJQ+n}FPpE3I7bv$+UZ*}mAZ%Td5 z4&JYR2T%SRil_&wRd1r<($z4B)SCAaj4$*6ta<~Ce1-PAzIf6~-RyJaXZNU6)8ex0 zl0;M1*#NUg>uXVM|9|!7qYmlr`zZkaAMI3!XG;C!`a#hnh>HQZjVmux9Km{uTorsK}QL`r-^ zRri=WAzNybMqP?twA7#42-VdI1FB=`Z<%DWyPueKyS#a{n37fo8i~Lz|=488XAC4M$r#41~F=}nL)S}%jE3U%ZS6pCV zkAkik_m&i!Or=}wap@A4Y>qNKCk^j1qUJX2FB&s;DV}BfTP~?ws#pBX1WR?$Z!vqu zjMZ=Ak-8WO(69BVbF^x%xpk?BVTMWyuz#ukxqAF9srk^eXAMDO0>oGXnu6r$QazPJ zY^IST=r^EbdQd*$g{#T*{&S=beCGo(LEg=WD@WNtNA*D4ThC(b!XtWp7fbYfueI-L z^X5qZV0=YHC#b1X2H%pSU^-tF@e|aXL3nB=4jH;GlI-__27?koZ-CwcDWGkj641Ax zGLZMXlHCTn2NVZ-05l5pIOr+R^Ps7qH$a){b91F9uyu3Im0EIJ+z(9~hBM`qM1BzN zW<5%*IDQ)LX04sUAHYVZwQkmWgVnYk>kDFu$#jbAmfB>nXu0TSZA&vs(($gFS73CYI0m-y7akJ(a1!-JyvlbDgHJMJ0+^i1_7M<S@Wo%H90-a zP*(S7x;TSRUEX}iT>VBd9y?dRO$<)`CNVhmTg2ehZxDk+?U9Ds;SFN2wi#8(o5SGL zZw-S}zcCC>{kAYT^_#-r)NcuJ+zpXNogOV=2-R-~gHyj53{L%4FgW!a!Qj+y1A|k) z2@HH%_6ZgN`!v@lQWz60h1#)yOR^tX_k}dV zBDVWd+oVZ<&?Ct{+aiUvq?f(BL#jFxA%$2sSh-8oNp=>}{>!32Fr1k6TWN^!QbsMf z3#qNPN}&n#v?@#p`6YGF{%wsn7uwdC_jOPI{RY?UHygjL~_)Y^FXm0?ti zbA^A@nn!?`cS+>3%R0>m=_P8}Rw+7dHCV-71;%4%g<>yVH$H$X_UeWQ2h&Jf>=j#= z>Rp#AsY~svOVOi-sf6C+JACR#pY2U9$2`{7eYYCA^-$coKNhUi@c|5w>d1Azt1H}`7yc9yj$Olwy;i_S!;=rpRB{3C>2t{# zF!U@4(ua?+rUGopioI5uqDgrdVD?IXs9f0;Po!KKs`c6~iL9Sn;1M~T%$AE>dJDX? z4~LNa4VNO`OEwmBk#)a>$Cm<*UY?>u>6K$UKT%V6NY6x-<8Ef&lM@UuS}pN;-c=E_ z*;#TS^TzW6a_7Q|XSg%sIMpCjmL9Rp$iI z`@yjrD?C)~@5-?biMgB;oJFmYW6fHve!Nq9p*@M>^b4hI^Csbxzzx%_4yFii<<-^R z1yU?qt-e$sHTSL4@OFW;xg%+?&1;LYh9{9IX+F|*fn~2`pAYi>8Xr%7txk1Gof=Vl zV7cvlv~8G-{oWdv6l0?%!*j5(`SiAJTu`ZAbV=jc3iY8vsXZ%HUn#`aeucWMP@0HK zZK2f4w-T*_J!*3`x=4Cs9H~rl2EA6u4UaCx+C zq`tV3AZ($itZ2pWv+16Et7ydUr}KQZrbr4;<2tX2Q-kq@WxOT(GM>FB&@19YC_@gU z5V+4(-eMD)UAXKL@rfk(w)owBOQ-o?Ipn~rn7LW|1;)(w{n`97x?XDVJhY4yPVaPJvfHv)qsN zzxAZ$o@8wKUAM85I&uUu^_8oFiGyoaUKkzUP!Ni-bGj~bJqW0ehx7x z$x?~W;*y+P(1{0E}vsqgQ$tj7>>bVG4tju>QA4VfLwjT$k?fOFtQ;N0tBhBbyX zbE04#jeU43=ln0!M|VphY3_l|b-u;i!eTG?=ytiZ*vmb>;eZ}b)TNGBH%fSdEYAoO z%ZxU)ZQl+44xdOBtPI7tQPFh0w~=VH-fASgR!~OHnA+W5G`t8jz6?ef^L8Lla6aPp zBxevyvV2nvgAqLfKEyS}M&wZdAX@E)r}6<9rFJfs?iojI*q2+F8n-zTr8)(Y2e!f0H<8aLzC=4E7+@S1otf$;B%2&ETku26bn#)aD5uFYR&05_4=*1OV_z zXJ8s5CgPb~_zmp;Zj2=PdkPMtF*Z}9CRtobu4@*w2o7?fLG4!}4Z-6e93@iUG>-Eg z9=UAHPc%}R+Oty+ZnXixTOg0Z)M=Mye4CCQPP6t7&CrAw_9gkcbnJh z!v_Cn^IkWv8Myufc|^~E@bry6QqySav#ITKX-0JhWKq9~*~9N@y(lXV4VxFMZr>v{ z8%%A*&*}I}>I9tDy^>48`QY4e3LD$T>oU%`sSx&WC^t8dg2)-d+j!$4$4Q^O61DkW zsbv$IwrZy}y6Kt|PRTie{_3#3(%tO|(NP^awO!qF=i^eFr}yVmZ)#)yc|cMhuM6t( zy;9dS_rieB-HFLG&>9V$N2AF~DwIc4BJWRmG(hB0Fs!73U3cuJsTi~Be^14KaiQ@z z#&LIF^z_6GymF>C&DoPy5IC&f6p1$L#A`COQVyhA#(MzpeI2Uk+p5|06SckSYiU3@ zukE?vW(sT7KDi2u4@YRcD}ZgsJ+0b5?0aNVppgGF<)n^ii~@EkSkW(_APYcf@~ zoAoHMSTeProAne}JX(`!>M*$KTL+{bO(-z=eexWmSabF315(E{icWXwRR#u)=5E${ zQdof2PNqTA&D~}Q(rD{ueQU6&JGfaovBYE=$=s|eVzFfEwFWEvK(dg{dA!G>hUqcv z!3HZ-#j>C)LZjfI)FzpShOx1z9~lOxeqb1!`f)*v6;C7mm9QB3{}Fc`@KF@sfA>Wv9M*Gw;otH*a=tbg{UtHC-xhYfTpl%YVs4 znZGC!0bHRH5l9IYh(JoHJOolg#UYRqDh+{@KL|r0F_m(F4Bv08Us@Llr2Z}uEB71g z1tcO+I8-14DSwcMKw_vk1X4n!A&?R(41ttTSqP-)l2D#a)kPtYR3ZsJEGUb@@JpuG zzcMD#A4hI~(AcO|T6z;pvj5{pE){3*(_LwP8?}!<_ir4HC3xS5)G+lY1d_7KU8bez zGU+$dB=ZSex{~alLN*@6N#`)~^+97jclZfx%*TfNBU@fBK4V2F+e{nr*FhU+YG!u| z_csD++*pc`0T|E3=w&D>zo8m&9WvHz6nTc82EFow(Xtw_5wHWW4^ZOHOircmm|!zD zp3FI9Y|iGBJ%?cCZzfH@F;?x{1hWG_4_%!;{5JeTx_%7+O4F+bc1F;PD$ohWACIhQ z+v9iY7f)m&1^YqVWkBQ{2m&<_1h4#q#hc)2*)pFviAW31m^@6y+}zXn4U`|u@P zP`9&nJT2|t(i0}l%%pxmG4nb6*AwS9zFcg}PwEobxWhY)N&ff>y0iArCsn>R#t2|fVdZr3(xM5XUb-alaw>n^_-Hps252> z34gaNmKsjCWheHx<^PT@P$@f+wD`_gzD%*-XqgP!W>NY8U!NjFzcY@t;AWk)59#$f zSv{_%WNX8GMc?5ZmOVsb3XBds+7=jPJTmFy2w7iXOvK|_0bUzALX>01L0)6F-n;A~ z&=w8yll=v2bek?qIuz(sG*g@b74pUmonjPY8UKMfzt_U+-l+9vNv$KaRwgcF_OA&R z+U4)}!lmNWzCG|#*f0#gf6=Xs!SzJU{DJ{^Jz+OK2lr39m9xZ+Dn;e-+L=C&2a{&U zjpZVvYF#c~kxu#?H`X)Mm_ue9H!97)p8%Incxoan|12Lv@mK#C!C6;92+lL6?F^q* z96fPq>U7Ave?wM)@Lm3TxEXf^<=c7_DL!tD@6a7pC!X}bgPWQ9KMqqAS=4>>2z{5P zM5pP`Oij;AkJK+G-L{t9p%-TTweVsA-sM9+dGrTk4UQIzU6?;D|F>=A4X8B;C45}Gi+nV8V=rz+P4rO#i zD<~d6`2!AeJC1I*Au(hmPSa>LCS49<36MkE^LP9Ms*bmz3R04-ogi^1jSs~z%`X@K z65GfePy4)^v^#06gOzI3Nn^eETAyG=itOS)vlKeF2#S0wz1+5HI$3+tSiy4XA*5EN zSA$_HWox_1!IQ>@9iN_pW2u(4+K_notPmXD@XF)QlP2B|y*Xw1MbieDY9wxzO#N~y_nR=7}i!d!-|qp zlKp*1%~M7zTaWZOWo%Nh;wngA`M`WL;q_CD3B7=L(r&W+w6Pq?Lz${c6npqW+Um4l z*w{7Zi*&?#9LW}uMsA!kK4FNTL>@nF?8;sxAD)K2FooPaZLAktO&>v%KM#v29UR*k zV+#YSj6VZKS4b9}F?R6IsYln}oc27No&HHQay6%YeAc9k{xn2#+E>Xg@;{DH=A>x6 zsL?H}-_7Lo*wj=krv8_!U!pGqorz89nmU&z%+nLfWoxUZ(3j(jae-O3`Bj8*hQ1}E zYPSz*I7_++Ci}mb0s+)kd1-E-OjVk$UKpb_yw>o$uO{RdCN4=w;vYiW3TdP`<0kIxZ1`CO6HN-v8l&PD zKFu=Asm=zPote2$Kz_sXW0xNx#b=EJtJ2;yjG#2&a|kn(xGSr9!t!7$nRL$hDLaC+ z`N=pviB1q;z7RXPRndxzz&A8Jr;Ywe%~?cJi|{WgOY-B9H4Yb>@1xRbq9dDLYABn% z*Du&WDBeWO?{C}lh`-@@Qu(|wrT>1EXG&CNz~0;uK@-^>%}TNUhE`N+7M|72WXs>t ztQ@Gd;$DmPGnD5j5|>>q9=`_CKW4PleWne(uqz9w-+#QJFE*Rz72@SFA6hID= z{FfHeo|VIOdYL&huHrVc)U$f}QIdPXC{^%|0sF8t1oLj{dC!u=7mSVy{Ox(BSrlIj z(%_=eS)qVh?Z4NnqUT*8PhW)AJ4BXWG?p)$G{IyUyqxwwsmpq$H1tq9`ShZ(8T%&T zE*ZPC4ak5?#$I*z5r%QGu`?#X(9g-42@3to@XC62QBKZ0M6%w`#|6~>98z!zzV@jk z`m%Adp~4a}`?4_=L-X@xV>y}F*ouQimi8&*RL9_)rO4-^m@G$ zMc{VxhjEq_fSrJ~EV+Eu*vrtbH0g2;Zvw3+IoFI2RX-BJK@Lqj8U6OaR+gO@j|42p z{pdT;%MX$L*Nhe7skM=XOTqPA`l(qUH=PtCw<5JEZskS?a$7+|4I@pi8>>}ljTZU> z#sKC3mIKyDkU`gt4^>Wx;w(8WYlp)#8{T#(_=f;>HZuP9(3(#nyX#SNGNcn{zQgz9R1c+f4opXtK{;7!h!=rWUno3XQR zTzGA04ZnK^RMXk$tZA9ZM!ZQ$oLVwNYx=8|#AnlZEq~06OYT60xiq1+|F`Ku1i3W+ zkpHKWI2gkWt>gc$B>p^&*Y$r+JU5M%4Wnm}zBlnQdpddQrcrFzlWOkfmKD@4q2r4V z&<`eBSypVv@aidg+yuAeE?O^*oV;lqSYtkn0NBmcKK8f$1OwNC{&UlR4*E|dLw+^Z zW5<)+UyVHt2UK#T*qC6jddP3Z#!95lZ^k*0(zU;VpaB&Y=5tlancs}n3}2pG_$yb# zP|%(vuv|UN^ps*_g8-8H1$SuEFx@MbOwO(|yXAq>_dX09RzYrGkQC6J|N&T9DWQ?k#@Y3z9t69fFi2_FOe zBS_~M;6F@`$8dvyzg28WFU+r!F+d!^-z=V5_1TfZ_W^c8eWy~r1TV+6SZ)dieS!tp z!pLF^H`!3GKdDrjt87TwOgv?|s)nl-$Rl`?F{L3ehsnF8xuz9^_<~-+P=wb@bF&Sn zw~&bzu2RHW)_-FhS%M(hREB%h&|#2{n(a^AWzk>~=~tHPTj9&sVIN1P_ML6U3*|{B zcuwG+m`wJT+^1VCMqQ=U7;E+OM8aJ8IFEzXj&|FIolN zk~5QTE|dJRDcJ2LG{EK57Mf`o8l5xqNNhBNgKm^UfuG2M3S6(!w{lze%*wc#)BT6G+cE$Wd=Hg+6xs-i+fS!ok42%G_)0PG52rjt|F;1hW!28#{=6l)!an%Mh*x z*QwOHfpDCBJnw^nzCks(jx4QHlbgn#B3o*4?^K&x$U4Z0+FU*a z=(UG9AADE+>fjMg9}d!~E|v^6#A7mfxgoa|SIP})#Px=uzKK2}NPJ^F z-XvohgRXLtJ|&4si=yMKYh~`r$UV z^E^l@@M!`!ip8Ld^Z6*pI`%Izc|Oag|L!2J&f2 z0r|zo4aOBlDI&Lp-AyV=++~CL7gE{|Cj3C0c4(~CzEO5=2hbBmfm+)@9#tUW6UZwH zCYnYH6fQ29XShCv)OK)AI0E}SI1lZ!gR70q?GA2!she$eDLc}ZJmTc$MUQ`2kD7cJ zo!l{&Z9~3xamijwYtB*w&;XzSx&lT5CIEH-0q(7iVxtUEVNu~x5mAx3E0O*Y;8Vas zz)yhaHk_q8zyU}C3LoQlmSKFKx8Pic9<<$iOod1B z^>57$W4SJ4ii@pZ5 zJE*vLd<88KDBK5DYa_I@8PGQPObkAsCPF)IWh}+1*Vtyu2QE_Bjynx4|3!PQW%Pia zx-4`c)jDvKOYcwNEaw1Ck?N#C-tNFTbP7vOkq%_(Cq~pyj-*>JpzRJM)24z;P)R{j zt0UI9nZ7n1x#swNXfmf0HU@Dua(y(yc)3DW>mC`+Y;VJJeg11l|9;w<_CAom=o@ zHCI(M964DjpaFu*SV+Y7r zUAYz}-NT+DO|mp)V-J8wo2@pyujc3PXnbyPM zM2@C#?dt0U&hGJB`W9)=W^ zj2md`4w^3Y`6EqD`oe;~>TB1RYaFDh26>?$$Nf%Nv`*OUB>(Gpcj~_e3xt*R9qq^A zev)&(y#Cw^^tYhf4dk9-*>1jX2Vu!F#JkAhL0kYpyl$&j{om?hl79i}P_-M##CM2(dJBDOqZfktWBx0@8_iGE^TUCl8`<+Xmu&dzy6>SO z9DYmq^J~6FsoWE+tJYwK$z!+S5Na=`(DeLXa87UYTWZsAMwk`hSa^*Pj`Bw$@yt0C z_D3Pff29`L{{+W-s|}zX!1eWOq8SDr0aNOMPoYg34?*%ae=nIP#!hd9Cv9aTEaP6M z@@p}AU*RFjh}scx78P(4G)BVjMh;pFw_;c6?}@^Q7*TI1(tDjbmB;qm78nP7njbym za(V>G9LmL)|Ig#dM&qb=CMC6i65xBBygd{)$}v*rNzRL%!?RCvaw!YQqT|PqFP`M; zn(dFFPh5cF#UyeV*QND_0IG~K(NClmJamWcIqvJK@CkV zLM{dYZ?f;gp!<`_i^I51Y)5i-7)+ldByKp@sd{r@&VI}f%NEQn_HRdjw^|syA|JgN zRYsEO!(sbmknO{{3GhfIj^Nr`Z=g)-nkjG-O!^g7-a>R|cD&;*XGP@6bj}w0EtTTwphBMolgNM4x%Dx_p^SQMTOa)&vt^tA zO_H0zsccKKJA-Rbx*{FegVT0|s~1L}h9i8N&p4K=Ye2SjJZG=iayngbbGqY^OaJu+ zqyi?ADdV}tWr}DzGXsVoARf@j*Z3)}zk$sqITN^cDKj7mLFS!lg5|uGiB1-9)L)Q- zIn7$q*Z$6UP|59rZ+fG%f5sNZ-{cfluSm;OGAf;m zFBd=6WZ8*(Z+Q7JDaG%Fp!Mo?CM>((iETr}*Eg65F{^$8 zbM*-zm^Qu&lTmfrV>cQ9S@^m9J#?heLva9@)wYV?1cT833`v`e-B(5O>SV4Z`wBTV z8T)`NQqRjh8-KYh#euVt>C<4H`U?@wPP6#GCtrBEhvOFNxmB3-X8t)eC$S2?F!g(h zHIti#-PVRot{B&nZkWQUWj~@m(GTdqwfL6>9B+{5shmR{iKtFxRPbcP|5g{cw%BBU zS9~blt5;6Pjs9N|O5MJM%Gt&w_#vr|sEu2pCr*V~z?LR!r(&;sitL(-$=rfmn2Jr# z6;fpyH=pf7-kHWNVc#e1ro*W*hK!nyJ=<)ubvie$a`JhMy)8dc7m@Xypu#cNSD_XE zWzu~H*TT*b7VWQrk1e-lXPodm&`PkuCV>X2EO(r9Qu;sA@6_wWI}bbJm1M^}E(>dI(lgj4cFoMVNKa&N5x6I3#sSDu7jrI2FUx{m+^$DgLK)6!rSkV~9QeVdTSHu3e)O zD11BK0Xp78WBv>8ucYaGE{;E{*C;`=?<;fwj(fZ$l9ZHc$;0TM98FPLwgqDSePicy zU*aM=(ry8F0{ix+&vDxg>t7+4p5xlG*~GmN-J9S`UdWAR*&OoeBCcbln0>`~F(tWp zY`NmGCcHe5ffsY|PG_{g9pMT0mf_*Omup# z67>8kGU+8w#BJ{Hz639d#buz8d`?8nAwZYyX%~wGE$L#lwUBNxa8Y*q|nO@_T zhqL2+@4Uf%#6m3$eT$o2wW^P^)B&h~mVl0cu7Ey(!6bGyH`cIuJ(;zdn^o1Zp0hLu zqyPp0o&byhj00r)8otfdE%k7?|3D+(RN1hvZ!T&hnujOQD}0`J@ge z1$&^f>c39Pf6fU8*XyM1=Wxd!B9DCzBxiijf6n1P*&?5`k1N9_oFfq5epj=(>{3~5 zPMh!~|6!WKB_rM}-2b_6$bL>Vl+IcZka8FeMU=+*Wc8O=(O)7bzvPw~UVfI0C}*lj zmK}g{?CtyP0QU>HN;ZGPT{MiIO9mWaEeF z^kJ?n`SLK=+Q4O#%15}FrKZgZKbZO)ka2F859U4Zbw?`-QDd=h&ZpB5P{Imfk)%IQHdI(A6FAedFzi;oh%q%` z4X(k&U@vdgGqlw*CO?YFil|3`chh&QX|=E zzWjEkJ_fd~uS!Q#4Fl5MolQT5RjLOI6ngt;tE-RW$B?{+^ssM+M}JC>p-78v=;ljg zbT`vPc7*SIHxpd130bhTn3`DKj<&jZv>N8Aeh&S)uX_*EcVXP@kBW=2v~bD(w}{ru z6c1lraxc>kV5!>Ml!U80M)Wq7i-`GlatRh}P4~?2uyZkScnIlaN+NEFl ztvI{gRU`~WXnhA_ww!vUUU6}WGbfe$--E9A>{dk>Kk9tHh@Hr`Tj(yLcB3og`bbkP zL(~;gJe=l2rvXGfHQze{5%}z5t?RCM=z@#_#4|@9oJ#q9e z2BpheQh$V*W|eqIzRdm&J{!F-_P(i+ zF(rL4+N7`vFTTxLNIR2dSh7j4NGs0@Gg(e0nJgLaaF+Qs;z`;VQ+PzP(VXQo^3)hp zq6oW(%{^Z0V3=wmdW*9%}qO zhj0M>IiNRpp9QyYNs_O8x@nBjyX9!0=%wJ(=f}c$inA2GW7MJl3HY4>!>gMtlK~X1 z^*hdzaRq*9K-yXOqye*$N9)X~{Cjt4oR(Kno`%n%jV}Q-oRk9r%`y3+yrv&CbB$gm zOM|{9OH)7>-<6G~qh-8#m08Qb2wn?|9YkUk*7EN_bfDp|FfxCRX{xVaziF764A^g) z?k&K;{EL8rfvYeH1M}~IH_&i6xbv?N;0@{dzd?lekG+1tM0oGW_XkHrkpF)i1sZ=K zM1=DH-yq_@`2T>3xHJDB91;Hy{~rhu|BL_kn~1-}|NBV9U+4e*A>wcH|DF@^PxyZ? ziTKC-zehye9slp1hJ+ztQl1rc}6|GOmO-thmQ z6LAmu|Br~c*ZlvxMBEqt{|zGUAOHUv5%-z@|C5LZ!TwIPJ{sX?iq} zv9T^_Ue|zDYY3Y4!goshQv`pSaVIQyOhdb5<8A+fWZagf7YSq>X$YDRG@;d+me72s zwA+z}Ao$aaJ7Kv!4PWRpOzuLc`w&=$a43Z4(Qs%U4c|q+S4Z~m5z*=Q-cTa)(3?=m zM?4hvAsz|^h=&46vVx6AZ03ZP_ZFSbCw>vMJs>Fv1Mo}(WCr0r=11y{M3H`?c_m4e z%mc!s=sesdp}S`h_0nk33#=s+n8mQ_LLfAchC}mc_%8Bc#Q^~w^SeNz5rK0rYba`C)R`H^}f zQDl+=37YLFks!YV5@d1)B`E17NOuSfKsXda^Jq9UkB09e9|zz-5DDhp1ri;{KdTQ3 zD(MX+A`QfZLMGy&kc)UIEJOSj5J80mRdGRr?jbHO#Z`oMn3o~lK}f)p2P6jJKITX2 zjg%rUx*$QTG)NG=$e2XCAwiAYkRTe(dj--R0{IAsLTDZhhvw1nUF3UpWOR`30*Q{} zpVfy1mGp)Zu@Aiog#yGwp$PF%U{-*$B|y4(AVIFgpag~Dq2W+GG#rYDhHv4a_e6Nm-j?!Hq(Q*8<`VgU#-cTYE(VI|6LOc`( zARY>7h~EOTwmn2>X@{T)h2o*%P&_moiid`8;i2K*ap@wIkFV~|+`9`TI*xx< zA0kxJ8%o47^d=PY5D$fX#6w{p;?9P05ne13vLAS5YGfG3qm6D@^1Rx z8EzgC;Vyc?h^?{FGJwLLAjv~s5x}y<_(vqY$Cw+i-lU~QOWKP@OYSnGr2x+oN-~k2 z3(zT9j>>?1`n-*j0JSZ1&6dnJjFvn=0pQPwVcs-a5&;7MK|Eedpi2QntAQwi{umx0 z7eEowAID?XAPo(d3=NY9M1TQ+I}vmwh$rD)l%WvBlaKK2c;W+y_PzHd9-)H z2OtDMEA7LxWOPc9B)*UO9~v#0fII*tX5VIv0wD2Y)C1%r+;hI!QiO0?J}&GAgpN=G zjRWXNCvFL}k%=d8b<+`sj!+&DC2j*EKpr3zQ3+8LQSNp$1SkUBK0?0l#+qk_HO{>O z$^bNz4(mRIX+yXf&Qb(meuHo!p41D!;Om?Jw7DDGxS%Iz`TDv44SF3?dZPJ)y6oJC z`0aLjO*7UbK>7kRlRg8#nT@}aJpAG{Lw_239rD)wo<}^B%oW2>$k%6*S&C|$xR_(s zzrrySR&Y$h8ysVKlVj>lFfq8gky!%B2NVEeCz_ZBWYcu>N0mB$acWkD{To}n)bfdA z5l!Fx3cu#hv~>3EmfVRvJHtGvM%y7Krb+r^WiAAsV}j4k!RNj(V$3yHD`kiZusYam?eNg3 z;dm4oN=qGx2~7^OS22+%pD|aBF02qp*GVyKt{EsDSv#~eWUc;ubM;ak9u7^7e!qRN zsxBZEN17~+NY;FFpRfhzJ|u`Pevvm;Y`#U04P8`2G1k_gM20u`0&g-#W2m6 zo0;y*&AwUBnjbDp5?7iNeEVKAk7j*?R+>$vy`5#EBs;%#j#VeCuc~jTZ@D(OL`~6L zTB6ocYpZq8lC&qZ9POfZRlBJ%?r?Xs+vK*mr+DUhc6yjxhKUFBV)*j>M1B_k9KVc@ z5@G~q8N*aTdPQr3HQhSFTG{r!eSu@4dd!8yJkW|M?&e$Z^`dQ!Y`jghDWr6bn1*C? zvAF?BDl&(Y#qlxqW27XhyVO(aD-DpQOS4JkpUn=kxMED1HYxHW@)PnQ`Fq)`%u!xY zUQ=QmuP6y>ZMB}-Nab-WWsFQL z7tvntDlv9a5Ec_nk~Wx2#RPlaUF)e$)H2EZ@R&GaxkSrVjp4m1?m_OS+&S*$?)TlF zx{tblc1L(BdK!CFPY=%%o=Kkho>iWYJzshXJvTfcs(@j3;Zc{j^6mKkd^(@Szr?@C z@8Xa0zhJm32!haB=p&>FvxQ~C`@(;O?}gGnA#h>EK3H1c4;1b>vP79X=gEh)p(VAwRZry0z zZQW-*U_E3#VlA+qutwWT+iKgawhp#lw#RK#Yzu8mZJTVnyV<_C{b>8eR%|ni<;8j; zFSZgph~34$;-lhhagDfD{8T(Ho)<5R5t2zNE7g!1NLI-u^_B)osnQr}qLd}QCase; zNuNlcONS)C^oz8}7*oO9+5VV)HHK-Oyk6cY=gZsWZ{z}5R+=j*$`ECQvPbzsIiZ9( zjE+i<`VPg>-;wT^?O5c;FO6H5o1VVSe|pUMy8(;yn-F}R!gPxw4xov>cmDC7&N^w2v8t<9|aeBv<@A|@Z!gbjdtyR(*X>O>B$Fy-;mbOHDU)$o< zjzDKbyQ{iuxf{BzZrQE58C>nv6TPj&+j$q?jGx0V;+ODm@@vrNZTuJfLHm471@eXGP=XmEAY6Y!|HdA{^ds}-?`%uf*KG8nYes+g@YI^p27@lR~F-2YzzOqJ( zWyQuA`<~)RahgcPx5SUdFU3Ofh8Qc=l4Pm9)E`nhOIjkWk+w#kgi=vytTa=4C{HMp zlx!k=VJ_<(;uzzY=Xl-mk>g8;-|?%XjI*xOl%q8ktb*Fk%y`WZbHFUXMy<8()(_GKH-ga$u9dw;_v04SKA+&!FZK&qep3~mY zHfvvMe(hJSjJt;0weAa-r(Nr_Pdz@EF)s@rwNONcZBzCpJ76OA{~~_ zOJB)nCN#$JCT@mie?xt=OP7Bm2&o|^f{6kjN+Sw|J?Zy7$2>UGii}r)c zc_qRjtDV)yRHCiH;9v1DnJm)?Rb%;w_!R3%Yu6c8pSV{%DaOf7ei{#NK_Ih`KPbf6qQonrY_AI>DULQySsmvZqNTWrt~CP<)D?WzHsV2Ph0LY%UzP(zb^prR}kS_z0MlnDl`&_!s)#9$s@C=i=0721g+I}0(CASUVm zA!dMq!6j%6C8mv-A`P*RD=W`Zh-0PGr|xte)K_t==$uO7>k3zZDoQ*k#@P$)K8(pulsu@eL`k1}79F=`fhJR6c@MG5 zwsB$`DbAiE?*zds)i`aI`-+Fj3y?fSIEb zuYkO{&0N`A6sQp=ti*`#lu|HoiXQ+YsrBeU=i3wq$K56jYcl zHYpgmb2iP%Bn09){84*j4b<{s4BahFvh8s&iGjST{BZjwDsoAIJhQE%6F*52$TSOk zy-eL*C2xC??vN`|{Ah=dL|6B%F`9d1ixfMq4aoe;>|Lx-CWgge?W+KGX3 z!O`|Y8iPpaa1RKC_2Etn6udRunL#9UxO0O@N``w`5CX%Dz2X{2r#yHasZY~!!WHW{@rpDK%3~ZR{W$Fkq$x@#U>tu%sB23RXGuQj zzc{Gmaln62i}F$gmOvqyA0iOzPTLi+F7(PQ#RuIR=W3%Jq-7GKn6`M75$eDS_X)pP zBW>}vmA2zBH>0J4Ac~VK$SXnmVdY0<9CX)P&JUbz)FG}3u9;XsWOsXavKzXZ5407< zSLW;RKHhs!I3rvZqNF&vF0^t=pvQ?(`fiCpClf3J1d5(eO`h~8=>z^Gy(n6jiC^61 zJ=JL^m{R)s^##oDVqq&*#PeS975Ni+uRIlIz#8WuZHD#?om!Ssx?b+eXTX-X+Iraf z+sfD_yT|^EQr=PBaU4r$tZS?Lr2D*^NeCdlE>yMFwHl?yFlE{*PbwKoCTzmD)eYG9 z=xY=oDEA-X9CUp&7F$V5RJ@NW!S&y_Lbr zr|MbkR37(ac^1&#B$d+ThQ(%~iEW&HvHewhDQ6?6-TAuqDJ&6YKmboOVX!bl@QL4w zC&Y)9VaizLN41oztZRzrRnI#*|I-49>SM=|Z2QK3(;g|m;oR-~+BwSoockp=lNrc& zSo>NZx1N$r_6qh79YL(Fi`4-)=3m{%qYMosfQ#yz7*M$}!~?n9h6E>F$;8wR8mX0+de?UWK8Q4qI`# zI7pr$KO?tv4snihHq!=cBPg5l14u1zeN%0KyFhv2RHLa~+mxW7pB|&19+Da4UA`GV*>TxZ?9ZNgJ z7)}*}bngK5^`IOn0qxtqpJlhK^B}(sV1aF1HSnW=PLS zEwK?Br8H9qt0Pp=o#GxyktPI?))ZO^orQ3*t|*ACTw87;UxeLO!+G2lp~Y(3vAO;k zHc$ZP7HltnvaZ8~Jtn=Pe4_02D$^l)Yt;a#%F03j(t70L7&?X*}u1+vWLlLIZm!2HtER@x{@N-t#)bizdCS!J!VfsDLv zZc5@S$CU97cT953aIA1_aeVDKjm>=}r+__EGiPgOCucY3W7zpkb}n$f?p*EM;@si< z%=wk`I5x)ToEMx1H46JEr<#bJR6jLcouJNAiTbAczPd^MR*iQxaJgJPT{~Q-T)(** zYr~*$w`s>PQDk>ZcMta%_aygx_g1gFz+Kam=$YzS=Go)<-g6zh8u;^)ABSw58L8AtR$QG?fhr_e*On|S}cN1=qmIQ9uRO(ks#d$zU&KkFi&>H?;G1)!y7b%sv|mV~Kq=TniiR+w4c}202PL z$?@2>Hjy22qTEUDDL*M^$W!5=nh!ojDP@(aN?pYXu5?%Wcro3lD=#bivA-+hXzl3e z$Z#xhtc6$NS4U+qBF#C@`3`jSIVW{t{e)$qzDsg>;cr;%`q*{MbsmFT2hO>H@G|6U zJGI@~A?=j*lXeZRNte5)yTAKM_eA#;_gwb^EIQw~&$xesnyl=3$kWu*+|$A1?FIFg z>KX5O!}F2nbI(_vGgOJ^8ktpKL497}9q>x@;8Xdz@JzhOzt3;vzvREg;GgBg;nyrL zGzJS=2;GFN0n|hP&1K=8%WY4na z+Lzi_*w@%Uuy3`0YX8c9#O}ABx8K0X$G}}sL#`)_vMRU1$oIw^c~TxNXUenW1@dC~ zb@^@iLpZ*6%U{A%`lI}dd`&K;Sd_|2O*j)o#iO)Vx+p!BN0p&i)+Z{nlzH%_E>qr8 z-t{V*l+AYiGr6m| zd3SSncen_~yXUxY>tCc)uow8ne(lOVuO8r@D(muT2<~Qcb0vVpUv9Cy4(O%1GrYWj2)3E6N&Wqq0N! zOxdS=r5tkn;3#&OoMj>XQ=HE_UvPTQ!*5d>ORXD@#kH^^4yq#!zO;S(_A_4r0S59f40{&9X1KaJ1w^3U)K;pKguU#sh&UHs?p^?uKvhJ)=2 z|0{12stXMTCzj}bm;`f$1;Ts6HsLejfN)qih9#|(HQrj=DqEXb+gX#X{a{~>w2rlU ztuw51txMp({Ls1$6Qa<1(HdqeWvgJT39V(bIczO#58JxhdfMtf0tfK|+Y3-%@7cCt zid?tV#1u&p9}%B`e=}QLD!wgl7Wa}ZMdq@kQpFgHSCKqYYpJ8u4d(@8r8&}kOr}-R zJJN^J*RTo-;Z&%JWn6;}n*f&1v}a>xErfOXGMM`=wAl{(KKr-!6L6VcwMWC~uZEe` zShmTU+yYGQ1&x*^FOpx9Kafw#tWpg+t%;&2iBzkBv1wlAX&gm7hv~CYc~98@-tGy` zo+71K;T)A64><&QnOi#AJ9;?!!sZ(7c*-%wk?UCQSmjs;C*DrS=Z`25Gvkbc zG*orgckYV3X=v?kx(x zziWtVtZSBQp6dnIGS^$KcU_xY+g*EIUqk)+T^C%x!rdDShi`4Isb<$aT5GMF)=x|I zY9qC$wJ8wBMcQ(06`ZCU;I-SW9n`*qhAz@>Kt$u*b>Rrs+-=>x^#yURdy#vY`%U*c z_h#to+MZdS7ht@v@oey%^e_cRCLK!I#yfd~V1ysHsbCi#7oHZL5uOuP3!89Cat%h4 z(OTYG)7r@D6`^xGT2pbuStOq%23S@8nS8#t+|Zv3iJXQ_wO2PY1XOQWPWr99~a ztd3=|F3R>6_V)I1_N87Z={$(f8T&8xYjy?>$u3w5hr^FM52|<#OqJd8J}9Cv2#%nr zP(+=fibg2om8r^HWfA1&4aKKyQEn&%$ye0RP#bVC|H zmY)H|@G=y`PW}M@4gBnpf>}rux_Y4r9>;RHT3CyH^cLX<;goP58@(F>3&S?vTFqL^ z+7PE&vb6>F6e-q6us9CIIne~`G;0nF+n20ASWj86V*ecjroCosA$AnIihaN!pLklV zDAkmjK+QLkdPyUs49SZ_pJ%0$(lyD3Dc#oI$?kmwT$q75y-r^zPwLw}6YR%TSOa(J zE8t1F2$teanNun#2}&cZfEp~tKFUC>eesAGd#T8&ei zt6kJy>Qea4=ebs3PqV>Q&D{sa#sv3t_a!&$sp$1I^bGcl^}Of#gsNAZ_O8bNFuo#I zvwqN`-@tyOro$9rzVN9v9Jct&u*7%SPQfy30F!K#I9{A6W{T4xhRtzkFhCk7&BMXg zCh3S&fIX#OIx7`HiPf_AvM+;?Y?c$SDXNF1j>ifVt#~zvR0{S}BVk~@sx*ZN9d-QT zXyCLtYp5RVLQkkwTo1u`YN| zDrQGrM>8C)G=PbH(OE^U32*)!bv};8R;ll)8?dPD#@=IP?;i!oRTw!sid z;FyVETLO+e8}l8o`yR_@2M;?}!yI47|HNP7BZOF?qEJg{B=CYLC^-5|7W#RGk+8|9 z3R%KJVJWtEYlM%59oXOc^{NAwky~ob4*)k2r4ZOz7zi_&Mb5IS70XW z=8y50`526hDs&W5g-O`yt`Ih0qjD63a7OqA4x(R$TG-pR#^Ls(*5TH9UL0q>ZT-l~ zVhbB*s}38$4R=S9t+(wl>{?gZe74P)Bl~TIwgeoqxx{8-Z*ed-E?L;Pyo8yu2HTd? zI2|u7)suKhm0DukNjIJ8(gbOyet7tXv_Z<3c1gRXeNfql^x0G_QFn^fo^1CHwok;K zCda|$dQT}TEnh%fX3(!o4GIiO_P*optxUw z;{H&{hbi|3*x_@I!p?9JM7*|Zs`jk5RC`VHX|;W&r19 z24h5X_;?`!_LL@k1358bJ!@`z(l*&P*LKi$+;$E}<157dSeCAcP3(POlV-xlavbM{ z#r9X_FJNn4gOjnl<4M>P#m-V{1GTr>(6!L@AFUSke5B!JEwC$0s0zl|;4*s|hswvW za@Mj+R&NLEB_FskS+`XR)HL zgahGS+eWw$zQ)=8We{kE)4+{W&~|VeP%G^*ahNy;mf94ZRWFFIif@2fABx+=uf@aA zAH`xn$!vFfG4#vq?_uM=*IoesTxGc?bedCc32XXYoYxNa&LG(}~tK3-hu46CD1JFnT@t=t_j`Lo^6yH~hZ zyFY?wb1@9zZJqf zc!gOocHhMUR}N0mR`ATQ=r=uiZ;P|{BsfRTh(+Q>2;@yM1uIPjr3!o!1r9TG5E{tk zm|=KCqMe`lmO`p^gIC-EFN#?jEjM;dcJy?9<2(jeLrZm-x*GlY4rlJAUG-hvp$lKc z0qrN4yJfTloU)IHMfJJcf_<$AOM3f^0h)-G68Q^hoKuIOD2SI!o3r}!iG{!Jt|tek#0t6m|!D{aP<`3V|6%pPrb z!^&wJw3#_6y3eJ^tuqrus0$eP;p~hyopM^E~j{8IGIDc@Tb&sH< zkjF6!9uZ=USV3GT?w5X$D$1{b&^P6GK&r^!vQiA!@mf<-9| zsGe~==XlxireibC&fkM8>MQ4EXJ^dpH`FaSNnh?-@3O<*o(tP=r*=Rqz^f3YumNn3 zE#N@+5cg>J(-@CzEP6{}U%!Wi?-2a;;hqXu@{&EHJQMMT(kGr%`Z-Mj$6N$;Rr!|u zBUs-q@{zi{FUMOLgT+bWo3M&EivNKEItUrL24O8Pb%7;3UdohKLbdM2QU584vsbm( zvp0rP?PyQ2kFig-PlH}vfma(o#isci`*$#k!{q961Dw^1@aFY}#7z6Y63sL=hByr4 zqgE8Vj*7EX39=e$c4v3)nI%*xDk|bm>W+xiQA((32{uingpgJwMMZ>GXdJCHML$Th zu2m$ONJ(h=tyHME>bK+jW_SO``~IKj_dZJ00q50l0Ilx&JCz9_iFFwCooXQ#{hr!{ zKmNoU=h6CU10fGKvSx>NnBBR8GVbp>q--J&oAn|(LmBy;6pT-z0mqGGb2Lg~7qO>z zrif7v(SDCbF8!~L&!pv8w38Ny2ghSM4@pm@W`b5L!YT47d8XTD_rW9^@r3PiH-bK_ z%u(`4o$Y}tTvTci^e>ff#2dQI2G>!0g(|+Vw>Xr7n*v3ei;~(OJQ{oir)>>7bk5UK zg;XQeqoaO;d=AkWPdE$#UWbM=3=zW?VYgIJ=moh>j$uM4vq@!26`<1q)0|YR)hFt2 zHOk80Ykl<;ay#Yv3%yhCV+=AfNgv%u;`xYlTqTwBi`i7A^~~zAQtcdM>T%l(_7Vnr z6Nx<`Su7Mw#OGpRz?sWEo*<101;e%SG)QX>YdnBqN&IX*1EeH1L5xOF$1~Jy^yOMA zxmoR{jnOiVRg`WCiIPg=8X2c9qpvxPT+R|;-2=15+-Q}9=mx+&EAb;8c0S^`I8quZ zLu*xV{hlN$!%6qLFQ9I8M?PZ)bMlm-#qf~`~8 zm15*>i~2`xz`}pgEb>EJ^{0A^9z=d+;lGFDuaBBdT*MAD2|QM9Kek^{jQ)t^0BLgB zj#`F*|IbE2b}pq53vdi=;zx+fFY%uAM|#WEJRdILZak!<;*?Z3@BdmHW(hS^j>!?! z3`o-=n(bCt#6j%_f5xw8K@K+XUTPfEQnQ%|;CFMrwZL9&Z^JG+M`#f}cK^sQAnC-& zCbZri!hp{rA5bS=m$4;|W|kOrvz^z)Mp)?jz)1R`Ne;~i#(aY-m>k+4z70QV$8~v> zHF}=0!}wwSwLCQEGxj-F9JAXPD+=4aLLR#vKsV+x(U`p)d9hnMECoQ$`KY$N#QBN= zHmPztQy0HHRX(HYMn2c9n%AMr7>_%+Wj1oKZnhR8U;g+|Y6tO4LjeHJ8e*@-YNedL8b4&Nw?rBa-sDc^aiw9IgadsF(iaesqNOT2WJ{f)+nm&axo*aK?obkS>O zd7JJ3kv?>5=(d?|=Sd6Q8YX1Y?R)?7(!G&g@c3VJA&CZ8iK2@s-K#1+bVuQ-*Ua{x zr|ER2QJJ|$O2J!QbQ$z=jYV2A*LX_1%Q2p#yIf-#E<7|%wT<bUv!N*G% zt&8_I%SR3h^%8n%8SUFu`HmGyQ0@xA=twB#8YxYXxyChBci(7tb_>f?txVBDW4+AL zk@y$G$9PBICgf}sCwdKx*?8SKvyql_3RtaX})y}?o`*K4WagD<^w(y_^PO~b{; z+mHH~M~;f|kKycNB#U=jzT=k}o4p(8x!M^AO_dz?vUITaWo~T7<~oYL{OJ0=Ov@P4TEwP&v z=3nmx$}&IMZz?cevfO`u*7gOxyMq;Se8CvM!^vmk44v~!+M2fInzqeEU zeYlP@V_!4Bob-U2)HLT2YH-|kV!fsHiV<8d6|?UfLKK!Ht#%BV&~GUSN|pO;}FzlR4Wy znKND*7vvAmW&|zf;v|oz<=jGvYc`ngyHXm`tUZTlY1Wkcue7Gw^W3J4BhAt{$fq=~ z-*(~E*UaORGh>6IEcu2gs}H3`_CMrcFuO*1`YZ-BZN412OYr03GV+?g$ork`%K|UU zphLZO&Kys5nk)IX%Hg6j&bFGu;WD^QI>)C*NomcV&uG&2A;-NfHG2L4cQ50@^ZvYF z@e69?#&D>T=8;3iR}J<@lBwh8Tn{O&<1#KSqerI{J-0F=vx^_c8#`s3?CQ&LpG&1L zbmS&TjbB{OkF-gjbsH=hy2Wu)#;4s9Ic}}=p!;Xs#Ecm|rt@61biLOQ-n1;EZ|_AM zcSAbT=LVeG+qVb#b}w{-p|K^b(H##G(G%z?tAH*@Xp+H z>16mQ?l-AJ|B2jyj3xcu1uiLLMdYZ)oK?F0(RbXR($|w-Xu9E{K#e&z%R^`Xak!Vx zzK;H-)4x^pZ@F}9Qd{`ZWO7^&r9#k&dC*SDk8PP67HlalwhpWqi`tB|e+?N)GUGB! zO!gB7WIaOvvWMZ{Ug_}UhVb7$xvvqI)^QcaE~D#F6nUpwX0|Y397QZgqbtBtUkETp zLl$MK8*UdPO2v4)HR854zFdm_Y#Bw!tffsS#?~@NQ_qUgjkMc+F)$_~kveyG5V0cd zzew9>-Q&(mKgG}Gilpwd8)JkRHQR#!XJ>!yIUk`BX;O@frG$h|+$?EJ!hJJYv}6`r z%H3y7t8AXqT-ufRN#l(Rb>`imgP?PuYoKzFTdL0ND-BKZhryVnVD6H%C@HFO61ZnI zl5kxM+5*Z19hGX&@s&pW;LF*im>+@-m#pEX(&s<;Cwyl_FAmh@y1{>)ICo|Xqb?=W z8eSxZm&Q)3j4N%kXfp(D7H!3U>)eH;6ka~mx^yv1FQNad*3kdG-{61ch$3+nF)jN& z#0WdbGK*?9mPKT0oN8`tx!6F>9A0W2aoak!%o<-2Wtx;3WtwtI+WSL&!M6fqP+>@> zW2W@`4~?3Xc3+sY8`fdk8eeQmo1~=f7dcJa=7nz6nNh>-wo2#MPicp?y(ETuTL&}};|s*TCH`Wr&2F~X z3|3%3l#D8Y^R>_>wOB()T zJ6>84#f?!Fl1##6ZG(&E9 zIXJqMv!>)XFe}FBhDKJNK*|$IedpJj#s4lTNLl=xusWsn(nvj22EFG$ZFb_+;KeBaJXIi^``{CR*+QVsa~Lx z+Gc#2QO3EI#(3MO-OLbwUacQcsz*-;604}xFatbFM*UlQJWoY<7}8RvS)-ngq^O8 z>_ws*I_!Uu3l&np7cHeJKYP3^jx7%!TdF^!wq}`l(mJ-Z%4q7#2H3OqpQVD4#YL1q z+hudOW2#hZXXHdJ8sVcFi286;K&jI!wE;%l-bL#q>)7(-d{gqB+px5VLdvx7zjmuTv8 zkIH<`>O0p_8}3W~OFD6HNQ0L2;G5o)YUg*7zT7>Pce^cx?&)mw@?Po)m-_B`k@Jye z?1|)hNqKuZ*ZBz@2mLa7o7yjNk)|H0D+TTiYEc>^*vHrbK*P(PTMWrkZkjP3`ioWl z`P-z4dxrpW>)tMW^IOu}JL*eUR+y>&M_bB$O!FpVNsXao4b;VmV(X&3Af3)pcoViL zRY<8UN`)7<=&MVtw9Y+6tW8dZVoIesQ+7&8($swo-Fz=qRyw9hpYQW^zkd<8Z`=fS z!}p##aFh)RHt-%~UZUC#ER4F%< zf-{?TY)bfvWzZ>ysqe6ywv_XxT{X^fZs{mbA{T_2>5ib2-TQXFV0_lWhhlzW>}HWF7`kh6iTTz`gi$QgKGT(ZU$xxruS*jSe3I~@H*4inXk{#HQ^PM=E>ws| zu-@_M%|Me-MU^^&-bR^iSN**n(CiUk;g|_uAJ4N~%|qHsxk<^kT{U}Qys@i3I|d*_ zj4p-)1b~J`ibw3t?siwpR?Z-h!=rkRddMNo{JM#BBKw_yOOf_rRoWOwF$ky?@kyzx zvKl1!tg0;Lv8HpsL^`_vW35UuTslg%DtW(zs$|rEF+L&i?WhuXs~aXBalDKnf;=Av zzr`bw_C+r`y$&x=x~M}H!W&eK>d%kYoE5`r@>mb1EOpGO=Wll;JTAPbmPi_xQ_o;` z484Zo#9vyR)1nSa%afa!wpi0!dr9UsEj>{6W6K;x4oS>=S?ZQsuTyD^(eCj(HM}@pYLR>l=X+UHl57mXn$Tqy>3zVumr=KmM_Cs1S0gNG!B_AMm730_PklSEQZ?Cv>Hb zx$CTErV*LJg5k(Iy(wk#T{I_$1p;#=x3jZYjf9jNsK74@5%AhVG=k86XeJw<_Pssiud>mY0uuaeB@93JG|`0r!@;A-Lw$6(*qEUscYu3;!>J_)o<(4dP26tv-lbN;S(&(Z z1tLagN@<16QlHHo6Id;WgWTAT$f>RfD1=9r39%f&kLa8N909%vOvXD}Ez5D(I0 zE79t6oq73Mo%wTI4}mCAPP>&!)<{$J_Le}FoFtuxO6?FMlxbmoDeFFlS`Ypv3mQ$XET>&zd6 z_JbTC%Nm_|JLpeP+cce71|0>t!_m>8kG}=R)y+Dy|923ACjSQ^vQB4i{=Lqe4(jrQ z&OCU%&YTajY|xp<|EM!x2AMYL%pY#lnIn+*8{8kx$QZPa=j#0zMyVD)N!OWseglU= zy}y;-Jk~6M*nfgh`J9fUKlOh$cuv}eY;?aL*CnW&tEynvlzI_Y$ZQedt6J{xWOba!m}*ru3LB8OTR(YPWW!B7`|0+EO#yyLLwNI2UJ?C?uA zJ8um?)uIxI52*wF#a>5Jy^mNi&_!IT+9qNhfNkRI9IXP`HZdo;V=rtCD0>cL=z1fy z#$@q@&fU4&kFb~SvH6z;(}=`%<>I0^ib4UlOJV5QDc(5hhnG!+&mYT?1Jk7 zZlQ}y_8-D=8kn&ePJVQXWbsAV5H~K9xTw|c+6Xj zD|&>(QZepaiF=r4Jsir;UGo<~)GmqNoMYwr<}B@+4VcTzCEJn~UcR&$MC>@?gQTP% zdvc4UJwJBGxpG-b81G(*^}oNgVq<&#HOB$ToZkTV9l6h>!yCihZwH58(ubExP3QU5 z55E+0T(rRotg6xI_@hbH#<^W}-OgCpWzvrC|KymA99Yg;4XYN+U5APpH9t9oiaJc1 zGQWPa$~Y_{OJh77<&A4l^U~Bj9s3$%OZ@7%(w=$ouhONY1frSuJs~)IQc8?mhySC8ikJ=X6(F*w`aZ7WY#BJU(SbEM{Cn6cPP%_7|Mr4{& z|IoJ6z$h4i?LbdrI8LLJNLv=X+%_+l`X`Rcs%^f@)pA*TEmCW3esV1;f^_32zXni6 zdn_f7sgYMPYfA$lt-ZXF6fFkU@4_sWSMA$vRonK~Z&c;Oz_OQR)gvqB`y1$vewM3& z*jZp?NS#Y~V%#Zfc(ItbK$l~vr4w)F7+%z|m=wMDrW*DlSX1)jnxkWihP{$`pENJ*=gya|u;+Uw*fHRUuHI)UXy>TVj#hOWI;> znebf0f9{y2*Ir$!_ujYwIFQSbu-L8?4Rck;98)P3e+pr0*n77V#zfT{N;n3S>?Eq< znxA;oazVPj)ztdb0#*?@$@Qo{aK=<5jyRR0wua8h6-N|FEq?AG%}ot%XiDK4!0qr; z*v3-xc+W-Q9G>7wo&Me1L+`y5y+IryWiDx%;Juex620_ue`GmIi!Lwmq|L#0cju`Y zRCL=lv*kh{hG!?R7y%ztk6f&x`D&Z_E)~5OiMF;`A;-`_A-3Q`wg27CqPB3xQ3R-BMv)(S5(z!#hmQTcIj z6<4R@VI1Nx$M?=nI7udZd=CX}^3#jW+ zr#k^qrW(OC>S)4jSLDoni#4NjG|~nmk(tG~_k?AbrD3iAtdcafC8YX0U*fkLq}tYo zy~MG%gU4Rdk1b2iXU%v?Jw3p*J@&RKd7v*wiG8`OFprld3=*mK&Ja4)c?*X&EqO-> zo!tyuZF6{02}!mX*eR*^xE;Np?E48mB|A z4l2c{MVTh_Uy$Y4M2Qh1LPFrI{0+&Nw~ zJ!%1|hS&>LA!Z$0J-Y5>;V7pAvOgYR6zA>0r5eB)R3P`96u2y4fZ&2$U5l1N$b8Lt z7Iofv7In&b7WEl)sx`-0B+)-HB-h^C+_TgXN@;dH75a{;O3%x2)(8Bm=60S;9V4!@ zb5Sn|zr;Q^#yG&D=MGL4*jRwWsg%!fWVw?LOSjYL;K)T@OldDjvuyRGvCIA2PNAU+ zi!63d#m+*?9f1VEMox3JakEHTv%HD%)H*KqB|6a8Bc3Q88Zv*aY|Bl-W^l+jo(jqA zIkreL9|#z5>WS_zjxE9#9w#EDk@kr$@O|nDS-E34az7nBAORB{=73&{tXK%fSM)p` z=OzB0GnYQR(3P~X_R>~E^OG?SQx!c08Uc=v?9S^g_w=TDUpzp)G*4~!8#_nCc9k7; z*dy(CXkd%5S3gIiL$m~(qLG`9ue{LYr5@FCq|{?Ms2UXohLl_za)XS84Yl+oW0Y(UaAn$G9M^UeToXDLN4GMXR!EHuXD24buJT1;$E{ zJ^@6PN7`Sh2CKF8_renaF&iVP77*K54(J?4% zl2Q-WfX?V+u3-i z&g2MvT?rOuRi}sc%DAFP`%<->P|yO}hwjyX!ZU$&tTbEU*Xe$u}D#!X8_Ox`$ZD5t|&KQ(69 z*{nJy-!e#R(i%0IMuRJwxX|8U70v;xOdrDJAoV`j2+sz*d9XuRX$qTIV z5yTE-(_DwK7*@_<$a2~0L$0x6;#=dvxCKdAhwS;A<4XDdoWlNYT=Srk8C zb!4o=kumN3BZ};YFgW1I_LLS4vseLegjf~VG=;jAI%KRDTqQ_&S_zs$1tp+U+-A6a zvR^qklB>(FJZJr4^MKpCtUBOiD6PL}Fv3EtC=Mg;Q}*Ckbj_Dy=hy9^ZLqx@Utz`N zn#OVX+YX;e;+$bVq6Iriz@;R zFDq$;CDSNG5?c{_<72F7XhDEoD+{LJ5trB!Nk0NdgqJJ_>63KIS5G`qVsfpZO5DV7 z`b=LOTk3o+VbeK0mvGPn&n47~C{NA=9#l*z3(iSbHnmQ;&%Nm3HkWP@6nmR2OR@_vR7wL1NGjAvtiKpnL2X=o6ejI>YIf#S5W(Gop~B) zJLn;(-+rBW5$Gi7^8-5bc~Fxaop~>)92As`gKy9!P=h?3`E}4jP6CVV1=m7U z-fivbj(nu!hwCe#V2}sg>JEAj^d)E+XgA!u3aSJ5^5EVLP(8TU7gP)G1%O(EUIFz# z1skVzbB}sey?(Poo5K{9Mh`g($3`Yz;7m%{j=Om7X}+H~w4;J; zQRyU1J{}twWy$kUQ`+;8N1k{d^6G2yuw6pkRzEMtW25xIsO6s9jDFY^6qlhd9KGzR zv-Hlx)5bv`*STw4=a9x-s+VBLT)vsh?wpyOb_#yk?2Vdp*^W=Nf&1}k(QhVr z?6irK{=C$*O)QcrnX%l!9eGgbX)_J5rJtHs%Ut4}!QruO+<}dXn<(|ZJju7wpE@&p z^kO41BRoV;`)q07Wj}76^vmU-=g2l^&~c`IHqqz9*!JeNKjGPCG2ElFqdlMl7MQbC zw!MiIc*PG7Wp=&NlPi{{Ua5-*XH%}c*yeQ@pw_eZJtxozR(TWceG8wCfj$BK8?*(q zN4k6^IDu)OvGn?jZgitei~dVT5`nrXuvpPeDPEXQ?i&80x`D^oTz?A{G>vKAcHE$O zM&Hqy?T0RS>PkYi1~Sb_f`}T4VgIX6YJ+FK@&d#T<@V!!6TN#`pn19jFUDgbFgawnUQHCpV35SZX$KpYBBlUjM`ogtz zE%8fg&H{oIlh}x$OT_8VS)6b;=2T+pu|=Xf=A@I@q1%-FgxaF*E(i zClmhgO`r}SW?LS)#hK{oy`h#oKK&GUCEhLc?lY!ZRRj18qXqK8L~P@b%+#TwBhd{W zvd&|8Nd4ZPSb=uiZ?M}@9<1!>Y}wr1j|#m5I|yt6*nO%mZ=Y-TbT+0b(4-r8533W< z9FYHgiN7B99F6;y3wkYLY**a9%4`?(wk!VPL9ebU#aIR29f69#k`^BB~JRRpVbmg;s!kVWG(b>Du*Rd{d#;4gVh0 z9+i;>(M>!O-Rm_pQ{5*;d?x-pKg_)O|nwuEah9WLwddG%947vpcm`QvY8&w2GP z%k5tdO`ZLRjG;H9IW9xmd8;YL`E$40c@*e4+Ocex%zqB7mz?XVyOSLn+qd)aoc=H9 zcHl@sXP+!h`tyG6cPsIMJ!m0lCGw<6pWF_Hjg_~XdiwLshK`qVZ#(=NaGd#Hpk1Kj zAgqJTe@F-Z`Us1VkUJfoqlw(46h;N-M0siRx;m4m(L?Lizuv&U*%18dyvj-@3O3Rg z9-^9dB?}m-OgWkxY_BPV~JM&$3v!lFntFI8AZWmvBSa^5UKh9;5V#xU=8;W^I~-NHeYz^9LF*K?kJXS+;1lhd0;fZRb7R%|0ZpE z(32Y`l{^Tmb!4(DxBX?QN5xCEW>;qomllB4zB=oobf)5kw$~vJ_0QIIuGN66)gx{GUb$K)q z=M2jqHQ~->Y=5*GU%vTyG`EHeCAIM;0UzK!auyBCzl$yZEn?y#C1^i8o5t6?n9-UJJ*Hh7Rn!aa`joPXy3`<{*L2q zl>MIECOubQiS^+UdG@6q7Wp#03l~a7VsFt1^1>NE|n{ei&AkKU#kTVa0^{(2L?un+zwf(qI?iG2MANLCP zp}fM6YwyvqIovpCU#}eZk^e^aW@w=m5wL@(Sk60if2% z{WNL|Sr}*%C;_w)M0(e7H8xk;`*ZElF7nt0+!^i_rCUSp-;~S?;J)S>$P*iJ>Gl44 z4qamJRuh85l+vFLq9Z))nR4UCTrk&C4r|P{<|H|$F&Bc=s>WPcQ zaTApuO}ILEUP_J#^=L zt6ARMn99lpix$Hndp+f9Q|?8cYp(=0=N@sUgn{_B)d&yqVB5T*!|a{pb}hMP+#-2M zOKvD%F+g66WSwn&*$xc{2?YiC;@i-)50zhAa-AtUJzI0*jJQTW&n+@?zbbb-a|@fb z%fm`PF+a$(?U-rX;O3?%+XbU(+rm!7j`CtWpDLcRX$0rSwXu?0u(ea&snj>`LKg|&t^-pt5 zh~{eX=+%>BIRE-u8)I|S$h0lr)yk`4xbA#|s#eDKq6?f>;Ku`Qu{9cZ>hN@Vl?3_a*rggKi5l1O5$p} z@y}h6dnR$=+(qTgJQ_msmRh-BPih17##(uDJ1h4V*HxKs0x%*D39I5?U4_D%Qfd0X38BmaQX6%?*P9-`TaXC zjN{&vo37*j;6L1>%1(a|*({~o*-cPLk_Hb*&(p%v;E zbQ{WVZ-h=edB`U22FluZGjj6xx5{(2aHYKWR@H3x447@CjL#t9nJx0#tq_)OR)ueD z<67_)o0PNi?Zv(%zyX+_-Su5&MD(X@t@hB_mmvUAi6?KWc`4|;dau#(( zHCPn&1Qqpjxv+?ex>(8lMJwt_D(WJwsHfDTp3;hXhKed`MLnw)^{iIZ|Efj(jfy(Y zS=95@Fj3TEwW#OSqF!J{oukaT$XPjVvf_Oi6D|LHg0k`ohp+7pQQFywv2T{L$3ct^ z%HR^3idQS=O6h7+KDbt~BL& zGVqR4q~{4^f|6|1B<@TyRw?pelD9PU<<(4kGnLU!)3tb*9!V~!wrex-aHqH~iH9o5 zzM8lm6ThYu)n@>M2^zlVRs#rNDz7L-jhM;+&4*vBsRS{Veol~P1oD!S9ISz~VB)?? zQA=i_x02jilRU>HJ(QxhOwvt*H?Y=LYqtYa>FTuIiEM|E4{G_kFmXqx_yrQTSCU`U z#NC;=ty0v30klD#qj;UG+3&+NS}H|-nMQNXg|KQWFEf>~|Ia_le!8LY|Ps|3`NJ zfDht^%dJ0v%%YTk02$Xy?)wp+$4!$xCV`u-oSH=3F>>G(a3$G3g+Iz?-&S@^<-<9C z)}LhmJNdh5d{aK-mYhG0Kf+(UsVo=y?wn62y=$0WA^#r7=kX_Q$lp)rk8pZr<_z*= z_aAcROg@+YvsAWz0)DVE`cvYcyQUiMKT9ptEVWSaB&)b8C(c$2m7o?Xkz8yfk57V& zD9#+UICDt3*9AHBBNX*&GKz{qrNI64V&(KCa&UPy2T{U#Y6<623ID6?n9oXhPAlO8 zD&bilKDt&7!CeNOyyC$v&YYN;f( zR7*%!Q79*Vi98{N@+;B&M)~eiIE)69A*8Y`Q_HqoE!%R+((912c?JItSL;k)77*+` z83p;ooW${C@-*qEgIv`UAL%t=Y-TO49 zH)C8%gOv{JAk?4R?IEB4jtf*Wzvn+-6To_&CV(Bvo(=p$j_afh+Q@&-CV)*4&;+oB zPvy8I<^E6L^Eb9Asatt<0@wxte{7?&Uf~yWTwkTv4l=cAy>fUbnQE%MxtmP=TPfW` zg39ld_#Ouel%JW8gHeyRLeNT%S$aWb{#3+2!WG8L$d`Griui(knUr+j*fOkplOL#BRT zpsYMgriLod{g+Jbo2TsgjZDFbV#<-GoHF$!~W8f27i?GnqlTLP)(p-tr>YZpw^q#6~srAoeVo>jU;SCASY* zIp0G0I+U!mlZW;LKT4?|PU@)W{`w{coMw2w3id|j=&Sk*9G~y6WJKt{H1J*O$il0r zf=P;LI0T$kx%Ilfo`H|`Qu)a62FoBQ8E@(R4E$DuD!8uvdje(fR6c$O8T7XwddOa{ z>a%eaFyuWFyrOh|p9Ed*Y63t^(jX?2Aht{s03()R+)y&614F;np-BMpnFbQiKrXmI z=4c?v4CI^(#0r7lde&XJ{kr}zr`Q(i2k`pXUtD1SW?)51#^(&|hzo3~2DXfW<+{LD zYGA7wn9T+D4GB(?BvA z$Z8kJ0S2;4$;f3O%UmD@kmx;^xht{nP$l451XRN9&s|_AG_YS7nCJpKqk)}eV9749 zVg_bWGA=N%co*1J%7Q>}P?p=%T_D#rkTM1`#Rc-026Bgiyzc^ez(AsvjE4;59Ty01 zP(cg^0(r{?;zYXjBtUNA<$c2uL^{^c$=9%_B9t+Jt*+`5lV)?fue4J3#_pQ z7RbOtU0}^Mu$Bz0hYPGN2@nYFNDv$10_ns+Ix86=45Xb4q?-oPgMqYgf%Mft!Wc-P z3#7jWGJt{jyFdmrkoro-YYe2e3uHJXde7QbfiQ|H;kMucds71&!@vwKu(vg^cNo}1 zceQ(?v%bf`DwK@(8Q2|7g3daLvLFzqP?p;_Gyz70I1OY5194~qj0m$dkaz}i!38ph zft*(|k{QTZ7l>5@5gAC43uLhd@&yAq;sTK&&|43?IY)%ASRmxOz*aJ_93^8l1Iu)Q zeWQVW$G~>Dz}9PEKQgck7uZiEKp{uVn0GAm6$`_GutC2C~WplB0p- zF_2|0ki#0t5eD+P3*-a?S*&FI!ax?dK+ZrScrI|$&Q+Ap?i#W=rO$7Mmw3LyBF`x{ zu!-=z;VQ>rk#x~e+kjPd*j2*;Zo1-b2b*6wODQuLk8sM~66B&O=sKjBg07RaAWqp_ zW-uFQ;=66Y#5YNq|Ciwk7HgB0DRn4YpL+}}x(cj91AC-_@kR!wH^PU7$_;}NJ^;lN zY@m38%@@2$C@?nL#|R&QWikS5xH8{tyuxwb%H%r8#aBdBfz&5!C{Y8lh7vVaL7I@Y zh5hA@7Y+W3N09MPJ(na`1Vgw>$!c!AfsvuFlF`!WVc>1u<%hw>{rrP&ilwdbIt%gV zjh+S`I}{RdJ(ZU_BL|H_U5FpnPUU~5@ZE`zaOgq&q!ub42z?nsb0s5;AvDnt8Y`Cm z8p1$^;9rFhp&<-m2(_yaUe^#tFa)6r;Z26%sbq{{2zm{HS1fO92=5|?o_pvfKMFQx zQz4=?h!_%t-O&Un#bga*3JH>KXaW=?j)7cPGG+ioZ?mfs{=rqnGD}05%}_45P%Iis z3PU;TLRp}phzzC3g|e8ToKP~pU?_*3Cl}bh)Ly?^* zOBKsu4dp09`P_w4q@n!EP!_mQ&T1&<7>dP(a-N~gQ8F$vlvz%c&lHPYL%GIKrn^vX zXec)s%48SH9S!9!Ly2~wR4|nHl#E9V%cp$yPa1~QcTE|ds{QcuYk!cfdk z6q90kT|*hkPy`psTN=t(hN5?&yrZGK%TOweYClG=jAkegl#CdL@|P;%AKX?flQop7 z4CRKF2Yr9KhBA|(*fjzAe!PYeMc41;CA;amPF}Ky zuK$sj?4|2>%94FDZ5R>%?&}O6|LD9q`%EL794wu4m+9 z58Q6cUp{c_$^Q_e9Dm@}o;B1%5)M*2J)&zvbP&=gIpg+h8IMsA35{t2blQCIk{n;TtC3Qll-oq zdnkW0Qu)@;J%VdhEl<%CdBpI-DvsQszWX%(`fJLf`tGkkmg`9*F+9(e%d>&|Mm~G6 zvZH}}AFjH8F3apgbeDfq`CEgO1p)58|AzY2M($JjX0QBRb)^Z^hYk3<>hpr2J}3O| zs*h?0^`Bn;yXvi)L;XV7-&Mcc!hI@NM|r=cyJX;ID-WM@H}N<#@p+!EW>-I$fc5$vXxk~oUpcq@r-up2>1e2d+9D2Zd)jhm7$UzRD4jM6zJK^EAKKrj8SOXmXxOi{ps-&eS-g_VA~y!tf%pnvht^APzoPB zL$LYLGX#q{&!=M~8a$uslrq8n8G=yZ8G<06XJDAk&&W|$$5YThrAFk9fu0SOm+E=u zJ*{3;>97W#cb+9}sjO(^dFg3V1(v;^4awt!`=@17A?viP335!EXFyJBR}*AbhngUd zcdiMt(F@OjY~S6}lS+B8Z&eIpESr-jcNpLqqa5w!d7n!8H0cM*JE62PeY!M8M&2N$ zNk7kvPcxvv{J>}CRZOqeguC{&|A{+p*fVe^kEjWE$Qw1`UKsN~aaT=v2JWVJJwJVF zc~^hznWCI~&-3Bas!4{_qAd8pGw|7Y$4vJ0dzw^1-mjh}AfqWt>GYZ)zxuQ$$PZ^f z19DSRO^_8SH9`JhtqF2g>N6nsE%pqiQXW|PcmONrC7xTUPM;LW5CkYba!pdi_d_Jyi$|V2uDrQL8Uc8_P+59Nb{|ljQadllT;|L3G(6nXFwJ{tikBd zhlLu(iGzBfhLK>8oAC6JV6kUSMpM0Ok}fdS1Q}oF8IX~FH5rZYuSq&6peD%PO`ZX1 zZd#L3pXN15g;q5|K5X+0$ij9t89m&gCh5V>H9_v_`V7d$-D)zL+OsC2l=(MBzWRgM0gR^G2btNszA&NobQ*YDJ4}`n!}VVSLG|wLaX(?2#<=Xo!Lfq5E2uYU2xt`Oeb7|Um!OrPZ$UqTbZF?Gam@vt2HgX-i4)A7 zK;1!MpjSX2fj$TQ4B8FK1|0+)1Dyi(fSoW8{BuS$0xIOV?2`LYQ;7r_gcUvv8u4sM;2Yph2PH)Swu0-m|!3+VbWPgpT#_J_JaS zRb*krZf;+aLq8PiCzuo;Dq587p1XY>zD|ua8%($1T=t$jzTae@s&c7PP<38a{5ObC z3}%l4irr8U;RbIg_yx^b0{RQ&HA67_f!cz)f+m1sKySw4-)zu)&=;U}puM0X&^6F) z&?At?Ou<|S6bhOIS^@eNv=O9$GC}zonGh=epU5wLB(zQNhhN+A24G#=T+@1+)rZn} zEe*RSJ<_2J3H4?fQjSkEZ^ygJs%x3P`PFy4?Sijq!!2LiBVRE~{B<0DW3ZqgjclYG zk8ArqeWgCu2QL6L=+cQ9l9~NIO_Q-^C(jS)^a6qGl>ARjA^93x<|d)LQ4Z0j{qCAG z?hDeW^>!i)-bX>bJ)PPAYV0Yvr{|aG4&LtP6LWdy&a5usOoEII9@vsN`UdmG0w%EE?a}5M7B#~z7JzK zOC+*Ei#d(S)ON*`x(L6fQrWZrv3PF)=s58htGuN9l?giCY!l<{qVzB53xP3v>4T~+%>eQoDq|DLa{(pR*> zqIl9iwE|yth`(($th_C|eJu2Oja0>hqe3dJ5$8hAiiSOF;Kp*(H(A~`yv)4c!(!7u z&b03p-un8(OQwAit!+%33QhYgFR?qAJqNJ?uN4HZpZvwgLdQVn-2MOS9QqhJC!haV z2>YK(Sj7BqrL<{6V9D55;CL5tTD)YZ%g@6Pa<)hMR)W>8%1ASCFv5=s#UYmlW(n*4j)FLF4@*5C;Bv$>P zms3Pk;OivGcrOaQlLIk};b68q8%RoyAV}G~;r!azSWS)k+YqhOVOhr}v19aN3J=}g z(*gOWO_`SS-dGk`E^sHx)2SAr#m4$gnP5<*fI3^W@^ThjU2H8AAXrNa95gK{b z>cU`-%I^aaER3EZv~NkxgZx_QU}gERNK{%k7`C4&)vPs=H_Q+Mk%e-aDGU0M*;Z+` z`e3Ogzdb_;Y8T|hU@Jt|(h$aaz?f@YI6l3L95z$%Yd|aPkuKlst7x~F@c(5R8on^n^lb{+Bo);=0P4`a#pNO~|+ z{_Rttc|w(o(S%~(MK2Ik!}fprS>3z^`Pg_*wYATO0@Jju&~^bM|1t5%iTmnm+_bGo zi!>&|z}bwInB=TaZSzytp~zNv;=Xv)iorxq|4f*YKo;>nVlBHh+^+RM{Dj+ZOqHWj zj>iULna37?#TbCgoU1}g;PetRy_YZ?uEGUYY1(AfU+rrB&tDw`z)c)Wd+!!Hl)xh?me zErfWm?E8F{$gjlDhAtL49*jouH0kcCy{~6%X07%2b0GYz9~=^`?c#Foru` zgh$MUym+DOV=f>>XA4G;7qx6p_%U;~@WRv7=iboVzCK$B=H8dPcsBuh}ZUB)3iyf?igQVT}_}fw$o@LuKN9EtaYb z<qIe+c%)v{{QOEpIU?tFH->gKl&+`T7=%AU0`T9;^GBdN1FC^rM=}S)4txc z^AvO2=Cu8j!j1;peQXL|aTECkn~uy}m3kyj-P^}7*&ytOMG zC~WsYB&aX`ViN`C1X`J3u%tzc-i9>I7P#5xqm%zY?x$H@og&nKg{-PGR>*PNJ#Tvg zewhLX|G;R77inQz%bI^I(Vg%QgMO2w&3d?-wXx{ej ziAVGz-mbJDw5Onu>~qSf^G;g^}{=xk5n8$Cg}KPcFH@z$OJ< zv3Rb~C7N;v)r~lIb;u{EHkNCjPPpU5EC$Wiwe zP?B9J%UR}fa{a&agw|~9g9_1!Ic&JH6!*21_chI%h_MT=@r_<8&`Ytrmn!Y%3vY64 zNkm7Wu|g8tlOtmyTNbe+(9|%zXA(yViZq+aV}%_5d}G%Zb>todq28dsdGB?M`Rrn4a@YlX_9Qz9p8A!Rf~&!mG<@T%VD z7OL{8%WH3DtKKN;yV|O^iOQ+oBr2zRi>RFH4We?WJrYnmtU*-PZnX+obEur^t)X(N zH-^fo-WDpSdQ+&J>Ma3|vmp|w)1xI+rRwdVa;i6j%BkK8DyMoQsGRC;pmM4=fyz-^ zfRCOjf08Ps;t5{&MZ$QV-+fkzUMv{gJR5z_I<3d|O59Q*#I63xwSu`rx?uhT)cPC2 z>{ut5bsR6-RtOX1z?DJ+{-+~ykCk}u#6m@0DHLh1hF51^?0XiaTdWl_w*l5bG){jjq8)QmFoJyYTG4FuG{fU8d$>M$}4i z+K~6|6zaV|ub{&GkdddpTMVzuZE8|7P3yJvGhUd>UbDyV$&#Dy5`y}Y@e=o_rs^xK zp6=9)tiLL?BSB2Vl;e)g5a*8j#d6{Ea*f4y=Ur>Od6x#>Tw}Yc zyN*?NnN@fDtM2Gsy_Cb=>=%5BN1xS2<9)DpUuS9!Y}?(Ca(>Kbx8q}zT<2S3fz(Cw zBge?2o9gUmid@Q@VJp|TU(>Mft0oEsGuPOyDsvr{c_lO~`v>M4m!XVmNtS4L(V0lo z=Zqm>*yEr`A0~Fx3}AznYh0nJMx|eZ+iUeOxz>cYIxi;_1Z0gX zPxaQ}m=3$MtYhU~wp2s^kUOcqDby;dhLkmO|9!#-twHLZN+Y;ZHw)4s!bTnEt5-ZLMtv>uA7Ce{xZ3D zmhd(%tFweA9(J?}_N;Z}16jgnW5{Hb)jOOb0XC7cJPI|X(0f*0?QgkfoY4m#C(bGq z%&D(853(<p{K zHu58Z=tCj!lFbpY9nFrPt>p0uBlxE9oSuboUU!dK&ht28AHYh7S4e?<(pvRI z&b~Yyi_dJm}^VMC(Ag+kT-1Ru<#-3xNrtzX)crH+4qQhq`H08pWvCn0kPN z0_e zQV&$UQMEZMGN#kmhgXy?+A7~ZAowLX2R7TafCX6?Z?rKDKkQ_5j&C@y$17>6<5i6k zt{_WS14TchS!MGtW6@BZGuPI_xKUDnvzvNTYqLSUF|Hv&>d49*BMmP)8ejS$j9EKS zNpM`^EJm&iF;g3oP62>uHLE2RkH9IpAV+v{47FiT=3#8;jv(Y} z>q8|lB@ZC8K2$Oc2CVzn3AOsBhJvB8!%$z9thiRDR+6CwM^!Y)<8y^(Z?Sl3g(H`c zv)cm!U}X`gj+lsND#9(W|8HYNiN8{CsEx6M8Z}C9i?ZFj=^l{6o7q^GTHcafzrry}v?DK)B z?#4@UpMygC1n0tl&E43^Ah^_qPN&giEoDllDUtQ3bQ&PiX*gO-1G{}%4o$_FRsZi) zoNJ^2rrNJ@q45U9&c5jCiAngC^2!8j*L4`Pad^Ew2xi){nv5+IeW;f4B7Ho6Llyl* zHEZQWZTCAQ^l8j$dqHC=hG|Kb{&+}cTOX>Qku>PZs}BkF`E?F?`yt`^F{B#wu?Zi7 z;=|Hd_wDFSx)MGl6EEdVqq@LP5#za=M0eZy0IxiglH+9?=auyqJ}sw=XvRR+jLybG z%MD7WcEtxretB|OfzScN{L}&=_(SsAxdio?%yuBLE3?L&qp^(!Os<6(|?fl`$&DB)u-dq!$OM@6irT38X$S*WNCoZ48*Dz zt-(>bu+bO>K)TfcDJKB;%M<=T_TB_Kiemd8@0qMj&x8R2ge8!$?{xQcPj}B6_8r3- zRtbm_5F`QtWSg)PLof(f$RdfLC<{XXA& zis$^#Kj+-(uBC6?zW3IxTem7*1%^u4@4fH~><`F+hLoZcK>{Ygbi6IiO7LgVA-OcG zV2bwQRKlfMooTJm6w2$;te!MWmqNu?nw5+!O<7au$l=c=^$!??@>DOibjm#cW97-y z2MmooR5?qZUgK|r8uQYuJc=+M!cL(!vov>$zallZrCEplS+qBlX8CBAK7|^x(yW^_ zOP4}Btv@UFKngQQ%hNh6I847}9_`PHBK$!^GiXNgK|`$+O*8!SieSa?=LGA8KPOl% zVB)EI{CTbDrfJ1PjcH2pP-B`-nEyp3%Ku4?@Z$)%)@aF_8gFh!&7yLQF zs^HJj6alAwXqw>9Dpdq;$d`tfLh!NDWk(E&^n1sbzBV*zlQOQExwmi7X!QA{8`UM-=?+bAn7yFEYnGxS<>70EE#YV>z+f&_@jmfuAyf! zOCKNV3vYe9O^UEC@SCeSaR~Hp;nXI z7wOuN9+-@P>VSFx4p17~?43e)oM0-JN*WzAwAAI1QODrqcO?gp8Da<2L+8L3pDWXg zuQtwR&_1M(+Vo@nd&3;~#Y-^0NEFT76@xh-a?+85sU%JVpk;ft6D{c79_>gA#`m=0 zc1dsFlcfDOhK8N|uY}`Yz^YB{Z*E`+80l@d}D}dM-k$)^11zgl|&jm7cAQRIQmyf4Dn}uT<%v%Jcca4 zB=GnBsMVT|^(Fwzzu#@Pu40fItlFr8s*#1f;9yipf6^a^rL$@-xPy!Rn zCgrEpfypRaj_FpmT!PuRjeK(4V6RH+WkhTBXr0~<%14k2Ck(>V6v529Arr>JYi-~& zn3d2h7Fi$B!L4kY9qChz%(#Ag{F%(a9gz$w7=BwpMFpB!S|R+m6=F~!oaCJ_#F%2x zNbz}W;RAe4j+}sTV@T*pLv0Tw6`LLBg)Rxh-Scf?a7Qsc-=;e5BD6a*?jp6jXxx>- zoh5(Zju^zJjr7czhadJoLLc@&LLa7&Jl`gIo^grR+y$CPNw?%zM;>iXL)XTL{2+qJ zj*|v8yw62!iakkmrwpBSCrQ^+hDx3}3#bNStrVvU`1OF}_JbPhs;mo?2G=)M5HmdfhO_*DFwIpYNBYw@Ok5^uiXgp&FIi=8PdaytvlwlGP*0&u0t`^m{W%-R}%a%Y%~< z@Ci*xfZw0ty+dtO*=@L;TZCIIZp_>pI1+eBhmL>-K1sb-vozW`Lc2 zC?_G`8{$p08V<;qnSUP$7UiC*NUYx*q9XQffVD8~C!M}G)UHhlUhRX6fi2aP;?>M0 zIs*tx1~sdVxX&Fx7JiQyNecP+dqY)E5p0DX({pMOJ}f|DZ2fuf2pNf%`DrR*9+5lCmys{J&uwavYdqQs=$K0A5GXApFeIVN?qqd}$(VZ6mxx4Gr|OwSzP7kapBjn18$B`x-s?TCY)T4-RA2L& zx9A3;OE{V}Wj@WQp=Cs8I&-Ge{qH3>1uWCF0{2)}-<}rR<3oC%A>D+KeM6>00i8J> zTI#P8OY`kF#yT7S)cD(w(^};oK0E5=(&v&A8}A7Tqjj)r4F<{IO6Irzr$I-Ch5&rV z^Y~8^`<=0s6E!5h;&ikX)JRF%z05Xu8h;+fM3U6YhKQK7NjfH%T5h1(o1Q%!`Wu>G zHuo@j;j&?HEPb2CVUz~^kAn%O+>y~TE;o=%Ojit_>O#rUD~4H#w1WWijk43)6s^7t zd?P}$+G+nLa~6pdAAS-uq(WRWCK!E-3aBa?DQCx(!Fj_6ecJ^PirtC%gDhV>?%O_r ztpCxFH0V>*XG#sH-|O5HMl*GLT9ncGKIZXIi_nY~Moa#l7SX!BEvP5Ul$zgkr}lhW z!0`H?AA#6Jo82!sr$mFZ=qehaoR}F7tLr&i!eEAz;nrnuB_y{_gdd;u` z-&d}B9b1UDlEmwVuKN9BNzQd_-f2K~UpL5g@)}|ADTE#*`i?B2Zx)R+>C&@i-@%b! zDVMeUtt9S-L8?@7EX0QaB2acuD;q< zJ(3>oepc2TQ0Pm?HulV-tgHn{WW1mMBeF)3)LV$R4+P%haE`sV zFOsw=HuQ+R6Ux$+dmqUuHe`o?ifWtJ5$hd;P(%NWpCg;sp$bB8eQ>D&kOA>}GUtw= zul|aeoVkO|L0w7gPlmcRJBPE-L*rgXJA$u`c`x`8hhcdj-4~r(KnDM0s1!qejtm{n z_oSut-^cu=BgqRWtwKGE2c?nz(l)SAL&+yU8ERDeAdEHd2Ye5>3n+&c8-$bVXuVo? z1Z&P}T_+UL+0gbQAV1vDfFt8;OoY1zQGdGr(^U3&jG>G zOd#9{xCN*UgnaIWqI-8?TLs_kA)8rs;BI#>{jS zBfYUSP5qe>wS2FXrsvUgZQp`fw_N@Q=F^NizGR zK_A{S^@@GUZZOJ1f11&shV-WniTK6PK$l9mUkrWpyX<62i6Kt^rHi~$VyH^?{9 zEq1#P0un1NNoHe7=6ypA{mv^(Rf=)~F*#^3&Nb!9`BR`IYq*DnP|0S7RVu;rl zIw+nsv6HUf!fIDv^vgMUS3QL@@06Vojd)?^*Eo9f@g;*;hwjjl6>Kftw@bFM4Rzy| zTwtBll{Rn3Y+=r`xS6+L46*9izAzBkI<}VnGaGqN$G(9rYXkLcbzLhmNzb};?~xDn zI7}&@oYJ$64811PMrn^H@gXb+`nrd(jdW%*HH00ge@7uFL)dD%*T|g^)~ahpnuoG4 z>L!yNq3kG~lW<{dMcpydHjJ%@2Su@GgaP~aWL+35VETM2jBTdtMvUQXoQ@++ z!`WD!Kstr93v{c=@o;t!TzXpsTR(!D^UR7XNJ<274J9wo%Q5l+z4$R3>G(hgwFsuH zmn=kE`mqPe`Y@Jq%^Q=e}p&BF1%JIKe8Xvac2meJZ-S0<>PV`a2< zO3FYq$4CPMTRVCTSXlN0jg#BYL?TxD!JJew$iTM3_peqP@HSrZwSjG}OCsSc8?Tc{ z1D36!vyyf!c!IZK*<`$p-NBk3mAsar)pF#-QnQfLDHX{5vi{Flg!QS1=lzZF&b7N!-XHW2&qw}_#R zduDiG!GAw&a|$&&2xPojmYoi!H#P%X1=7*XPSfvtoP1_xtLcY*Lavr)WA%}hNmK>s zZS8VUkV|ApIktI~0KP!nFBsvva_l_)-R-1_nXMZ3w$8^+B%N?eMwMru(BB)Zq1KHi zKbA*>$;4EF9Z>1}*Wvtzrwo{9!VdC8BZ4D{KrA4h3T!33(@Pb=)&jDp0^3+8lIs=N zW|5KcnmsNe4WikJ6(`5B=9d8*0XqT50H?|O(X1Mo?XL(2ESj~J>wwe%z*B%!zy#u~ z$X>uJ)vv_Xwk6hP%_(vC!G5AQU^ueo(D`GcZ+CA@=;9jTaO&h*DAbRL%$jquY$St~ zY}7)9HDp#Lwr{xyrEU9Uq}@yO*~pKTpoiuuB(gH}$V_;8+2!q5nGFkt0F$e+uj!6@ z!>hAgsP1(l$FUY2#@RUbFUjci-+(Qt41c(#j=mAy8m^7krXy(>Dtz74cQOyY1RRaP=zBK=mm|^ z3l0`*%#o)$6K$G#Cuov@ffj9xD+U zUGR@do!c%gyDjv{7BbnwRx^I$FQ+-1$*UH2sP1bLA+p^dt1Nt8rd#E2sg+@ z2^MRMH{Qzb0ea$-Vb(q)6%=TACh4xAqje$K3R^i)rZ>zWhZWYQJ3z{+ted{G%GN>Q zIF(&krgH~P9h-C@Q8so#`i3p7diwMsyMn2n)HCF-D2e<%z0HXmJfE>U_fJ1;w0DXJbTpeHmbO8(n z%m%yy_^3TwO>5)?66XNd0QUe9Xt+`bGTsSU?IMSq?E8_~owS!3M;5r)m#UoU$eOPL zegTLm=>%vA7(|?IwzrvTXjUJ6*`yO$t)jN&4=1bLY=(aGaMCORh6C3w39Lk~vl7^j z5aYoFmeafFhN40K103@pi1Ywc_*>Uhu-?BH=kW`2&X(#~Dp z(XH4{e@Q#~)3Ud0TXv+59Xz(AMEEl6u}~ib+KwG=xH5)jVD5g_`%^oZs4_9V!TtPs zv6Ttm0rtBx>C}O3IEu!D`|r$kU}8S=PDxtLbf*>}PUB~t7}pe)QH;rYVA|e)=j{Bn z%8C|59#?kO32hrGPTO8hEBGt-hnG2}7i*3}YfA&y?7;Oia;5{jwk*Y|J+af04_t(F zWG}+X&FI9oj?C+$iFXA#(21Q^E*>c-zyo-m0vXtuRW%ArmwpasXv;h_x{a&{o5uG0 zvuRU-QKhsZ`KmL9Er++bGuu*!F~!!EodL_SwJSRo`_=fz*fzD!SAt39p2w_oEAD>d zIgThv;iizKkFg`;V=!mU+;^!ST^MZ>nUL{hQR1F9_w+sn`S?$f&Cij#iL6`iizQDb zvePhr{*cIa)R(JG_-<@;#Lu;;b>2iecVnv$eX*+M#bFLGYj5hW6R`ck(WOL~^IxM& znI;;HLfol&?lIgn-oE{g9>>D6>*>-yEuz+cZ`k1ncgM*7ZW!gmNz?8S{~*$?JNQsU zo~Eh&WOjG9l~Id}kBg;_{$+BwJ8RM3h#_Tquw5f4!VKqr@^}xnH&)Kx@4=qZttX3m zvd!Xuj>8-yYUVC;=HsD_zuEq?9yFEBY#Uih(FyWhPu5z`kDJTA3{3V`#SZ?_42kUKTU3@#*O7(U zb7oYAaWeu$BrA#S*ia*IUa$M(ewW6OJ#BE>R-2plu)>%6urHQx6#FZQI0L)~NLd!7J-w--f$~BPG6C}OX|FCSGpoKy5=SNUdL{ye_<8q zs^HBU$l}=#vpwI2gw}5#*_0;u*>x$?Eb`SL)iq~ zYu5 zYCn5x4rB2R-srpDdMWI1oo*D#9?n***RKx4%*sy-5%PEX`XUm8`v_kmGA~`p)9v(i zLzb^a9rF2bmb0cLGfZDhSbUoz83wa#W6I%A(c>o!L-tPJYMEx1oi!fUomfN)$D@5O z80rvy1RGOjUTqC`sDOEy?^XD!XvlzC?~x%RSgv9;#Q~Hkzm$|xNYUzsk+mZ*;9nxf zr&*8gZ8HC9RxZ;I6)6`wlKoG!^-bwdf>PE`$Jv)gvfY}5`Z1-IpE)(M1n<%owBlIf zTDZ{X!h84|Iy`XagoiF3R=YiLL4F zX`|~&=h3i6*<{0LC}cD8>1eiFUHJS=Uo3tkA$Er+GmA3P&dw~+r8S;?JFN!t6MOh- zhY@!wW+C0llc}t%J4;rkvi0%*NV`*61s>!5R7^%9uX%-M*;P6){mU_!bj~2R#<26? zm`)qZjxqjf&r`C=^|9 zKtP8 z|A&ptyoT9;uj>Vj8sX*{WbimPrbWyQqj@h*GB%oNHSEI8Y8$#Yd>o{l=<{J*x!opG z*LR#@gt51;99Y)3FAk+2h@*N(C@DTF+wr8)6gIwL7VJ^qz8P%_eAh6HW+vd@`S$zH zX}8fCZT9(2;5K8T+4mJ0HwE76SLEd>m}qB_kEXDs{^Hvp5;i?^DnjFjGg{p%Nh|QZ zR0SA)$14I`m;D*-&Ax+V;#9U(pA4Fh4i__XYCZ!-U{_&clCL`?(6{fUkj#N+ca8|% zJZTEFH0mr&zyKhaIk7sE7CZCFdyMZif=9mg8q&xSSX;|zU)@)N?W(>Rq{1}JdW@vq zG`6*F37J0){`VB}`84*$mic(=%WjtmLH`m~31m+h(u}b*)Lane1}i8|2DN1Q(tn(X%jjvXdug zu@kD5xe8fW@)I=uTHh7j0;b~)w2E(?7tdn*n^Z(ROM0D!FJ$&v$)MR7?y8cPX0xsJ zN3N2Sv*81Mc7?>wVe2#vLkxUoatw2!V;8(}F+zJYC&n<-B7K)}Thcy;M!JAJpQ@2S zo|%Jj{6n%}4%<%Gk$jC*hgF>)D83JJW9(_sX&0#jmKy0hjQ=CtnVELh*W_2c@qWBi zk$cd8UN`&Zy>zprudfVo&1JXf7LuRmvKQIcFKRu5wK0tMmw9aOP+c3+GmG6DJ^C2t z{%s>OyBb3dT8zq|#|K^*K$LEbWO>G;@xCegw#{(IPQ1#heGWE*V2nns@qBWxe$l zvR~nw@#OA{>{(qea(WTFOCPzKytbHauRB40T#VQI+#9}x9i!8oBG0|VcB#7SUyd*i*`{UsAVJA0B4Mv!ka(Ol zeT5ZKbI2k_^8T*MA^ACv2^V(d6j;H|fsU98g=Z1-+i!{&zSntC69 zll@qyyH2XEXXnL^^0MaffK0$*z)HZYfc1d)$hP(Dczx7|M1G5%8=JA2HNOa03&;a} z2>1lB7f|3m@fKUZOowN7AZQcXhe{{`s;|Fvb428&A}yd^(i>&{0m%S*KQsXJo1Xa0eE1=Q#BjpX}XtV93RMsNIX zwqpn)fFt)Iz}VBfY9CuBME~6~@4C+sRMB-J316@Y=9j<0i~BG@`sjj5%6laH3(PAn zyhe6^!Sechh|Ye2c;`}5@c@vl_qIR4;y~8dy+0ge%j@FcMwDa@ypzdhmdVg%wF^ze zvM6%c-bl9y_095DKE#Upa_&WbEr)YaL}~0s27Co~;Bm6#D>g^p>qSx{+E|4o9;U%z z@8rYmbx4&w^9_4b-(Ws5pFsF;+HrWUUy`yX*lOf3y`Mtw`;@7jsbSs`NwyznE0CEd z*tYuZ&y&wjuye|&&-=^j_{&C}WE1qKGRUTr>;^bA15dGs5CCodEsTWC`{B3jHXY)F z&lMsR?(}|8$i{{1zn)KyodYw@&nKqy@ZIK+`sdj;xQsfFc|%yT));_vyJsPGQ9|7riJJxdna6C&xPT1!^f{7&;eQcZm?JM z=hMAMZ?c>9a80s{S$j4!uyrjfj!8^|pyLj@9dLrjU;e#(MZ%{uzTYCj{q#&4@BK!^iKRAn%kl zF4ArAwly2CAUfq0%Nu<q~l8GCrwO$w!rp`(R6E zRyNksb@9Gl+2{$?%_a4!8;4_7l3m@Xr$;<2iZzaj!TB2DR^#aKaupi|2(O;Ptpefo z5eG9C>(ac_oW}h+EZlW+8=ug%_HJ?;*M;adl76l59#ctXE8}F{1#d)aV@fyo44qcr+)#lDq__&ZqKQ82(QIVhSB)7Zc9e*Tsdl;wa zp7p-k!`MZqt4)e}8Y}7MdLw!nzYSqC@qZZ@McCfHjijiL5%iKWeT{o`xul@4F;O?l z8{f|u9Ts(J8XPtT5d;P^kOI%VI*}Et;D)-RhjGcKKPLe`z&$d3xN%we)bYqq z$Im>#Qovi@rX!5Sq2-s}zfqFevrc4IOJioo%a(nuh)u7kz`Oth#p zI`Mtx{StEEGef0kXc_qFU;Liwq-*xfIJa-dTmI+o{(|S%(3Ku-H$da<2)5Ki9{xv! z*2Lf5FuD-rzoQlDUFk}CO58v#IB!h3iDrCf?vlaJ8Xx;$j8W0WUD?2z&v!JMxAZn@ z&(PKRd2Xz+T3_vU3~L@Tcxc?@}G?XPL~6CnB_qzs0!sqrU?5rde}Y^V!lYZ^dy& zeCD#;xBjYa0@sKO81Mjzn+zIkI*Wkq53G4>O{4h$fTEp&y1R=J&;{gQMlkmZ);~~2 zpE+Lb*VmAe%z+JXDTET~+T(Hr40e(y9r+t+BGG{9)~0CK&>Ta2g5dzk7v z^FIh4vkp^$Y!LC!K%~FnkP!0hv&I?T!b8T9CX#%}ILpIREyNUQy^8Xu&`1A7rdx-cC<^Pux@!!b*uO#BXmj7Qw#Q!G$|DA}xK>q&| z5r38Z|63ydQu+TEMEv#g|Idi{o8Z)A|ig3e~?lv;Z?2mS^kJb&u#gNgiWiGcirk^kBIzl?}KEC1gk z?5`l=Ka&67K*WD8|G$=q|5E;c84>@B{Qn9f{%86Bk3{@6^8fFN_zUI#UlH+F%l|(m z;%|}ve?Y|FC;vZ3#NRCce@n!pkpKTh#3Pgc9}waBTfCazYwY*)ApgH&82x?Zf5NvY zmH$6Q#6$A`2Z;FB{{Lu+_=Eoc$cQMF|L-Z#qaflT`Tqk%{Hy#QEfIep|3^l||0VxN zLBzk6|KCi+pOgRJN5p?1|G$NZc7JmI|9g#>=21IAlFOSWlGO61$k6{k`Ts3$=tK0{ zt{qZv&=~3|fWrKP;NQq(j@6m}89;xf4b$CJiMT#;@B}rAa}bzxq#q@Ce%lx&A`e77 zB7nXAoyI5;g~r{jbue_Q`~QULPN0C>^FH@(qFKJKC!qSex}qn zCH!&T--mfieKh{?Pk@X+DmY0C-fM)P6^%=2{=K}1k!o%HMVL=EM&l3vgoaW+Kb)r} z{RQ{v6I?U=Y-tXfwaUMj_lF4nu;BNw{BB-zG=A@)p8y#TJR+{ME+2oR>fc7 zK*3P%C2X4wf&|nOs zK=$xYfOmgXFaQNZvw-e^kPe1Iq=O-p=u|Luo(euZ`0;b`4HZl^+De()#0I7&z5f&hcSjQe1SLpm5Zq=O*=>0r=Epe+p!ZiU`6 zs2L2wtJsZCs9s+R2R0#ox|h0Fj2 z0Vu?^2*9lNgI04&0+2oY6X4w+6|6wP&_v(}hGe9JAr0scH4u%Az zgCP;=V9-dQEe&Q+5)5XfgCP#-VBnArh6JR8Ara|d2qA;pfT_MV;KPHT&``>P$hKhW z$hKgrmYk1do%|^g<^n)r0E%#Brh=pZXf?OA2eOBMLiKd!|8Sm`^cS4O6GM}MBN$SV z4u*83gCQH~V8}r_81j$~28{&Tk|!A@!H|k{Fr*_L4B1ErLk`lxkcV_I(3bL%R{$ss zKoPDuT-|J*7C}~ZFlCU)j^NURAHQ-n=m?h2M}a^27Ls-1rbD8Dga9PsnhZz{fTk-a zI|JFnKLO7EQNcYF49y3QU?@O37z&XNh9abcfti7q3Ia3kgF$0CZOIed3cU|*h296Z zLhplHq4&Y9(EH$4=sj&I4p$D45P(EnlL4tSBFMHbV0nYC;L?L1KabmY1=!v?~6B>fONdxH;&sLBQcY7!r^UhD4-; zAsOjlNJTmrG?vqrJaH%q1`g?9NI*Im5|IvuWTb;373pB0Eu|wb8;}!#JY4eu1#=?E z>26?o`|jYqb2=a&@JC3@%keLQfKdAax>K^$)x2Y48XpW4>hCUfDN2D5n`Z~*>@m}HdY0P+C=JRYf;7NZ6bpWM!;@lA+DgOhelK|hw^|ZXD1K=%)1^&R7w;@RD?2aH)Ib0q98opZ^xVF zgfwOD(H8xMRO1qGuQhZZNCBw;nxE4bUqSFLoMh^uYs%r?vgF@`_6#XE#dO2IqD68N z{r6I;{|SI`i%iV8+4vL*{z}X6oe+k8P~<(7z4vPwaZfc>2|*=q|EVS^qG|RrmWf== zGM@ud-(;EObu2S+vXQ~ZqnS$p^Asb)0R{mkk*%{#A6NBNdhy!Wvo$*|-C=I9e^%b; zEVRrXlf5hZ&h>{wzW%(4OpdqW9FrvkAH3+0 zVM;2uCX_WN(0YNtLh^QosWCpMc`C!SsvLv=GfpTi!gT=2dfwEyOd>vhLvz!~_UBE_ z%ebHQ|1WP7(k;_e0iRDYWtys$iN!w@`z!I8CQF$UflBFQ6q1pyKq)b2nWDpBr3~P$>>^$X8^RmMp?{R{O|G=KmyGQ{PlaD zHIvi~Q*|;i%hcL5{6*G03P4NK$){PS=K7d<i#_D8M4vAzD6LfH)?t6P|Cusfjz5%q<)Nhh!fD!IRby-+KE(~7xJdqd zQ%o7trQqlEhAU*m3#Jjc+^t~Fd}s##`5hv3}Eu+D);H3bc7}x}+5NUHUzFbs>Wpct$9>Fq& z_>xf^%2QF6deOk-19AZAfJFNIRXh*ia93}0yhX2>#^}hGubFCilh>M}%6aB0ZEc^~p0Ynoj&JfXOZ)!^N#bLlW{F`=epl=Lu%O!hC_y_#?|7g^R;;Q@S23!F$LreR`o?v|rE^zwH*`DQ-P}*QpL1uqm%HD0f9gKvzUF2M8D<|y zh~#Q=7OoxFpPS3Q$gShHafi7J+k{iaYk~DhEBT^qR$^^-TVGp_t-$t!Ez}-s?`j_a z5nZ<5u-~;;b2M?Zcl36oIc7RmIW{;xb=-3_b+&a5a!z#Ca@k!yU1a|)cyvA8AGmK( zAr;{xePBy@t_s(LOW-EaS`g}6q1OMF*6CYFfhr7Dsjxuv#JFKK}E zg!HU5Ntz+em)1#dOPi&g(thb1>6R2~HCZcKYgijt6>CfK!ZlN6&noNt)_XF}j#45O zqheN~m4*tZ%vD}g)+%1*6D3xyrHX0~wVygdeNLUHZc=xt$JBEwV~eoWvNf}{wzao) zwk6sY*;d-}Y+G#K*a~e|Y+?4Q_9k}DF4`4)Z~H*|X#05k410!siG79r4f`hh$M)U! zBleT_^B((;_MhyGgLRa5#5(Fbct=ae6bI*g#<|J)o~yCDk9!c)7Ww?zrr@ z?=U-Sq5HRW_HmAIPH`@9<~ZMX?sb0SyyOgXm2)-mxZ1n=xJJ3gx+c43xaPXDTns)! z+7oX(o}0tX=N59uxpUkl?k-n?cdo$K;_LHP-p*g=i}_#pxt1-`Vd;D6f^1U~|wYHVFcCrrgSjSqYTZ#28>vrqc);m^{TvJx%F7jYGP0o;4 z%5TfNnIy(?DooicRd)v0hcEVPqX>4CJ0t`c6JVSj(6f97>M;V=V@5=GOijf3#2;GHO4jFwZiqb zYme)MtH>4RuIg^?ZcmL!vW^jP`JTVaM+p_h#-dxSYqeV+vr0-QWsuUw*56|rZR_QD z+Tn3L3B`DUn*3D%Lup(lw~CuBEEhHjOT_i!Ht_(|_!q0JKBhjY66oY^d$F@Dgn?($ zbxadnlDN^_Y|bkj6n+pYOU=PUloD*CV=o{qemRsH!zp4Y*{PH*1d9)dfqm{5#b_eLa#O6 zjxQF7*v?uk6SbYa*g@!9nFD29F;6V*q+%;k+S!Wj#M#cx#QDpLIU=+ZizOnrQ;TiH z(au#2rSz8(zMZ95Bvwy5r5Frr=Pag369R=?JE7P@q;_(#LTv5u9v~($(BSV8ldRV` z(M}^~t>~5ZT93--fjPon*-_sqyCU4+1H|XASD8Q0d(pyPk+hPITGxWPUUjZ5$xa-@ zP?RD)VavS==in;iV^_IpVDEX3Qa) zE_uPsF5*fX6X#D~;hb`o6OC~p44o&PvNW|Z3I4LF+!xkZT9)W98)eyGW0L)4qxh!E z75WmX{<00yD2Inh_a~ZKuBc45zv2dNl-!h7%<-395jWVGyZ{oRsd`0w(*P3dC?``8 zz#(3-F@*sf{3xX`1aMfdIGFSR4$CMTlO4dpUy(OxFBZTd zd73(yJb&Vfut8<={S`-XP30@Jv4Q{+ag?1Y3?LD%C>yjl3m~yJMa?kn&8|>(o5M7* zJz#g7zl^e*;r#a+w-Zp$gEk(pJ28NSvO76|q?FyM0VI^&=>a5^-P!(n8%o)o6Tm^) zo#(&T*q!gM_ki04{xXlo?m~Y;V|S6i;sbUw;eMG>cALYsH+#VDIDc7F%5Khozk#wl z!C$XwDZ3K`I3#d8*?+HbJ2l+nXH_Y?(*sB-yR!pGO4*$gKtkD_7eGSUogc1s$zl8i zblM2?@(4LXiBKcpYg9%LXA1n~GP>+Al&`g(m+Py;Y+ieWGs)$FRVfVDx?mE2R7et! zq6;2Xl59uqNzS7#rpW(r5_gnOf<;JzRZ4O0kjWU`Q7ldBIAfXlp$j2nTQdeoNd`2j^AVtITCIBcH+cQsA*s4X#)j&{^?w{bs)vB;0KpD-V`v$F;SVoiEV9PAa0?SeBU2CX3+&16#k}cfT5WWeMTt<_9 zF29REz*m-RQfui=Wxw*Z($+EDG1hU0;z;$^3FV@=49i>aqE&f-{FGb zy6R}4qIE>8E2>~%Ee^+%irYp^I!9Qr76-JsiE3g?X6yO zL_2FZnH)bmTVe(^nyX`JXX$2%x3;!+wMMHld^f$LuA{l*EQZi>ZYIzF_GkD|Axbzb zdWuDzv_t+uzACS=?X?}UFV(9_-=f>*jnr=M$59?Le|^r+M3(WIwG9qoDhcDpeY>{#bKdX&{=j! zKS-Xd(i&y2a!ARw@3J4TFLrrd+qJ>Sk8}qA8o!AjD$W%bii71@@&dW1ZGvsOt)=rx z=V;0$&X2SX=G@)5cuQ+bS4*^2wzjb9)w*hP^(+*xoa2lu)E(t!68tz1W6q%yc8EWS zSH(3Rd9Qp(&b95b9k4BSdY#)T(nLSf8Qg2!CT^%@u4SQRuyvMofwiYPL7g7x9d)4f z-P}yFA8EYMTIec7OS04=(B;m;{*|)_Gzf}lV5T78dYCKbbo>vP`25623Y7#;9f22I z=nCCnCI$#YFr9uz7%xl_rVDd~Ea63AneeLcrm#_XSJ*7<6b=YSg_{CnFdqqxY}Gv^`JqN}ou(F>(J&`cC=@ zQ#+HjnpLtotO@8L?XBebYo=PHUiql#VTY{8tf#F%VwzN9jgn(9RcaV`uV((!eVjqUN)iQeyMu4sM!}b&Q^Y&u90dwbAhYj=Q z=N&5?n;rF>9h{Flvz+^3a%;Om$?hWl9sWapC;u5tQUgI2 zT54wZ31PI5E))rhrMG3YCBw4BveM$UoP*?lv9Oq-wSkx?i5}523t@z81Yedx${&aa zAlqx=9nmaRlA1!EouuvvzRZ?hkoHNpCB0R&4zUimK4YC^&9r7)ms?-8?zj42HGZ}l z<#KX$xwh<-hseX^k@7^$YZu5b%Q^B!d9(bvd_?{Z(W`3^(lBMLG8GY-We~}G9_3^7 z`Ljxi!ehcWMtxn~pdL|gsO4<+F{PahK@`}I+M-~kyJ+F9t{4|G97`Oh9Ty#U9W|XT zoR5LIa}crH?!4fPbJce>aVf42uCA`Wu4K$sH@mjEK6jmTopD`u-EdWQtL{$j$6+fc zyJx#!aKGyIyygB7Hg2E$n48HqFmHhUWw>fwGfv`gek;NiFLSxv`&x+RHunoxk+05M zcpF&X8R3R!_%uEX0$9zz%YOtB?B|d0S721`^Oc0^LKC5*&_fsqF=PlYq4VYm9|^mK zFNGVzU7@Na-qP42SX{NxQ|F_PZnx~S9I@QDgo))vJ0fB;(e=(r*AYWth)x&P-1C7o zACZGo)(h4m>pg3TTvo0m*OD8`lI)P%%a6(Z!S`nnO_(mvlNZa&<+b4ZN9Z1(%U{Zc z@_G4&d{+)vOiC3cPHCc86t~h=>8|uuhAXKEpUyz6VX?AGd0ly1*^IIJGmPpdF+=-N z`AK0^RxR&QW7RsaqgD)K?bU9Gp**RMgb|#kW~kZfa`jcn?LBpyx(9>DF|~qifNhJT zn`@+Nnk(D&s_Q+(434=jy6(B6+;NB+w08G)r?@A%=eu8VZ${+wxcid(o}0-rFqoP! zCawn89KpzL+z>96n}r_mI_L312H$Y|g|CE2)u@`)Xf;OtT)nJDqM7-0pvW_5VWxq? z>teRFSXwHrkaDFy(9ag~AQ+ALa<2RVxKSwIk_}2t%|!H9CMgS**I*XDP|hf~lrnfp zUTuTu;0P5?7=~U0gM$&60bD;1e1_Mp8?4)`d#qntzpu=50L(hOxD0+K6~jmmon?;KRVQGBpT zdbO-tU9G1!RykEt601^Un9UfGs&E3Qa2>e;+!QVyY@dg4T{c43Te&^lDG&EO;@4NXTO7lO^W`)v)PQfs zOT3%!$S3ki{6Kyr@8L7~Wf-Zqq9a`9Z}1g_+CpPN6zoC^jBLY&iNY*_2)V*K;R9hS zT&#n_*TQK8aV`r#3l%I?EVa=o+F5#9p0EtJj7QKo!?MWovSl?w$Bo~yY)0VojOB*q zCm65_Vr_Jje&P&t6R-G*_^EhYyd>TeO;Qc1`I1#p@t$;Oz$)o=X@m5xv_<+_x`>eC z&r+l{%38&0g9;vBl${b$O(w^ob?iV)-5=fB@k?R*s^*uC)?!Ka#y*JoC2?Z z8hTciya>^{)e!K9uxA(K+wy(6lF~*QtW1MNTc9jeav;)=l}|lNfpT2AsN6*NiBK!3 zRUy}=f!>p-4pN_1C#$m&##^ecQP->Qt6Si9eW`w7Zboh{N9jj&#QgrjY?7Pc<7 zo*0&fK@+ChGHltfiLcw(}Ta@g0~H`}+__t}pj!h6Mj(_Uf^hf5UWh;uY{2pF$AIC^Q`{v^1Q^Bs#Y zcCE$=!e+-d$6m+Rj`NNm9X~l3C+jTljCIy=Hg{TKeA_#FI0r)WMmr}tXE|SRzT{lx zeBJr3bF0U>&w0>!+<69yc-yISMIxqJ6+yfvF4^UReNJ@shk8yxg!o0*O4l2%kF??N zvg@{saU0yx?i#Svv)t$1KT!oOG%!P9m_xa;Tve_Ow}@ND4dF*%?0bQKiQmH?=dbcN zd7}`E6_md4oJI&~f@g*>Usw#QyFu6|Bv?9H5-k%jyV(yTdlqK4oG6Li;N_&i&q)=> zVGLX-E*D=DH;EsLJH;d7Y4L)1L;OXIkjhEbq`L5HT1uUz9@3N2)6!JU170p|lHQj- zmbOcKq(hRyYPMFw=r|VRBC)QvuJ<6sMa{Gs3e-vNF87s_5ukhoeC8*H7sCmEHB+E!{obL%`Hc?vLEN z+y@cH`_}!v`=a}*`?lW>6d9O4n)?yXnYd^!j;qHt;yBI@mUrj+aKo@7l#aRVi`;T9 zhg;8mjHQduxUaD~bPi@Aj4#Vq;$^rypmt|>O#CwAO39*$Y+r7 zr0_IWx}Fo}2@8Zp2>j*>YvI*y!+OU7;fQctC=@PXko-jmwM1EZSo*@F9dDTikF_G! zhPJ{9{apM?tS|MGGNc!!SEM(vBJ`>BEv67x;a2Lcz2Km%wt6;LH(Nik(pd5>DLI1A{EXNqkJ{r6em)DI+lk&Vie_LRq71Q1UUWJp>WlS89UwPpRY8 zDTrylYWp1B?FZXM+cn!5SmC+$ckJ8kpW2O%E?5_-;EZ=RaxQ?gal&nvSKux@V+o=%b<*BM4xzB zEP|_DS$YSmR)95y`%*<~Q)_2y;)B)Dxzb3Gbt4?Z zJJucYr}FbKh})GAOo0c&V_2x>s*^BtYi%EC9|J;;+s|Ol><&T*)N!tkwTWg9)sf)n zvSB7gb%+0&5y{<1^=UmrZk?soa`fdR($z$#(+|R%j z&(apK^W8rn;=wZMU`9o*1sstH+*ED__clhu6M>b`dl(Euc^BV?@5K+|hx23kDSSFV zi=W5O_h4;z1HTQ{=}Z0_O!F@Dcfh=|nCQg|4Froo7fm~3em4vAx>bS~0f%~+!}Z4e zZ7fE+l~BXJ&SWRUvD)UFjjp%dpFxkXzKoy|OBb`57+%KO(@v=u*2FJcZ&;haYYlHUwV@f|z{ zgAgM$1%K?A#~|1)j76~NCCq!@g}?AE)pQ_ZOoMc~T zpX~U-Q5B1}Oe(8wljy;Zf?#IypP(J|2X&VbaR`Hbb0IX;QA`wjW9@&a z__R1id=BgXbFrFD#8r^lCh>hN1AZ!=gxIc&VVHncK!{+G^>yoq*4@@4V82n0mm44| zkRW#i>o>#CK941TSs|F$Pg8BS;kM`CC*{IR@?!qzIRYoCxxF)1?uWu3%7o2+)p5iT z4D*u6eG7uz_#7-a+u`mMh1-O`DvYbN`6RIm?U$`*oO{jD{+| zfV~m<5XBvY&?-Qg8)6YUnSYj_fPpWAe~W()lk(I2S-!Q9djj+Ru6!~?|DD)K5v5vm&lV?IfkCd@#%?s+&iFT!js!^9?D zwtFxxZ@_GDno?KIcWlHswHte-3@)212|n;4%#5F=CbNKLmg3SA9>PSf3ICMkCCdlm zVN6>pBOw1NbX>1UicLvYCt~qGUoAkKaOV%S{oG`NokBtsKG!qL4F`Uv;NunxpU@x=lkCGIj}2#a5~(#u_8YQ*A6$BV63`K zG-!qK#&|d2G*6F0#SR()1A8ysS})3fh*{K4@ zcUCyhI!&aNrX+M^)$4e06C3B6GXyVwL^Syx?yGmJ)EJHE_Ka6m&rKj&Y2mK%zRU3D?=5B2@INbA#l` zbkb1On9K&O$2=H)*&R{6TooDDrC}D8GV8dg{#-Ra~TXim$O8 zzhO7-(K59{&D37f{?u|~U9l7Kfp`|FvQm8k^Dhb6+@p76<}T5=Qq!3Dn;`&-y-HG6 zLrOutT6xoaYs4!fNfAk3JVqHSHPE7Mc9YXe%Q^2{^g{C@p|)V#2xaBQieg*z7RKwn zMAMcqm^R}DKP2$eV_Y)E=!cVK4pFpnBw2%OmS3p5s?F>OSU}h+wkoVFI|o0%0|$S` z&U1>1khKvZ>vL+6;y+;_^2k*##S!1ZuszH{O!{y6JE4>lX-W0}wuDI(?&U(_2==Q) zo2%*I$VFO)UZIyzn%9lW0qVmH^`UiCvV7c z^BvH}5Z8-ER9GYUVv?J~*PQEG?i23RrPO&n+O`#S`;mL-^s4c!{qsL)Zj8+M52~o_ Awg3PC diff --git a/psx/octoshock/psx/cpu.cpp b/psx/octoshock/psx/cpu.cpp index a62047975b..38c173abae 100644 --- a/psx/octoshock/psx/cpu.cpp +++ b/psx/octoshock/psx/cpu.cpp @@ -31,6 +31,7 @@ void* g_ShockTraceCallbackOpaque = NULL; ShockCallback_Trace g_ShockTraceCallback = NULL; ShockCallback_Mem g_ShockMemCallback; eShockMemCb g_ShockMemCbType; +const char *disasm_buf = NULL; /* TODO Make sure load delays are correct. @@ -56,6 +57,7 @@ PS_CPU::PS_CPU() memset(FastMap, 0, sizeof(FastMap)); memset(DummyPage, 0xFF, sizeof(DummyPage)); // 0xFF to trigger an illegal instruction exception, so we'll know what's up when debugging. + disasm_buf = (char*)malloc(100); for(uint64 a = 0x00000000; a < (1ULL << 32); a += FAST_MAP_PSIZE) SetFastMap(DummyPage, a, FAST_MAP_PSIZE); @@ -546,23 +548,23 @@ pscpu_timestamp_t PS_CPU::RunReal(pscpu_timestamp_t timestamp_in) switch(PC & 0xC) { - case 0x0: - timestamp++; - ICI[0x00].TV &= ~0x2; - ICI[0x00].Data = MDFN_de32lsb(&FMP[0x0]); - case 0x4: - timestamp++; - ICI[0x01].TV &= ~0x2; - ICI[0x01].Data = MDFN_de32lsb(&FMP[0x4]); - case 0x8: - timestamp++; - ICI[0x02].TV &= ~0x2; - ICI[0x02].Data = MDFN_de32lsb(&FMP[0x8]); - case 0xC: - timestamp++; - ICI[0x03].TV &= ~0x2; - ICI[0x03].Data = MDFN_de32lsb(&FMP[0xC]); - break; + case 0x0: + timestamp++; + ICI[0x00].TV &= ~0x2; + ICI[0x00].Data = MDFN_de32lsb(&FMP[0x0]); + case 0x4: + timestamp++; + ICI[0x01].TV &= ~0x2; + ICI[0x01].Data = MDFN_de32lsb(&FMP[0x4]); + case 0x8: + timestamp++; + ICI[0x02].TV &= ~0x2; + ICI[0x02].Data = MDFN_de32lsb(&FMP[0x8]); + case 0xC: + timestamp++; + ICI[0x03].TV &= ~0x2; + ICI[0x03].Data = MDFN_de32lsb(&FMP[0xC]); + break; } instr = ICache[(PC & 0xFFC) >> 2].Data; } @@ -572,6 +574,12 @@ pscpu_timestamp_t PS_CPU::RunReal(pscpu_timestamp_t timestamp_in) //for(int i = 0; i < 32; i++) // printf("%02x : %08x\n", i, GPR[i]); //printf("\n"); + if (g_ShockTraceCallback) + { + //_asm int 3; + shock_Util_DisassembleMIPS(PC, instr, (void *)disasm_buf, sizeof(disasm_buf)); + g_ShockTraceCallback(NULL, PC, instr, disasm_buf); + } opf = instr & 0x3F; diff --git a/psx/octoshock/psx/cpu.h b/psx/octoshock/psx/cpu.h index 619f8c27f2..729a178a81 100644 --- a/psx/octoshock/psx/cpu.h +++ b/psx/octoshock/psx/cpu.h @@ -224,8 +224,8 @@ namespace MDFN_IEN_PSX public: void SetCPUHook(void(*cpuh)(const pscpu_timestamp_t timestamp, uint32 pc), void(*addbt)(uint32 from, uint32 to, bool exception)); void CheckBreakpoints(void(*callback)(bool write, uint32 address, unsigned int len), uint32 instr); - void* debug_GetScratchRAMPtr() { return ScratchRAM.data8; } - void* debug_GetGPRPtr() { return GPR; } + void* debug_GetScratchRAMPtr() { return ScratchRAM.data8; } + void* debug_GetGPRPtr() { return GPR; } enum { diff --git a/psx/octoshock/psx/psx.cpp b/psx/octoshock/psx/psx.cpp index b95c9f6b22..70689c0142 100644 --- a/psx/octoshock/psx/psx.cpp +++ b/psx/octoshock/psx/psx.cpp @@ -2681,9 +2681,9 @@ EW_EXPORT s32 shock_GetRegisters_CPU(void* psx, ShockRegisters_CPU* buffer) { memcpy(buffer->GPR,CPU->debug_GetGPRPtr(),32*4); buffer->PC = CPU->GetRegister(PS_CPU::GSREG_PC_NEXT,NULL,0); - buffer->PC_NEXT = CPU->GetRegister(PS_CPU::GSREG_PC_NEXT,NULL,0); - buffer->IN_BD_SLOT = CPU->GetRegister(PS_CPU::GSREG_IN_BD_SLOT,NULL,0); - buffer->LO = CPU->GetRegister(PS_CPU::GSREG_LO,NULL,0); + buffer->PC_NEXT = CPU->GetRegister(PS_CPU::GSREG_PC_NEXT,NULL,0); + buffer->IN_BD_SLOT = CPU->GetRegister(PS_CPU::GSREG_IN_BD_SLOT,NULL,0); + buffer->LO = CPU->GetRegister(PS_CPU::GSREG_LO,NULL,0); buffer->HI = CPU->GetRegister(PS_CPU::GSREG_HI,NULL,0); buffer->SR = CPU->GetRegister(PS_CPU::GSREG_SR,NULL,0); buffer->CAUSE = CPU->GetRegister(PS_CPU::GSREG_CAUSE,NULL,0);