├── 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 |
--------------------------------------------------------------------------------