├── PascalTDPTweaker ├── .gitignore ├── pascaltdptweaker │ ├── Resources │ │ ├── icon_desktop_hd.jpg │ │ ├── icon_title_wide.jpg │ │ ├── icon_title_square.ico │ │ └── icon_desktop_small.ico │ ├── App.config │ ├── Properties │ │ ├── Settings.settings │ │ ├── Settings.Designer.cs │ │ ├── AssemblyInfo.cs │ │ ├── Resources.Designer.cs │ │ ├── app.manifest │ │ └── Resources.resx │ ├── Models │ │ ├── Reader │ │ │ ├── Config.cs │ │ │ ├── Preset.cs │ │ │ ├── Address.cs │ │ │ ├── Model.cs │ │ │ └── Processor.cs │ │ ├── Firmware │ │ │ ├── Bios.cs │ │ │ └── IndexCollector.cs │ │ └── Helper.cs │ ├── App │ │ ├── Program.cs │ │ ├── MainForm.cs │ │ └── MainForm.resx │ ├── PascalTDPTweaker.csproj.user │ ├── LICENSE │ ├── Controllers │ │ ├── OptionController.cs │ │ ├── TextController.cs │ │ ├── NumericController.cs │ │ └── BiosController.cs │ ├── PascalTDPTweaker.csproj │ └── Models.config └── PascalTDPTweaker.sln └── README.md /PascalTDPTweaker/.gitignore: -------------------------------------------------------------------------------- 1 | bin/ 2 | obj/ 3 | .vs/ 4 | *.exe 5 | *.cache -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Resources/icon_desktop_hd.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaneLyng/MobilePascalTDPTweaker/HEAD/PascalTDPTweaker/pascaltdptweaker/Resources/icon_desktop_hd.jpg -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Resources/icon_title_wide.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaneLyng/MobilePascalTDPTweaker/HEAD/PascalTDPTweaker/pascaltdptweaker/Resources/icon_title_wide.jpg -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Resources/icon_title_square.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaneLyng/MobilePascalTDPTweaker/HEAD/PascalTDPTweaker/pascaltdptweaker/Resources/icon_title_square.ico -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Resources/icon_desktop_small.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/LaneLyng/MobilePascalTDPTweaker/HEAD/PascalTDPTweaker/pascaltdptweaker/Resources/icon_desktop_small.ico -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/App.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Properties/Settings.settings: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Models/Reader/Config.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Xml.Serialization; 3 | 4 | namespace PascalTDPTweaker.Models.Reader 5 | { 6 | [XmlRoot("configuration")] 7 | public class Config 8 | { 9 | [XmlArray("Models")] 10 | [XmlArrayItem("Model")] 11 | public List Models { get; set; } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Models/Reader/Preset.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace PascalTDPTweaker.Models.Reader 8 | { 9 | class Preset 10 | { 11 | public Preset(int value) 12 | { 13 | this.Value = value; 14 | } 15 | 16 | public int Value { get; set; } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/App/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace PascalTDPTweaker 5 | { 6 | static class Program 7 | { 8 | /// 9 | /// The main entry point for the application. 10 | /// 11 | [STAThread] 12 | static void Main() 13 | { 14 | Application.EnableVisualStyles(); 15 | Application.SetCompatibleTextRenderingDefault(false); 16 | Application.Run(new MainForm()); 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Models/Firmware/Bios.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace PascalTDPTweaker.Models.Firmware 8 | { 9 | public class Bios 10 | { 11 | public Bios(byte[] file) 12 | { 13 | this.ByteArray = file; 14 | this.IndexCollection = new IndexCollector(); 15 | } 16 | 17 | public byte[] ByteArray { get; set; } 18 | public IndexCollector IndexCollection { get; set; } 19 | 20 | public int Length() 21 | { 22 | return ByteArray.Length; 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/PascalTDPTweaker.csproj.user: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | publish\ 5 | 6 | 7 | 8 | 9 | 10 | en-US 11 | false 12 | ShowAllFiles 13 | 14 | 15 | false 16 | 17 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Models/Reader/Address.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | 4 | namespace PascalTDPTweaker.Models.Reader 5 | { 6 | class Address 7 | { 8 | /* Address to store location information. */ 9 | public Address() 10 | { 11 | ; 12 | } 13 | public Address(String address) 14 | { 15 | String[] tokens = address.Split(','); 16 | ID = Helper.HexToDecString(tokens[0]); 17 | Low = Int32.Parse(tokens[1]); 18 | High = Int32.Parse(tokens[2]); 19 | } 20 | 21 | public byte[] ID { get; set; } 22 | 23 | public string Config { get; set; } 24 | 25 | public int Low { get; set; } 26 | 27 | public int High { get; set; } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /PascalTDPTweaker/PascalTDPTweaker.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio 15 4 | VisualStudioVersion = 15.0.26403.7 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PascalTDPTweaker", "PascalTDPTweaker\PascalTDPTweaker.csproj", "{80B676CB-D70B-47D1-9482-C9BF6B7E29FF}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {80B676CB-D70B-47D1-9482-C9BF6B7E29FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {80B676CB-D70B-47D1-9482-C9BF6B7E29FF}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {80B676CB-D70B-47D1-9482-C9BF6B7E29FF}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {80B676CB-D70B-47D1-9482-C9BF6B7E29FF}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | EndGlobal 23 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Lane Lyng 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Properties/Settings.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace PascalTDPTweaker.Properties { 12 | 13 | 14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.9.0.0")] 16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { 17 | 18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); 19 | 20 | public static Settings Default { 21 | get { 22 | return defaultInstance; 23 | } 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Mobile Pascal TDP Tweaker 2 | 3 | Windows application designed to read and raise thermal design power (TDP) values of video BIOS that is based on Nvidia Pascal and Turing architecture; provided up to 20% extra graphics performance in computation and gaming. 4 | 5 | ## Supported platforms 6 | - Windows (64/32bit) 7 | 8 | ## Target framework: 9 | - .NET Framework 4.6.1 10 | 11 | ## Features 12 | - Support reading and modifying vBIOS TDP values for mobile Pascal and Turing cards 13 | - Support standalone 32-bit checksum correction 14 | - Embedded base converter 15 | 16 | ## Installing / running 17 | - Download [latest Mobile Pascal TDP Tweaker from releases](https://github.com/LaneLyng/MobilePascalTDPTweaker/releases) 18 | - Run 'Mobile Pascal TDP Tweaker.exe' 19 | - Open the vBIOS file that you would like to modify and adjust the TDP values 20 | - Save the vBIOS 21 | - Flash the modified vBIOS file into your chip through using a hardware programmer 22 | 23 | ## Development 24 | - Recommend using Microsoft Visual Studio to build/compile 25 | - To add new model, add model name and addresses in 'Models.config' under Resources folder (you need to know what addresses to add) 26 | - To change the read, load, or save logic, modify the 'MainForm.cs' 27 | - To add new address field, modify the 'BiosConfig.cs' 28 | 29 | ## Future TO-DO list 30 | - Fix the issue that RTX 2060 is regonized as RTX 2070 31 | - Add support for MX150 and GTX 1050 Ti 32 | - Furthur decouple MainForm application 33 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | using System.Reflection; 2 | using System.Runtime.CompilerServices; 3 | using System.Runtime.InteropServices; 4 | 5 | // General Information about an assembly is controlled through the following 6 | // set of attributes. Change these attribute values to modify the information 7 | // associated with an assembly. 8 | [assembly: AssemblyTitle("Mobile Pascal TDP Tweaker")] 9 | [assembly: AssemblyDescription("")] 10 | [assembly: AssemblyConfiguration("")] 11 | [assembly: AssemblyCompany("")] 12 | [assembly: AssemblyProduct("Mobile Pascal TDP Tweaker")] 13 | [assembly: AssemblyCopyright("Copyright ©2019 by Lane")] 14 | [assembly: AssemblyTrademark("")] 15 | [assembly: AssemblyCulture("")] 16 | 17 | // Setting ComVisible to false makes the types in this assembly not visible 18 | // to COM components. If you need to access a type in this assembly from 19 | // COM, set the ComVisible attribute to true on that type. 20 | [assembly: ComVisible(false)] 21 | 22 | // The following GUID is for the ID of the typelib if this project is exposed to COM 23 | [assembly: Guid("80b676cb-d70b-47d1-9482-c9bf6b7e29ff")] 24 | 25 | // Version information for an assembly consists of the following four values: 26 | // 27 | // Major Version 28 | // Minor Version 29 | // Build Number 30 | // Revision 31 | // 32 | // You can specify all the values or you can default the Build and Revision Numbers 33 | // by using the '*' as shown below: 34 | // [assembly: AssemblyVersion("1.0.*")] 35 | [assembly: AssemblyVersion("1.2.1.0")] 36 | [assembly: AssemblyFileVersion("1.2.1.0")] 37 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Controllers/OptionController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows.Forms; 7 | 8 | namespace PascalTDPTweaker.Controllers 9 | { 10 | public static class OptionController 11 | { 12 | 13 | // Set radio button on main application. 14 | public static int SetRadio(byte[] dataPos, byte[] file, int i, int dataLen, int shift, RadioButton adj, RadioButton fix, string signal) 15 | { 16 | int pos = i; 17 | int posLen = dataPos.Length; 18 | 19 | for (int j = (posLen - 1); j >= 0; j--) 20 | { 21 | if (dataPos[j].Equals(file[pos])) 22 | pos--; 23 | else 24 | return -1; 25 | 26 | // Indicating there is a match. 27 | if (pos == (i - (posLen - 1))) 28 | { 29 | string result = ""; 30 | int index = pos - dataLen; 31 | 32 | for (int k = index; k < (pos + shift); k++) 33 | { 34 | result += file[k].ToString("X2"); 35 | } 36 | 37 | if (result.Equals(signal.Substring(0, 8))) 38 | adj.Checked = true; 39 | else if (result.Equals(signal.Substring(8, 8))) 40 | fix.Checked = true; 41 | 42 | return index; 43 | } 44 | } 45 | return -1; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Controllers/TextController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows.Forms; 7 | 8 | namespace PascalTDPTweaker.Controllers 9 | { 10 | public static class TextController 11 | { 12 | // Set text on main application. 13 | public static int SetText(byte[] dataPos, byte[] file, int i, int dataLen, int shift, TextBox tb, int type) 14 | { 15 | int pos = i; 16 | int posLen = dataPos.Length; 17 | 18 | for (int j = (posLen - 1); j >= 0; j--) 19 | { 20 | if (dataPos[j].Equals(file[pos])) 21 | pos--; 22 | else 23 | return -1; 24 | 25 | // Indicating there is a match. 26 | if (pos == (i - (posLen - 1))) 27 | { 28 | string result = ""; 29 | int index = pos - dataLen; 30 | 31 | for (int k = index; k < (pos + shift); k++) 32 | { 33 | result += file[k].ToString("X2"); 34 | } 35 | 36 | if (type == 1) 37 | tb.Text = Models.Helper.HexToString(result); 38 | else if (type == 2) 39 | tb.Text = result; 40 | else if (type == 3) 41 | tb.Text = Models.Helper.HexToDeviceID(result); 42 | return index; 43 | } 44 | } 45 | return -1; 46 | } 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Models/Reader/Model.cs: -------------------------------------------------------------------------------- 1 | using System.Xml.Serialization; 2 | 3 | namespace PascalTDPTweaker.Models.Reader 4 | { 5 | public class Model 6 | { 7 | [XmlAttribute("code")] 8 | // Config name. 9 | public string Code { get; set; } 10 | public string ModelName { get; set; } 11 | 12 | // Basic info. 13 | public string Starter { get; set; } 14 | public string Date { get; set; } 15 | public string BiosName { get; set; } 16 | public string Version { get; set; } 17 | public string Board { get; set; } 18 | public string DeviceID { get; set; } 19 | 20 | 21 | // To be Modded. 22 | public string BaseTdp { get; set; } 23 | public string MaxTdp { get; set; } 24 | public string TdpSlider { get; set; } 25 | public string TdpSliderSignal { get; set; } 26 | 27 | public string Power1Base { get; set; } 28 | public string Power1Max { get; set; } 29 | public string Power2Base { get; set; } 30 | public string Power2Max { get; set; } 31 | public string Power3Base { get; set; } 32 | public string Power3Max { get; set; } 33 | 34 | public string Temp1Min { get; set; } 35 | public string Temp1Base { get; set; } 36 | public string Temp1Max { get; set; } 37 | public string Temp2Min { get; set; } 38 | public string Temp2Base { get; set; } 39 | public string Temp2Max { get; set; } 40 | public string TempSlider { get; set; } 41 | public string TempSliderSignal { get; set; } 42 | public string Checksum8 { get; set; } 43 | public string Checksum32 { get; set; } 44 | 45 | // Preset. 46 | public string PresetTdpBase { get; set; } 47 | public string PresetTdpMax { get; set; } 48 | public string PresetPower1 { get; set; } 49 | public string PresetPower2 { get; set; } 50 | public string PresetPower3 { get; set; } 51 | public string PresetTdpSlider { get; set; } 52 | public string PresetTemp { get; set; } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Controllers/NumericController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | using System.Windows.Forms; 7 | 8 | namespace PascalTDPTweaker.Controllers 9 | { 10 | public static class NumericController 11 | { 12 | // Set numeric value on main application. 13 | public static int SetValue(byte[] dataPos, byte[] file, int i, int dataLen, int shift, NumericUpDown nud, int type) 14 | { 15 | int pos = i; 16 | int posLen = dataPos.Length; 17 | 18 | for (int j = (posLen - 1); j >= 0; j--) 19 | { 20 | if (dataPos[j].Equals(file[pos])) 21 | pos--; 22 | else 23 | return -1; 24 | 25 | // Indicating there is a match. 26 | if (pos == (i - (posLen - 1))) 27 | { 28 | // Immediately return index to correct checksum. 29 | if (type == 0) 30 | return (pos + posLen); 31 | 32 | string result = ""; 33 | int index = pos - dataLen; 34 | 35 | for (int k = index; k < (pos + shift); k++) 36 | { 37 | result += file[k].ToString("X2"); 38 | } 39 | 40 | // TDP = 1 41 | if (type == 1) 42 | { 43 | int num = int.Parse(Models.Helper.ReverseTDP(result), System.Globalization.NumberStyles.HexNumber); 44 | if (num <= nud.Maximum) 45 | nud.Value = num; 46 | } 47 | // Temp = 2 48 | else if (type == 2) 49 | { 50 | int num = int.Parse(Models.Helper.ReverseTemp(result), System.Globalization.NumberStyles.HexNumber) / 32; 51 | if (num <= nud.Maximum) 52 | nud.Value = num; 53 | } 54 | 55 | return index; 56 | } 57 | } 58 | return -1; 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Models/Helper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace PascalTDPTweaker.Models 8 | { 9 | public static class Helper 10 | { 11 | public static byte[] HexToDecString(string hexString) 12 | { 13 | if (hexString == null || (hexString.Length & 1) == 1) 14 | { 15 | throw new ArgumentException(); 16 | } 17 | 18 | byte[] sb = new byte[hexString.Length / 2]; 19 | int j = 0; 20 | 21 | for (var i = 0; i < hexString.Length; i += 2) 22 | { 23 | var hexChar = byte.Parse(hexString.Substring(i, 2), System.Globalization.NumberStyles.HexNumber); 24 | sb[j] = hexChar; 25 | j++; 26 | } 27 | return sb; 28 | } 29 | 30 | public static string HexToString(string hexString) 31 | { 32 | if (hexString == null || (hexString.Length & 1) == 1) 33 | { 34 | throw new ArgumentException(); 35 | } 36 | 37 | var sb = new StringBuilder(); 38 | 39 | for (var i = 0; i < hexString.Length; i += 2) 40 | { 41 | var hexChar = hexString.Substring(i, 2); 42 | sb.Append((char)Convert.ToByte(hexChar, 16)); 43 | } 44 | return sb.ToString(); 45 | } 46 | 47 | public static string ReverseTDP(string s) 48 | { 49 | string tdp = s.Substring(6, 2) + s.Substring(4, 2) + s.Substring(2, 2) + s.Substring(0, 2); 50 | return tdp; 51 | } 52 | 53 | public static string Spacing(string s) 54 | { 55 | string str = s.Substring(0, 2) + " " + s.Substring(2, 2) + " " + s.Substring(4, 2) + " " + s.Substring(6, 2); 56 | return str; 57 | } 58 | 59 | public static string ReverseTemp(string s) 60 | { 61 | string temp = s.Substring(2, 2) + s.Substring(0, 2); 62 | return temp; 63 | } 64 | 65 | public static string HexToDeviceID(string s) 66 | { 67 | string id = s.Substring(2, 2) + s.Substring(0, 2) + " " + s.Substring(6, 2) + s.Substring(4, 2); 68 | return id; 69 | } 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Models/Firmware/IndexCollector.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Text; 5 | using System.Threading.Tasks; 6 | 7 | namespace PascalTDPTweaker.Models.Firmware 8 | { 9 | /* Indices to store addresses to be modded. */ 10 | public class IndexCollector 11 | { 12 | public IndexCollector() 13 | { 14 | DateIndex = -1; 15 | DeviceIndex = -1; 16 | VersionIndex = -1; 17 | BoardIndex = -1; 18 | 19 | BaseTdpIndex = -1; 20 | MaxTdpIndex = -1; 21 | 22 | P1BaseTdpIndex = -1; 23 | P1MaxTdpIndex = -1; 24 | 25 | P2BaseTdpIndex = -1; 26 | P2MaxTdpIndex = -1; 27 | 28 | P3BaseTdpIndex = -1; 29 | P3MaxTdpIndex = -1; 30 | 31 | TdpSliderIndex = -1; 32 | TempSliderIndex = -1; 33 | 34 | T1MinTempIndex = -1; 35 | T1BaseTempIndex = -1; 36 | T1MaxTempIndex = -1; 37 | 38 | T2MinTempIndex = -1; 39 | T2BaseTempIndex = -1; 40 | T2MaxTempIndex = -1; 41 | 42 | CheckSum8Index = -1; 43 | CheckSum32Index = -1; 44 | BlackSreenIndex = -1; 45 | } 46 | public int DateIndex { get; set; } 47 | 48 | public int VersionIndex { get; set; } 49 | 50 | public int BoardIndex { get; set; } 51 | 52 | public int DeviceIndex { get; set; } 53 | 54 | public int BaseTdpIndex { get; set; } 55 | 56 | public int MaxTdpIndex { get; set; } 57 | 58 | public int P1BaseTdpIndex { get; set; } 59 | 60 | public int P1MaxTdpIndex { get; set; } 61 | 62 | public int P2BaseTdpIndex { get; set; } 63 | 64 | public int P2MaxTdpIndex { get; set; } 65 | 66 | public int P3BaseTdpIndex { get; set; } 67 | 68 | public int P3MaxTdpIndex { get; set; } 69 | 70 | public int TdpSliderIndex { get; set; } 71 | 72 | public int TempSliderIndex { get; set; } 73 | 74 | public int T1MinTempIndex { get; set; } 75 | 76 | public int T1BaseTempIndex { get; set; } 77 | 78 | public int T1MaxTempIndex { get; set; } 79 | 80 | public int T2MinTempIndex { get; set; } 81 | 82 | public int T2BaseTempIndex { get; set; } 83 | 84 | public int T2MaxTempIndex { get; set; } 85 | 86 | public int CheckSum8Index { get; set; } 87 | 88 | public int CheckSum32Index { get; set; } 89 | 90 | public int BlackSreenIndex { get; set; } 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Properties/Resources.Designer.cs: -------------------------------------------------------------------------------- 1 | //------------------------------------------------------------------------------ 2 | // 3 | // This code was generated by a tool. 4 | // Runtime Version:4.0.30319.42000 5 | // 6 | // Changes to this file may cause incorrect behavior and will be lost if 7 | // the code is regenerated. 8 | // 9 | //------------------------------------------------------------------------------ 10 | 11 | namespace PascalTDPTweaker.Properties { 12 | using System; 13 | 14 | 15 | /// 16 | /// A strongly-typed resource class, for looking up localized strings, etc. 17 | /// 18 | // This class was auto-generated by the StronglyTypedResourceBuilder 19 | // class via a tool like ResGen or Visual Studio. 20 | // To add or remove a member, edit your .ResX file then rerun ResGen 21 | // with the /str option, or rebuild your VS project. 22 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")] 23 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] 24 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 25 | internal class Resources { 26 | 27 | private static global::System.Resources.ResourceManager resourceMan; 28 | 29 | private static global::System.Globalization.CultureInfo resourceCulture; 30 | 31 | [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] 32 | internal Resources() { 33 | } 34 | 35 | /// 36 | /// Returns the cached ResourceManager instance used by this class. 37 | /// 38 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 39 | internal static global::System.Resources.ResourceManager ResourceManager { 40 | get { 41 | if (object.ReferenceEquals(resourceMan, null)) { 42 | global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("PascalTDPTweaker.Properties.Resources", typeof(Resources).Assembly); 43 | resourceMan = temp; 44 | } 45 | return resourceMan; 46 | } 47 | } 48 | 49 | /// 50 | /// Overrides the current thread's CurrentUICulture property for all 51 | /// resource lookups using this strongly typed resource class. 52 | /// 53 | [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] 54 | internal static global::System.Globalization.CultureInfo Culture { 55 | get { 56 | return resourceCulture; 57 | } 58 | set { 59 | resourceCulture = value; 60 | } 61 | } 62 | 63 | /// 64 | /// Looks up a localized resource of type System.Drawing.Bitmap. 65 | /// 66 | internal static System.Drawing.Bitmap logo { 67 | get { 68 | object obj = ResourceManager.GetObject("logo", resourceCulture); 69 | return ((System.Drawing.Bitmap)(obj)); 70 | } 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Properties/app.manifest: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 48 | 55 | 56 | 70 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Properties/Resources.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | ..\Resources\icon_desktop_hd.jpg;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 123 | 124 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Models/Reader/Processor.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.IO; 4 | using System.Xml; 5 | using System.Xml.Serialization; 6 | 7 | namespace PascalTDPTweaker.Models.Reader 8 | { 9 | class Processor 10 | { 11 | // List to store read config file. 12 | private List models; 13 | 14 | // Basic info address(location in BIOS). 15 | public Address StartAdr { get; set; } 16 | public Address DateAdr { get; set; } 17 | public Address VerAdr { get; set; } 18 | public Address BoardAdr { get; set; } 19 | public Address DeviceAdr { get; set; } 20 | 21 | // To be modded address. 22 | // Power. 23 | public Address BaseTdpAdr { get; set; } 24 | public Address MaxTdpAdr { get; set; } 25 | public Address TdpSliderAdr { get; set; } 26 | public Address TdpSliderSignal { get; set; } 27 | public Address Power1BaseAdr { get; set; } 28 | public Address Power1MaxAdr { get; set; } 29 | public Address Power2BaseAdr { get; set; } 30 | public Address Power2MaxAdr { get; set; } 31 | public Address Power3BaseAdr { get; set; } 32 | public Address Power3MaxAdr { get; set; } 33 | 34 | // Temperature. 35 | public Address Temp1MinAdr { get; set; } 36 | public Address Temp1BaseAdr { get; set; } 37 | public Address Temp1MaxAdr { get; set; } 38 | public Address Temp2MinAdr { get; set; } 39 | public Address Temp2BaseAdr { get; set; } 40 | public Address Temp2MaxAdr { get; set; } 41 | public Address TempSliderAdr { get; set; } 42 | public Address TempSliderSignal { get; set; } 43 | 44 | // Checksum. 45 | public Address Checksum32Adr { get; set; } 46 | public Address Checksum8Adr { get; set; } 47 | 48 | // Preset. 49 | public Preset BaseTdpPreset { get; set; } 50 | public Preset MaxTdpPreset { get; set; } 51 | public Preset Power1Preset { get; set; } 52 | public Preset Power2Preset { get; set; } 53 | public Preset Power3Preset { get; set; } 54 | public Preset TempPreset { get; set; } 55 | 56 | // Read "Models.config". 57 | public void ReadConfigFile(string embeddedPath, string generic) 58 | { 59 | var serializer = new XmlSerializer(typeof(Config)); 60 | 61 | using (Stream stream = this.GetType().Assembly.GetManifestResourceStream(embeddedPath)) 62 | { 63 | using (var xmlReader = XmlReader.Create(stream)) 64 | { 65 | Config config = (Config)serializer.Deserialize(xmlReader); 66 | this.models = config.Models; 67 | this.AssignInfoAddress(generic); 68 | this.AssignDecAddress(generic); 69 | } 70 | } 71 | } 72 | 73 | // Assign basic info address. 74 | public void AssignInfoAddress(string codeName) 75 | { 76 | Model model = this.models.Find(item => item.Code == codeName); 77 | 78 | this.StartAdr = new Address(model.Starter); 79 | this.DateAdr = new Address(model.Date); 80 | this.VerAdr = new Address(model.Version); 81 | this.BoardAdr= new Address(model.Board); 82 | this.DeviceAdr = new Address(model.DeviceID); 83 | } 84 | 85 | // Assign binary address(to be modded). 86 | public string AssignDecAddress(string codeName) 87 | { 88 | try 89 | { 90 | Model model = this.models.Find(item => item.Code == codeName); 91 | 92 | // Re-read the board since model could have been changed. 93 | this.BoardAdr = new Address(model.Board); 94 | 95 | this.BaseTdpAdr = new Address(model.BaseTdp); 96 | this.MaxTdpAdr = new Address(model.MaxTdp); 97 | this.TdpSliderAdr = new Address(model.TdpSlider); 98 | this.TdpSliderSignal = new Address 99 | { 100 | Config = model.TdpSliderSignal 101 | }; 102 | this.Power1BaseAdr = new Address(model.Power1Base); 103 | this.Power1MaxAdr = new Address(model.Power1Max); 104 | this.Power2BaseAdr = new Address(model.Power2Base); 105 | this.Power2MaxAdr = new Address(model.Power2Max); 106 | this.Power3BaseAdr = new Address(model.Power3Base); 107 | this.Power3MaxAdr = new Address(model.Power3Max); 108 | 109 | 110 | this.Temp1MinAdr = new Address(model.Temp1Min); 111 | this.Temp1BaseAdr = new Address(model.Temp1Base); 112 | this.Temp1MaxAdr = new Address(model.Temp1Max); 113 | this.Temp2MinAdr = new Address(model.Temp2Min); 114 | this.Temp2BaseAdr = new Address(model.Temp2Base); 115 | this.Temp2MaxAdr = new Address(model.Temp2Max); 116 | this.TempSliderAdr = new Address(model.TempSlider); 117 | this.TempSliderSignal = new Address 118 | { 119 | Config = model.TempSliderSignal 120 | }; 121 | 122 | this.Checksum32Adr = new Address(model.Checksum32); 123 | this.Checksum8Adr = new Address(model.Checksum8); 124 | 125 | AssignPresetValues(model); 126 | return model.ModelName + ',' + model.BiosName; 127 | } 128 | catch (Exception) 129 | { 130 | return "Unsupported"; 131 | } 132 | } 133 | 134 | // Assign binary address(to be modded). 135 | public int AssignPresetValues(Model model) 136 | { 137 | try 138 | { 139 | this.BaseTdpPreset = new Preset(Int32.Parse(model.PresetTdpBase)); 140 | this.MaxTdpPreset = new Preset(Int32.Parse(model.PresetTdpMax)); 141 | this.Power1Preset = new Preset(Int32.Parse(model.PresetPower1)); 142 | this.Power2Preset = new Preset(Int32.Parse(model.PresetPower2)); 143 | this.Power3Preset = new Preset(Int32.Parse(model.PresetPower3)); 144 | this.TempPreset = new Preset(Int32.Parse(model.PresetTemp)); 145 | 146 | return 1; 147 | } 148 | catch (Exception) 149 | { 150 | return -1; 151 | } 152 | } 153 | 154 | // Read BIOS's name and determine model. 155 | public string ReadModel(string name) 156 | { 157 | return AssignDecAddress(name); 158 | } 159 | } 160 | } 161 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Controllers/BiosController.cs: -------------------------------------------------------------------------------- 1 | using System.Drawing; 2 | using System.Windows.Forms; 3 | 4 | namespace PascalTDPTweaker.Controllers 5 | { 6 | public static class BiosController 7 | { 8 | // Maximum length to use for correcting checksum. 9 | private static readonly int SAFE_LENGTH = 70; 10 | 11 | // Modify vBIOS values in place. 12 | public static void ModBIOSValue(Models.Firmware.Bios bios, int index, int decValue, int type) 13 | { 14 | if (index != -1) 15 | { 16 | string hexValue = ""; 17 | // TDP = 1. 18 | if (type == 1) 19 | { 20 | //Console.WriteLine(decValue); 21 | hexValue = decValue.ToString("X2"); 22 | if (hexValue.Length < 8) 23 | { 24 | hexValue = "00000000" + hexValue; 25 | hexValue = hexValue.Substring(hexValue.Length - 8); 26 | //Console.WriteLine(hexValue); 27 | } 28 | byte[] data = Models.Helper.HexToDecString(Models.Helper.ReverseTDP(hexValue)); 29 | int j = index; 30 | for (int i = 0; i < data.Length; i++) 31 | { 32 | bios.ByteArray[j] = data[i]; 33 | j++; 34 | } 35 | } 36 | // Temperature = 2. 37 | else if (type == 2) 38 | { 39 | //Console.WriteLine(decValue); 40 | hexValue = (decValue * 32).ToString("X2"); 41 | if (hexValue.Length < 4) 42 | { 43 | hexValue = "0000" + hexValue; 44 | hexValue = hexValue.Substring(hexValue.Length - 4); 45 | //Console.WriteLine(hexValue); 46 | } 47 | byte[] data = Models.Helper.HexToDecString(Models.Helper.ReverseTemp(hexValue)); 48 | int j = index; 49 | for (int i = 0; i < data.Length; i++) 50 | { 51 | bios.ByteArray[j] = data[i]; 52 | j++; 53 | } 54 | } 55 | } 56 | } 57 | 58 | // Modify vBIOS slider in place. 59 | public static void ModBIOSSlide(Models.Firmware.Bios bios, int index, bool adj, bool fix, string signal) 60 | { 61 | if (adj == true && fix == false) 62 | { 63 | byte[] data = Models.Helper.HexToDecString(signal.Substring(0, 8)); 64 | int j = index; 65 | for (int i = 0; i < data.Length; i++) 66 | { 67 | bios.ByteArray[j] = data[i]; 68 | j++; 69 | } 70 | } 71 | else if (fix == true && adj == false) 72 | { 73 | byte[] data = Models.Helper.HexToDecString(signal.Substring(8, 8)); 74 | int j = index; 75 | for (int i = 0; i < data.Length; i++) 76 | { 77 | bios.ByteArray[j] = data[i]; 78 | j++; 79 | } 80 | } 81 | } 82 | 83 | // Correct checksum based on offset. 84 | public static int CorrectCS(Models.Firmware.Bios bios, long checksumValue, long offset, TextBox tb, NumericUpDown nud, int mode) 85 | { 86 | long fixCS = (long)nud.Value; 87 | int range = bios.IndexCollection.CheckSum32Index + SAFE_LENGTH; 88 | long rest = offset; 89 | 90 | // For backup. 91 | byte[] bkp_bios = new byte[bios.Length()]; 92 | 93 | for (int i = 0; i < bios.Length(); i++) 94 | { 95 | bkp_bios[i] = bios.ByteArray[i]; 96 | } 97 | 98 | for (int i = bios.IndexCollection.CheckSum32Index; i < range; i++) 99 | { 100 | int cur = bios.ByteArray[i]; 101 | if (rest >= cur) 102 | { 103 | rest -= cur; 104 | bios.ByteArray[i] = (byte)00; 105 | } 106 | else if (rest > 0 && rest < cur) 107 | { 108 | bios.ByteArray[i] = (byte)(cur - rest); 109 | rest = 0; 110 | } 111 | else if (rest < 0) 112 | { 113 | int spare = 255 - cur; 114 | if (-rest >= spare) 115 | { 116 | rest = rest + spare; 117 | bios.ByteArray[i] = (byte)255; 118 | } 119 | else if (-rest < spare) 120 | { 121 | bios.ByteArray[i] = (byte)(-rest + cur); 122 | rest = 0; 123 | } 124 | } 125 | if (rest == 0) 126 | break; 127 | } 128 | 129 | long CS = CalculateChecksum(bios.ByteArray, tb, nud); 130 | // For regular modding: mode = 1 131 | if (mode == 1 && CS == checksumValue) 132 | { 133 | return 1; 134 | } 135 | // Checksum fix: mode = 2 136 | else if (mode == 2 && CS == fixCS) 137 | { 138 | return 1; 139 | } 140 | else 141 | { 142 | SetChecksum(checksumValue, tb, nud); 143 | bios.ByteArray = bkp_bios; 144 | return -1; 145 | } 146 | } 147 | 148 | // Calculate vBIOS checksum value. 149 | public static long CalculateChecksum(byte[] byteToCalculate, TextBox tb, NumericUpDown nud) 150 | { 151 | long checksum = 0; 152 | foreach (byte chData in byteToCalculate) 153 | { 154 | checksum += chData; 155 | } 156 | checksum &= 0xffffffff; 157 | SetChecksum(checksum, tb, nud); 158 | return checksum; 159 | } 160 | 161 | // Set checksum value on application. 162 | public static void SetChecksum(long checksum, TextBox tb, NumericUpDown nud) 163 | { 164 | string r = checksum.ToString("X2"); 165 | tb.Text = "0" + r + " (" + checksum + ")"; 166 | nud.Value = checksum; 167 | // Only check if 8 bit correct. 168 | if ((r.Substring(r.Length - 2)).Equals("00")) 169 | tb.BackColor = Color.LemonChiffon; 170 | else 171 | tb.BackColor = Color.White; 172 | } 173 | } 174 | } 175 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/PascalTDPTweaker.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Debug 10 | AnyCPU 11 | {80B676CB-D70B-47D1-9482-C9BF6B7E29FF} 12 | WinExe 13 | PascalTDPTweaker 14 | Mobile Pascal TDP Tweaker 15 | v4.6.1 16 | 512 17 | true 18 | 19 | false 20 | 21 | 22 | publish\ 23 | true 24 | Disk 25 | false 26 | Foreground 27 | 7 28 | Days 29 | false 30 | false 31 | true 32 | 1 33 | 1.0.0.%2a 34 | false 35 | true 36 | true 37 | 38 | 39 | AnyCPU 40 | true 41 | full 42 | false 43 | bin\Debug\ 44 | DEBUG;TRACE 45 | prompt 46 | 4 47 | 48 | 49 | false 50 | 51 | 52 | AnyCPU 53 | pdbonly 54 | true 55 | bin\Release\ 56 | TRACE 57 | prompt 58 | 4 59 | true 60 | 61 | 62 | false 63 | 64 | 65 | Resources\icon_desktop_small.ico 66 | 67 | 68 | C5C00E8C56178C88244DE9115F396463D249EB8B 69 | 70 | 71 | 72 | 73 | 74 | 75 | true 76 | 77 | 78 | LocalIntranet 79 | 80 | 81 | Properties\app.manifest 82 | 83 | 84 | false 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | Form 110 | 111 | 112 | MainForm.cs 113 | 114 | 115 | 116 | 117 | MainForm.cs 118 | 119 | 120 | ResXFileCodeGenerator 121 | Resources.Designer.cs 122 | Designer 123 | 124 | 125 | True 126 | Resources.resx 127 | True 128 | 129 | 130 | 131 | 132 | SettingsSingleFileGenerator 133 | Settings.Designer.cs 134 | 135 | 136 | True 137 | Settings.settings 138 | True 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | False 153 | .NET Framework 3.5 SP1 154 | true 155 | 156 | 157 | 158 | 159 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/App/MainForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Windows.Forms; 4 | using System.IO; 5 | 6 | 7 | namespace PascalTDPTweaker 8 | { 9 | public partial class MainForm : Form 10 | { 11 | private Models.Firmware.Bios bios; 12 | private readonly Models.Reader.Processor processor = new Models.Reader.Processor(); 13 | private int globalCounter; 14 | private bool textChanging = false; 15 | private long checksumValue = 0; 16 | private string checksum8bit; 17 | private readonly string FORMAT = "ddd, MMM d, yyyy HH:mm:ss"; 18 | 19 | // Indices for vBIOS information. 20 | private readonly int NUM_ADDR = typeof(Models.Firmware.IndexCollector).GetProperties().Length; // Total number of indices. 21 | 22 | public MainForm() 23 | { 24 | InitializeComponent(); 25 | } 26 | 27 | // Load vBIOS file into byte array. 28 | // Loop through byte by byte to locate predefined addresses and set values in form. 29 | private void OpenBIOS_Click(object sender, EventArgs e) 30 | { 31 | OpenFileDialog open = new OpenFileDialog(); 32 | open.Title = "Open BIOS"; 33 | open.Filter = "BIOS Files (*.rom; *.bin)|*.rom;*.bin"; 34 | 35 | if (open.ShowDialog() == DialogResult.OK) 36 | { 37 | // Load models config file. 38 | processor.ReadConfigFile("PascalTDPTweaker.Models.config", "Generic"); 39 | 40 | InitForm(); 41 | textBoxFileName.Text = open.SafeFileName; 42 | DateTime lastModified = File.GetLastWriteTime(open.FileName); 43 | textBoxModifiedDate.Text = lastModified.ToString(FORMAT); 44 | bios = new Models.Firmware.Bios(File.ReadAllBytes(open.FileName)); 45 | open.Dispose(); 46 | 47 | checksumValue = Controllers.BiosController.CalculateChecksum(bios.ByteArray, textBoxChecksum32, numericUpDownTargetChecksum32); 48 | globalCounter = 0; 49 | 50 | // Sequentially read bytes; compare bytes read with addresses in 'Models.config'. 51 | // If address matched, set index and display value in form. 52 | for (int i = 0; i < bios.Length(); i++) 53 | { 54 | // Break for-loop once all indices are set. 55 | if (globalCounter == NUM_ADDR) break; 56 | 57 | // Index to determine if black screen fix is needed. 58 | bios.IndexCollection.BlackSreenIndex = SetValueIndex(processor.StartAdr.ID, bios.ByteArray, i, processor.StartAdr.Low, processor.StartAdr.High, null, 0, bios.IndexCollection.BlackSreenIndex, 1); 59 | 60 | // vBIOS information section. // 61 | bios.IndexCollection.DateIndex = SetTextIndex(processor.DateAdr.ID, bios.ByteArray, i, processor.DateAdr.Low, processor.DateAdr.High, textBoxDate, 1, bios.IndexCollection.DateIndex, 0); 62 | bios.IndexCollection.VersionIndex = SetTextIndex(processor.VerAdr.ID, bios.ByteArray, i, processor.VerAdr.Low, processor.VerAdr.High, textBoxVersion, 1, bios.IndexCollection.VersionIndex, 0); 63 | bios.IndexCollection.BoardIndex = SetTextIndex(processor.BoardAdr.ID, bios.ByteArray, i, processor.BoardAdr.Low, processor.BoardAdr.High, textBoxBoard, 1, bios.IndexCollection.BoardIndex, 0); 64 | bios.IndexCollection.DeviceIndex = SetTextIndex(processor.DeviceAdr.ID, bios.ByteArray, i, processor.DeviceAdr.Low, processor.DeviceAdr.High, textBoxDeviceID, 3, bios.IndexCollection.DeviceIndex, 1); 65 | // End information section. 66 | 67 | // To be modded. // 68 | // TDP section. // 69 | bios.IndexCollection.TdpSliderIndex = SetRadioIndex(processor.TdpSliderAdr.ID, bios.ByteArray, i, processor.TdpSliderAdr.Low, processor.TdpSliderAdr.High, tdpAdjustable, tdpFixed, processor.TdpSliderSignal.Config, bios.IndexCollection.TdpSliderIndex); 70 | bios.IndexCollection.BaseTdpIndex = SetValueIndex(processor.BaseTdpAdr.ID, bios.ByteArray, i, processor.BaseTdpAdr.Low, processor.BaseTdpAdr.High, numericUpDownTdpBase, 1, bios.IndexCollection.BaseTdpIndex, 0); 71 | bios.IndexCollection.MaxTdpIndex = SetValueIndex(processor.MaxTdpAdr.ID, bios.ByteArray, i, processor.MaxTdpAdr.Low, processor.MaxTdpAdr.High, numericUpDownTdpMax, 1, bios.IndexCollection.MaxTdpIndex, 0); 72 | // End TDP section. 73 | 74 | // Advanced power section. // 75 | bios.IndexCollection.P1BaseTdpIndex = SetValueIndex(processor.Power1BaseAdr.ID, bios.ByteArray, i, processor.Power1BaseAdr.Low, processor.Power1BaseAdr.High, numericUpDownP1Base, 1, bios.IndexCollection.P1BaseTdpIndex, 0); 76 | bios.IndexCollection.P1MaxTdpIndex = SetValueIndex(processor.Power1MaxAdr.ID, bios.ByteArray, i, processor.Power1MaxAdr.Low, processor.Power1MaxAdr.High, numericUpDownP1Max, 1, bios.IndexCollection.P1MaxTdpIndex, 0); 77 | 78 | bios.IndexCollection.P2BaseTdpIndex = SetValueIndex(processor.Power2BaseAdr.ID, bios.ByteArray, i, processor.Power2BaseAdr.Low, processor.Power2BaseAdr.High, numericUpDownP2Base, 1, bios.IndexCollection.P2BaseTdpIndex, 0); 79 | bios.IndexCollection.P2MaxTdpIndex = SetValueIndex(processor.Power2MaxAdr.ID, bios.ByteArray, i, processor.Power2MaxAdr.Low, processor.Power2MaxAdr.High, numericUpDownP2Max, 1, bios.IndexCollection.P2MaxTdpIndex, 0); 80 | 81 | bios.IndexCollection.P3BaseTdpIndex = SetValueIndex(processor.Power3BaseAdr.ID, bios.ByteArray, i, processor.Power3BaseAdr.Low, processor.Power3BaseAdr.High, numericUpDownP3Base, 1, bios.IndexCollection.P3BaseTdpIndex, 0); 82 | bios.IndexCollection.P3MaxTdpIndex = SetValueIndex(processor.Power3MaxAdr.ID, bios.ByteArray, i, processor.Power3MaxAdr.Low, processor.Power3MaxAdr.High, numericUpDownP3Max, 1, bios.IndexCollection.P3MaxTdpIndex, 0); 83 | // End advanced power section. 84 | 85 | // Temperature section. // 86 | bios.IndexCollection.TempSliderIndex = SetRadioIndex(processor.TempSliderAdr.ID, bios.ByteArray, i, processor.TempSliderAdr.Low, processor.TempSliderAdr.High, tempAdjustable, tempFixed, processor.TempSliderSignal.Config, bios.IndexCollection.TempSliderIndex); 87 | bios.IndexCollection.T1BaseTempIndex = SetValueIndex(processor.Temp1BaseAdr.ID, bios.ByteArray, i, processor.Temp1BaseAdr.Low, processor.Temp1BaseAdr.High, numericUpDownTemp1Base, 2, bios.IndexCollection.T1BaseTempIndex, 0); 88 | bios.IndexCollection.T1MaxTempIndex = SetValueIndex(processor.Temp1MaxAdr.ID, bios.ByteArray, i, processor.Temp1MaxAdr.Low, processor.Temp1MaxAdr.High, numericUpDownTemp1Max, 2, bios.IndexCollection.T1MaxTempIndex, 0); 89 | bios.IndexCollection.T1MinTempIndex = SetValueIndex(processor.Temp1MinAdr.ID, bios.ByteArray, i, processor.Temp1MinAdr.Low, processor.Temp1MinAdr.High, numericUpDownTemp1Min, 2, bios.IndexCollection.T1MinTempIndex, 0); 90 | 91 | // Additional temperature settings. 92 | bios.IndexCollection.T2BaseTempIndex = SetValueIndex(processor.Temp2BaseAdr.ID, bios.ByteArray, i, processor.Temp2BaseAdr.Low, processor.Temp2BaseAdr.High, numericUpDownTemp2Base, 2, bios.IndexCollection.T2BaseTempIndex, 0); 93 | bios.IndexCollection.T2MaxTempIndex = SetValueIndex(processor.Temp2MaxAdr.ID, bios.ByteArray, i, processor.Temp2MaxAdr.Low, processor.Temp2MaxAdr.High, numericUpDownTemp2Max, 2, bios.IndexCollection.T2MaxTempIndex, 0); 94 | bios.IndexCollection.T2MinTempIndex = SetValueIndex(processor.Temp2MinAdr.ID, bios.ByteArray, i, processor.Temp2MinAdr.Low, processor.Temp2MinAdr.High, numericUpDownTemp2Min, 2, bios.IndexCollection.T2MinTempIndex, 0); 95 | // End Temperature section. 96 | 97 | // Checksum index. 98 | bios.IndexCollection.CheckSum32Index = SetValueIndex(processor.Checksum32Adr.ID, bios.ByteArray, i, processor.Checksum32Adr.Low, processor.Checksum32Adr.High, null, 0, bios.IndexCollection.CheckSum32Index, 0); 99 | bios.IndexCollection.CheckSum8Index = SetTextIndex(processor.Checksum8Adr.ID, bios.ByteArray, i, processor.Checksum8Adr.Low, processor.Checksum8Adr.High, textBoxChecksum8, 2, bios.IndexCollection.CheckSum8Index, 2); 100 | 101 | // Set unknown if date index cannot be found. 102 | if (bios.IndexCollection.DateIndex == -1) textBoxDate.Text = "Unknown"; 103 | } 104 | } 105 | } 106 | 107 | // Perform additional actions for some values. 108 | private void AdditionalStep(int index, int step) 109 | { 110 | switch (step) 111 | { 112 | case 1: 113 | DisplayModel(index, this.textBoxModel, this.textBoxBiosName, this.textBoxDeviceID); 114 | break; 115 | case 2: 116 | this.checksum8bit = this.textBoxChecksum8.Text; 117 | Is8bitCorrect(); 118 | break; 119 | default: 120 | break; 121 | } 122 | } 123 | 124 | // Display model name. 125 | private void DisplayModel(int nameIndex, TextBox textBoxModel, TextBox textBoxBiosName, TextBox textBoxDeviceID) 126 | { 127 | if (nameIndex != -1) 128 | { 129 | string id = textBoxDeviceID.Text; 130 | string [] token = processor.ReadModel(id).Split(','); 131 | string model = token[0]; 132 | if (token.Length > 1) 133 | textBoxBiosName.Text = token[1]; 134 | textBoxModel.Text = model; 135 | 136 | if (model == "Unsupported") 137 | { 138 | textBoxModel.BackColor = Color.AntiqueWhite; 139 | textBoxBiosName.BackColor = Color.AntiqueWhite; 140 | textBoxBiosName.Text = model; 141 | } 142 | } 143 | } 144 | 145 | // Wrapper method calls SetText and return address index. 146 | private int SetTextIndex(byte[] address, byte[] vbios, int pos, int dataLen, int shift, TextBox tb, int type, int index, int step) 147 | { 148 | if (index == -1) 149 | { 150 | index = Controllers.TextController.SetText(address, vbios, pos, dataLen, shift, tb, type); 151 | 152 | if (index != -1) 153 | { 154 | globalCounter++; 155 | AdditionalStep(index, step); 156 | return index; 157 | } 158 | } 159 | return index; 160 | } 161 | 162 | // Wrapper method calls SetValue and return address index. 163 | private int SetValueIndex(byte[] address, byte[] vbios, int pos, int dataLen, int shift, NumericUpDown nud, int type, int index, int extra) 164 | { 165 | if (index == -1) 166 | { 167 | index = Controllers.NumericController.SetValue(address, vbios, pos, dataLen, shift, nud, type); 168 | if (index != -1) 169 | { 170 | globalCounter++; 171 | if (extra == 1) 172 | { 173 | index -= 2; 174 | ShowStarter(); 175 | } 176 | return index; 177 | } 178 | } 179 | return index; 180 | } 181 | 182 | // Wrapper method calls SetRadio and return address index. 183 | private int SetRadioIndex(byte[] address, byte[] vbios, int pos, int dataLen, int shift, RadioButton rb1, RadioButton rb2, string signal, int index) 184 | { 185 | if (index == -1) 186 | { 187 | index = Controllers.OptionController.SetRadio(address, vbios, pos, dataLen, shift, rb1, rb2, signal); 188 | if (index != -1) 189 | { 190 | globalCounter++; 191 | return index; 192 | } 193 | } 194 | return index; 195 | } 196 | 197 | // Save vBIOS file. 198 | private void SaveBIOS_Click(object sender, EventArgs e) 199 | { 200 | SaveFileDialog save = new SaveFileDialog(); 201 | save.Title = "Save BIOS"; 202 | save.Filter = "BIOS Files (*.rom; *.bin)|*.rom;*.bin"; 203 | 204 | if (bios.IndexCollection.CheckSum32Index == 0) 205 | // No vBIOS file is opened. 206 | MessageBox.Show("Unhandled exception (empty)! BIOS cannot be saved.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); 207 | else if (bios.IndexCollection.CheckSum32Index == -1) 208 | // Cannot locate "Power" String. 209 | MessageBox.Show("Unhandled exception (corrupted string section)! BIOS cannot be saved.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); 210 | else if (save.ShowDialog() == System.Windows.Forms.DialogResult.OK) 211 | { 212 | 213 | Controllers.BiosController.ModBIOSValue(bios, bios.IndexCollection.BaseTdpIndex, (int)numericUpDownTdpBase.Value, 1); 214 | Controllers.BiosController.ModBIOSValue(bios, bios.IndexCollection.MaxTdpIndex, (int)numericUpDownTdpMax.Value, 1); 215 | 216 | Controllers.BiosController.ModBIOSValue(bios, bios.IndexCollection.P1BaseTdpIndex, (int)numericUpDownP1Base.Value, 1); 217 | Controllers.BiosController.ModBIOSValue(bios, bios.IndexCollection.P1MaxTdpIndex, (int)numericUpDownP1Max.Value, 1); 218 | 219 | Controllers.BiosController.ModBIOSValue(bios, bios.IndexCollection.P2BaseTdpIndex, (int)numericUpDownP2Base.Value, 1); 220 | Controllers.BiosController.ModBIOSValue(bios, bios.IndexCollection.P2MaxTdpIndex, (int)numericUpDownP2Max.Value, 1); 221 | 222 | Controllers.BiosController.ModBIOSValue(bios, bios.IndexCollection.P3BaseTdpIndex, (int)numericUpDownP3Base.Value, 1); 223 | Controllers.BiosController.ModBIOSValue(bios, bios.IndexCollection.P3MaxTdpIndex, (int)numericUpDownP3Max.Value, 1); 224 | 225 | Controllers.BiosController.ModBIOSValue(bios, bios.IndexCollection.T1BaseTempIndex, (int)numericUpDownTemp1Base.Value, 2); 226 | Controllers.BiosController.ModBIOSValue(bios, bios.IndexCollection.T1MaxTempIndex, (int)numericUpDownTemp1Max.Value, 2); 227 | Controllers.BiosController.ModBIOSValue(bios, bios.IndexCollection.T1MinTempIndex, (int)numericUpDownTemp1Min.Value, 2); 228 | 229 | Controllers.BiosController.ModBIOSValue(bios, bios.IndexCollection.T2BaseTempIndex, (int)numericUpDownTemp2Base.Value, 2); 230 | Controllers.BiosController.ModBIOSValue(bios, bios.IndexCollection.T2MaxTempIndex, (int)numericUpDownTemp2Max.Value, 2); 231 | Controllers.BiosController.ModBIOSValue(bios, bios.IndexCollection.T2MinTempIndex, (int)numericUpDownTemp2Min.Value, 2); 232 | 233 | Controllers.BiosController.ModBIOSSlide(bios, bios.IndexCollection.TdpSliderIndex, tdpAdjustable.Checked, tdpFixed.Checked, processor.TdpSliderSignal.Config); 234 | Controllers.BiosController.ModBIOSSlide(bios, bios.IndexCollection.TempSliderIndex, tempAdjustable.Checked, tempFixed.Checked, processor.TempSliderSignal.Config); 235 | 236 | long newCS = Controllers.BiosController.CalculateChecksum(bios.ByteArray, textBoxChecksum32, numericUpDownTargetChecksum32); 237 | long offset = newCS - checksumValue; 238 | 239 | //Console.WriteLine(offset); 240 | if (Controllers.BiosController.CorrectCS(bios, checksumValue, offset, textBoxChecksum32, numericUpDownTargetChecksum32, 1) == 1) 241 | { 242 | // Fix non G-SYNC vBIOS that has header. 243 | if (headerRemove.Checked) 244 | BlackScreenFix(); 245 | File.WriteAllBytes(save.FileName, bios.ByteArray); 246 | } 247 | else 248 | MessageBox.Show("Unhandled exception (corrupted string section)! BIOS cannot be saved.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); 249 | } 250 | } 251 | 252 | // Load modded preset values for major mobile models. 253 | private void Preset_Click(object sender, EventArgs e) 254 | { 255 | try 256 | { 257 | numericUpDownTdpBase.Value = processor.BaseTdpPreset.Value; 258 | numericUpDownTdpMax.Value = processor.MaxTdpPreset.Value; 259 | numericUpDownP1Base.Value = processor.Power1Preset.Value; 260 | numericUpDownP1Max.Value = processor.Power1Preset.Value; 261 | numericUpDownP2Base.Value = processor.Power2Preset.Value; 262 | numericUpDownP2Max.Value = processor.Power2Preset.Value; 263 | numericUpDownP3Base.Value = processor.Power3Preset.Value; 264 | numericUpDownP3Max.Value = processor.Power3Preset.Value; 265 | numericUpDownTemp1Base.Value = numericUpDownTemp1Max.Value = numericUpDownTemp1Min.Value = processor.TempPreset.Value; 266 | numericUpDownTemp2Base.Value = numericUpDownTemp2Max.Value = numericUpDownTemp2Min.Value = processor.TempPreset.Value; 267 | 268 | tdpAdjustable.Checked = true; 269 | tdpFixed.Checked = false; 270 | } 271 | catch (Exception) 272 | { 273 | System.Media.SystemSounds.Beep.Play(); 274 | MessageBox.Show("Preset is not supported for this model.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); 275 | } 276 | } 277 | 278 | // Call CorrectCS to correct checksum. Standalone checksum correction. 279 | private void QuickFix_Click(object sender, EventArgs e) 280 | { 281 | if (bios.IndexCollection.CheckSum32Index == -1) 282 | MessageBox.Show("Unhandled exception (corrupted string section)! Checksum cannot be corrected.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); 283 | else if (bios.IndexCollection.CheckSum32Index != 0) 284 | { 285 | long fixCS = (long)numericUpDownTargetChecksum32.Value; 286 | long offset = checksumValue - fixCS; 287 | Console.WriteLine(offset); 288 | if (offset == 0) 289 | MessageBox.Show("Checksum offset is 0. No checksum correction needed.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); 290 | else if (Controllers.BiosController.CorrectCS(bios, checksumValue, offset, textBoxChecksum32, numericUpDownTargetChecksum32, 2) == 1) 291 | { 292 | MessageBox.Show("Offset " + offset + ". Checksum has been corrected.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); 293 | checksumValue = fixCS; 294 | } 295 | else 296 | MessageBox.Show("Unhandled exception (corrupted section/offset too large)! Checksum cannot be corrected.", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error); 297 | } 298 | } 299 | 300 | // Fix black screen issue for some older bios. 301 | private int BlackScreenFix() 302 | { 303 | if (bios.IndexCollection.BlackSreenIndex != 0) 304 | { 305 | byte[] new_bios = new byte[bios.Length() - bios.IndexCollection.BlackSreenIndex]; 306 | int j = bios.IndexCollection.BlackSreenIndex; 307 | 308 | for (int i = 0; i < new_bios.Length; i++) 309 | { 310 | new_bios[i] = bios.ByteArray[j]; 311 | j++; 312 | } 313 | bios.ByteArray = new_bios; 314 | return 1; 315 | } 316 | return -1; 317 | } 318 | 319 | // Experimental check on 8 bit checksum. Need testing to confirm if it works. 320 | private long Is8bitCorrect() 321 | { 322 | int headerSize = 0; 323 | for (int i = 0; i < bios.IndexCollection.BlackSreenIndex; i++) 324 | { 325 | headerSize += bios.ByteArray[i]; 326 | } 327 | long validChecksum = checksumValue - headerSize; 328 | string r = validChecksum.ToString("X2"); 329 | string lastDigits = r.Substring(r.Length - 2); 330 | 331 | if (lastDigits.Equals("00")) 332 | { 333 | textBoxChecksum8.Text = checksum8bit + "=>[" + checksum8bit + "]"; 334 | textBoxChecksum8.BackColor = System.Drawing.Color.LemonChiffon; 335 | return 1; 336 | } 337 | else 338 | { 339 | int ld = Convert.ToInt32(lastDigits, 16); 340 | int bit = Convert.ToInt32(checksum8bit, 16); 341 | string diff = ""; 342 | if (ld <= bit) 343 | diff = (bit - ld).ToString("X2"); 344 | else 345 | diff = (256 - ld + bit).ToString("X2"); 346 | textBoxChecksum8.Text = checksum8bit + "=>[" + diff + "]"; 347 | textBoxChecksum8.BackColor = Color.White; 348 | return -1; 349 | } 350 | } 351 | 352 | // Reset values and indices when new vBIOS is open. 353 | private void InitForm() 354 | { 355 | bios = null; 356 | checksumValue = -1; 357 | textBoxModel.BackColor = Color.LightYellow; 358 | textBoxBiosName.BackColor = Color.LightYellow; 359 | textBoxModel.Text = ""; 360 | textBoxBoard.Text = ""; 361 | textBoxBiosName.Text = ""; 362 | textBoxVersion.Text = ""; 363 | textBoxDate.Text = ""; 364 | numericUpDownTdpBase.Value = 0; 365 | numericUpDownTdpMax.Value = 0; 366 | numericUpDownTemp1Base.Value = 0; 367 | numericUpDownTemp1Max.Value = 0; 368 | numericUpDownTemp1Min.Value = 0; 369 | numericUpDownP1Base.Value = 0; 370 | numericUpDownP1Max.Value = 0; 371 | numericUpDownP2Base.Value = 0; 372 | numericUpDownP2Max.Value = 0; 373 | numericUpDownP3Base.Value = 0; 374 | numericUpDownP3Max.Value = 0; 375 | numericUpDownTemp2Base.Value = 0; 376 | numericUpDownTemp2Max.Value = 0; 377 | numericUpDownTemp2Min.Value = 0; 378 | tdpAdjustable.Checked = false; 379 | tdpFixed.Checked = false; 380 | tempAdjustable.Checked = false; 381 | tempFixed.Checked = false; 382 | headerPreserve.Checked = true; 383 | headerRemove.Checked = false; 384 | } 385 | 386 | // Hex value input box. 387 | private void HexValueTextChanged(object sender, EventArgs e) 388 | { 389 | if (textChanging == false) 390 | { 391 | textChanging = true; 392 | string hexValue = this.textBoxHexValue.Text; 393 | if (hexValue.Length > 0) 394 | { 395 | long decValue = Convert.ToInt64(hexValue, 16); 396 | textBoxDecValue.Text = "" + decValue; 397 | while (hexValue.Length < 8) 398 | { 399 | hexValue = "0" + hexValue; 400 | } 401 | textBoxBigEndian.Text = Models.Helper.Spacing(hexValue); 402 | textBoxLittleEndian.Text = Models.Helper.Spacing(Models.Helper.ReverseTDP(hexValue)); 403 | } 404 | else 405 | { 406 | textBoxDecValue.Text = ""; 407 | textBoxBigEndian.Text = ""; 408 | textBoxLittleEndian.Text = ""; 409 | } 410 | textChanging = false; 411 | } 412 | } 413 | 414 | // Dec value input box. 415 | private void DecValueTextChanged(object sender, EventArgs e) 416 | { 417 | if (textChanging == false) 418 | { 419 | textChanging = true; 420 | string strValue = textBoxDecValue.Text; 421 | if (strValue.Length > 0) 422 | { 423 | long decValue = Convert.ToInt64(strValue); 424 | string hexValue = decValue.ToString("X2"); 425 | while (hexValue.Length < 8) 426 | { 427 | hexValue = "0" + hexValue; 428 | } 429 | this.textBoxHexValue.Text = hexValue; 430 | textBoxBigEndian.Text = Models.Helper.Spacing(hexValue); 431 | textBoxLittleEndian.Text = Models.Helper.Spacing(Models.Helper.ReverseTDP(hexValue)); 432 | } 433 | else 434 | { 435 | textBoxHexValue.Text = ""; 436 | textBoxBigEndian.Text = ""; 437 | textBoxLittleEndian.Text = ""; 438 | } 439 | textChanging = false; 440 | } 441 | } 442 | 443 | // Detect key press for input of base converter. 444 | private void HexValueKeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) 445 | { 446 | // Check for a naughty character in the KeyDown event. 447 | if (System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), @"[^0-9^+^a-f^+^A-F^+^\b^]")) 448 | { 449 | // Stop the character from being entered into the control since it is illegal. 450 | e.Handled = true; 451 | System.Media.SystemSounds.Beep.Play(); 452 | } 453 | } 454 | 455 | // Detect key press for input of base converter. 456 | private void DecValueKeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) 457 | { 458 | // Check for a naughty character in the KeyDown event. 459 | if (System.Text.RegularExpressions.Regex.IsMatch(e.KeyChar.ToString(), @"[^0-9^+^\b^]")) 460 | { 461 | // Stop the character from being entered into the control since it is illegal. 462 | e.Handled = true; 463 | System.Media.SystemSounds.Beep.Play(); 464 | } 465 | } 466 | 467 | // Set texts for starter textbox. 468 | private void ShowStarter() 469 | { 470 | textBoxStarter.Text = "" + bios.ByteArray[0].ToString("X2") + bios.ByteArray[1].ToString("X2"); 471 | } 472 | } 473 | } 474 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/Models.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Generic 6 | 0055AA,0,0 7 | 56474120436F6D70617469626C65,-22,30 8 | Generic 9 | 200D0A00436F70797269676874,14,0 10 | 426F617264,6,5 11 | 50434952,-4,8 12 | 000000000100E8030000,-10,14 13 | 000000000100E8030000,-14,18 14 | 14140014000A0F,-7,11 15 | 02FFFFFFFFFFFF02 16 | 000000001503,-10,14 17 | 000000001503,-14,18 18 | 00000000100A,-10,14 19 | 00000000100A,-14,18 20 | 000000001A0B,-10,14 21 | 000000001A0B,-14,18 22 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,4,-2 23 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,6,-4 24 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,2,0 25 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,10,-6 26 | C8001340FFFFFF7F00020000E0FFA0FF8813,4,-2 27 | C8001340FFFFFF7F00020000E0FFA0FF8813,6,-4 28 | C8001340FFFFFF7F00020000E0FFA0FF8813,2,0 29 | FF00010001000100 30 | F10E00000B006486,5,-4 31 | 504C45415345,0,0 32 | 185000 33 | 215000 34 | 19200 35 | 242000 36 | 137600 37 | 1 38 | 91 39 | 40 | 41 | MX150(Notebook) 42 | 0055AA 43 | 0055AA,0,0 44 | 56474120436F6D70617469626C65,-22,30 45 | GP107 E2904 SKU 1 VGA BIOS 46 | 200D0A00436F70797269676874,14,0 47 | 426F617264,6,5 48 | 50434952,-4,8 49 | 14140014000A0F,-15,19 50 | 14140014000A0F,-11,15 51 | 14140014000A0F,-7,11 52 | 00FFFFFFFFFFFF00 53 | 000000001503,-10,14 54 | 000000001503,-14,18 55 | 00000000100A,-10,14 56 | 00000000100A,-14,18 57 | 000000001A0B,-10,14 58 | 000000001A0B,-14,18 59 | C8001340FFFFFF7F20000000E0FFA0FFC409FF000201,4,-2 60 | C8001340FFFFFF7F20000000E0FFA0FFC409FF000201,6,-4 61 | C8001340FFFFFF7F20000000E0FFA0FFC409FF000201,2,0 62 | C8001340FFFFFF7F20000000E0FFA0FFC409FF000201,10,-6 63 | C8001340FFFFFF7F20000000E0FFA0FFC409000000FF,4,-2 64 | C8001340FFFFFF7F20000000E0FFA0FFC409000000FF,6,-4 65 | C8001340FFFFFF7F20000000E0FFA0FFC409000000FF,2,0 66 | FF00010001000100 67 | F10E00000B006486,5,-4 68 | 504C45415345,0,0 69 | 0 70 | 0 71 | 0 72 | 0 73 | 37300 74 | 1 75 | 94 76 | 77 | 78 | GTX1050(Notebook) 79 | 0055AA 80 | 0055AA,0,0 81 | 56474120436F6D70617469626C65,-22,30 82 | GP107 E2904 SKU 1 VGA BIOS 83 | 200D0A00436F70797269676874,14,0 84 | 426F617264,6,5 85 | 50434952,-4,8 86 | 14140014000A0F,-15,19 87 | 14140014000A0F,-11,15 88 | 14140014000A0F,-7,11 89 | 00FFFFFFFFFFFF00 90 | 000000001503,-10,14 91 | 000000001503,-14,18 92 | 00000000100A,-10,14 93 | 00000000100A,-14,18 94 | 000000001A0B,-10,14 95 | 000000001A0B,-14,18 96 | C8001340FFFFFF7F20000000E0FFA0FFC409FF000201,4,-2 97 | C8001340FFFFFF7F20000000E0FFA0FFC409FF000201,6,-4 98 | C8001340FFFFFF7F20000000E0FFA0FFC409FF000201,2,0 99 | C8001340FFFFFF7F20000000E0FFA0FFC409FF000201,10,-6 100 | C8001340FFFFFF7F20000000E0FFA0FFC409000000FF,4,-2 101 | C8001340FFFFFF7F20000000E0FFA0FFC409000000FF,6,-4 102 | C8001340FFFFFF7F20000000E0FFA0FFC409000000FF,2,0 103 | FF00010001000100 104 | F10E00000B006486,5,-4 105 | 504C45415345,0,0 106 | 35000 107 | 75000 108 | 0 109 | 0 110 | 47200 111 | 1 112 | 94 113 | 114 | 115 | GTX1050Ti(Notebook) 116 | 0055AA 117 | 0055AA,0,0 118 | 56474120436F6D70617469626C65,-22,30 119 | GP107 E2904 SKU 1 VGA BIOS 120 | 200D0A00436F70797269676874,14,0 121 | 426F617264,6,5 122 | 50434952,-4,8 123 | 14140014000A0F,-15,19 124 | 14140014000A0F,-11,15 125 | 14140014000A0F,-7,11 126 | 00FFFFFFFFFFFF00 127 | 000000001503,-10,14 128 | 000000001503,-14,18 129 | 00000000100A,-10,14 130 | 00000000100A,-14,18 131 | 000000001A0B,-10,14 132 | 000000001A0B,-14,18 133 | C8001340FFFFFF7F20000000E0FFA0FFC409FF000201,4,-2 134 | C8001340FFFFFF7F20000000E0FFA0FFC409FF000201,6,-4 135 | C8001340FFFFFF7F20000000E0FFA0FFC409FF000201,2,0 136 | C8001340FFFFFF7F20000000E0FFA0FFC409FF000201,10,-6 137 | C8001340FFFFFF7F20000000E0FFA0FFC409000000FF,4,-2 138 | C8001340FFFFFF7F20000000E0FFA0FFC409000000FF,6,-4 139 | C8001340FFFFFF7F20000000E0FFA0FFC409000000FF,2,0 140 | FF00010001000100 141 | F10E00000B006486,5,-4 142 | 504C45415345,0,0 143 | 35000 144 | 75000 145 | 0 146 | 0 147 | 47200 148 | 1 149 | 94 150 | 151 | 152 | GTX1060(Notebook) 153 | 0055AA 154 | 0055AA,0,0 155 | 56474120436F6D70617469626C65,-22,30 156 | GP106 E2914 SKU 30 VGA BIOS 157 | 200D0A00436F70797269676874,14,0 158 | 426F617264,6,5 159 | 50434952,-4,8 160 | 000000000100E8030000,-10,14 161 | 000000000100E8030000,-14,18 162 | 14140014000A0F,-7,11 163 | 02FFFFFFFFFFFF02 164 | 000000001503,-10,14 165 | 000000001503,-14,18 166 | 00000000100A,-10,14 167 | 00000000100A,-14,18 168 | 000000001A0B,-10,14 169 | 000000001A0B,-14,18 170 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,4,-2 171 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,6,-4 172 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,2,0 173 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,10,-6 174 | C8001340FFFFFF7F00020000E0FFA0FF8813,4,-2 175 | C8001340FFFFFF7F00020000E0FFA0FF8813,6,-4 176 | C8001340FFFFFF7F00020000E0FFA0FF8813,2,0 177 | FF00010001000100 178 | F10E00000B006486,5,-4 179 | 504C45415345,0,0 180 | 160000 181 | 190000 182 | 9700 183 | 0 184 | 76700 185 | 1 186 | 91 187 | 188 | 189 | GTX1060(Notebook) 190 | 0055AA 191 | 0055AA,0,0 192 | 56474120436F6D70617469626C65,-22,30 193 | GP106 E2914 SKU 30 VGA BIOS 194 | 200D0A00436F70797269676874,14,0 195 | 426F617264,6,5 196 | 50434952,-4,8 197 | 000000000100E8030000,-10,14 198 | 000000000100E8030000,-14,18 199 | 14140014000A0F,-7,11 200 | 02FFFFFFFFFFFF02 201 | 000000001503,-10,14 202 | 000000001503,-14,18 203 | 00000000100A,-10,14 204 | 00000000100A,-14,18 205 | 000000001A0B,-10,14 206 | 000000001A0B,-14,18 207 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,4,-2 208 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,6,-4 209 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,2,0 210 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,10,-6 211 | C8001340FFFFFF7F00020000E0FFA0FF8813,4,-2 212 | C8001340FFFFFF7F00020000E0FFA0FF8813,6,-4 213 | C8001340FFFFFF7F00020000E0FFA0FF8813,2,0 214 | FF00010001000100 215 | F10E00000B006486,5,-4 216 | 504C45415345,0,0 217 | 160000 218 | 190000 219 | 9700 220 | 0 221 | 76700 222 | 1 223 | 91 224 | 225 | 226 | GTX1070(Notebook) 227 | 0055AA,0,0 228 | 56474120436F6D70617469626C65,-22,30 229 | GP104 E2914 SKU 10 VGA BIOS 230 | 200D0A00436F70797269676874,14,0 231 | 426F617264,6,5 232 | 50434952,-4,8 233 | 000000000100E8030000,-10,14 234 | 000000000100E8030000,-14,18 235 | 14140014000A0F,-7,11 236 | 02FFFFFFFFFFFF02 237 | 000000001503,-10,14 238 | 000000001503,-14,18 239 | 00000000100A,-10,14 240 | 00000000100A,-14,18 241 | 000000001A0B,-10,14 242 | 000000001A0B,-14,18 243 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,4,-2 244 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,6,-4 245 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,2,0 246 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,10,-6 247 | C8001340FFFFFF7F00020000E0FFA0FF8813,4,-2 248 | C8001340FFFFFF7F00020000E0FFA0FF8813,6,-4 249 | C8001340FFFFFF7F00020000E0FFA0FF8813,2,0 250 | FF00010001000100 251 | F10E00000B006486,5,-4 252 | 504C45415345,0,0 253 | 185000 254 | 215000 255 | 19200 256 | 242000 257 | 137600 258 | 1 259 | 91 260 | 261 | 262 | GTX1070(Notebook) 263 | 0055AA,0,0 264 | 56474120436F6D70617469626C65,-22,30 265 | GP104 E2914 SKU 10 VGA BIOS 266 | 200D0A00436F70797269676874,14,0 267 | 426F617264,6,5 268 | 50434952,-4,8 269 | 000000000100E8030000,-10,14 270 | 000000000100E8030000,-14,18 271 | 14140014000A0F,-7,11 272 | 02FFFFFFFFFFFF02 273 | 000000001503,-10,14 274 | 000000001503,-14,18 275 | 00000000100A,-10,14 276 | 00000000100A,-14,18 277 | 000000001A0B,-10,14 278 | 000000001A0B,-14,18 279 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,4,-2 280 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,6,-4 281 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,2,0 282 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,10,-6 283 | C8001340FFFFFF7F00020000E0FFA0FF8813,4,-2 284 | C8001340FFFFFF7F00020000E0FFA0FF8813,6,-4 285 | C8001340FFFFFF7F00020000E0FFA0FF8813,2,0 286 | FF00010001000100 287 | F10E00000B006486,5,-4 288 | 504C45415345,0,0 289 | 185000 290 | 215000 291 | 19200 292 | 242000 293 | 137600 294 | 1 295 | 91 296 | 297 | 298 | GTX1080(Notebook) 299 | 0055AA 300 | 0055AA,0,0 301 | 56474120436F6D70617469626C65,-22,30 302 | GP104 E2915 SKU 10 VGA BIOS 303 | 200D0A00436F70797269676874,14,0 304 | 426F617264,6,5 305 | 50434952,-4,8 306 | 000000000100E8030000,-10,14 307 | 000000000100E8030000,-14,18 308 | 14140014000A0F,-7,11 309 | 02FFFFFFFFFFFF02 310 | 000000001503,-10,14 311 | 000000001503,-14,18 312 | 00000000100A,-10,14 313 | 00000000100A,-14,18 314 | 000000001A0B,-10,14 315 | 000000001A0B,-14,18 316 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,4,-2 317 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,6,-4 318 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,2,0 319 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,10,-6 320 | C8001340FFFFFF7F00020000E0FFA0FF8813,4,-2 321 | C8001340FFFFFF7F00020000E0FFA0FF8813,6,-4 322 | C8001340FFFFFF7F00020000E0FFA0FF8813,2,0 323 | FF00010001000100 324 | F10E00000B006486,5,-4 325 | 504C45415345,0,0 326 | 225000 327 | 280000 328 | 24200 329 | 242000 330 | 137600 331 | 1 332 | 91 333 | 334 | 335 | P3000(Notebook) 336 | 0055AA 337 | 0055AA,0,0 338 | 56474120436F6D70617469626C65,-22,30 339 | GP104 PG418 SKU 501 VGA BIOS 340 | 200D0A00436F70797269676874,14,0 341 | 426F617264,6,5 342 | 000000000100E8030000,-10,14 343 | 000000000100E8030000,-14,18 344 | 14140014000A0F,-7,11 345 | 02FFFFFFFFFFFF02 346 | 000000001503,-10,14 347 | 000000001503,-14,18 348 | 00000000100A,-10,14 349 | 00000000100A,-14,18 350 | 000000001A0B,-10,14 351 | 000000001A0B,-14,18 352 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,4,-2 353 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,6,-4 354 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,2,0 355 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,10,-6 356 | C8001340FFFFFF7F00020000E0FFA0FF8813,4,-2 357 | C8001340FFFFFF7F00020000E0FFA0FF8813,6,-4 358 | C8001340FFFFFF7F00020000E0FFA0FF8813,2,0 359 | FF00010001000100 360 | F10E00000B006486,5,-4 361 | 504C45415345,0,0 362 | 160000 363 | 190000 364 | 10000 365 | 600000 366 | 76700 367 | 1 368 | 91 369 | 370 | 371 | P4000(Notebook) 372 | 0055AA 373 | 0055AA,0,0 374 | 56474120436F6D70617469626C65,-22,30 375 | GP104 PG418 SKU 502 VGA BIOS 376 | 200D0A00436F70797269676874,14,0 377 | 426F617264,6,5 378 | 000000000100E8030000,-10,14 379 | 000000000100E8030000,-14,18 380 | 14140014000A0F,-7,11 381 | 02FFFFFFFFFFFF02 382 | 000000001503,-10,14 383 | 000000001503,-14,18 384 | 00000000100A,-10,14 385 | 00000000100A,-14,18 386 | 000000001A0B,-10,14 387 | 000000001A0B,-14,18 388 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,4,-2 389 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,6,-4 390 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,2,0 391 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,10,-6 392 | C8001340FFFFFF7F00020000E0FFA0FF8813,4,-2 393 | C8001340FFFFFF7F00020000E0FFA0FF8813,6,-4 394 | C8001340FFFFFF7F00020000E0FFA0FF8813,2,0 395 | FF00010001000100 396 | F10E00000B006486,5,-4 397 | 504C45415345,0,0 398 | 185000 399 | 215000 400 | 19200 401 | 600000 402 | 76700 403 | 1 404 | 91 405 | 406 | 407 | P5000(Notebook) 408 | 0055AA 409 | 0055AA,0,0 410 | 56474120436F6D70617469626C65,-22,30 411 | GP104 PG418 SKU 503 VGA BIOS 412 | 200D0A00436F70797269676874,14,0 413 | 426F617264,6,5 414 | 000000000100E8030000,-10,14 415 | 000000000100E8030000,-14,18 416 | 14140014000A0F,-7,11 417 | 02FFFFFFFFFFFF02 418 | 000000001503,-10,14 419 | 000000001503,-14,18 420 | 00000000100A,-10,14 421 | 00000000100A,-14,18 422 | 000000001A0B,-10,14 423 | 000000001A0B,-14,18 424 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,4,-2 425 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,6,-4 426 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,2,0 427 | C8001340FFFFFF7F00020000E0FFA0FF8813FF0000FF,10,-6 428 | C8001340FFFFFF7F00020000E0FFA0FF8813,4,-2 429 | C8001340FFFFFF7F00020000E0FFA0FF8813,6,-4 430 | C8001340FFFFFF7F00020000E0FFA0FF8813,2,0 431 | FF00010001000100 432 | F10E00000B006486,5,-4 433 | 504C45415345,0,0 434 | 185000 435 | 215000 436 | 19200 437 | 600000 438 | 85400 439 | 1 440 | 91 441 | 442 | 443 | RTX2060(Notebook) 444 | 0055AA,0,0 445 | 56474120436F6D70617469626C65,-22,30 446 | E4914 SKU 30 VGA BIOS 447 | 200D0A00436F70797269676874,14,0 448 | 426F617264,4,5 449 | 000000000100E8030000,-10,14 450 | 000000000100E8030000,-14,18 451 | 14140014000E0F,-7,11 452 | 02FFFFFFFFFFFF02 453 | 000000001503,-10,14 454 | 000000001503,-14,18 455 | 00000000100A,-10,14 456 | 00000000100A,-14,18 457 | 000000001A13,-10,14 458 | 000000001A13,-14,18 459 | C80013C0FFFFFF7F20000000E0FFA0FF8813,4,-2 460 | C80013C0FFFFFF7F20000000E0FFA0FF8813,6,-4 461 | C80013C0FFFFFF7F20000000E0FFA0FF8813,2,0 462 | C80013C0FFFFFF7F20000000E0FFA0FF8813,10,-6 463 | C8001340FFFFFF7F20000000E0FFA0FF8813,4,-2 464 | C8001340FFFFFF7F20000000E0FFA0FF8813,6,-4 465 | C8001340FFFFFF7F20000000E0FFA0FF8813,2,0 466 | 0000010000000100 467 | F10E00000B006486,5,-4 468 | 504C45415345,0,0 469 | 160000 470 | 190000 471 | 15000 472 | 0 473 | 135000 474 | 1 475 | 91 476 | 477 | 478 | RTX2070(Notebook) 479 | 0055AA,0,0 480 | 56474120436F6D70617469626C65,-22,30 481 | E4914 SKU 30 VGA BIOS 482 | 200D0A00436F70797269676874,14,0 483 | 426F617264,4,5 484 | 000000000100E8030000,-10,14 485 | 000000000100E8030000,-14,18 486 | 14140014000E0F,-7,11 487 | 02FFFFFFFFFFFF02 488 | 000000001503,-10,14 489 | 000000001503,-14,18 490 | 00000000100A,-10,14 491 | 00000000100A,-14,18 492 | 000000001A13,-10,14 493 | 000000001A13,-14,18 494 | C80013C0FFFFFF7F20000000E0FFA0FF8813,4,-2 495 | C80013C0FFFFFF7F20000000E0FFA0FF8813,6,-4 496 | C80013C0FFFFFF7F20000000E0FFA0FF8813,2,0 497 | C80013C0FFFFFF7F20000000E0FFA0FF8813,10,-6 498 | C8001340FFFFFF7F20000000E0FFA0FF8813,4,-2 499 | C8001340FFFFFF7F20000000E0FFA0FF8813,6,-4 500 | C8001340FFFFFF7F20000000E0FFA0FF8813,2,0 501 | 0000010000000100 502 | F10E00000B006486,5,-4 503 | 504C45415345,0,0 504 | 185000 505 | 215000 506 | 19200 507 | 0 508 | 161670 509 | 1 510 | 91 511 | 512 | 513 | RTX2080(Notebook) 514 | 0055AA,0,0 515 | 56474120436F6D70617469626C65,-22,30 516 | E4914 SKU 10 VGA BIOS 517 | 200D0A00436F70797269676874,14,0 518 | 426F617264,4,5 519 | 000000000100E8030000,-10,14 520 | 000000000100E8030000,-14,18 521 | 14140014000E0F,-7,11 522 | 02FFFFFFFFFFFF02 523 | 000000001503,-10,14 524 | 000000001503,-14,18 525 | 00000000100A,-10,14 526 | 00000000100A,-14,18 527 | 000000001A13,-10,14 528 | 000000001A13,-14,18 529 | C80013C0FFFFFF7F20000000E0FFA0FF8813,4,-2 530 | C80013C0FFFFFF7F20000000E0FFA0FF8813,6,-4 531 | C80013C0FFFFFF7F20000000E0FFA0FF8813,2,0 532 | C80013C0FFFFFF7F20000000E0FFA0FF8813,10,-6 533 | C8001340FFFFFF7F20000000E0FFA0FF8813,4,-2 534 | C8001340FFFFFF7F20000000E0FFA0FF8813,6,-4 535 | C8001340FFFFFF7F20000000E0FFA0FF8813,2,0 536 | 0000010000000100 537 | F10E00000B006486,5,-4 538 | 504C45415345,0,0 539 | 225000 540 | 280000 541 | 24200 542 | 0 543 | 161670 544 | 1 545 | 91 546 | 547 | 548 | -------------------------------------------------------------------------------- /PascalTDPTweaker/pascaltdptweaker/App/MainForm.resx: -------------------------------------------------------------------------------- 1 | 2 | 3 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | text/microsoft-resx 110 | 111 | 112 | 2.0 113 | 114 | 115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 116 | 117 | 118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 119 | 120 | 121 | 122 | 123 | AAABAAUAEBAAAAEAIABoBAAAVgAAABgYAAABACAAiAkAAL4EAAAgIAAAAQAgAKgQAABGDgAAMDAAAAEA 124 | IACoJQAA7h4AADs7AAABACAAZDgAAJZEAAAoAAAAEAAAACAAAAABACAAAAAAAAAEAAATAQAAEwEAAAAA 125 | AAAAAAAAAuv+/wD0/v8A8/7/APX+/wHx/v8A8v7/APH+/wDy/v8A8v7/APL+/wDx/v8A8f7/APL+/wDy 126 | /v8A8/7/A+r9/xin+f8F4v3/A+f+/wXl/v8A9/7/AfD+/wD1//8B8/7/AfH+/wHy/v8A9v//APX+/wHx 127 | /v8B8f7/AfH+/wD1/v8fc/X/FLP5/xTA+v8dk/f/CdX9/wD2//8K0/z/AvD+/wD1//8A8/7/CNn8/wfc 128 | /f8A+///DMv8/xub9/8Ts/n/KiLu/yJB8f8Sc/X/H5z4/x6Q9/8J0fz/F6f5/xmf+P8F4/3/APz//w7D 129 | +/8gi/f/CdT8/w3I+/8gh/b/HZX3/zAp7//Eu/n/Zl7z/xJN8f8fm/f/HZb3/xuW+P8fj/b/G5v4/wLs 130 | /v8F5P3/HpD3/xyV9/8Ypvj/H574/yCL9/8WDOz/jYv2//////+GePT/FTHv/yCR9v8dmPj/HZH3/x+Q 131 | 9v8Sufr/CNf8/x6Z9/8gYfP/JC3v/xdD8f8bGO7/b3D0/19Z8v///////////1tO8f8XF+3/II/3/yBm 132 | 9P8iRvH/HJz4/xep+f8el/f/H3L0/yMQ7f9wY/P/Z2Hy/7e4+f/Ewvr//v/+/+jo/f/d3/z/JhXt/yA7 133 | 8P8hZ/T/Jgzt/yc08P8ggPb/HKD4/yJ39f8YC+3/goD2/6up+f/w7/3/5OP8/+vu/f9WavP//////6in 134 | 9/8XDuz/JzDw/x8Z7v8UBO3/Hx3u/yCQ9/8ievX/FQXs/21p9P//////+Pj+/+7u/f//////09T7//n4 135 | /v//////cW3z/wgA7P9qZfP/r7H4/zYj7v8YSPL/J1nz/xQC7P+cmvf///////////////////////// 136 | ///9/f///////8G/+v8xKu//yMb6//f3/v/u7/3/SkLw/xwS7v8oHu7/iov1/1B59f///////v7///// 137 | ///9/f/////////////19f7/rKn4//Hx/v/19f7//////8TD+v8SCez/RT3w/7y/+v8DaPT///////// 138 | //////////////7+////////6+r9/4iD9f///////Pz///////+7ufr/ODHv/21o8///////bmz0//// 139 | //////////////////////////////v8/v/m5v3///////79//////7/19b8/46K9v+ppvj///////n3 140 | /v/////////////////////////////////////////////////+/v///////+Hg/P+npPj/vrz6//n6 141 | /v/9/f////////////////////////////////////////7+///////////////////5+f7/7e39/6+t 142 | +P/7/P7//////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 143 | AAAAAAAAAAAAAAAAAAAoAAAAGAAAADAAAAABACAAAAAAAAAJAAATAQAAEwEAAAAAAAAAAAAAAPT//wHz 144 | //8A8f7/APL+/wDx/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy 145 | /v8A8v7/APL+/wDy/v8A8v7/APL+/wD0/v8G3v3/D8D7/wHu/v8B8v7/AfL+/wD1/v8B8/7/AfD+/wHy 146 | /v8A8v7/APH+/wDy/v8A8v7/APL+/wHy/v8A8f//APH+/wHx/v8B8v7/AfL+/wHy/v8B8v7/AfL+/wHy 147 | /v8A8/7/H473/xej+P8C7/7/Auz+/wvL/P8C7f7/APX+/wHx/v8A8f7/APX//wHy/v8B8f7/APL+/wHy 148 | /v8B8v7/AfT+/wHz/v8B8f7/AvH+/wHx/v8B8v//APT+/wDz/v8A9P7/G5b3/x+V9/8Pw/v/CNb8/yCK 149 | 9f8Xqfn/B979/wD0//8B8P7/B9z9/wLy//8B9f//APH+/wDy//8B8v7/A+r+/wLr/v8A9P//AfL+/wDz 150 | //8Qvfv/GKX4/xen+P8Lzfv/Iy7w/x1g8/8emvf/F7X5/x2R9/8ej/b/HZT3/wnV/f8A+/7/Fa35/xSx 151 | +f8F4v3/APT//wHx/v8A9f7/C877/xyW+P8Ruvr/A+r+/wD4//8Wq/n/IIr2/x2Q9v8clPf/JBft/ywc 152 | 7v8YIe7/Glvz/yGc+P8bmvf/HpD2/xyU9/8H2vz/E7T5/yGI9/8clff/CdH7/wD2//8B9P7/BOT9/xyX 153 | +P8gi/b/Fqr5/wDw//8Usvn/Ho/2/x2W9/8dk/f/Fg7u/5SS9f/Kxfv/Oyvv/xEr7/8hiPb/HJ/4/x6Q 154 | 9/8clff/G5n4/xyV9/8dkvf/HpL3/wrR/P8A9f7/APP+/xWs+f8dkff/HpH3/xS0+f8Xqvn/HpD2/xya 155 | 9/8dnPj/HBPt/0E68P/9/f//8fL+/3xu8/8UFe3/IXX1/x2b9/8elPf/HZL3/x2U9/8cl/f/HpH2/xua 156 | +P8D5v3/APf//xaq+f8fkff/HY32/yBr9P8eefX/H6D4/yF29f8lP/H/KiDu/xMK7f+mo/j///////// 157 | //+HgfX/Ggfs/yNb8v8cmPf/HJb3/x2U+P8ejfb/HZj3/x+P9v8Usvr/Auz+/xqd+P8dmff/HnT1/yQP 158 | 7f8lHe7/GSfv/xcQ7f8cCez/s7D5/woB7P+dmvf///////b2/f//////UEvx/xsK7f8lN+//HYv3/xyf 159 | +P8iR/H/IUrx/x2c+P8cm/j/D7/7/x6T9/8dlPf/HpT3/yMu7/8kF+3/Ukfx/2Jb8v9MSPD/vs77/0tC 160 | 8f+XlPf///////r5/v//////2dj7/yEd7f8kEu3/Izzw/xyl+P8iSPH/JQ3t/yM48P8ehPb/HZj3/x2T 161 | 9/8dlPf/HZX3/yYx7/8UB+3/pKL4/6Cd9/+Wk/f/xMD5/9HP+//f3/z//////+Ti/P/Y1vv//////5qW 162 | 9v8NCez/KRft/yBu9f8hVvP/JRLt/yYa7v8lGu7/H2f0/xye+P8dk/f/HZP3/yUu7/8eEe7/PTbw/8vK 163 | +/+Ae/X//////+Lh/P/t7v3//////2+A9f9JY/T///////b3/v9eW/H/Gg3s/yYu8P8iOfD/JRbu/x4Y 164 | 7v8nHe//Jhft/yBm9P8cl/f/HZX3/yMv8P8gE+3/Mivv//Pz/v/u7v3//////728+f/d3fz//////7a/ 165 | +v9mc/P////////////s6/3/MSnu/yAV7f8lGe//JB3u/z028P8YEe3/HBPu/ycc7/8ekvf/Hof2/yUg 166 | 7v8dFO3/Qz3w//n7/v/+/////////////////////v/////+///p5/3///////z7////////urj5/xkT 167 | 7f8fF+7/RD3v//Hx/v/Qz/v/U07x/xYG7f8hXPP/IGHz/ykW7v8TDOz/gX31///////19P7///////// 168 | //////////////3+///+//////////39////////4uH9/1ZP8v8NBOz/qqb4//f4/v/q6v3////+/5GN 169 | 9f8aDu3/Jx7v/ycf7v8TC+z/nJf2/3l+9f9jYPT////////////////////////////+/v////////39 170 | ////////29r8/7Ow+f9PSPH/9fX+/+bl/P/e3fz//v/+//////9QSvD/GhLu/yYe7v8mIe//y7r5/ylp 171 | 9P8IkPb////////////////////////////////////////////+//////////b2/v+koPf/+vr+//// 172 | ////////+vv+//////+9uvn/HBPt/x0U7f9OSfH//////1+C9v8Hd/X///////////////////////// 173 | ///////////////////7+////////4yI9f98d/X///////v7///+/v///v////3+/v+ysPn/T0nx/woB 174 | 7P9taPL//////5mW9/8dIO/////////////////////////////////////////////9/f///////7q4 175 | +f+bmPf///////38///////////+//P0/v9hXPT/o6D3/yUe7f/f3/z///////n5/v/Dvvr///////// 176 | /////////////////////////////////////////v/+//7+/v/9/f///////////////////v7+//// 177 | /f/v8P7/v7z5/3Jt8//Ew/r///////z8/v/+/v////////////////////////////////////////// 178 | //////////////7+///+/v///////////////////f3////////Z2Pz/d3T1/9rZ/P+Mifb///////39 179 | ///9/f////////////////////////////////////////////////////////////////////////// 180 | /////////v7////////s6/z/oZ73/+rq/f+9vPn///////39//////////////////////////////// 181 | /////////////////////////////////////////////////////////v////7//v/9/f///////9fW 182 | +/93cvT///////39////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 183 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAACAA 184 | AABAAAAAAQAgAAAAAAAAEAAAEwEAABMBAAAAAAAAAAAAAAH1//8C8f7/APH//wDy/v8A8v7/APL+/wDy 185 | /v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy 186 | /v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDz/v8Lz/z/B9j9/wD1/v8C8/7/APH+/wHy 187 | /v8A8v7/AfH+/wHy/v8A8v7/APL+/wDy/v8A8v7/APL+/wHy/v8A8v7/APL+/wDy/v8A8v7/AfL+/wDy 188 | /v8A8v7/APL+/wHy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8B8v7/AfH+/wDz/v8dl/j/DMj7/wPo 189 | /f8B8v7/AfL+/wHv/v8A9P7/AfL+/wHw/v8B8f7/AfL+/wDy/v8A8f//AfL//wDy/v8B8v7/APL+/wHy 190 | /v8C8v//APH//wDy/v8A8v7/AfL+/wHy/v8B8v7/AfL+/wHz/v8C8f7/AfH+/wHx/v8B8f7/AfH+/x6S 191 | 9/8gifb/EbX6/wH1/v8A8/7/DcX7/wvO/f8B8P7/APP+/wHx/v8B8v7/APH+/wD0/v8B8v7/AfH+/wHy 192 | //8A8v7/APL+/wHy/v8B8v7/AfL+/wLx//8B8P3/AfH+/wLy/v8B8v7/APH+/wD0//8A9f//APX+/wD0 193 | /v8A8v7/G6D4/xuY9/8dlPf/CdT8/wTl/f8am/f/IIv2/xK7/P8E5/7/APH+/wHx//8B8f7/BeT+/wLv 194 | /v8B8///AvH+/wDy/v8A8v//APL//wHy/v8B8v//APf//wD1/v8A8v7/APL+/wHy/v8C6/7/ErX6/xWt 195 | +f8Vrff/FLL5/wPk/f8hTvP/HYT1/x6Z9v8YpPn/CtH8/x2R9/8clfb/II/3/xub+P8H2/7/AfP//wD3 196 | /f8St/v/EL37/wLu/f8B9f//APH+/wDy//8B8f7/APT+/wjW/P8Tsvr/EL/7/wTm/v8B8f7/APP+/wHt 197 | /v8bmPj/II32/x6P9v8ejfb/F6T4/yUT7f8iG+7/IEzy/yGI9f8coPf/Hpj3/xyR9/8clvf/HpD3/xuZ 198 | +P8H2vz/APr+/xK5+v8hifb/GKT4/wzI+/8B7/7/AfP+/wHx/v8B8v7/A+j+/x2U+P8fjfb/HJn4/wnU 199 | /P8A9P//Auz9/xqe+P8ek/f/HJX3/xyW9/8dkff/Ih3t/ykf7v8iEe3/Fg7t/x5I8v8jiff/G5/4/xyS 200 | 9/8elvb/HpH2/xmY9/8F4f3/EL36/x+N9/8ekvj/Hoz2/w6/+v8B8f7/AvL//wLz/v8A8f7/FLL6/x6S 201 | +P8dkvb/HZX3/wjW/P8B8P//Gp/3/x2R9v8dlff/HpT2/x2T9/8bE+//S0Xv/+fp/f+OiPf/Lhvt/xQY 202 | 7v8jcvX/G5f2/x2U9/8dk/j/H5H2/xuY9/8am/j/HZP3/xyV9/8clff/II72/xC++/8B7/7/AvD+/wD2 203 | //8I0vz/H472/xuW9/8dkff/G5b2/wzG+/8bm/f/HpH3/x2T9/8cmPf/HZv4/ygf7/8ZEO3/vrv5//// 204 | ///Ozvv/TUbx/xwG7P8iT/L/HZ35/xyY9/8dk/b/HZL4/x2S9/8clPf/HZT2/x2U9/8elfj/IYz3/wvL 205 | +/8A9v7/APb//wvN+/8fjvj/HJX3/x2W9v8dnPf/HZf2/xya+P8dmPf/HJ33/x6F9v8gdPX/Jx7t/xoT 206 | 7P9PSfH//v7+//v7/v//////g4H1/xEE6v8lNvD/H3z2/xye9/8ek/f/HZX3/x6U+P8dlPf/HZb3/xyV 207 | 9v8fkvf/GKH4/wXf/f8A+P//CtH8/x+O9v8dmPj/Hoz2/yFC8f8jPPD/IFXx/x+I9/8fefX/JCPv/yYT 208 | 7f8lHu3/Jh3v/xgP7f/FxPr///////f3/f//////hIL0/x0M7f8nI+3/H3f1/xuY9/8blPb/HZP4/x2V 209 | 9/8eivb/Hpb4/xyX9v8givb/FLT6/wDw/v8VsPn/Ho/3/xuY9v8di/b/Ixzu/yYS7P8lFu7/IBXt/yIT 210 | 7v8dE+7/JR7u/8vJ+v8nHe7/GBDt/8nI+///////+vr+//v7/f//////Qj3w/xgP7f8oF+7/IEXw/xyZ 211 | +P8dk/j/HZn4/yMv8P8hS/D/HKD3/x2Y+P8ek/f/B9v9/xmg+P8ekfj/HZL3/x6e+P8hWPL/JBTt/yQg 212 | 7f8yK+7/Lynv/0E67/8fF+3/1fH+/3Ns9P8CAOv/xsT6///////7/P7/+fn+///////V1Pr/KCLu/yEb 213 | 7v8lEu3/IUXx/xuZ9/8dmPj/IzPv/yUP7f8hR/L/HoL2/x2f+P8cmPf/HZX5/x2U9f8dkfj/HZ73/yFX 214 | 8v8nFe3/GBHu/56Z+P/n5vz/mZX2/7m4+f+Hjvb/29j8/ygf7v/f3/z///////38/v//////+/z+//// 215 | //97dvX/FxDr/yYi7/8lFe3/IHf2/xye+P8kMfD/JRnu/yQT7f8lI+//H2r1/x2V9v8dlPj/HZP3/x6R 216 | +P8bnvj/IVjy/ycU7v8bFe7/Qzrw/+Df/P8jG+//n5v4/66o9///////q6j4///////+/v7/+/v+/8K7 217 | +f/a2Pv///////////9NR/H/FQ/t/ygf7v8kIe//Hpb3/yI38f8lFe3/Ix/v/yQb7v8mDu3/IUjy/x2b 218 | +P8clPf/HZH3/x2e+P8hVvP/JBLs/yoj8P8QB+3/xcb6/8zK+/+Df/X////+//z8/v/u7v3//f7///// 219 | ///w6fz/CCzw/3F99v///////////8fF+v8kHe3/Ih3t/yYW7v8gUfL/JDXv/yQV7f8nH+7/Jh/v/yUg 220 | 8P8lEu3/IUfx/x2Z+f8ckfb/HJ/3/yBZ8v8kEe7/JiHu/xkQ7f/Fwvr//////+Dg+//+//7/9/j+/3Z1 221 | 9P////////////jv/v8fTvH/c4P1///////3+P7//////769+f8WDez/Jh7u/yUW7v8jGu//Jh/v/xgQ 222 | 7f8YEO3/Ixnt/yUh7v8lEe3/IU3y/xyY9/8dmPj/IlDx/yMT7v8pI+7/Dgbs/7m4+f//////+/v+//// 223 | ///7/P//zMv6///////7/P3//////767+f+FgfX///////v7/v/8/f7//v/+/2Zf8v8aEu3/JyDu/ycg 224 | 7/8VDez/dXDz/2xm9P8kHe3/HRbu/yYY7/8kMPD/Hp74/x2P9v8kH+7/Jh3t/x8W7v88Ne//6er9//// 225 | ///8/P7//////////////////////////////////v7///r6//////////////7+////////9fX+/zAr 226 | 7v8fFu3/Jh3u/yYf7P/Z2fz///////j6/v9xa/L/FQ7s/yIU7v8hWPP/HnD0/yUY7v8oH+//Fw/t/1tW 227 | 8v//////+fn+//z+//////////////39///////////////////9/f///v7///////////////////// 228 | ///7/P7/j4z3/ygf7/8SC+z/eXL0///////09f3//f3+//39/v/KyPn/LSbu/yIX7/8mHO//JRru/yYf 229 | 7v8XDuz/YFrx/+rs/f8iFe7/opb4//////////////////////////////////////////////////// 230 | ///+/v///////9/f/P+OiPb/aWTz/xwT7v/i4Pz/8PD9/7i1+f/My/v////+//////+3tvn/Fg/s/ycg 231 | 7v8kHO7/Jx/t/xMK7f/Iy/r/fWrz/wBt8/8vXPP///////////////////////////////////////// 232 | ////////////////////////9vb+//Ly/v++uvr/V1Hx///////7/P7//v/+/////v/9/v7/+vz+//// 233 | //9NR/D/HBLu/ygf7/8kGu7/KSLv/+zw/f+BZfP/AqX5/xCX9v////////////////////////////// 234 | ///////////////////////////////////+/////////+Df+/+Zlff///////3+/v/9/v///v7///7/ 235 | ///7/P7////+/768+v8ZD+3/KiPu/xQM6/9oY/P//////9XH+v8SX/T/IHP1//////////////////// 236 | /////////////////////////////////////////////////v////3/MSnv/7u5+f///////f3///// 237 | /////////v////3+/v/+/v7/uLf5/0hC8f8cFez/GhLt/3Rv8v//////1tT8/y4u7/8ZJ+////////// 238 | /////////////////////////////////////////////////////////v/+//////8xKu//kY32//// 239 | ///8/P/////////////8/P7//////8C/+v83L/D/vbv5/x4V7f8bE+3/3t/8////////////2df8/2JY 240 | 8//////////////////////////////////////////////////////////////////8/f7//////8XD 241 | +f/d3Pz///////7+//////////////39/v////7/3t/9/2FZ8//o5/z/HRbs/6il9////////Pz+//// 242 | /v/8/P7/+Pj///////////////////////////////////////////////////////////////////7/ 243 | /v/+//7///////z9/v////////////////////////////3+/f////7/8fH+//Py/v9eV/L/k473/6+t 244 | +f///////P3////////8/f////////////////////////////////////////////////////////// 245 | ///////////////////9/f///v7////////////////////////+/////P3+/////v/c3Pz/WVXz//v7 246 | //+Ig/X/amf0///////7+/7///////////////////////////////////////////////////////// 247 | ///////////////////////////////////////////////////////////////////8/f///////+Df 248 | +/8rJu3/+/z//9fW+//p6P3///////3+//////////////////////////////////////////////// 249 | /////////////////////////////////////////////////////////////////////////v////3/ 250 | /v/9/f///////9PT+///////mpj3/3x49P//////+/z+//////////////////////////////////// 251 | //////////////////////////////////////////////////////////////////////////////// 252 | /////////v/+///+///+/v//+vr+//////+YlPf/jon1///////7/P////////////8AAAAAAAAAAAAA 253 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 254 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgA 255 | AAAwAAAAYAAAAAEAIAAAAAAAACQAABMBAAATAQAAAAAAAAAAAAAA8f7/AvP+/wHy/v8A8v7/APH//wDy 256 | /v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy 257 | /v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy 258 | /v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8B8/7/Auz9/xar+v8A8v//Au7+/wHz 259 | /v8A8v//APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy 260 | /v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy 261 | /v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8B8v7/A+z+/wHs 262 | /v8QwPz/AOv+/wHv/f8C8/7/AvL+/wDy/v8B8f//AfP9/wDx/v8A8v7/AfL+/wHy/v8B8v3/APL9/wHx 263 | /v8B8v7/APL+/wDy/v8A8v7/AfH+/wHy/v8A8v7/AfH//wDy/v8A8v7/APL+/wDy/v8B8v//APL//wDx 264 | //8A8v//APL//wHx//8B8f7/APH+/wDy/v8A8v3/APL+/wDy/v8A8v7/AfL+/wHy/v8A8v//APL//wHy 265 | /f8B8v7/APP+/wHy/v8fjvf/EL77/wLs//8C6f3/AfH+/wLx//8C8f//APT9/wHy//8B8P//AvL9/wDx 266 | //8C8f7/APL9/wHx/v8B8f3/AfL+/wDy/f8A8v7/AfL//wHz/v8A8v//AfP9/wHx/v8A8v7/APP+/wHy 267 | /v8C8v//APL//wDx//8A8v7/APL+/wDx/v8B8/7/APH//wHy//8B8v7/APL+/wLy//8B8f7/AvL+/wHy 268 | /v8A8v7/AvP+/wDy//8C8f7/AfL+/wHx/v8fk/b/HpT5/xyV9v8Lyfv/A+n+/wLy/f8A9P//BOj//wXc 269 | /f8C7f//AfT9/wHw/v8A8f7/APD+/wHy/f8B8v7/APL//wDx//8A8f//AfL+/wDx//8A8v7/APP9/wHy 270 | //8A8v3/APL+/wDy/v8C8v7/AfL//wLx/v8A8v7/AfL//wDz/v8A8/7/AfH+/wDy/v8C8v//A/L+/wHx 271 | //8A8/7/AvP//wLw//8B8P7/AfH+/wDx/f8A8P7/APL9/wHy/v8dlff/HpT4/x2S9v8dkff/BOT+/wPw 272 | /v8C8f7/AO79/xmg+P8Nxvz/CNr+/wDv/f8C7/7/APL9/wLy/v8A8///APH9/wDy/v8A8f7/APL9/wLy 273 | //8C8v3/AvH//wH0//8A8/7/APL+/wHy/v8B8v7/AfL+/wDy/f8B8v3/BPL//wHx/v8C8P3/APH+/wHx 274 | //8C8v7/AfH+/wHy/v8A8f//AfD//wD2//8A9v//APX+/wD1/v8A9v//Ae/9/wDx/f8clfj/GpT0/xyU 275 | 9v8dkvf/Eb/6/wHt/f8E6f3/Csn7/xuW9/8hifb/GZz4/wjd/v8B8/7/Auv9/wDy/v8B8P//AfL//wDw 276 | /v8D7v7/AfD//wPv/v8B8v//AfD+/wLy/v8A8v7/APL+/wHz//8A8v//APP+/wHz/v8B8v//APP//wLy 277 | /v8B8f3/APL+/wHw/v8A8/7/APL//wLw/v8B8f//CNf8/xC4+v8Rvfr/Ebv4/w68+f8Ttvv/B9r8/wDv 278 | /v8emfn/Gpn4/x2W+P8fk/b/H4z2/xC6/P8A8v//Gaf5/x+N9f8bmfX/IY73/xye+v8Ur/r/BeX+/wHt 279 | /v8C9P7/AvH+/wD1/v8Mzfz/D8L9/wHv/v8B8f7/BPL//wDy//8A8f//APL+/wDy/v8A8v//APP+/wHx 280 | //8C6v3/Auv9/wDs/v8C6///A+z9/wHz//8B8v//AfH9/wDy/f8A9v//DMj8/yKF9f8fj/f/Ho32/yGO 281 | 9P8hivX/GJ/3/wXd/P8jI+//Ik7z/x2V9f8clvb/HZf3/xqa9/8E5P3/Fa34/x2P9/8ck/f/HJT3/x6S 282 | 9/8fjvT/GKb6/wTm/v8B7f//APH+/wD3/f8Kzfz/IIf4/wvO+/8E5v3/Aez9/wH0/v8B8P7/APL+/wDy 283 | //8B8f7/APL+/wHy//8G3/z/GZ/4/xqe+P8bmvj/CNT9/wPl/f8B7P3/AfH+/wDy/v8A9f//C8v7/x6N 284 | +P8cmfb/HJb3/xuV9v8bl/n/HY/3/xub+P8lFu7/JBru/yIU7f8fYfT/H4P1/xyh+P8blvX/HpH2/x6U 285 | 9/8ck/j/HJT2/x6V+P8blvj/HY33/xmm+v8E5f3/Auz+/wD3/P8Lzvz/IYv3/x6T9v8cmfb/Cc/9/wfb 286 | /f8A7v7/AfL//wDz/v8C8f7/AfL+/wHy/f8B7f7/C879/yGK+P8dlPb/HJH2/x2d+f8F3/3/Au3+/wHw 287 | //8A9v7/Csv8/x+M9v8elvf/HZT2/xyT9v8clff/HJX3/xyT+P8jHO7/Jhvt/yYd8P8oFe7/Jh/u/yBg 288 | 8v8dgfX/Hqf5/x+S9v8dlPj/GpX3/x2U9f8dlPb/H5b3/x6O9f8Vp/j/A+T9/wDw/v8MzPv/Ho32/xyW 289 | 9/8elPn/IYr1/xif9f8E4P3/A+3+/wHy/f8C8v7/AfL+/wLw//8A+P//Cs37/yGH9/8el/b/G5X3/yCQ 290 | 9v8anfb/BeD+/wLr//8A9f7/D8v7/yCN9v8blvf/HZT3/x6U+P8elPf/HZX2/xyU9v8iHO3/JBzu/x4U 291 | 7P8RDev/GA/v/yQI7P8iLfH/I0v0/x6Q+P8cmPf/G5P3/x6T+P8dlff/HpT2/x2W+P8bjPj/F6b3/wLr 292 | /v8I1Pz/II32/x2V+f8bk/j/HZf3/xuO+P8Znvf/A+D8/wTt/v8C8v//AvX9/wHy/v8A8f7/BuD8/xar 293 | +/8fkPn/GpX4/xyW9v8fjvj/GZ33/wbf/f8B7///C8r7/x6N9f8blvj/HpT1/xuU+P8clfb/H5T2/x2U 294 | +v8pIO//Ewrt/4SC8//l5v3/vrv6/yMe7/8jF+3/Ig7s/yc67/8fkff/HpX3/xmW9f8ck/b/HZX3/x6T 295 | +f8elvf/Ho/2/xqh+f8ZoPj/HpP3/x2T9/8dlPf/HJP4/x2V9/8ekPb/GZ73/wbf/v8B7v//AvL//wHy 296 | /v8D8P7/APb+/w3E/P8gjPX/HZf2/xuT9v8clvj/HY/3/xid9v8E5P3/DMz8/yGO9P8elvf/HJT3/x6V 297 | 9v8bk/f/IJL4/xuR9/8lHPL/Jh7u/x8V7P/Tz/z///////////+npPf/EAzr/xUK7v8pH+//H0Xw/xye 298 | +P8ek/j/IJD4/xyU9v8elfb/HpX2/xyQ9/8ekPf/GZX4/x2V9f8dlPb/GpT1/x2T+P8elvf/Io/4/xqf 299 | +P8F3Pz/Auz9/wHz/v8C8P7/APb//w6/+P8fjfb/HJX6/xyT9v8clff/HZP3/x6N9/8dk/b/HJP4/x2S 300 | +P8blfj/H5T3/x6S+P8bl/b/HJ74/x6d+P8mHOz/Jx/x/xQM7P+NivX//Pz///z8////////npn4/1xY 301 | 8P8XD+z/LBbu/x9E8P8cnfn/HZ/4/xuS9f8elPf/HJT2/x2U+f8elfb/HJX1/x2T+f8dlPf/HpX2/x2U 302 | 9/8dlff/HZb3/yGM9v8UrPr/APX+/wHv/v8B8v7/AfX//w6/+v8ijff/G5b4/xuW9v8dk/b/HJv4/xyj 303 | 9/8cn/b/G6D2/xyZ9/8fkPb/HJH1/x2a9/8eivf/ImX1/x9s9P8mHe7/JBvr/yYe7v8SCOz/7Ov9//// 304 | ///7/P7///////////96dvT/Dgns/ycZ6/8iQPH/H2P0/x2f+P8dkff/HpT2/x6U+P8dlPn/H5P4/x6T 305 | +f8dlfb/HZT4/x2T9v8clPf/HJX1/x+S+P8anPf/B9X9/wHt/v8B7/7/APf//w+/+v8fjfb/HJb4/x6T 306 | +P8em/f/H27z/yBN8/8iVfX/IEvx/x159P8dpfr/HaD4/xyT9/8jLvD/KAvt/yUT7P8hFu7/Jx/t/yIb 307 | 7f8iG+3/amb0///////9/f7/+vn8//f5/f//////fnf1/w8J6v8qF+3/JxDu/yFd8f8boff/HZb3/x6S 308 | 9P8clvT/Gpb2/x6U+f8dlPf/HJX2/x2Y9/8dlPf/HZT1/x6V+P8dkfX/HJb4/wrW/P8C8f7/Ae3//w7A 309 | /P8gjfb/HJX1/x2R+P8cofj/IUXy/yMF7P8nFuv/Jgzq/yMm8P8jPvH/Izzx/yUv8P8iFO3/IiDt/yYf 310 | 7v8yK+7/GxHt/ygf8P8dFez/Minw/////v/9/f///P79//39/v/49////////3x48/8dGe//JSLu/yQQ 311 | 6/8iXvP/G5D2/xuW+P8bkff/HZP5/x2V9/8dlfj/HJL3/yCG9f8gk/n/HJX4/xyT9f8dl/j/IIv1/w7G 312 | /P8A6/7/Cs/7/yCS9v8elPf/GpX4/xyT9P8dn/f/Hljy/yMX7v8lH+7/JCHw/yUZ7v8mGev/Kxju/yob 313 | 7v8qJO//LCDw/yMd7P/n5/3/Rj3u/yYa8P8dFu3/PTjx///////+/v7//f7+//7+/v/9/f3/+Pr9//// 314 | //8/NfD/HRTt/yQf7f8lGO//JRbs/x5x8/8dn/j/HZD5/x+T+f8cmff/IH73/yMI7P8hT/H/HZ/2/xyS 315 | 9/8ekfj/HZb3/yCP9v8E6P7/Btj8/x+L9f8el/j/G5T4/x6U9/8ckfj/H5/6/yE47v8jFO//JBvs/yYf 316 | 7f8RC+v/DAbs/w4I7f8IAez/DwTs/yUd7v//////p6X4/wEA6v8lHez/PTXw///////8/f7//P/+//7/ 317 | /v/8/v7//fz9//////+dmvf/EArq/yUc8P8lHO7/JBzt/yIV7f8ecfP/GaL3/x6Q9/8cm/f/H3v2/yUV 318 | 7f8kEu3/IEvx/x2h+P8cm/j/HZP1/x6S+P8Rvvv/Erb7/x+R+P8clff/H5X2/x6S+f8ekvT/H533/yM2 319 | 7/8kF+v/JyDt/xgP7v+AePX/k5H2/42I9f+jn/b/mJT2/yEa7P+AyPz/+vX//1lW8v8PCOz/QTXw//// 320 | ///7/f7//v/+///////+/v////7///79/v//////oZ/2/xgR7P8nIO7/IRzt/yQc7v8lFe7/IG71/xqa 321 | 9v8dl/j/H3z1/yUS7P8lIO//JBXu/yM58f8hYPT/HKH3/x6T+f8fjPT/H473/x2V+f8dlPT/HJT3/x2T 322 | +f8dkvf/HZ34/yI38P8jFe7/JiDt/xwT7/9fWfP//////+bk/P9nYPH/2dj8/87N/P88SfH//////4eC 323 | 9/8TB+3/SUXw///////8/f7///////7+/v/4+v7/+vr///n8//////7/4N79/xkR7v8fGOr/JB7u/yIg 324 | 7v8jEO3/I0rx/x6i+v8bmvf/H3v2/yYT7f8lHu//JB7v/yQV7P8lEu3/IWP1/xyX+P8bmPf/HJT2/xuT 325 | +v8dlPb/HZT3/x6U9/8bkff/HJ74/yE47f8mFu//JBzu/ycg7v8LAO3/4uD9/8/N+v8AAOv/IRvv/+Lg 326 | /f9BMu7////9//////9GP/D/3937///////8/v7//v3+//3+/f////////////3////7/P7//////8fE 327 | +v8uI+3/Ih/u/yUd7/8jIO3/JxTs/yFa9f8cnfb/H3r3/yUT7f8lHu3/JBzv/yMf7v8kHO3/Jhru/yIa 328 | 7v8fdvT/Hp75/x2R9/8clff/HJT3/yCT+f8dkff/HJ74/yQ28P8lFe3/JB7u/yQc8P8lGu3/MCvv//// 329 | //++u/r/FQ7u/9TT/P+Rj/b///////////+Ukvb/7e39///////+/v7///////f5//+qovj/npP1/97e 330 | /P//////9ff+//////95c/X/CwPs/ykj7v8kHO//JB7u/yUP7f8fkvf/HYD2/yMT7/8kH+7/Jhvu/yMb 331 | 7v8jG+//Jhzt/yUZ8P8kFu//H3f1/xye+P8dkPj/HJb2/xyU9/8dkfj/HZ34/yQ18f8iFez/Jx/s/yYb 332 | 8P8fF/D/Mizv//n8/v//////WFHy/8C/+v/+/////f/+//79///+/v///v////7////9/v7//////+/q 333 | /P8UIe//ABzv/6GX+P//////+Pj+///////a2fz/MSrs/xoT7P8lHu7/JB3u/yUY8P8hT/P/HoX0/ykS 334 | 7/8mHu7/Ihvu/yMb7/8lHe7/Ixzv/yQd8P8jG+7/Ixbt/x939P8cnvj/HpH4/xuU9f8ekvX/HZ34/yA2 335 | 8P8lFe7/JB3u/yQc7f8gGe7/NSzx/////v//////v776/+no/P/3+v7//Pz9//////9zcPH/6Of8//// 336 | ///8/v7//////+/m/P8nSvL/E2f0/62b+P//////+/v9//3+/v////7/4uH9/zAq7v8hG+3/Jhzt/yQc 337 | 7f8jFe7/Ii7v/yMb7P8jHe//JBvu/yof7v8mH+7/JBvx/yYb7/8mHu7/JBvu/yUX7v8gd/b/HZn5/x2S 338 | +P8bkvX/H6D5/yM47v8kFO7/Ih3u/yUd7v8fFu3/ODDu/////v/8//7//v///////P//////+fn+//// 339 | //8+OvD/3d38///////8/v////////bu/f87VPL/AD7u/7Gj9///////+Pr+///////7+v/////9/93c 340 | +v8UCuz/KiPu/yQb7v8mHu3/Ixfw/yQd7/8kG/H/Ix7t/xML7f8aEu3/LSTu/ygg7P8kHO7/Ix7u/yQc 341 | 7f8kFu7/HYL0/xyY9/8dkvf/H5L4/yMy7v8jFu7/Ixzv/yUd7P8dFu//JR/u///////+//7/+/z+//39 342 | /v////7/+vz///////+MivT/7Ov9///////9//3//f3+///////t6v3/IxXt/5yb9///////+vr+///+ 343 | ///9/v7///////f2/v9MRe7/Egft/ygg8P8jG+z/Jhzw/yQd7v8lG/D/JR7t/25o8/9QSPL/BADq/xAI 344 | 7P8mH+//JBzv/yUe8P8jE+7/IYn4/x+V+P8en/j/Ikfy/yYP7f8jIOz/JBvv/ycc7f8fFez/bGf0//// 345 | ///9/v7//v/+//3+/////////v////////////////////7////+//7//v/+//z8////////y8j8/8vL 346 | +////////f3//////////////v3+///////u7f7/WFLw/xgT7P8nIOz/Ihzv/yQc7f8kHe3/Egvp//r6 347 | /v/h4P7/ioj3/56b9v8gF+7/JBns/yYe8P8jGO//IVDx/xyZ+P8apPb/IFXx/yQR7v8lHu3/JBzt/yMd 348 | 7v8cE+3/5ub9///////8/f///v7+//7////////////////////7+////v7///////////////////// 349 | ///9/f///Pv///////////////////////////////////n5////////l5T3/wcA7P8pH+3/Jx3v/ykf 350 | 7/8VC+v/n573//7+/v/4+f7///////////+7ufn/GBHr/x0V7f8mHe7/Jg7t/yBT8v8df/b/JR7u/yQc 351 | 7/8lHe7/Jhzv/yUd7f8cFu3/3+H9///////+/v////////v9//////////////////////////////// 352 | /////////////////////////Pz///38///////////////////////////////////9/P7/9vb//2dj 353 | 9P8iF+7/JB7u/ycg7f8jGu3/19X7///////7+/3//P38//r7///4+P7/9/j8/52X9f8PB+z/Ih3v/yUb 354 | 7/8mIPD/Jhbv/yYd8P8lHO7/Ihzt/yce7f8RB+r/7u79/9bY/P8qHO7/NSjx/9zd/f////////////// 355 | //////////////////////////////////////////////////////////////////////////////r6 356 | ////////hH/1/7Ov+f9JQfD/HBbv/wYA7P+gm/f//////+bn/f/Pz/v/1db8/+Dg/f//////+vr+//// 357 | //+Vk/T/Ix3t/yUc7/8jGu//JB7s/yIc7v8iHOz/Jhzu/yAX7f9EPu7/9ff+/6SY9/8LKe7/FBrt/6qc 358 | 9/////////////////////////////////////////////////////////////////////////////// 359 | //////////////r5/v//////dm/0/6Od9/+sqvf/GRHu/0E47//Y1vz//////9nZ/P+sp/f/t7T6/8jG 360 | +///////+vz+//n7/v//////NS3v/xoS6/8lH+7/Jhvu/yUb8P8lHO3/KCLu/xEH7v/GxPv/+v/+/xUA 361 | 6f8Vivb/CMj6/xUM7v////////////////////////////////////////////////////////////// 362 | //////////////////////////////39////////09L8/+Pi/f///v//BgDs/3t49P//////9/j+//// 363 | ///+//7//v/+/////v/+/v7//f/+//z+/v//////urf5/yIZ7f8lG+7/JBzx/yQc7/8mHO3/KyPv/wcA 364 | 7f+8u/f/+//+/xkA7P8UdfX/AP///yRE7/////////////////////////////////////////////// 365 | ///////////////////////////////////////////////////9//7//v////39/v//////q6b4/2Jc 366 | 8v//////+fr+//z+/f/6+/7//Pz///z9/f/+//7//v////z///////7/9vf+/ysk7f8oHe7/JBzu/yQd 367 | 7P8qIO7/Egnu/3169P///////////7Gi9/8TQPP/Cuz+/x5C8P////////////////////////////// 368 | ///////////////////////////////////////////////////////////////////+/////Pv///3+ 369 | ///n5/v/rar3/4WA9v//////+vr////////////////////////+/////P/+///+/v/8/f3////+/9HP 370 | +/8JAOz/KCHv/yUb7/8pIe3/Dwjq/5eT9v///////////8zD+v8VM/D/Iqf6/yEz8f////////////// 371 | //////////////////////////////////////////////////////////////////////////////// 372 | /////v//+/z9//////8rIez/OjLx///////7+////////////////////////////////////v7+//3+ 373 | //////7//f3//6qo+f9UTvH/Hxbt/yIe6/8sJe3/BwDs/4eD8////////////8XF+v8AAOn/Hkry/yY1 374 | 7/////////////////////////////////////////////////////////////////////////////// 375 | //////////////////////7/+/39//////9GPvH/IRju/6uo+P//////+/v///////////////////// 376 | /////////f/+//z9////////f3v0/0tG8P+1svr/AADp/y8m8P8dFPD/QTzv/97d+v////7//////+Tl 377 | /f+qp/j/U0bx/wsA7v////////////////////////////////////////////////////////////// 378 | ///////////////////////////////////+//7//P3+//////86NPD/Lyjt/+Pi/P///////f3///// 379 | /////////////////////////v7+//v7/v//////KR/x/0hC8P//////ZV3y/xoS7f8PB+v/ZF/z//// 380 | ///4+f7//f/+//j5/v//////aWP1/52b9/////////////////////////////////////////////// 381 | ///////////////////////////////////////////////////9//7//P7+/////v/g4Pn/aGHz//// 382 | ///6+/7//////////////////////////////////v/9//38////////VU70/zYs8P//////gHz0/wkD 383 | 6v9cVvL////+//T3/f/+//////7+//v9/v/5+/7/9fP+//z8//////////////////////////////// 384 | ///////////////////////////////////////////////////////////////////9//7//v7+//7+ 385 | /////////v7///v9/v///////////////////////////////////////v7///7+/f////7/8vL+/4B6 386 | 9f//////bGTz/xIJ6v/s6/3/1dP8///////9/f7//v7+/////v////3////+//38//////////////// 387 | //////////////////////////////////////////////////////////////////////////////// 388 | ///+/////v/+/////v/9/v7//f7///3//////////////////////////////////////////f/+//3/ 389 | /P////3/+v3+//z8////////ysf6/y0l7//Dw/r/KR/w/9bV/P//////+/z//////////////v////7/ 390 | //////////////////////////////////////////////////////////////////////////////// 391 | //////////////////////////////////////////////////////////////////////////////// 392 | /////////f////7+/v/+/f7//////+Hg/v9JRPL/w8L6/+Hh/f/g3vv/AADr/4GB9v//////+fn8//// 393 | //////////////////////////////////////////////////////////////////////////////// 394 | //////////////////////////////////////////////////////////////////////////////// 395 | /////////////////////////v////7+/v/7/P7//////9XU+v8AAOn/n576///////X1fv/aGPz//// 396 | ///8/f7//P79//////////////////////////////////////////////////////////////////// 397 | //////////////////////////////////////////////////////////////////////////////// 398 | /////////////////////////////////////////v7+//3+///8/f7////+/+rr/P8dFOv/l5T3//// 399 | ///v7/z/2dn8///////9/v///f7+//////////////////////////////////////////////////// 400 | //////////////////////////////////////////////////////////////////////////////// 401 | /////////////////////////////////////////////////////////P7///7//v/+/////Pz///// 402 | ///Dwvn/vbz5///////W1fr/KSPv/9/g+////////P3+//////////////////////////////////// 403 | //////////////////////////////////////////////////////////////////////////////// 404 | /////////////////////////////////////////////////////////////////////////v/+//3/ 405 | /v///v///v3///z9/v/7/P///v3//////v/p6/7/AADs/4CA8///////9/n+//////////////////// 406 | //////////////////////////////////////////////////////////////////////////////// 407 | //////////////////////////////////////////////////////////////////////////////// 408 | /////////v////7//v////7////+///////8/P7/+/r9///////W1fz/T0fx/////v/8/f///P7///// 409 | //////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 410 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 411 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 412 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 413 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 414 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 415 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAOwAAAHYAAAABACAAAAAAAGQ2 416 | AAATAQAAEwEAAAAAAAAAAAAAAPL+/wLx/v8B8///APL+/wDy/v8A8f//APL+/wDy/v8A8v7/APL+/wDy 417 | /v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy 418 | /v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy 419 | /v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL9/wHz 420 | //8A8v3/BOT9/x6U+f8A8P//APX//wTw/f8A8///AvH//wDx//8A8v7/APL+/wDy/v8A8v7/APL+/wDy 421 | /v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy 422 | /v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy 423 | /v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APH//wLx 424 | /v8F5f7/BOT9/wXl/v8C4v//APL+/wDx//8A8///APL9/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy 425 | /v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy 426 | /v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy 427 | /v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8A8v7/APL+/wDy/v8C8v3/APL9/wDy 428 | /v8A8v7/HZX5/wPl/P8D5P3/AfL7/wXx//8C8f7/APL+/wDx//8D8v//APT8/wHv//8B8v//APP9/wPy 429 | //8A8v7/AvL9/wDy/f8C8f7/APH//wLy/f8A8v7/APL+/wDy/v8A8f//AvH+/wHz/v8A8v7/AvH//wDy 430 | /v8A8v7/APL+/wDy/v8A8v7/A/L//wDz//8A8f//APH//wDx//8B8///APH//wLx//8C8f7/APH//wDy 431 | /v8A8v3/APL+/wDy/v8A8v7/APL+/wHz/v8C8f7/APL+/wDy//8B8///APL9/wHz//8A8v7/APL+/wLx 432 | /v8dlPf/HZX4/wTj//8E5P//AOX9/wDy/v8C8f//A/L//wDy/v8A9f3/A+///wDw//8D8/7/APH9/wDx 433 | //8C8f7/APL9/wDx//8B8fz/APL+/wLx/v8A8v3/APL+/wDx//8B8///APL+/wDx//8A9Pz/AvH+/wDx 434 | //8A8v7/AfP//wDy/v8D8v//APL+/wDx//8A8f//APL+/wDy/v8A8v7/APL+/wH0/f8A8P//AfP//wPy 435 | //8A8v7/APL+/wPy//8A8f//AvL9/wHz//8A8v3/APL+/wPz/v8A8v//AvH+/wLy/f8A8///APH9/x+U 436 | 9f8fkvr/HZX1/xyT9v8E5P3/BOX+/wLz/P8A8v7/APP//wbj//8B5P3/BeT//wDy/f8D8/7/APH//wHw 437 | /f8A8P//APH9/wLy/f8A8f//APP//wDx//8A8f//AfP//wDy/v8A8f//APL+/wDz/P8B8v//APL+/wDx 438 | /f8A8v7/APL+/wLx/v8B8///AvH+/wLx/v8A8v7/APH//wHz//8A8v7/APP//wHw/f8A8v7/APL+/wPy 439 | //8E8f7/APH//wDz/f8B8///A/L//wDw//8C8f7/APL+/wDx/f8A8v3/APH//wHx/P8C8///HpP2/x2V 440 | +f8fk/j/HZT3/xyU+P8E5P3/AvH//wPy//8A8v7/BOT9/x2U9/8D4v7/B+T//wHk/f8A8/3/APH//wDy 441 | /f8D8v//AfT9/wHz//8A8fz/APL+/wDw//8A8f3/APL+/wDy/v8C8/z/AvH//wHz//8A9P//APL+/wDy 442 | /v8A8v7/AvH+/wHz//8C8f7/APL9/wDx/f8G8///APL//wDy/f8D8P3/APL+/wDx//8F8v//APL+/wLy 443 | /f8A8v7/APP//wDx//8C8f7/APL+/wHz//8A8v7/APL9/wDx//8A8v7/APL+/wDx/f8blvj/HJT0/xyT 444 | 9v8alfX/HJT4/wXk//8E5fv/AvH//wPl/P8A4/z/H5P4/x2U9/8clPj/A+P//wfl/f8C8f//APH9/wHw 445 | /f8A8f//APD//wDx//8A8v7/APL+/wDy/v8A8///BvH//wHz//8A7///A/P+/wDy/v8A8v7/APL+/wHz 446 | //8A8v7/APL+/wDy/f8B8///APL+/wDz//8C8f//BPH+/wDx/f8A8v7/APD//wDy/v8A8v7/APD//wLx 447 | /v8A8P//BeX9/wDm/v8E4///BOT9/wbj/f8C4/z/BuP9/wnk/v8C5Pv/APP//x6U+f8Zl/b/GZT2/yGT 448 | +P8clPf/H5T1/wPj//8D4/v/B+T+/xyU9/8bk/b/H5T3/xuU9P8fkvr/BuP9/wTj//8F5f3/APH//wDy 449 | /v8D8v//AfP//wDx//8G4/3/Bub//wPj//8A8v3/APH//wLx/v8A8v7/AvH+/wDy/v8A8v7/APP//wHy 450 | //8A8///AfP+/wHz//8D7///APL+/wDy/v8A8v7/AfD9/wDx//8C8f7/APL+/wD0/v8A8f//AvH+/wDx 451 | //8F4v7/HJX1/x2U9/8dlvb/HJT0/xyV9f8bk/f/HJP6/wPl/P8D4///H5P4/xyU+P8clPj/HJT3/x+U 452 | 9f8clPj/HZP4/wPh//8E5f7/H5T3/x2W9v8clPT/H5T3/yGT+P8dk/r/HJT3/wbm/v8D4v7/A/P+/wDy 453 | /v8D8P3/APL9/wTk/P8dk/r/BeT//wbj/f8A8v7/BvL//wHz//8A8f//APH//wDy/v8A8v7/APH//wDy 454 | /v8A8v7/AfD//wLn/P8E5P3/AeX8/wPj//8F5f7/BOf8/wLx//8A8f//BPH+/wDx/P8A9P7/APH//wPj 455 | //8dlPf/HZX4/x2U9/8clPj/H5T1/yGU9f8dlfX/GpX1/wXi/P8jHO//Ihzv/yGT9/8blPT/HZT3/xyU 456 | 9/8ck/b/CtL8/wTk/P8dlPf/GpT4/x2T+P8bkfb/HZX4/xyU9P8dmPT/HpH5/wXl/v8E4///APP//wDy 457 | /v8A8v7/A+X8/x2T+v8ck/b/BOb9/wXl/v8C5Pv/APL+/wLy/f8A8f//APL+/wDz//8C8f7/APL+/wDy 458 | /v8D7///BOT8/x2U9/8clPf/H5T3/xyU+P8E4///A+T9/wPm+/8A8f//APL+/wDy/v8A8v7/BOT9/xyS 459 | 9/8elPn/HZX0/x2U9/8bk/b/GpT4/xyT+v8bk/b/HpT5/yYb7f8jG/H/Ihzr/yIc7/8dk/j/HZX1/x6U 460 | +f8clPP/GpT4/x6W9v8clPf/HZP4/xqV9f8fk/j/HpT5/x2T+v8YlPj/IJT5/wTj//8E5Pz/APH//wL0 461 | +v8E5P3/HJP6/x+U9f8clPf/HZf1/wHk//8G4v//A+P//wDy/f8B8///APP//wLx/v8C8f//APP9/wDy 462 | /f8E5P3/AeT//yKU+P8bkvn/Hpb2/xiV9/8ilPn/A+P//wbj/f8C8f7/APH//wLx/v8B5P3/HZT3/xuT 463 | 9/8glfj/HJX1/xyT9v8clfX/HJT4/x2U9/8blfn/Ihvu/ycc7v8kG+7/Ixvx/yQb7f8mG+3/HJT4/xyV 464 | 9f8ck/b/IpX2/yCS9v8dk/j/G5X5/xqV9f8clfX/G5T0/x+U9f8dk/j/HJX1/wbj/f8D5P3/APH//wTk 465 | /f8gkvf/HZT3/x+U9/8fk/j/H5T3/x2V9P8D5fz/A+P//wLx//8A9Pz/APL+/wHz//8B7///A/L//wHz 466 | /v8D5P3/HJL3/x2T+P8flfT/HJL3/x2W9v8flPX/AeT9/wTl/v8A8f//APP8/wTk//8flPf/Hpb2/xyT 467 | 9v8dk/j/HZT3/x+T+P8dlvb/HJX1/x2U9/8jHe7/Ixrs/yYd7/8lGe3/Ixzv/yAd7/8oG+3/IB7s/x+V 468 | +v8clPj/HJT3/x6W9v8alff/G5P3/yGT+P8elfj/IJX4/xyV9f8clPf/FZT3/wbj/f8E5Pz/BOP//xqV 469 | 9f8alff/HJT3/xuU+/8flPX/GJL2/xyU9/8D4/v/BeX9/wDx//8F8f//APL+/wP0/f8A8f//APL+/wTk 470 | /P8clPf/IpT4/xyU+P8Zlfn/H5T3/x6S9/8dlPf/BuP//wTj//8A8P//CuP8/xyU9P8ck/r/GpX3/x+U 471 | 9f8elfj/HJT4/x+U9f8dlfj/HJT3/yIc7f8iHO//Ixrs/yYf7P8gHOr/KRrx/yUc7v8hG/D/Jxzu/yQa 472 | 8P8glPn/HJL3/xyS9/8dlPf/HJT4/xyV9f8clPT/IJT5/xqR+P8dlfj/HJX1/wTj//8E4///HZf1/yOS 473 | +v8dk/j/HJL3/x+U9/8clPj/GpT4/x2U9/8A4/z/B+X9/wLx//8A9f//BPP8/wDx//8B8/7/BuT8/wTi 474 | //8dk/r/HZX5/x2T+P8ZlPT/IJT5/xmU9v8clfX/A+X8/wXj//8A4v//G5b2/x2V9f8dlPf/HpP2/xuT 475 | 9/8blfn/HZX0/x+U9/8dlPv/JBvt/yYc8v8iHer//P7///z+//////7/Ixzv/ykc7v8iHuz/Ix/t/yMd 476 | 7P8ek/b/IpT5/xmU9P8alfX/HZT3/x2V+P8clPj/IJT5/xyV9f8ckvf/H5P4/x2U9/8clPf/HJT3/xyT 477 | 9v8elfj/HJT4/xyS9/8hlPX/GpX3/x+U9f8D4f//BeX+/wDx//8D8v//APP9/wPy//8A8v7/AOb+/x2V 478 | +P8elPP/Hpb2/xuT9v8dk/j/HJT4/x2T+P8alfX/BOT9/wbj/f8elvb/H5T1/x6V+P8alff/IJb1/x2U 479 | 9/8clPj/IpT5/xiT9f8jHfL/Jhrw/yIc6/8qG+7////+//3////////////+/yYf7P8iHO3/JRvx/yQd 480 | 8P8hG+z/GpT4/x6V+P8dlPf/IZP4/xyU9/8clPT/IJX4/x+U9f8YlPj/HpL3/xiU+v8dlPf/HZX1/xyU 481 | 9/8blPT/GZP3/yCV+P8dlPf/IpT5/x2U9/8E5P3/A+X8/wDy/v8C8f7/AvH+/wDx//8D5fz/HJb0/x2V 482 | +f8dkvv/HJP2/xyU+P8dlfX/HZP4/x2T+P8dkvX/HZT7/xuT9/8elPn/GpT4/yGT9/8dk/r/HJb0/xqU 483 | +P8dlfX/IJT5/yYb7f8iHO//Jh3w/yEb6v///////v3///3///////////z//yUc7/8iHOv/Ix3u/ygd 484 | 7/8lHez/HJL3/x6U+f8dlPf/HZT3/xyV9f8elfj/G5T0/x2T+v8hk/f/Gpb0/xyU9/8dlPf/HZT3/x2V 485 | 9f8flPf/HJT4/x+U9/8fk/j/IJX2/xqR+P8F5f3/APL+/wDy/v8A8v7/A/L//wTl/v8bk/b/IJT5/xqV 486 | 9/8clfX/HZX1/x2T+P8dlPf/HZX1/x2V9f8ak/P/HZT3/xqV9/8flPX/Gpb0/x6V+P8dk/j/HZT3/x+S 487 | +v8ck/b/Jx3r/yYb7f8iGvD/JR3s/yMc7//9//7////+//z+/v////////7//////v8kHOv/JRzv/yId 488 | 7v8iHO3/HJL3/x6V+P8alfX/HJT4/yCS9/8dlvb/HpT5/xyU+P8dlPf/IZP4/xqT+v8dlPf/HpX4/xyS 489 | 9/8elvX/HJT3/xyV9f8dlPf/HZX5/wPj/P8F5f7/APH//wDy/v8B8v//A+P//x6W9v8glfj/HZP4/xuV 490 | +f8flPX/HJT4/x2V9P8blfn/HJT3/x2T+v8clvT/H5P4/x+U9/8clPj/HZX1/x2U9/8mHe//Jxzu/yMd 491 | 7v8jG/H/JB3q/yUd7P8jHO//Jx3s///+///9/////v7+///+///+//3///////3//v8lHO//JB7p/yIe 492 | 7P8nG+//Ihzv/yCU+f8flPf/GpX3/x+U9f8dlPf/IJT5/xyU9/8elPn/H5T3/x2V9P8clPf/HZT3/xyS 493 | 9/8clPf/HZX1/yGS+v8clfX/HZT3/wHk//8E5Pz/APL+/wDy/v8E5Pz/HJT3/xuT9v8dlfj/H5T3/yCU 494 | +f8dlfX/JBrw/yMd7v8nG/H/JBvt/yEd6/8ak/r/HpX4/x2U9/8dlfn/IRvu/yYa7v8lHO//JR3s/yYb 495 | 7f8nHO7/Ihzv/yMa7P8jHe7/Ix3u//////////7//fz+/////P/8//3////////9//8lHO//Jhzr/ycc 496 | 7v8nHO7/Ix3s/xyU9P8dlfn/HZT3/x6T9P8blfP/GZj0/xuT9/8elPv/HJT4/x2U9/8clfX/H5P4/xyV 497 | 9f8dlfX/HZX4/xyU9P8dlfn/HZX1/wji//8C8f7/BeT//wLi//8elfj/Hpb2/x2S8/8blfn/HJP2/xyU 498 | +P8jHe7/IRzt/ycd6/8mHOr/Jhru/yQe7/8mG+3/JRzv/yYb7f8mHe//HBzs/yYb7f8lHO//Ihzt/yYe 499 | 7f8lHO//JB7v/yYc6/8mGvD/+v/9//7+/v/9////+/39///+/v/+/f////////3//v8jHuv/Ihzx/yId 500 | 7v8iHOv/Jxvv/x2V9f8bk/f/GpT4/xyU+P8bkfj/H5b5/xyV9f8dlfj/G5P2/x6W9v8hk/j/H5L6/xyU 501 | +P8clPT/HpX4/x6T9v8dlPf/BOX+/wHk/f8D4/z/Hpb2/yGT9/8bk/f/G5X5/xyV9f8flfT/HZT3/yEd 502 | 6/8kGvD/Jhvt/yEe8P8oHPD/Ihzt/yMd7P8mGu7/Jhrw/yId6v8qG/L/JBvt/yEd6//+/f//Jx3r/ygZ 503 | 8P8nG/H/Ihzt/yIc7//////////////////9/f3//v7+///+/v/8//3///////////8oG+3/JRzv/yMd 504 | 7P8iHO//Jxvx/yIe7P8ck/b/HZT3/x+T+P8fkvr/H5T3/x6S9/8hlPz/Ih3u/yMd7v8dlfX/HZX1/x2U 505 | 9/8clPf/IJT5/xyV9f8hk/j/BOT9/wPk/f8clPT/HZT3/yCV+P8YlPj/H5T1/xuW+P8ckvv/H5L6/yIc 506 | 7f8jG/H/JRrs/yQc6/8iHO3/Ix7r/yIb7v8jHe7/JB3w/yIc7/8pHO7/Ixzv/////v/9//7/Ihzr/yIc 507 | 7f8kHOv/Ixzv///////+//3////+//r//v/+/v7/+/39/////P/+//3//v7+/yMc7/8jG+r/JRzv/yIb 508 | 7v8lHez/JR3s/yIc7f8flPX/GJX3/xqV9/8gk/v/F5Xz/x+U9/8hHev/JRzv/yMd7P8dlPf/G5P2/x6U 509 | +f8ckvf/HpX4/xyU9/8G5v//AuX//xyU+P8dlfn/HZT3/x+U9/8gk/v/HJP2/yOU9f8elvb/Ixzp/yMd 510 | 7v8iHO3/Jhvt/yUc7/8oGu7/Ixzv/yUc7v8hG+r/Jhzr/yUd7P8iHOv//f/+//z+/v8kHfD/Ihzt/yQb 511 | 7v8mG+3///////3////9/////v/9///////9/////v3////+/////////v7+/yMf7f8iHe7/Jhrw/yUc 512 | 7v8iG+7/Ihzv/yIc7f8elfj/HJX1/xyT9v8glPn/HZL7/ycb7/8kG+7/Ih3u/yIb7v8flPf/HZP4/xyV 513 | 9f8dlfX/H5L6/x2V9f8dlPf/HpX4/x+U9/8clfX/Hpb1/x6R+f8clvT/HJT3/x6S9/8mHPL/Ix7r/ycd 514 | 7P8iHO3/Ixvx/////P/7//7//v7+///+/////////f///yQb7v8ckvn///////////8iHO3/Ix3u/ykb 515 | 7//9/////P/9//3///////7///////7+/v////7//v7+//38/v/+/v7//f39/yQd6v8jHu//Ihzr/yIb 516 | 7v8lHO7/Jxzu/yMZ7/8dlfj/GZT2/x2U9/8clvT/JBzr/yMd7v8pG+//Ix3u/yMc7/8mGvD/HZX4/x2T 517 | +P8elfj/HJT0/x2U9/8dk/r/HJT3/x6T9P8clPj/HJP6/x+T+P8dlPf/H5T3/yEd6/8jG/H/Ihvu/yYd 518 | 7/8kGvD/JRzv///////+/v7/JRvq/yQb7f/7//7//f///ycc7v/+/v7//P7+/yQa8P8pHO7/IB7s//// 519 | ///9/////v7+///////+/v7/+//+///////9////+/////7//f//////Ixvx/yIc6/8lHez/Ihzv/yIc 520 | 7f8hHO3/JRzu/yGU9f8elPv/HJX1/x2T+v8nHO7/Ixzv/yUc7v8kGvD/Ix7r/yUc7v8jHe7/IJT5/xqV 521 | 9/8clPj/HZX0/xqT+/8dlPf/HZT3/x2U9/8glfb/GZP3/xyU9/8clPj/Ix7r/yYd8P8lHO//Ixrs/yMe 522 | 7/8mGu7//////////v8iHe7/Ixvx/yUc7///////Jxrs/////P///v3//f///yQb7f///v7//v7+//v/ 523 | ///+/v7//f39/////P/+/f////////3////8/v7////+///+///9//7/KRzu/yQc6/8dHe3/Jh3w/yMd 524 | 7v8mG+3/JRzv/x2T+v8clvT/H5P4/yQd8P8oG+v/Ix3u/yQb7v8jHe7/JRzv/yUe6/8lG/H/Ih7s/x2U 525 | 9/8hk/j/GpX3/x+U9/8alff/HZT3/yGS+v8dlPf/HJT3/x2U9/8nHO7/JBvt/yUc7/8jHe7/JRzv/ycd 526 | 6/8iHO///f///////v8mHe//IRvu//////8kHu3//v3///7//f/9//7/Ix3s///+///9/////f39//// 527 | ///+/f//+v7///7+/v/+/v7////7///////+/v7//f/////+/f/9////JRzv/yQd8P8kG+7/IR3r/yge 528 | 7f8kHOv/JR/w/x2V9f8clPj/IRvw/yId7v8lHO7/Jxvv/yMd7P8iGvD/JBvt/ykc7v8hG/D/JRzu/x2V 529 | +f8glfj/HZP4/x2T+P8blvb/HJT4/x+S+v8dlPf/H5T3/yQb7v8iG+7/Jh/s/yQa8P8mG/P/JRzu/yMd 530 | 7v/8//3///////39/f8jHO///f////39/f/9//////7////7///9/////f/+//3////9//7///////// 531 | /v/+/v7/Jxvv/yEc7f8jHO///v3///79///9//7//P7+/////v8iG+7/Ih3q/yAd7v8lG/H/Ixvx/yId 532 | 7v8lHO//IJT5/x6W9v8kHu//Jxvx/yMd7P8lGe3/Ihrw/yUc7v8kG+7/JRzu/ycb8f8jHO//JBvt/xmU 533 | 9P8dk/j/HJT3/x+U9/8clfX/HJX1/xyU+P8dk/j/JRzv/yEa7f8nHez/KB7t/yQb7f8jHfD/JRzv//z+ 534 | /////////f///yYb7f////7//v7+//z//f////7/+//////+/v////////////3////+//3///////v/ 535 | /P8lHO//HpX4/yMc7//6//7////+/////v/+/f///f///////v8lHez/JR3s/yIc6/8kHer/KB3v/yMb 536 | 8f8iG+7/HJX1/yYa7v8pHO7/JBvt/yIc7/8kG+7/Ix3u/yUc7/8iHPH/Ix3u/yMd7v8iG+7/KB3v/xyU 537 | 9/8dk/j/HZP4/xuT9/8clfX/IZP3/xyV9f8fHO3/KBzw/yEb8P8jGu3/Ih3u/yge7f8lG/H///79//// 538 | ///7//7//P7///7//f/6/v/////8///////8/v7/IRvq/////v///////v7+//3////8/v7//f///yUc 539 | 7v8ekvf/JRzv//3////////////8///////+//3//fz+//////8hG+7/Ix3u/yIb7v8oG+3/IR3r/yQa 540 | 8P8kG+7/IR3r/yId7v8iHO//Jhru/yYb7f8lHO7/Ih3u/yca8v8nHO7/Jxzu/yUc7v8hG+7/Jxzu/x2V 541 | +f8fk/j/H5L6/xmX9f8dk/j/IJT5/yYc6/8iG+7/Ixzv/yUd7P8lHO//Ixrs/yUd7P/9/f3//f////z+ 542 | /v/9///////7///////+/v7//v7+//3///8kHu///f/////+/////////P7////////+/v7/JRzu/x2W 543 | 9v8hHev////////////7//7//////////////v//+f/6//7//f8kG+3/KB3v/yAe7P8nG+//JR3s/yIc 544 | 8f8lHO//Ixzv/yUb8f8iH+v/JB7v/yIb7v8jHe7/Jxzu/yEb6v8jHO//Ix3u/yMe6/8lHO//Ihzt/xqW 545 | 9P8clPf/GpL2/yCU+f8clPf/Ix3s/yMc7/8iGvD/Ix3s/yIc7f8gHPH/Ihzt///////+//3//f////// 546 | /v/+/v7////+//3////8/v///////yEd6/////////z+//3//v////7///7///3//v//////Jx3s/yUd 547 | 7P////7///79//7+/v/+/v7///7///z+/v///v////7+/yUe6/8jGuz/Jxvx/yUc7/8kG+3/Jxvv/yIc 548 | 8f8nHO7/JRvx/yIc7f8iGO7/Jx/u/yYb7f8hHev/JRzv/yMd7v8lG/H/Ixzv/yUc7/8iHO3/JJP7/x+U 549 | 9/8glfj/H5P4/ycb7/8lHO7/Ix3s/yMc7/8pGvH/Jhzr/yYa7v8iG+7/+//////////9//7///////z+ 550 | /////v///f/+///+//////7////+/////////////P7+/////P/7//////7+//7+/v/9////JRvx//n+ 551 | /f/9///////+/////////////v7+/////v/+/f///////yQb7f8lHO7/Hhvs/yQc6/8lG/H/Ih/r/yUc 552 | 7/8iHO3/Ixzp///////+/f//Ixvx/yIc6/8mHe//JRzv/yMd7P8lHO7/Jxry/yAd7v8dlPf/HZP4/xyU 553 | 9/8alfX/Ihzv/yQb7f8lHez/JBvt/yEc7f8kG+3/Ih3u//7+/v////7//f////7+/v////7//f////// 554 | //////////////////////////////////////////////////////////////////////////////// 555 | ///////////////////////////////////6///////+/yIc6/8jHe7/JR3s/yIc7/8kG+7/Jxzu/yIc 556 | 6/8iHO3//v7+///////9/////f///////P8kG+7/KBvt/yUc7v8iHO//JRzu/yUc7v8dlPf/GZP3/x+V 557 | 9P8lHO7/Ix7v/yQb7f8nHO7/Ihzv/yQb7v8lHO7////+//3///////////////////////////////// 558 | //////////////////////////////////////////////////////////////////////////////// 559 | ///////////////////////////////+//////7/IRvw/yEb7v8lGe3/KB3v/yYd7/8kG+7/JR3s//r+ 560 | /////v7//f/+//7//f/8/v7/+/3+/////v8iH+v/Ihzt/yYb7f8lHO7/Ihvu/yUc7v8clPj/JBrw/yQb 561 | 7f8lHO//JRzu/yYd8P8kG+3/Ix3s/yAd7v/7//////////3//////v3//v3///v///////////////// 562 | //////////////////////////////////////////////////////////////////////////////// 563 | ///////////////////////////+//79///8/v7/Jh3v/ycc7v8iHe7/IRvq/yUc7/8jGuz///////7/ 564 | /f/8/v7////6//7+/v/8/v///P/9///+/f////z/Jhvt/yMd7v8jHO//Ix3u/ycb8f8lHO7/Jxvx/yYd 565 | 8P8lHO7/Ihzt/yMd7P8mGu7/Jx3r//7+/v/+/v7/IRzt/yUb8f8lG/H//v3///////////////////// 566 | //////////////////////////////////////////////////////////////////////////////// 567 | ///////////////////9/////f///yUc7//9////JRzu/yIa8P8hG/D/Jx3s///////8/v7//f////v/ 568 | ///7/////P7///7+/v/9/////v7+//38/v///v3/Ih3q/yMc7/8kG+3/Ixvx/yMd7P8lHez/IRvu/yMd 569 | 7P8mGu7/Ixzv/yYc6/8iHOv////////9//8iHuz/Ih3u/yIc6//9//////////////////////////// 570 | //////////////////////////////////////////////////////////////////////////////// 571 | //////////////7+/v/9////KBvr///+//8nHev/Ihzt/yYd7/8mGu7//v7+///+/f/8/v//Jxzu///+ 572 | //8iGvD//f///////v///////P7+//3///////7/IRvs/yUc7v8iHO//Ixzv/yYb7f8kHfD/Ihzr/yMd 573 | 7P8kG+7/Ihvu//3///////7/Ix3u/yYb7f8A8P//IRzt/yYd8P////////////////////////////// 574 | //////////////////////////////////////////////////////////////////////////////// 575 | //////////////7+/v8nG/H//v/9//v///8lG/H/JBzr//7+/v///////P7+//3///////7////8///9 576 | ///+//3//f/+//z//f/8/v7//v/9//////8mHe//JB3q/yUd7P8lHO7/Jxvv/yQa8P8pG+//Ix3u/yYd 577 | 8P8lHO///v/9//3//v8jHez/Ixrt/wLx/v8A8v3/JBvu//////////////////////////////////// 578 | //////////////////////////////////////////////////////////////////////////////// 579 | ///////////+//z+/v///v///f///yQb7f8iHe7///7///3////+/v7////+///+///8/v7//P/9///+ 580 | /f///v/////+//v////+/v7///////7//f8lHO//Jxvv/yIc7/8kHPL/Ix3u/yUd7P8lHO//Ihvu/yId 581 | 7v////v//v7+/yIa8P8iHe7/APH//wH0/f8nHez///////////////////////////////////////// 582 | //////////////////////////////////////////////////////////////////////////////3/ 583 | /v/9/////f////7+/v////////3//yYb7f/8/v7//v7+//3////+//3//P/9/////////////v/9//z+ 584 | /v///////f////3//v/+//3///7//yEd6/8pHOz/JRzv/ycd7P8iHOv/Jxzu/yQa8P8iHO3////+//// 585 | ///9///////8/yYd7/8dk/r/APH9/yUc7v////////////////////////////////////////////// 586 | /////////////////////////////////////////////////////////////////////////f/////+ 587 | ///+/f///f////7//f/9/f3/Ihzv///+/v////////////////////////////////////////////r/ 588 | /v///v7//v7+//7//f/+/v7//f///ycc7v8iHO//Ihvu/ycb8f8kG+3/Ihzr/yQb7f/+/f///f////3/ 589 | //////7/Ihzv/xyU9/8ckvn/JB3w//////////////////////////////////////////////////// 590 | /////////////////////////////////////////////////////////////////////////v7+//7/ 591 | /f//////JBzr/yMa7f///v7////////////////////////////////////////////////////+//7+ 592 | /v/+/v7////+//z//f///v//Ihvu/yUa7P8lHO//IBzq/yUe6/8iG+7/Jh/s//z+/v///f////////7+ 593 | /v8iHO3/Ih3u/x2T+P8hHO3///////////////////////////////////////////////////////// 594 | ///////////////////////////////////////////////////////////////+/v////7//P/9//7/ 595 | /f8mG+3/JRvx//v//v////7////////////////////////////////////////////8/v7//f////3/ 596 | //////7//v7+/yId7v//////Ix3u/yEd6/8jHe7/JRzv/yQb7v8nHez////7//7+/v/3//7//////yMc 597 | 7/8lGe3/Ix3u/yMd7v////////////////////////////////////////////////////////////// 598 | /////////////////////////////////////////////////////////////////P/9/////v7+/yQd 599 | 8P8jGuz/Jxzu//7+/v///////////////////////////////////////////////v/9//7///////3/ 600 | //8lHO7/JR3s//v///8kG+7/JR3s/ycb8f8iGvD/Ih7s//3//v/8/v7//v7+///////7//////////// 601 | /v8iHO//JRvx//////////////////////////////////////////////////////////////////// 602 | ///////////////////////////////////////////////////+//3/////////////////Ihvu/yYe 603 | 7f/8/v7//////////////////////////////////////////////////P7+///+///8/v7//P/9/ygb 604 | 8/8kHu3//v7+//7+/v8nHO7/Ih7s/yMa7P8lHO7//P7////////9/////P/9/////v///////P7+/yYa 605 | 8P/8//3///////////////////////////////////////////////////////////////////////// 606 | //////////////////////////////////////////////3////8//3//P7+/////P/9//v/JBvu//3/ 607 | ///8/v7///////////////////////////////////////////////z////+///+///6//7/JRvx/ycb 608 | 7//8/v7//f/+/yMe6/8hHO3/JRzu//z+/v/9/f3/+v/+///8//////7//P7+//v//v///v////////// 609 | /v////////////////////////////////////////////////////////////////////////////// 610 | /////////////////////////////////////////v/9/////v///v///f/////////+/v7//v7+//3/ 611 | //////////////////////////////////////////////79///9/v////79//v///////7/JRzu//// 612 | /v//////Jhvt/yUd7P////7////+//z//f////7//f////7+/v////7////+/////P///v////7///// 613 | //////////////////////////////////////////////////////////////////////////////// 614 | ///////////////////////////////////9/////P7+//7//f/+/v7//P7+///////6//7///////// 615 | ///////////////////////////////////////////+//3//P////z///////3//v///v////79//79 616 | //8nHez/Ihzt//v///8nG/H//f/+//79//////7//f/+//////////////////3//v/9//////////// 617 | //////////////////////////////////////////////////////////////////////////////// 618 | //////////////////////////////////////////////////////////////////////////////// 619 | ///////////////////////////////////9/////P/9//7+/v////v/+v/+//v////+/v7///////// 620 | /v8lG/H////8/yUc7/8lHO///f////z+/v////////////////////////////////////////////// 621 | //////////////////////////////////////////////////////////////////////////////// 622 | //////////////////////////////////////////////////////////////////////////////// 623 | //////////////////////////////3////+/v7////+///+///9/////v3//yUe8f8hHO3/+v/+//z+ 624 | /v/+/v7/JRzu/x8c7v/9////////////+/////////////////////////////////////////////// 625 | //////////////////////////////////////////////////////////////////////////////// 626 | //////////////////////////////////////////////////////////////////////////////// 627 | /////////////////////////f/////+///8/v7//v7+//////////7/IR7q/yEd8v///////v7+///+ 628 | /f8lHO///f/+///+///8//3//P7+//////////////////////////////////////////////////// 629 | //////////////////////////////////////////////////////////////////////////////// 630 | //////////////////////////////////////////////////////////////////////////////// 631 | //////////////////////7///////r+//////7//f39//z+/v8nHez/IRrt//3////7/////v7+//v/ 632 | /v/////////////////8/v7///////////////////////////////////////////////////////// 633 | //////////////////////////////////////////////////////////////////////////////// 634 | //////////////////////////////////////////////////////////////////////////////// 635 | //////////////v9/v///v////////3//////////f/+////+/8jHez///////z+/v////v/JRzu//v/ 636 | ////////+////////v////////////////////////////////////////////////////////////// 637 | //////////////////////////////////////////////////////////////////////////////// 638 | //////////////////////////////////////////////////////////////////////////////// 639 | //////////////v//v/+//3///////79//////7////+//3////+/v7///7+//z+/v8kH/D/Ihzr//7+ 640 | /v///////f/+//////////////////////////////////////////////////////////////////// 641 | //////////////////////////////////////////////////////////////////////////////// 642 | //////////////////////////////////////////////////////////////////////////////// 643 | //////7//f/+///+/////v///v3///z+/v/9///////+//79///7/f3/+////yYa8P8jHez///7+//7+ 644 | /v/9//////////////////////////////////////////////////////////////////////////// 645 | //////////////////////////////////////////////////////////////////////////////// 646 | //////////////////////////////////////////////////////////////////////////////// 647 | ///9/////v/9//////////7//////////v/+/v7////8///+//////7/JBvu//39/f////7//P7///3/ 648 | /////////////////////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 649 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 650 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 651 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 652 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 653 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 654 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 655 | AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 656 | AAAAAAAAAAAAAAAAAAA= 657 | 658 | 659 | --------------------------------------------------------------------------------