diff --git a/.github/workflows/base-build-nightly.yaml b/.github/workflows/base-build-nightly.yaml
new file mode 100644
index 0000000..5f63397
--- /dev/null
+++ b/.github/workflows/base-build-nightly.yaml
@@ -0,0 +1,57 @@
+name: DSPRE Canary Build
+
+on:
+ push:
+ branches:
+ - main # Trigger only on pushes to the main branch
+
+permissions:
+ contents: write
+
+env:
+ SOLUTION_FILE_PATH: DS_Map.sln
+ BUILD_CONFIGURATION: Release
+
+jobs:
+ build:
+ runs-on: windows-latest
+
+ steps:
+ - uses: actions/checkout@v2
+
+ - name: Add MSBuild to PATH
+ uses: microsoft/setup-msbuild@v1.0.2
+
+ - name: Restore NuGet packages
+ working-directory: ${{env.GITHUB_WORKSPACE}}
+ run: nuget restore ${{env.SOLUTION_FILE_PATH}}
+
+ - name: Build DSPRE
+ working-directory: ${{env.GITHUB_WORKSPACE}}
+ run: msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} ${{env.SOLUTION_FILE_PATH}}
+
+ - name: Zip Release Files
+ run: Compress-Archive -Path ${{env.GITHUB_WORKSPACE}}DS_Map\bin\Release -DestinationPath DSPRE-canary.zip
+
+ - name: Fetch tags
+ run: git fetch --prune --unshallow --tags
+
+ - name: Delete previous release
+ run: |
+ gh release delete --yes canary
+
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ - name: Get current date
+ id: date
+ run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
+
+ - name: Create new release
+ uses: softprops/action-gh-release@v2
+ with:
+ tag_name: canary
+ name: DSPRE Canary Build ${{ steps.date.outputs.date }}
+ files: DSPRE-canary.zip
+ token: ${{ secrets.GITHUB_TOKEN }}
+ prerelease: true
+ generate_release_notes: true
diff --git a/DS_Map/DSPRE.csproj b/DS_Map/DSPRE.csproj
index 20c9c83..83544d6 100644
--- a/DS_Map/DSPRE.csproj
+++ b/DS_Map/DSPRE.csproj
@@ -279,12 +279,11 @@
-
-
-
-
-
-
+
+
+
+
+
@@ -301,6 +300,7 @@
BuildingEditor.cs
+
Form
diff --git a/DS_Map/Editors/LearnsetEditor.Designer.cs b/DS_Map/Editors/LearnsetEditor.Designer.cs
index ed87fc6..6aaf865 100644
--- a/DS_Map/Editors/LearnsetEditor.Designer.cs
+++ b/DS_Map/Editors/LearnsetEditor.Designer.cs
@@ -42,6 +42,7 @@
this.moveInputComboBox = new DSPRE.InputComboBox();
this.statusLabel = new System.Windows.Forms.Label();
this.pokemonNameInputComboBox = new DSPRE.InputComboBox();
+ this.entryCountLabel = new System.Windows.Forms.Label();
this.tableLayoutPanel1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.pokemonPictureBox)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.monNumberNumericUpDown)).BeginInit();
@@ -162,6 +163,7 @@
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
this.tableLayoutPanel3.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 33.33333F));
+ this.tableLayoutPanel3.Controls.Add(this.entryCountLabel, 0, 5);
this.tableLayoutPanel3.Controls.Add(this.descriptorLabel, 0, 1);
this.tableLayoutPanel3.Controls.Add(this.addMoveButton, 0, 4);
this.tableLayoutPanel3.Controls.Add(this.deleteMoveButton, 2, 4);
@@ -179,9 +181,9 @@
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 34.50088F));
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 65.49912F));
this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
- this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 165F));
- this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 38F));
- this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 11F));
+ this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 144F));
+ this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 44F));
+ this.tableLayoutPanel3.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 26F));
this.tableLayoutPanel3.Size = new System.Drawing.Size(226, 357);
this.tableLayoutPanel3.TabIndex = 0;
//
@@ -202,10 +204,10 @@
this.addMoveButton.Enabled = false;
this.addMoveButton.Image = global::DSPRE.Properties.Resources.addIcon;
this.addMoveButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.addMoveButton.Location = new System.Drawing.Point(4, 307);
+ this.addMoveButton.Location = new System.Drawing.Point(4, 286);
this.addMoveButton.Margin = new System.Windows.Forms.Padding(2);
this.addMoveButton.Name = "addMoveButton";
- this.addMoveButton.Size = new System.Drawing.Size(70, 34);
+ this.addMoveButton.Size = new System.Drawing.Size(70, 40);
this.addMoveButton.TabIndex = 1;
this.addMoveButton.Text = "Add";
this.addMoveButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
@@ -218,10 +220,10 @@
this.deleteMoveButton.Enabled = false;
this.deleteMoveButton.Image = global::DSPRE.Properties.Resources.deleteIcon;
this.deleteMoveButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.deleteMoveButton.Location = new System.Drawing.Point(152, 307);
+ this.deleteMoveButton.Location = new System.Drawing.Point(152, 286);
this.deleteMoveButton.Margin = new System.Windows.Forms.Padding(2);
this.deleteMoveButton.Name = "deleteMoveButton";
- this.deleteMoveButton.Size = new System.Drawing.Size(70, 34);
+ this.deleteMoveButton.Size = new System.Drawing.Size(70, 40);
this.deleteMoveButton.TabIndex = 2;
this.deleteMoveButton.Text = "Delete";
this.deleteMoveButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
@@ -234,10 +236,10 @@
this.editMoveButton.Enabled = false;
this.editMoveButton.Image = global::DSPRE.Properties.Resources.RenameIcon;
this.editMoveButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.editMoveButton.Location = new System.Drawing.Point(78, 307);
+ this.editMoveButton.Location = new System.Drawing.Point(78, 286);
this.editMoveButton.Margin = new System.Windows.Forms.Padding(2);
this.editMoveButton.Name = "editMoveButton";
- this.editMoveButton.Size = new System.Drawing.Size(70, 34);
+ this.editMoveButton.Size = new System.Drawing.Size(70, 40);
this.editMoveButton.TabIndex = 3;
this.editMoveButton.Text = "Edit";
this.editMoveButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
@@ -285,7 +287,7 @@
this.statusLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.statusLabel.AutoSize = true;
this.tableLayoutPanel3.SetColumnSpan(this.statusLabel, 3);
- this.statusLabel.Location = new System.Drawing.Point(5, 282);
+ this.statusLabel.Location = new System.Drawing.Point(5, 261);
this.statusLabel.Name = "statusLabel";
this.statusLabel.Padding = new System.Windows.Forms.Padding(1, 5, 1, 5);
this.statusLabel.Size = new System.Drawing.Size(39, 23);
@@ -304,6 +306,19 @@
this.pokemonNameInputComboBox.TabIndex = 31;
this.pokemonNameInputComboBox.SelectedIndexChanged += new System.EventHandler(this.pokemonNameInputComboBox_SelectedIndexChanged);
//
+ // entryCountLabel
+ //
+ this.entryCountLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
+ this.entryCountLabel.AutoSize = true;
+ this.tableLayoutPanel3.SetColumnSpan(this.entryCountLabel, 3);
+ this.entryCountLabel.Location = new System.Drawing.Point(5, 332);
+ this.entryCountLabel.Name = "entryCountLabel";
+ this.entryCountLabel.Padding = new System.Windows.Forms.Padding(1, 5, 1, 5);
+ this.entryCountLabel.Size = new System.Drawing.Size(70, 23);
+ this.entryCountLabel.TabIndex = 9;
+ this.entryCountLabel.Text = "Entry Count: ";
+ this.entryCountLabel.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ //
// LearnsetEditor
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@@ -349,5 +364,6 @@
private System.Windows.Forms.Label statusLabel;
public InputComboBox pokemonNameInputComboBox;
public System.Windows.Forms.NumericUpDown monNumberNumericUpDown;
+ private System.Windows.Forms.Label entryCountLabel;
}
}
\ No newline at end of file
diff --git a/DS_Map/Editors/LearnsetEditor.cs b/DS_Map/Editors/LearnsetEditor.cs
index 52da789..817bd4e 100644
--- a/DS_Map/Editors/LearnsetEditor.cs
+++ b/DS_Map/Editors/LearnsetEditor.cs
@@ -2,11 +2,9 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
-using System.Linq;
-using System.Windows;
+using System.Drawing;
+using System.Text;
using System.Windows.Forms;
-using static ScintillaNET.Style;
-using static System.Windows.Forms.VisualStyles.VisualStyleElement.TextBox;
using MessageBox = System.Windows.Forms.MessageBox;
namespace DSPRE {
@@ -30,8 +28,8 @@ namespace DSPRE {
private int currentLoadedId = 0;
private LearnsetData currentLoadedFile = null;
- private static bool dirty = false;
- private static readonly string formName = "Learnset Editor";
+ private bool dirty = false;
+ private readonly string formName = "Learnset Editor";
public LearnsetEditor(string[] moveNames, Control parent, PokemonEditor pokeEditor) {
this.moveNames = moveNames;
@@ -117,6 +115,8 @@ namespace DSPRE {
foreach (var elem in currentLoadedFile.list) {
movesListBox.Items.Add(ElemToString(elem));
}
+
+ UpdateEntryCountLabel();
movesListBox.EndUpdate();
}
@@ -231,6 +231,8 @@ namespace DSPRE {
if (count > 0) {
movesListBox.SelectedIndex = Math.Max(0, sel - 1);
}
+
+ UpdateEntryCountLabel();
}
UpdateByEditMode();
@@ -259,6 +261,7 @@ namespace DSPRE {
newSelection = currentLoadedFile.list.FindIndex(x => x == newEntry);
}
+ UpdateEntryCountLabel();
movesListBox.SelectedIndex = newSelection;
editMode = false;
movesListBox.Enabled = true;
@@ -273,6 +276,7 @@ namespace DSPRE {
moveInputComboBox.SelectedIndex = move;
levelNumericUpDown.Value = level;
}
+
UpdateByEditMode();
addMoveButton.Enabled = (editMode == false && CheckValidEntry());
setDirty(true);
@@ -303,5 +307,21 @@ namespace DSPRE {
editMoveButton.Enabled = true;
deleteMoveButton.Enabled = true;
}
+
+ private void UpdateEntryCountLabel(){
+ StringBuilder labelText = new StringBuilder("Entry Count: ");
+ labelText.Append(movesListBox.Items.Count);
+
+ if (movesListBox.Items.Count > LearnsetData.VanillaLimit) {
+ labelText.Append("!");
+ entryCountLabel.ForeColor = Color.FromArgb(210, 120, 0);
+ entryCountLabel.Font = new Font(entryCountLabel.Font, FontStyle.Bold);
+ } else {
+ entryCountLabel.ForeColor = Color.Black;
+ entryCountLabel.Font = new Font(entryCountLabel.Font, FontStyle.Regular);
+ }
+
+ entryCountLabel.Text = labelText.ToString();
+ }
}
}
diff --git a/DS_Map/Editors/PokemonEditor.Designer.cs b/DS_Map/Editors/PokemonEditor.Designer.cs
index 0f2940c..3cb3475 100644
--- a/DS_Map/Editors/PokemonEditor.Designer.cs
+++ b/DS_Map/Editors/PokemonEditor.Designer.cs
@@ -23,6 +23,7 @@
/// the contents of this method with the code editor.
///
private void InitializeComponent() {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PokemonEditor));
this.tabControl = new System.Windows.Forms.TabControl();
this.personalPage = new System.Windows.Forms.TabPage();
this.learnsetPage = new System.Windows.Forms.TabPage();
@@ -65,7 +66,7 @@
this.learnsetPage.Location = new System.Drawing.Point(4, 22);
this.learnsetPage.Name = "learnsetPage";
this.learnsetPage.Padding = new System.Windows.Forms.Padding(3);
- this.learnsetPage.Size = new System.Drawing.Size(1024, 534);
+ this.learnsetPage.Size = new System.Drawing.Size(1024, 526);
this.learnsetPage.TabIndex = 1;
this.learnsetPage.Text = "Learnset Editor";
this.learnsetPage.UseVisualStyleBackColor = true;
@@ -75,7 +76,7 @@
this.evoPage.Location = new System.Drawing.Point(4, 22);
this.evoPage.Name = "evoPage";
this.evoPage.Padding = new System.Windows.Forms.Padding(3);
- this.evoPage.Size = new System.Drawing.Size(1024, 534);
+ this.evoPage.Size = new System.Drawing.Size(1024, 526);
this.evoPage.TabIndex = 2;
this.evoPage.Text = "Evolution Editor";
this.evoPage.UseVisualStyleBackColor = true;
@@ -86,24 +87,24 @@
this.syncChangesCheckbox.Dock = System.Windows.Forms.DockStyle.Bottom;
this.syncChangesCheckbox.Location = new System.Drawing.Point(3, 3);
this.syncChangesCheckbox.Name = "syncChangesCheckbox";
- this.syncChangesCheckbox.Size = new System.Drawing.Size(171, 17);
+ this.syncChangesCheckbox.Size = new System.Drawing.Size(177, 17);
this.syncChangesCheckbox.TabIndex = 1;
- this.syncChangesCheckbox.Text = "Synchronize Chosen Pokemon";
+ this.syncChangesCheckbox.Text = "Synchronize Pokémon selection";
this.syncChangesCheckbox.UseVisualStyleBackColor = true;
//
// syncChangesLabel
//
this.syncChangesLabel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left | System.Windows.Forms.AnchorStyles.Right)));
this.syncChangesLabel.AutoSize = true;
- this.syncChangesLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.syncChangesLabel.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.syncChangesLabel.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.syncChangesLabel.ForeColor = System.Drawing.SystemColors.Highlight;
- this.syncChangesLabel.Location = new System.Drawing.Point(177, 5);
- this.syncChangesLabel.Margin = new System.Windows.Forms.Padding(0);
+ this.syncChangesLabel.Location = new System.Drawing.Point(186, 10);
this.syncChangesLabel.Name = "syncChangesLabel";
- this.syncChangesLabel.Size = new System.Drawing.Size(472, 13);
+ this.syncChangesLabel.Size = new System.Drawing.Size(433, 13);
this.syncChangesLabel.TabIndex = 2;
- this.syncChangesLabel.Text = "When this CheckBox is marked, all changes in any tab will be synchronized accross" +
- " the other tabs.";
+ this.syncChangesLabel.Text = "When this CheckBox is marked, mon selection will be synchronized accross all tabs" +
+ " below.";
//
// flowLayoutPanel1
//
@@ -135,8 +136,9 @@
this.Controls.Add(this.flowLayoutPanel1);
this.Controls.Add(this.tabControl);
this.DoubleBuffered = true;
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "PokemonEditor";
- this.Text = "PokemonEditor";
+ this.Text = "Pokémon Editor";
this.tabControl.ResumeLayout(false);
this.flowLayoutPanel1.ResumeLayout(false);
this.flowLayoutPanel1.PerformLayout();
diff --git a/DS_Map/Editors/PokemonEditor.resx b/DS_Map/Editors/PokemonEditor.resx
index 1af7de1..f6489bb 100644
--- a/DS_Map/Editors/PokemonEditor.resx
+++ b/DS_Map/Editors/PokemonEditor.resx
@@ -117,4 +117,1561 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+
+ AAABAAEAlpYAAAEAIABwawEAFgAAACgAAACWAAAALAEAAAEAIAAAAAAAkF8BAMMOAADDDgAAAAAAAAAA
+ AAAAgJgAAICYAACAmBQAgJg7AICYcACAmKsAgJjeAICY/ACAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/ACAmN4AgJirAICYcACAmDsAgJgUAICYAACA
+ mAAAgJgAAICYAACAmBQAgJg7AICYcACAmKsAgJjeAICY/ACAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/ACAmN4AgJirAICYcACAmDsAgJgUAICYAACA
+ mAAAgJgGAICYEQCAmCYAgJhKAICYewCAmLEAgJjhAICY/ACAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/ACAmOEAgJixAICYewCAmEoAgJgmAICYEQCA
+ mAYAgJgwAICYOQCAmEoAgJhpAICYkgCAmL4AgJjmAICY/ACAmP8AgJj/AH+X/wB/l/8Af5f/AH+X/wB/
+ l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/
+ l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/
+ l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/
+ l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/
+ l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/
+ l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/
+ l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/
+ l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/
+ l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wCAmP8AgJj/AICY/ACAmOYAgJi+AICYkgCAmGkAgJhKAICYOQCA
+ mDAAgJhoAICYbwCAmHsAgJiSAICYrwCAmNAAgJjtAICY/QB/l/8Af5f/AH+X/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9
+ lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9
+ lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9
+ lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH+X/wB/l/8Af5f/AICY/QCAmO0AgJjQAICYrwCAmJIAgJh7AICYbwCA
+ mGgAgJimAICYqgCAmLEAgJi+AICY0ACAmOMAgJj0AICY/gB/l/8Af5f/AH+W/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9
+ lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9
+ lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9
+ lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH+W/wB/l/8Af5f/AICY/gCAmPQAgJjjAICY0ACAmL4AgJixAICYqgCA
+ mKYAgJjcAICY3gCAmOEAgJjmAICY7QCAmPQAgJj7AICY/wCAmP8AgJj/AICY/wCAmf8AgZn/AIGZ/wCB
+ mf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCB
+ mf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCAmf8AgJn/AICZ/wCB
+ mf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGB
+ mf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGB
+ mf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGB
+ mf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AIGZ/wCBmf8AgZn/AIGZ/wCB
+ mf8AgZn/AICZ/wCAmf8AgJn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCB
+ mf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCB
+ mf8AgZn/AIGZ/wCBmf8AgJn/AICY/wCAmP8AgJj/AICY/wCAmPsAgJj0AICY7QCAmOYAgJjhAICY3gCA
+ mNwAgJj7AICY/ACAmPwAgJj8AICY/QCAmP4AgJj/AIGZ/wCCmv8Ag5z/AIWe/wCGn/8Ah5//AIeg/wCH
+ oP8Ah6D/AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCH
+ n/8Ah5//AIef/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCH
+ oP8Bh6D/A4ig/wSIof8FiaH/Bomh/weJof8HiaH/B4mh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJ
+ of8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJ
+ of8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJ
+ of8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/B4mh/weJof8HiaH/Bomh/wWJof8EiKH/A4ig/wGH
+ oP8Ah6D/AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIef/wCH
+ n/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCH
+ oP8Ah6D/AIeg/wCHn/8Ahp//AIWe/wCDnP8Agpr/AIGZ/wCAmP8AgJj+AICY/QCAmPwAgJj8AICY/ACA
+ mPsAgJj/AICY/wCAmP8AgJj/AH+X/wB/l/8AgJj/AIKa/wCFnv8AiaL/AI2n/wCQqv8Akaz/AJKs/wCR
+ rP8Akaz/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCR
+ q/8Akav/AJGr/wCRq/8Akav/AJGr/wCQq/8AkKv/AJCr/wCQq/8AkKv/AJCr/wCQq/8AkKv/AJCr/wGR
+ q/8Dkqz/B5St/wuVrv8Ol6//EJiw/xGYsP8RmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCY
+ sP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCY
+ sP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCY
+ sP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xGYsP8RmLD/EJiw/w6Xr/8Lla7/B5St/wOS
+ rP8Bkav/AJCr/wCQq/8AkKv/AJCr/wCQq/8AkKv/AJCr/wCQq/8AkKv/AJGr/wCRq/8Akav/AJGr/wCR
+ q/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCR
+ rP8Akaz/AJKs/wCRrP8AkKr/AI2n/wCJov8AhZ7/AIKa/wCAmP8Af5f/AH+X/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AH+X/wB/l/8AgJj/AIOc/wCJov8AkKr/AJax/wCbt/8Anrr/AJ+7/wCe
+ u/8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCe
+ uv8Anrr/AJ26/wCduv8Anbn/AJ25/wCduf8Anbn/AJ25/wCduf8Anbn/AJ25/wCcuf8AnLn/AJ25/wKd
+ uv8GoLv/DKK9/xOlv/8ZqMH/HarC/x6qwv8eqsL/HarC/xyqwv8bqcL/G6nC/xupwv8bqcL/G6nC/xup
+ wv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xup
+ wv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xup
+ wv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8cqsL/HarC/x6qwv8eqsL/HarC/xmowf8Tpb//DKK9/wag
+ u/8Cnbr/AJ25/wCcuf8AnLn/AJ25/wCduf8Anbn/AJ25/wCduf8Anbn/AJ25/wCduf8Anbr/AJ26/wCe
+ uv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCe
+ uv8Anrv/AJ+7/wCeuv8Am7f/AJax/wCQqv8AiaL/AIOc/wCAmP8Af5f/AH+X/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH+W/wB/lv8AgJj/AIWe/wCNp/8AlrH/AJ+8/wCnxP8Aqsj/AKvK/wCr
+ yf8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCq
+ yP8Aqsj/AKrI/wCqyP8Aqsj/AKnI/wCpyP8Aqcj/AKnI/wCpyP8Aqcj/AKnH/wCpx/8Aqcf/AKnH/wKq
+ yP8Ircr/EbHN/xu10P8judL/KbvU/yu81P8rvNT/KrzU/ym71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi7
+ 1P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi7
+ 1P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi7
+ 1P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8pu9T/KrzU/yu81P8rvNT/KbvU/yO50v8btdD/EbHN/wit
+ yv8Cqsj/AKnH/wCpx/8Aqcf/AKnH/wCpyP8Aqcj/AKnI/wCpyP8Aqcj/AKnI/wCqyP8Aqsj/AKrI/wCq
+ yP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCq
+ yP8Aq8n/AKvK/wCqyP8Ap8T/AJ+8/wCWsf8Ajaf/AIWe/wCAmP8Af5b/AH+W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgJn/AIaf/wCQqv8Am7f/AKfE/wCvzv8AtNP/ALXV/wC1
+ 1P8AtNP/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz
+ 0/8As9P/ALTT/wG00/8BtNP/ArTT/wK00/8CtNP/ArTT/wK00/8CtNP/ArTT/wG00/8As9P/AbTT/wS1
+ 1P8Mudb/Fr3Z/yLC3P8sxt//Msnh/zXK4v82y+L/Nsri/zXK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK
+ 4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK
+ 4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK
+ 4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v81yuL/Nsri/zbL4v81yuL/Msnh/yzG3/8iwtz/Fr3Z/wy5
+ 1v8EtdT/AbTT/wCz0/8BtNP/ArTT/wK00/8CtNP/ArTT/wK00/8CtNP/ArTT/wG00/8BtNP/ALTT/wCz
+ 0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wC0
+ 0/8AtdT/ALXV/wC00/8Ar87/AKfE/wCbt/8AkKr/AIaf/wCAmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIeg/wCRrP8Anrr/AKrI/wC00/8Audn/ALrb/wC6
+ 2v8Audn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC4
+ 2P8BuNj/ArnZ/wS62f8Gu9r/CLzb/wm82/8Kvdv/Cr3b/wq82/8JvNv/Cbzb/wi82/8HvNv/CLzb/wu9
+ 3P8SwN7/HMTh/yfJ5P8wzeb/ONDo/zzS6f8/0+r/QdTq/0LU6v9D1er/Q9Xq/0PV6v9D1er/Q9Tq/0PU
+ 6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU
+ 6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU
+ 6v9D1Or/Q9Tq/0PV6v9D1er/Q9Xq/0PV6v9C1Or/QdTq/z/T6v880un/ONDo/zDN5v8nyeT/HMTh/xLA
+ 3v8Lvdz/CLzb/we82/8IvNv/Cbzb/wm82/8KvNv/Cr3b/wq92/8JvNv/CLzb/wa72v8Eutn/ArnZ/wG4
+ 2P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5
+ 2f8Autr/ALrb/wC52f8AtNP/AKrI/wCeuv8Akaz/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIeg/wCSrP8An7v/AKvK/wC11f8Autv/ALzd/wC8
+ 3P8Au9v/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALna/wC5
+ 2v8Butr/BLvb/wm93f8OwN7/EsHf/xTD4P8Vw+D/FsPg/xXD4P8Vw+D/FMPg/xPC4P8SwuD/E8Lg/xXD
+ 4f8axeL/Isnk/yrM5/8y0On/OdPr/0DV7P9G1+3/S9nt/0/b7f9R3O7/Utzu/1Lc7v9R3O7/UNvu/1Db
+ 7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db
+ 7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db
+ 7v9Q2+7/UNvu/1Hc7v9S3O7/Utzu/1Hc7v9P2+3/S9nt/0bX7f9A1ez/OdPr/zLQ6f8qzOf/Isnk/xrF
+ 4v8Vw+H/E8Lg/xLC4P8TwuD/FMPg/xXD4P8Vw+D/FsPg/xXD4P8Uw+D/EsHf/w7A3v8Jvd3/BLvb/wG6
+ 2v8Audr/ALna/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC7
+ 2/8AvNz/ALzd/wC62/8AtdX/AKvK/wCfu/8Akqz/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIeg/wCRrP8Anrv/AKvJ/wC11P8Autr/ALzc/wC7
+ 3P8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC52v8Audn/ALnZ/wC5
+ 2f8Cutr/B7zb/w6/3v8Ww+D/Hcbi/yHI4/8jyOT/I8nk/yLI5P8iyOP/Icjj/yDH4/8fx+P/H8fj/yHI
+ 5P8kyeT/KMvm/y3N5/8z0On/OtPq/0PW7P9M2e3/Vd3u/1zf7/9g4e//YeHv/2Dh7/9f4O//XuDv/17g
+ 7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g
+ 7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g
+ 7/9e4O//XuDv/1/g7/9g4e//YeHv/2Dh7/9c3+//Vd3u/0zZ7f9D1uz/OtPq/zPQ6f8tzef/KMvm/yTJ
+ 5P8hyOT/H8fj/x/H4/8gx+P/Icjj/yLI4/8iyOT/I8nk/yPI5P8hyOP/Hcbi/xbD4P8Ov97/B7zb/wK6
+ 2v8Audn/ALnZ/wC52f8Audr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC6
+ 2v8Au9z/ALzc/wC62v8AtdT/AKvJ/wCeu/8Akaz/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIeg/wCRrP8Anrr/AKrI/wC00/8Audn/ALvb/wC6
+ 2v8Audn/ALnZ/wC52f8Audn/ALnZ/wC52f8Audn/ALnZ/wC52f8Audn/ALnZ/wC42f8AuNj/ALjY/wC4
+ 2P8Dudn/Crzb/xPB3v8exeH/J8nk/yzM5f8vzeb/L83m/y7M5v8tzOb/Lczm/y3M5f8szOX/Lczl/y3M
+ 5v8uzOb/MM3n/zLO5/820Oj/PNLp/0bW6v9S2uz/Xd/t/2fi7/9s5O//buXv/27l7/9t5O//bOTv/2zk
+ 7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk
+ 7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk
+ 7/9s5O//bOTv/23k7/9u5e//buXv/2zk7/9n4u//Xd/t/1La7P9G1ur/PNLp/zbQ6P8yzuf/MM3n/y7M
+ 5v8tzOb/Lczl/yzM5f8tzOX/Lczm/y3M5v8uzOb/L83m/y/N5v8szOX/J8nk/x7F4f8Twd7/Crzb/wO5
+ 2f8AuNj/ALjY/wC42P8AuNn/ALnZ/wC52f8Audn/ALnZ/wC52f8Audn/ALnZ/wC52f8Audn/ALnZ/wC5
+ 2f8Autr/ALvb/wC52f8AtNP/AKrI/wCeuv8Akaz/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6
+ 2v8Audn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wK5
+ 2f8Gu9r/Dr7c/xnD3/8kyOL/Lszl/zTO5/83z+j/N9Do/zbP6P82z+f/Ns/n/zfP5/840Oj/OdDo/zrQ
+ 6P860Oj/OdDo/znQ6P880ej/QdPp/0vX6v9Y3Oz/ZeHu/2/l7/915/D/eOjw/3no8P956PD/eejw/3no
+ 8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no
+ 8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no
+ 8P956PD/eejw/3no8P956PD/eOjw/3Xn8P9v5e//ZeHu/1jc7P9L1+r/QdPp/zzR6P850Oj/OdDo/zrQ
+ 6P860Oj/OdDo/zjQ6P83z+f/Ns/n/zbP5/82z+j/N9Do/zfP6P80zuf/Lszl/yTI4v8Zw9//Dr7c/wa7
+ 2v8Cudn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6
+ 2v8Audn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wK42P8Dudn/Brra/wm8
+ 2/8Pvtz/FsLe/yDG4f8qyuT/Ms3m/zfQ6P850en/OdHp/znQ6P850Oj/O9Hp/z7S6f9B0+n/RNXq/0fW
+ 6v9H1ur/RtXq/0XV6v9G1er/Stfq/1Pa6/9e3u3/aePu/3Pm7/966fD/f+vx/4Ps8v+F7fP/h+3z/4ju
+ 9P+J7vT/iO/0/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv
+ 9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/0/4nu
+ 9P+I7vT/h+3z/4Xt8/+D7PL/f+vx/3rp8P9z5u//aePu/17e7f9T2uv/Stfq/0bV6v9F1er/RtXq/0fW
+ 6v9H1ur/RNXq/0HT6f8+0un/O9Hp/znQ6P850Oj/OdHp/znR6f830Oj/Ms3m/yrK5P8gxuH/FsLe/w++
+ 3P8JvNv/Brra/wO52f8CuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6
+ 2v8Audn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC31/8At9f/AbjY/wS52f8Iu9r/Db3c/xPA
+ 3f8Zw9//IMbh/yfJ4/8uzOX/NM7n/zfQ6P840On/ONDp/zjQ6P850Oj/PNLp/0PU6v9J1+v/UNnr/1Tb
+ 7P9W2+z/Vdvs/1Pa7P9T2uv/Vtvs/1ze7P9k4e3/bOTu/3Xn8P996vH/hO3y/4zv9P+S8fX/l/P3/5n0
+ +P+Z9fn/mfb5/5j2+v+X9vv/l/f7/5f3+/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f3
+ +/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f2+/+Y9vr/mfb5/5n1
+ +f+Z9Pj/l/P3/5Lx9f+M7/T/hO3y/33q8f915/D/bOTu/2Th7f9c3uz/Vtvs/1Pa6/9T2uz/Vdvs/1bb
+ 7P9U2+z/UNnr/0nX6/9D1Or/PNLp/znQ6P840Oj/ONDp/zjQ6f830Oj/NM7n/y7M5f8nyeP/IMbh/xnD
+ 3/8TwN3/Db3c/wi72v8Eudn/AbjY/wC31/8At9f/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6
+ 2v8Audn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALfY/wC31/8At9f/AbjY/wa62f8Nvdv/FcHe/x7F
+ 4P8lyOL/Ksrk/y7M5f8yzuf/Nc/n/zfQ6P830Oj/Ns/o/zbP6P840Oj/PtLp/0fW6v9R2ev/W93t/2Hg
+ 7f9k4e7/ZOHu/2Pg7f9i4O3/Y+Dt/2bh7v9q4+7/cOXv/3bn8P9+6vH/h+3z/5Lx9f+b9Pf/ovb4/6X4
+ +v+m+fv/pfr8/6T6/P+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6
+ /f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+k+vz/pfr8/6b5
+ +/+l+Pr/ovb4/5v09/+S8fX/h+3z/37q8f925/D/cOXv/2rj7v9m4e7/Y+Dt/2Lg7f9j4O3/ZOHu/2Th
+ 7v9h4O3/W93t/1HZ6/9H1ur/PtLp/zjQ6P82z+j/Ns/o/zfQ6P830Oj/Nc/n/zLO5/8uzOX/Ksrk/yXI
+ 4v8exeD/FcHe/w292/8Gutn/AbjY/wC31/8At9f/ALfY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6
+ 2v8Audn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC32P8AuNj/ArnY/wi72v8Rv93/HMTg/yfJ
+ 4/8uzOX/M87n/zbP5/830Oj/ONDo/zjQ6P840Oj/N9Do/zfQ6P860ej/QdPp/0vX6v9Y3Oz/ZODu/2zk
+ 7/9w5e//ceXv/3Hl7/9w5e//cOXv/3Hl7/9y5u//defw/3jo8P9/6vH/iO3y/5Pw9P+d8vX/pfT2/6j1
+ 9v+q9vb/qfX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j1
+ 9v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qfX2/6r2
+ 9v+o9fb/pfT2/53y9f+T8PT/iO3y/3/q8f946PD/defw/3Lm7/9x5e//cOXv/3Dl7/9x5e//ceXv/3Dl
+ 7/9s5O//ZODu/1jc7P9L1+r/QdPp/zrR6P830Oj/N9Do/zjQ6P840Oj/ONDo/zfQ6P82z+f/M87n/y7M
+ 5f8nyeP/HMTg/xG/3f8Iu9r/ArnY/wC42P8At9j/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6
+ 2v8Audn/ALjY/wC42P8AuNj/ALjY/wC42P8BuNj/AbjY/wG52P8Dudn/B7va/w6+3P8Xwt//I8fi/y3L
+ 5f81z+f/OdHo/zzS6f890un/PtLp/z/S6f8+0un/PdLp/z3S6f9A0+n/R9bq/1La6/9f3u3/a+Pu/3Tm
+ 7/956PD/e+nx/3zp8f996fH/ferx/33q8f996vH/ferx/3/q8f+C6vH/iOvx/4/r8P+V6+//muvt/53p
+ 6/+f5+j/oOXl/6Hj4/+h4uH/oeHg/6Hh4P+h4eD/oeHh/6Hh4f+h4eH/oeHh/6Hh4f+h4eH/oeHh/6Hh
+ 4f+h4eH/oeHh/6Hh4f+h4eH/oeHh/6Hh4f+h4eH/oeHh/6Hh4P+h4eD/oeHg/6Hi4f+h4+P/oOXl/5/n
+ 6P+d6ev/muvt/5Xr7/+P6/D/iOvx/4Lq8f9/6vH/ferx/33q8f996vH/ferx/33p8f986fH/e+nx/3no
+ 8P905u//a+Pu/1/e7f9S2uv/R9bq/0DT6f890un/PdLp/z7S6f8/0un/PtLp/z3S6f880un/OdHo/zXP
+ 5/8ty+X/I8fi/xfC3/8Ovtz/B7va/wO52f8Budj/AbjY/wG42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6
+ 2v8Audn/ALjY/wC42P8AuNj/ALfY/wC42P8CuNj/BLnZ/we72v8Lvdv/EL/d/xbC3v8fxeH/KMnk/zDN
+ 5v830Oj/PdLp/0LU6v9F1er/SNbq/0rX6v9K1+r/Sdbq/0nW6v9L1+r/UNnr/1nd7P9k4e3/buTv/3fo
+ 8P9+6vH/g+zy/4fu8/+L7/T/jfD1/47x9v+N8fb/jPH3/4vw9v+J7fP/hunw/4Pk6/+A3uX/f9jf/4DS
+ 1/+DzM//h8bH/4rBwP+Mvbv/jby5/427uP+NvLn/jby6/428uv+NvLr/jby6/428uv+NvLr/jby6/428
+ uv+NvLr/jby6/428uv+NvLr/jby6/428uv+NvLr/jby6/428uf+Nu7j/jby5/4y9u/+KwcD/h8bH/4PM
+ z/+A0tf/f9jf/4De5f+D5Ov/hunw/4nt8/+L8Pb/jPH3/43x9v+O8fb/jfD1/4vv9P+H7vP/g+zy/37q
+ 8f936PD/buTv/2Th7f9Z3ez/UNnr/0vX6v9J1ur/Sdbq/0rX6v9K1+r/SNbq/0XV6v9C1Or/PdLp/zfQ
+ 6P8wzeb/KMnk/x/F4f8Wwt7/EL/d/wu92/8Hu9r/BLnZ/wK42P8AuNj/ALfY/wC42P8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6
+ 2v8Audn/ALjY/wC42P8At9f/ALfX/wC32P8Dudj/CLva/w6+3P8Uwd7/G8Pg/yHG4f8nyeP/LMvl/zLO
+ 5/840Oj/P9Pp/0fW6v9O2Ov/VNvs/1jc7P9Z3Oz/WNzs/1fc7P9Y3Oz/XN7s/2Hg7f9p4u7/cOXv/3jo
+ 8P+A6/L/ie7z/5Hx9f+Y8/f/nPX4/573+v+f+fz/nfn8/5n2+v+Q8PX/gubt/3PZ4/9kzNj/W8DL/1q0
+ vv9eqa//ZJ6g/2uVlP9vj4v/cYyI/3GMh/9xjYj/cI2J/3COif9wjon/cI6J/3COif9wjon/cI6J/3CO
+ if9wjon/cI6J/3COif9wjon/cI6J/3COif9wjon/cI2J/3GNiP9xjIf/cYyI/2+Pi/9rlZT/ZJ6g/16p
+ r/9atL7/W8DL/2TM2P9z2eP/gubt/5Dw9f+Z9vr/nfn8/5/5/P+e9/r/nPX4/5jz9/+R8fX/ie7z/4Dr
+ 8v946PD/cOXv/2ni7v9h4O3/XN7s/1jc7P9X3Oz/WNzs/1nc7P9Y3Oz/VNvs/07Y6/9H1ur/P9Pp/zjQ
+ 6P8yzuf/LMvl/yfJ4/8hxuH/G8Pg/xTB3v8Ovtz/CLva/wO52P8At9j/ALfX/wC31/8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6
+ 2v8Audn/ALjY/wC42P8At9f/ALfX/wC42P8Eudn/DL3b/xXB3v8exeD/Jsjj/yvL5P8uzOb/Mc3m/zTO
+ 5/850ej/QtTp/0zY6/9X3Oz/YN/t/2bh7v9o4u7/Z+Lu/2bi7v9m4e7/aOLu/2vj7v9u5e//c+bv/3no
+ 8P+B6/L/jO/0/5fy9f+g9ff/pvf5/6r6+/+s/P3/qvz9/6P4+v+U7vL/fd7m/2HL1/9It8f/OKW1/zOU
+ ov84hI3/QnZ5/0xqaP9RYVz/VF1X/1RdVv9TXlf/U19Z/1NfWf9TX1n/U19Z/1NfWf9TX1n/U19Z/1Nf
+ Wf9TX1n/U19Z/1NfWf9TX1n/U19Z/1NfWf9TX1n/U19Z/1NeV/9UXVb/VF1X/1FhXP9Mamj/QnZ5/ziE
+ jf8zlKL/OKW1/0i3x/9hy9f/fd7m/5Tu8v+j+Pr/qvz9/6z8/f+q+vv/pvf5/6D19/+X8vX/jO/0/4Hr
+ 8v956PD/c+bv/27l7/9r4+7/aOLu/2bh7v9m4u7/Z+Lu/2ji7v9m4e7/YN/t/1fc7P9M2Ov/QtTp/znR
+ 6P80zuf/Mc3m/y7M5v8ry+T/Jsjj/x7F4P8Vwd7/DL3b/wS52f8AuNj/ALfX/wC31/8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6
+ 2v8Audn/ALjY/wC42P8AuNj/ALjY/wK52P8Hu9r/EL/d/xvD4P8myOP/L8zl/zTO5/82z+f/Ns/o/zjQ
+ 6P890un/RtXq/1La6/9f3+3/auPu/3Hl7/905/D/defw/3Tn8P905vD/dOfw/3Xn8P925/D/eOjw/3zp
+ 8P+D6/H/jO3y/5bv8/+f8vT/pfP0/6r19f+t9vb/rPX1/6Xv8P+T4+b/ddDY/1K5xv8yobL/HYye/xd4
+ iP8dZXD/KFVY/zNHRP86PTf/PTkx/z04MP88OTH/PDoz/zw7M/88OzP/PDsz/zw7M/88OzP/PDsz/zw7
+ M/88OzP/PDsz/zw7M/88OzP/PDsz/zw7M/88OzP/PDoz/zw5Mf89ODD/PTkx/zo9N/8zR0T/KFVY/x1l
+ cP8XeIj/HYye/zKhsv9Sucb/ddDY/5Pj5v+l7/D/rPX1/6329v+q9fX/pfP0/5/y9P+W7/P/jO3y/4Pr
+ 8f986fD/eOjw/3bn8P915/D/dOfw/3Tm8P905/D/defw/3Tn8P9x5e//auPu/1/f7f9S2uv/RtXq/z3S
+ 6f840Oj/Ns/o/zbP5/80zuf/L8zl/ybI4/8bw+D/EL/d/we72v8Cudj/ALjY/wC42P8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC5
+ 2v8AuNn/AbjY/wG42P8Cudn/BLrZ/wi72v8Ovtz/FsLe/yHG4f8ry+T/NM7n/znQ6P880en/PdLp/0DT
+ 6f9F1er/Ttjr/1nc7P9l4e7/cOXv/3jo8P986fH/furx/4Dq8f+A6vH/gevy/4Hr8v+B7PL/gezz/4Pr
+ 8v+F6/H/ierw/43o7v+R5+v/leXo/5nk5v+e4uP/n9/e/5nX1/+Iysz/are9/0ihrP8oipn/EnWF/wxi
+ cP8RUFn/HD9C/ycyL/8tKSH/LyQb/zAjGv8vJBz/LiYe/y4mHv8uJh7/LiYe/y4mHv8uJh7/LiYe/y4m
+ Hv8uJh7/LiYe/y4mHv8uJh7/LiYe/y4mHv8uJh7/LiYe/y8kHP8wIxr/LyQb/y0pIf8nMi//HD9C/xFQ
+ Wf8MYnD/EnWF/yiKmf9Ioaz/are9/4jKzP+Z19f/n9/e/57i4/+Z5Ob/leXo/5Hn6/+N6O7/ierw/4Xr
+ 8f+D6/L/gezz/4Hs8v+B6/L/gevy/4Dq8f+A6vH/furx/3zp8f946PD/cOXv/2Xh7v9Z3Oz/Ttjr/0XV
+ 6v9A0+n/PdLp/zzR6f850Oj/NM7n/yvL5P8hxuH/FsLe/w6+3P8Iu9r/BLrZ/wK52f8BuNj/AbjY/wC4
+ 2f8Audr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC5
+ 2f8AuNj/AbjY/wS52f8Iu9r/DL3b/xG/3f8Xwt//H8Xh/yfJ4/8uzOb/Ns/n/zzR6f9B0+n/RdXq/0rX
+ 6v9Q2ev/WNzs/2Hf7f9q4+7/c+bv/3rp8P+A6/H/huzy/4rt8v+N7vP/kPD0/5Hx9v+R8/f/kPP4/47x
+ 9v+J7PP/g+bt/3ze5v921t7/dM7W/3jIzf9+wcT/grq6/4Cwr/9zo6P/XJOV/z+Bh/8lb3j/E11p/w5O
+ V/8RPkT/GDEx/yElIf8lHRb/JxoR/ycZEP8nGhH/JhsS/yYbE/8mGxP/JhsT/ycbE/8nGxP/JxsT/ycb
+ E/8nGxP/JxsT/ycbE/8nGxP/JhsT/yYbE/8mGxP/JhsS/ycaEf8nGRD/JxoR/yUdFv8hJSH/GDEx/xE+
+ RP8OTlf/E11p/yVveP8/gYf/XJOV/3Ojo/+AsK//grq6/37BxP94yM3/dM7W/3bW3v983ub/g+bt/4ns
+ 8/+O8fb/kPP4/5Hz9/+R8fb/kPD0/43u8/+K7fL/huzy/4Dr8f966fD/c+bv/2rj7v9h3+3/WNzs/1DZ
+ 6/9K1+r/RdXq/0HT6f880en/Ns/n/y7M5v8nyeP/H8Xh/xfC3/8Rv93/DL3b/wi72v8Eudn/AbjY/wC4
+ 2P8Audn/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALna/wC5
+ 2f8AuNj/ArjY/we62v8Ovdz/FcHe/xzE4P8jx+L/KMnk/yzL5f8xzeb/Ns/o/z3S6f9F1er/Tdjr/1bb
+ 7P9d3u3/Y+Dt/2nj7v9u5e//dOfw/3vp8P+D6/H/i+7y/5Pw9P+Z8vX/nfT3/6D3+f+h+fz/n/n8/5n1
+ +f+M7PL/et/o/2bQ2/9WwM3/TrK//1CmsP9XmqD/X4+P/2KDgf9bd3T/TGtq/zpfYP8oVFf/G0hN/xc+
+ Qf8YMzP/HSkm/yEhG/8kGxP/JRkQ/yUYD/8lGRD/JRoR/yUaEf8lGhL/JRoS/yUaEv8lGhL/JRoS/yUa
+ Ev8lGhL/JRoS/yUaEv8lGhL/JRoS/yUaEv8lGhH/JRoR/yUZEP8lGA//JRkQ/yQbE/8hIRv/HSkm/xgz
+ M/8XPkH/G0hN/yhUV/86X2D/TGtq/1t3dP9ig4H/X4+P/1eaoP9QprD/TrK//1bAzf9m0Nv/et/o/4zs
+ 8v+Z9fn/n/n8/6H5/P+g9/n/nfT3/5ny9f+T8PT/i+7y/4Pr8f976fD/dOfw/27l7/9p4+7/Y+Dt/13e
+ 7f9W2+z/Tdjr/0XV6v890un/Ns/o/zHN5v8sy+X/KMnk/yPH4v8cxOD/FcHe/w693P8Hutr/ArjY/wC4
+ 2P8Audn/ALna/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALna/wC5
+ 2f8AuNj/A7nZ/wq82/8TwN3/HsXg/yfJ4/8ty+X/MM3m/zLO5/80zuf/ONDo/0DT6f9K1+r/Vtvs/2Hf
+ 7f9p4u7/buTv/3Hm7/9z5u//dufw/3zp8f+F7PL/j+/z/5ry9f+i9Pb/p/b3/6v5+v+t+/v/qvn7/6Dz
+ 9v+M5uv/b9Pd/1G+zP84qbr/K5an/yuFkv8zdXz/PmZn/0VZVv9FT0n/P0dC/zZCPv8tPTr/Jzg2/yUz
+ Mf8lLir/Jyok/yomH/8rIxv/LCIZ/ywiGf8sIhr/KyIa/ysiGv8rIhr/LCIa/ywiGv8sIhr/LCMa/ywj
+ Gv8sIxr/LCMa/ywiGv8sIhr/LCIa/ysiGv8rIhr/KyIa/ywiGv8sIhn/LCIZ/ysjG/8qJh//Jyok/yUu
+ Kv8lMzH/Jzg2/y09Ov82Qj7/P0dC/0VPSf9FWVb/PmZn/zN1fP8rhZL/K5an/zipuv9Rvsz/b9Pd/4zm
+ 6/+g8/b/qvn7/637+/+r+fr/p/b3/6L09v+a8vX/j+/z/4Xs8v986fH/dufw/3Pm7/9x5u//buTv/2ni
+ 7v9h3+3/Vtvs/0rX6v9A0+n/ONDo/zTO5/8yzuf/MM3m/y3L5f8nyeP/HsXg/xPA3f8KvNv/A7nZ/wC4
+ 2P8Audn/ALna/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6
+ 2v8Cudn/Brva/w++3P8Zw9//Jcji/y7M5f81z+f/N9Do/zjQ6P850ej/PdLp/0XV6v9Q2ev/Xd7t/2ni
+ 7v9y5u//d+fw/3jo8P956PD/e+nw/4Dq8f+I7fP/k/D0/53z9v+l9fb/qvX2/6719f+u9PP/qu/v/57m
+ 5/+G1tv/ZcHK/0GpuP8kkqP/FH2P/xNqeP8cV1//KEhJ/zI7Nv82Myz/Ni8n/zQvJ/8yLyn/MTAq/zIx
+ K/81Miv/ODMs/zo0Lf88NS3/PTUt/z01Lf88NS3/PDUt/zw1Lf88NS3/PDQt/zw0Lf87NC3/OzQt/zs0
+ Lf87NC3/OzQt/zs0Lf88NC3/PDQt/zw1Lf88NS3/PDUt/zw1Lf89NS3/PTUt/zw1Lf86NC3/ODMs/zUy
+ K/8yMSv/MTAq/zIvKf80Lyf/Ni8n/zYzLP8yOzb/KEhJ/xxXX/8Tanj/FH2P/ySSo/9Bqbj/ZcHK/4bW
+ 2/+e5uf/qu/v/6708/+u9fX/qvX2/6X19v+d8/b/k/D0/4jt8/+A6vH/e+nw/3no8P946PD/d+fw/3Lm
+ 7/9p4u7/Xd7t/1DZ6/9F1er/PdLp/znR6P840Oj/N9Do/zXP5/8uzOX/Jcji/xnD3/8Pvtz/Brva/wK5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anbr/AKrI/wC00/8Cudn/A7vb/wa8
+ 2/8JvNv/Dr7c/xbC3v8gxuH/Ksrk/zPO5/850ej/PdLp/z/T6f9C1On/RtXq/07Y6/9Y3Oz/Y+Dt/27k
+ 7/935/D/fOnw/3/q8f+B6/H/g+vy/4jt8/+O8PX/lvP3/531+P+i9ff/pPHy/6Xr6/+j4uH/nNfW/4/J
+ yf94uLv/WaSr/ziPmv8deoj/Dmd1/wxUYP8TQ0n/HTQ0/ycpJP8tJBz/MCMb/zMmHv82KyT/OjEq/0A4
+ Mf9IQDn/UElC/1dQSf9bVU7/XVdR/15XUf9dV1H/XFZQ/1xWUP9bVk//W1VP/1pVT/9ZVU7/WVRO/1lU
+ Tv9ZVE7/WVRO/1lVTv9aVU//W1VP/1tWT/9cVlD/XFZQ/11XUf9eV1H/XVdR/1tVTv9XUEn/UElC/0hA
+ Of9AODH/OjEq/zYrJP8zJh7/MCMb/y0kHP8nKST/HTQ0/xNDSf8MVGD/Dmd1/x16iP84j5r/WaSr/3i4
+ u/+Pycn/nNfW/6Pi4f+l6+v/pPHy/6L19/+d9fj/lvP3/47w9f+I7fP/g+vy/4Hr8f9/6vH/fOnw/3fn
+ 8P9u5O//Y+Dt/1jc7P9O2Ov/RtXq/0LU6f8/0+n/PdLp/znR6P8zzuf/Ksrk/yDG4f8Wwt7/Dr7c/wm8
+ 2/8GvNv/A7vb/wK52f8AtNP/AKrI/wCduv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCRq/8Anbr/AKrI/wG00/8Eutn/CL3d/w2/
+ 3v8Twd7/GcPf/yDG4f8nyeP/L8zl/zbP5/880un/QtTq/0fW6v9M2Ov/Utrr/1nc7P9h3+3/aePu/3Hm
+ 7/946PD/f+rx/4Ts8v+K7fL/ju7z/5Lw9P+W8/j/mff7/5v4/P+b9fj/mOvu/5Tc3P+OyMf/hLSx/3eh
+ nv9kkI//TH+C/zJvdf8eYGj/ElFa/xBCSP8UNDb/Gygm/yMgGv8oHhb/LiAY/zMmHv86Lyj/Qzo0/1BH
+ Qf9fWFL/b2lk/314c/+Hgn3/i4aC/4yHg/+LhoH/iYSA/4iEf/+Hg3//hYJ+/4SCff+DgX3/goF8/4KB
+ fP+CgXz/goF8/4OBff+Egn3/hYJ+/4eDf/+IhH//iYSA/4uGgf+Mh4P/i4aC/4eCff99eHP/b2lk/19Y
+ Uv9QR0H/Qzo0/zovKP8zJh7/LiAY/ygeFv8jIBr/Gygm/xQ0Nv8QQkj/ElFa/x5gaP8yb3X/TH+C/2SQ
+ j/93oZ7/hLSx/47Ix/+U3Nz/mOvu/5v1+P+b+Pz/mff7/5bz+P+S8PT/ju7z/4rt8v+E7PL/f+rx/3jo
+ 8P9x5u//aePu/2Hf7f9Z3Oz/Utrr/0zY6/9H1ur/QtTq/zzS6f82z+f/L8zl/yfJ4/8gxuH/GcPf/xPB
+ 3v8Nv97/CL3d/wS62f8BtNP/AKrI/wCduv8Akav/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCRq/8Anbn/AKrI/wG00/8Gu9r/DcDe/xXD
+ 4P8exeH/JMji/yrK5P8uzOX/Ms7n/zfQ6P890un/RdXq/07Y6/9X3Oz/X9/t/2Xh7v9q4+7/b+Xv/3Pm
+ 7/956PD/gevx/4rt8v+S7/T/mfH1/5zz9v+c9vr/mvn9/5b4/f+Q8fb/iOHl/3/Iyv91qqn/aY2K/111
+ cf9PZWH/P1lX/zBQUP8kSEr/HT9B/xo1Nv8cLCr/ICQf/yUgGf8qIRn/MCUe/zcuKP9BOTT/TkhE/2Fb
+ WP95dHH/kY2K/6ajoP+1sq//u7i2/726t/+7uLX/ubaz/7e1sv+1tLH/s7Ow/7Gyr/+vsa7/rrCu/62w
+ rf+tsK3/rrCu/6+xrv+xsq//s7Ow/7W0sf+3tbL/ubaz/7u4tf+9urf/u7i2/7Wyr/+mo6D/kY2K/3l0
+ cf9hW1j/TkhE/0E5NP83Lij/MCUe/yohGf8lIBn/ICQf/xwsKv8aNTb/HT9B/yRISv8wUFD/P1lX/09l
+ Yf9ddXH/aY2K/3Wqqf9/yMr/iOHl/5Dx9v+W+P3/mvn9/5z2+v+c8/b/mfH1/5Lv9P+K7fL/gevx/3no
+ 8P9z5u//b+Xv/2rj7v9l4e7/X9/t/1fc7P9O2Ov/RdXq/z3S6f830Oj/Ms7n/y7M5f8qyuT/JMji/x7F
+ 4f8Vw+D/DcDe/wa72v8BtNP/AKrI/wCduf8Akav/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCRq/8Anbn/AKnI/wK00/8IvNv/EsHf/xzG
+ 4v8nyeT/Lszl/zLN5v80zuf/Nc/n/zjQ6P8+0un/SNbq/1Tb7P9g3+3/auPu/3Dl7/9z5u//dOfw/3bn
+ 8P976fD/g+vy/47u8/+Z8fX/ofT2/6P09v+f9vn/mPb6/47y+P+D6O7/eNLX/2uytP9djYz/UGpm/0VP
+ Sf89QDr/NTk0/zA3Mv8sNjL/KTQw/ykvK/8pLCb/LCki/y8pIv81LSb/OjMt/0I9OP9NSkf/XVpZ/3Ry
+ cf+RkI//sK6t/8rJyP/c29r/5OPi/+bl4//k4+H/4eDf/9/f3v/d3tz/2tzb/9fb2v/V2tn/1NnY/9PZ
+ 2P/T2dj/1NnY/9Xa2f/X29r/2tzb/93e3P/f397/4eDf/+Tj4f/m5eP/5OPi/9zb2v/Kycj/sK6t/5GQ
+ j/90cnH/XVpZ/01KR/9CPTj/OjMt/zUtJv8vKSL/LCki/yksJv8pLyv/KTQw/yw2Mv8wNzL/NTk0/z1A
+ Ov9FT0n/UGpm/12NjP9rsrT/eNLX/4Po7v+O8vj/mPb6/5/2+f+j9Pb/ofT2/5nx9f+O7vP/g+vy/3vp
+ 8P925/D/dOfw/3Pm7/9w5e//auPu/2Df7f9U2+z/SNbq/z7S6f840Oj/Nc/n/zTO5/8yzeb/Lszl/yfJ
+ 5P8cxuL/EsHf/wi82/8CtNP/AKnI/wCduf8Akav/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCQq/8Anbn/AKnI/wK00/8JvNv/FMPg/yHI
+ 4/8szOX/NM7n/zfQ6P830Oj/N9Do/zjQ6P8/0un/Stfq/1jc7P9m4e7/ceXv/3jo8P966fD/e+nw/3zp
+ 8f+A6vH/iO3z/5Lw9P+c8/b/o/T2/6Pz9f+c8fP/kezw/4Tk6f921dr/ab3B/1uanP9MdHL/QFBM/zc3
+ MP8yKiP/MCcg/zEqIv8zLif/NTAq/zcyK/86NC3/Pjgx/0M9Nv9JQz3/T0pF/1dUUP9hYF7/cXFw/4iJ
+ if+mp6f/xsfH/+Li4v/09fT//P39//7//v/8/Pz/+fr5//f5+P/19/f/8vb2/+/19P/t9PP/6/Pz/+vz
+ 8//r8/P/6/Pz/+308//v9fT/8vb2//X39//3+fj/+fr5//z8/P/+//7//P39//T19P/i4uL/xsfH/6an
+ p/+IiYn/cXFw/2FgXv9XVFD/T0pF/0lDPf9DPTb/Pjgx/zo0Lf83Miv/NTAq/zMuJ/8xKiL/MCcg/zIq
+ I/83NzD/QFBM/0x0cv9bmpz/ab3B/3bV2v+E5On/kezw/5zx8/+j8/X/o/T2/5zz9v+S8PT/iO3z/4Dq
+ 8f986fH/e+nw/3rp8P946PD/ceXv/2bh7v9Y3Oz/Stfq/z/S6f840Oj/N9Do/zfQ6P830Oj/NM7n/yzM
+ 5f8hyOP/FMPg/wm82/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCQq/8Anbn/AKnI/wK00/8Kvdv/FcPg/yPI
+ 5P8vzeb/N8/o/znR6f840On/N9Do/zjQ6P8+0un/Stfq/1nc7P9o4u7/dOfw/3zp8f+A6/H/g+vx/4Xs
+ 8v+I7fP/jvD1/5bz+P+c9vr/n/b5/5zx8/+T5+r/htre/3fKzv9otrn/Wp2f/01+ff9AXVn/Nj85/zAr
+ I/8tIhn/LyEZ/zMnH/85Lif/QDYv/0g/OP9SSUP/XFRO/2VfWf9taGP/c3Bs/3h3df+AgYD/jI6O/6Ci
+ ov+5u7z/1NXV/+vs7P/7+/v///////////////////////7////8////+v7///j+/v/2/v7/9f7+//X+
+ /v/1/v7/9f7+//b+/v/4/v7/+v7///z////+//////////////////////////v7+//r7Oz/1NXV/7m7
+ vP+goqL/jI6O/4CBgP94d3X/c3Bs/21oY/9lX1n/XFRO/1JJQ/9IPzj/QDYv/zkuJ/8zJx//LyEZ/y0i
+ Gf8wKyP/Nj85/0BdWf9Nfn3/Wp2f/2i2uf93ys7/htre/5Pn6v+c8fP/n/b5/5z2+v+W8/j/jvD1/4jt
+ 8/+F7PL/g+vx/4Dr8f986fH/dOfw/2ji7v9Z3Oz/Stfq/z7S6f840Oj/N9Do/zjQ6f850en/N8/o/y/N
+ 5v8jyOT/FcPg/wq92/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCQq/8Anbn/AKnI/wK00/8Kvdv/FsPg/yPJ
+ 5P8vzeb/N9Do/znR6f840On/Ns/o/zfQ6P890un/Sdbq/1jc7P9n4u7/defw/37q8f+G7PL/i+7y/4/v
+ 8/+T8PT/lvP3/5n3+/+a+f3/mPb6/5Hs8P+G2t7/d8PG/2epq/9YkJD/THh3/0FfXP84R0L/MTMt/y4n
+ H/8uIhr/MSQd/zcsJf9ANjH/S0M+/1tTTv9tZ2L/gHp2/4+Lh/+al5P/n52b/6Giof+lqKf/rLCw/7q+
+ vv/Mz9D/4OLi//Hy8v/8/Pz///////////////////////7////8////+v////n////3////9/////b/
+ ///2////9/////f////5////+v////z////+//////////////////////////z8/P/x8vL/4OLi/8zP
+ 0P+6vr7/rLCw/6Wop/+hoqH/n52b/5qXk/+Pi4f/gHp2/21nYv9bU07/S0M+/0A2Mf83LCX/MSQd/y4i
+ Gv8uJx//MTMt/zhHQv9BX1z/THh3/1iQkP9nqav/d8PG/4ba3v+R7PD/mPb6/5r5/f+Z9/v/lvP3/5Pw
+ 9P+P7/P/i+7y/4bs8v9+6vH/defw/2fi7v9Y3Oz/Sdbq/z3S6f830Oj/Ns/o/zjQ6f850en/N9Do/y/N
+ 5v8jyeT/FsPg/wq92/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCQq/8Anbn/AKnI/wK00/8KvNv/FcPg/yLI
+ 5P8uzOb/Ns/o/znQ6P840Oj/Ns/o/zfQ6P890un/Sdbq/1fc7P9m4e7/dOfw/4Dq8f+K7fL/k/D0/5ry
+ 9f+d8/b/nfX4/5v4/P+W+P3/jvL4/4Tk6f93ys7/Z6mr/1eIh/9Jamf/P1RQ/zhDPf8yNS//MC0l/y8o
+ IP8yKCH/Ni0n/z43Mv9JRED/WVRR/3Braf+KhoT/pKGf/7q3tf/GxMP/ysrJ/8rMy//Jzc3/y9DQ/9LY
+ 2P/c4uL/5+3t//D29v/2/Pz/+f////r////5////+P7+//f+/v/3/f3/9v39//X8/P/0/Pz/8/z8//P8
+ /P/z/Pz/8/z8//T8/P/1/Pz/9v39//f9/f/3/v7/+P7+//n////6////+f////b8/P/w9vb/5+3t/9zi
+ 4v/S2Nj/y9DQ/8nNzf/KzMv/ysrJ/8bEw/+6t7X/pKGf/4qGhP9wa2n/WVRR/0lEQP8+NzL/Ni0n/zIo
+ If8vKCD/MC0l/zI1L/84Qz3/P1RQ/0lqZ/9XiIf/Z6mr/3fKzv+E5On/jvL4/5b4/f+b+Pz/nfX4/53z
+ 9v+a8vX/k/D0/4rt8v+A6vH/dOfw/2bh7v9X3Oz/Sdbq/z3S6f830Oj/Ns/o/zjQ6P850Oj/Ns/o/y7M
+ 5v8iyOT/FcPg/wq82/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCQq/8Anbn/AKnI/wK00/8JvNv/FcPg/yLI
+ 4/8tzOb/Ns/n/znQ6P850Oj/ONDo/zrR6P9A0+n/S9fq/1jc7P9m4e7/dObw/4Dq8f+N7vP/mfL1/6L0
+ 9v+l9fb/ovX3/5v1+P+Q8fb/g+ju/3bV2v9otrn/WJCQ/0lqZ/8+S0b/Njgx/zEuJv8wKSL/MSoi/zQt
+ Jf85Miv/Pzo1/0lGQv9XVVP/amlo/4WEhP+kpKP/w8LC/9vb2v/o6ej/7O7t/+rt7f/l6+v/4+rq/+Xs
+ 7P/o7/D/7PPz/+/29v/x+Pn/8vn5//L6+v/y+fn/8vn5//L5+f/x+fn/8fn5//H5+f/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/x+fn/8fn5//H5+f/y+fn/8vn5//L5+f/y+vr/8vn5//H4+f/v9vb/7PPz/+jv
+ 8P/l7Oz/4+rq/+Xr6//q7e3/7O7t/+jp6P/b29r/w8LC/6Sko/+FhIT/amlo/1dVU/9JRkL/Pzo1/zky
+ K/80LSX/MSoi/zApIv8xLib/Njgx/z5LRv9Jamf/WJCQ/2i2uf921dr/g+ju/5Dx9v+b9fj/ovX3/6X1
+ 9v+i9Pb/mfL1/43u8/+A6vH/dObw/2bh7v9Y3Oz/S9fq/0DT6f860ej/ONDo/znQ6P850Oj/Ns/n/y3M
+ 5v8iyOP/FcPg/wm82/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCQq/8Anbn/AKnH/wK00/8JvNv/FcPg/yHI
+ 4/8tzOb/Ns/n/zvR6f880un/PtLp/0HT6f9H1ur/UNnr/1ze7P9o4u7/dOfw/4Hr8v+Q8PT/nfT3/6f2
+ 9/+q9fb/pPHy/5jr7v+I4eX/eNLX/2m9wf9anZ//THh3/z9UUP82ODH/MCkh/y4jG/8vJRz/Myoj/zkz
+ LP9CPDf/TElF/1pYVv9ra2r/f4CA/5ucnP+6u7v/19jY/+7v7//6/Pz//f////r////1+/v/8fj4//D4
+ +P/v+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4/+/4
+ +P/w+Pj/8fj4//X7+//6/////f////r8/P/u7+//19jY/7q7u/+bnJz/f4CA/2trav9aWFb/TElF/0I8
+ N/85Myz/Myoj/y8lHP8uIxv/MCkh/zY4Mf8/VFD/THh3/1qdn/9pvcH/eNLX/4jh5f+Y6+7/pPHy/6r1
+ 9v+n9vf/nfT3/5Dw9P+B6/L/dOfw/2ji7v9c3uz/UNnr/0fW6v9B0+n/PtLp/zzS6f870en/Ns/n/y3M
+ 5v8hyOP/FcPg/wm82/8CtNP/AKnH/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgJn/AIaf/wCQq/8AnLn/AKnH/wK00/8JvNv/FMLg/yHH
+ 4/8tzOX/N8/n/z7S6f9C1Or/R9bq/0vX6v9S2uv/Wd3s/2Hg7f9r4+7/defw/4Hr8v+R8fb/oPf5/6v5
+ +v+u9fX/pevr/5Tc3P9/yMr/a7K0/1uanP9Nfn3/QV9c/zhDPf8xLib/LiMb/y4hGf8xJh//Ny8p/0A7
+ Nv9NSkb/Xlxa/3FxcP+Fh4f/mp2d/7K0tf/LzM3/4uPj//P09P/9/v7///////3////5////9f39//T8
+ /P/y+/v/8fr6//D5+f/w+Pj/7/j4/+/4+P/v+Pj/7/j4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/7/j4/+/4+P/v+Pj/7/j4//D4+P/w+fn/8fr6//L7
+ +//0/Pz/9f39//n////9//////////3+/v/z9PT/4uPj/8vMzf+ytLX/mp2d/4WHh/9xcXD/Xlxa/01K
+ Rv9AOzb/Ny8p/zEmH/8uIRn/LiMb/zEuJv84Qz3/QV9c/01+ff9bmpz/a7K0/3/Iyv+U3Nz/pevr/671
+ 9f+r+fr/oPf5/5Hx9v+B6/L/defw/2vj7v9h4O3/Wd3s/1La6/9L1+r/R9bq/0LU6v8+0un/N8/n/y3M
+ 5f8hx+P/FMLg/wm82/8CtNP/AKnH/wCcuf8AkKv/AIaf/wCAmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgJn/AIaf/wCQq/8AnLn/AKnH/wKz0/8JvNv/FMLg/yDH
+ 4/8tzOX/ONDo/0HT6f9J1+v/Udnr/1jc7P9f3u3/ZOHt/2ni7v9u5e//dufw/4Hs8v+R8/f/ofn8/637
+ +/+u9PP/o+Lh/47Ix/91qqn/XY2M/0x0cv9AXVn/OEdC/zI1L/8wKSL/LyUc/zEmH/82LSf/Pjgz/0pH
+ Q/9cWlj/cnNx/4uNjP+jpqb/t7y8/8rOz//b39//6u3t//X4+P/7/v7//f////v////3/v7/9f39//P8
+ /P/y+/v/8fr6//D5+f/w+Pj/7/j4/+/4+P/v+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4/+/4+P/v+Pj/7/j4//D4+P/w+fn/8fr6//L7
+ +//z/Pz/9f39//f+/v/7/////f////v+/v/1+Pj/6u3t/9vf3//Kzs//t7y8/6Ompv+LjYz/cnNx/1xa
+ WP9KR0P/Pjgz/zYtJ/8xJh//LyUc/zApIv8yNS//OEdC/0BdWf9MdHL/XY2M/3Wqqf+OyMf/o+Lh/670
+ 8/+t+/v/ofn8/5Hz9/+B7PL/dufw/27l7/9p4u7/ZOHt/1/e7f9Y3Oz/Udnr/0nX6/9B0+n/ONDo/y3M
+ 5f8gx+P/FMLg/wm82/8Cs9P/AKnH/wCcuf8AkKv/AIaf/wCAmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgJn/AIaf/wCQq/8Anbn/AKnH/wK00/8JvNv/E8Lg/yDH
+ 4/8tzOX/OdDo/0TV6v9Q2ev/W93t/2Tg7v9r4+7/buTv/3Dl7/9z5u//eOjw/4Hs8/+Q8/j/n/n8/6r5
+ +/+q7+//nNfW/4S0sf9pjYr/UGpm/0BQTP82Pzn/MTMt/zAtJf8xKiL/Myoj/zcvKf8+ODP/SUVC/1hW
+ VP9tbWz/iIqJ/6Sop/++w8P/0djY/9/l5f/o7u//7vT1//L4+f/1/Pz/9v39//X8/P/z+/v/8vr6//H5
+ +f/x+fn/8Pn5//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pn5//H5
+ +f/x+fn/8vr6//P7+//1/Pz/9v39//X8/P/y+Pn/7vT1/+ju7//f5eX/0djY/77Dw/+kqKf/iIqJ/21t
+ bP9YVlT/SUVC/z44M/83Lyn/Myoj/zEqIv8wLSX/MTMt/zY/Of9AUEz/UGpm/2mNiv+EtLH/nNfW/6rv
+ 7/+q+fv/n/n8/5Dz+P+B7PP/eOjw/3Pm7/9w5e//buTv/2vj7v9k4O7/W93t/1DZ6/9E1er/OdDo/y3M
+ 5f8gx+P/E8Lg/wm82/8CtNP/AKnH/wCduf8AkKv/AIaf/wCAmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIeg/wCRq/8Anbr/AarI/wS11P8Lvdz/FcPh/yHI
+ 5P8tzOb/OtDo/0fW6v9U2+z/YeDt/2zk7/905u//d+jw/3jo8P956PD/fOnw/4Pr8v+O8fb/mfX5/6Dz
+ 9v+e5uf/j8nJ/3ehnv9ddXH/RU9J/zc3MP8wKyP/Licf/y8oIP80LSX/OTMs/0A7Nv9KR0P/WFZU/2lo
+ aP+AgYH/nKCg/7q/v//T2tr/5ezs/+719f/x+Pn/8fj4//D4+P/x+Pj/8fn5//H4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/x+Pj/8fn5//H4+P/w+Pj/8fj4//H4+f/u9fX/5ezs/9Pa2v+6v7//nKCg/4CB
+ gf9paGj/WFZU/0pHQ/9AOzb/OTMs/zQtJf8vKCD/Licf/zArI/83NzD/RU9J/111cf93oZ7/j8nJ/57m
+ 5/+g8/b/mfX5/47x9v+D6/L/fOnw/3no8P946PD/d+jw/3Tm7/9s5O//YeDt/1Tb7P9H1ur/OtDo/y3M
+ 5v8hyOT/FcPh/wu93P8EtdT/AarI/wCduv8Akav/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AYeg/wOSrP8EoLv/B63K/wy51v8SwN7/GsXi/yTJ
+ 5P8uzOb/OtDo/0fW6v9W2+z/ZOHu/3Dl7/956PD/furx/4Dr8v+B6/L/g+vx/4Xr8f+J7PP/jOzy/4zm
+ 6/+G1tv/eLi7/2SQj/9PZWH/PUA6/zIqI/8tIhn/LiIa/zIoIf85Miv/Qjw3/01KRv9cWlj/bW1s/4CB
+ gf+Wmpr/sbW2/8vR0f/g6Oj/7/f3//X9/f/1/f3/8/v7//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//H5+f/x+fn/8fn5//L6+v/y+vr/8vr6//L6+v/y+vr/8vr6//L6
+ +v/y+vr/8vr6//L6+v/y+vr/8vr6//L6+v/y+vr/8fn5//H5+f/x+fn/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8/v7//X9/f/1/f3/7/f3/+Do6P/L0dH/sbW2/5aa
+ mv+AgYH/bW1s/1xaWP9NSkb/Qjw3/zkyK/8yKCH/LiIa/y0iGf8yKiP/PUA6/09lYf9kkI//eLi7/4bW
+ 2/+M5uv/jOzy/4ns8/+F6/H/g+vx/4Hr8v+A6/L/furx/3no8P9w5e//ZOHu/1bb7P9H1ur/OtDo/y7M
+ 5v8kyeT/GsXi/xLA3v8Mudb/B63K/wSgu/8Dkqz/AYeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/A4ig/waUrf8Lor3/EbHN/xa92f8cxOH/Isnk/yjL
+ 5v8wzef/OdDo/0bV6v9V2+z/ZOHu/3Hl7/976fH/g+zy/4nu8/+M7/T/jO3y/4nq8P+D5u3/et/o/2/T
+ 3f9lwcr/WaSr/0x/gv8/WVf/NTk0/zAnIP8vIRn/MSQd/zYtJ/8/OjX/TElF/15cWf9ycnH/iIqJ/5yg
+ oP+xtbb/xcvL/9jf3//o8PD/8vr6//b+/v/2/v7/8/v7//D5+f/w+Pj/7/j4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8fn5//L6+v/z+/v/9Pz8//T9/f/1/f3/9f7+//X+/v/2/v7/9v7///b+
+ ///2/v//9v7///b+/v/1/v7/9f7+//X9/f/0/f3/9Pz8//P7+//y+vr/8fn5//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/7/j4//D4+P/w+fn/8/v7//b+/v/2/v7/8vr6/+jw8P/Y39//xcvL/7G1
+ tv+coKD/iIqJ/3Jycf9eXFn/TElF/z86Nf82LSf/MSQd/y8hGf8wJyD/NTk0/z9ZV/9Mf4L/WaSr/2XB
+ yv9v093/et/o/4Pm7f+J6vD/jO3y/4zv9P+J7vP/g+zy/3vp8f9x5e//ZOHu/1Xb7P9G1er/OdDo/zDN
+ 5/8oy+b/Isnk/xzE4f8Wvdn/EbHN/wuivf8GlK3/A4ig/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/BIih/wuVrv8Spb//G7XQ/yLC3P8nyeT/Kszn/y3N
+ 5/8yzuf/OdDo/0XV6v9T2uz/Y+Dt/3Hl7/986fH/h+7z/5Hx9f+X8vX/lu/z/43o7v983ub/ZtDb/1G+
+ zP9Bqbj/OI+a/zJvdf8wUFD/MDcy/zEqIv8zJx//Nywl/z43Mv9JRkL/WlhW/3Fxb/+LjYz/pKin/7q/
+ v//L0dH/2N/f/+Tr6//s9PT/8vr6//T8/P/0/Pz/8vr6//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/7/j4//D4+P/w+Pj/8fn5//L6+v/z/Pz/9P39//X9/f/2/v7/9v7+//b////3////9/////f/
+ ///3////9/////f////2////9v7+//b+/v/1/f3/9P39//P8/P/y+vr/8fn5//D4+P/w+Pj/7/j4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8vr6//T8/P/0/Pz/8vr6/+z09P/k6+v/2N/f/8vR
+ 0f+6v7//pKin/4uNjP9xcW//WlhW/0lGQv8+NzL/Nywl/zMnH/8xKiL/MDcy/zBQUP8yb3X/OI+a/0Gp
+ uP9Rvsz/ZtDb/3ze5v+N6O7/lu/z/5fy9f+R8fX/h+7z/3zp8f9x5e//Y+Dt/1Pa7P9F1er/OdDo/zLO
+ 5/8tzef/Kszn/yfJ5P8iwtz/G7XQ/xKlv/8Lla7/BIih/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/BYmh/w6Xr/8ZqMH/I7nS/yzG3/8wzeb/MtDp/zPQ
+ 6f820Oj/PNHo/0bV6v9T2uv/YuDt/3Dl7/996fH/i+/0/5jz9/+g9ff/n/L0/5Hn6/921t7/VsDN/zip
+ uv8kkqP/HXqI/x5gaP8kSEr/LDYy/zMuJ/85Lif/QDYx/0lEQP9XVVP/a2tq/4WHh/+jpqb/vsPD/9Pa
+ 2v/g6Oj/6PDw/+z09P/u9vb/8Pj4//H5+f/x+fn/8fn5//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+fn/8fn5//H5+f/x+fn/8fn5//H5
+ +f/x+fn/8fn5//H5+f/x+fn/8fn5//D5+f/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8fn5//H5+f/x+fn/8Pj4/+729v/s9PT/6PDw/+Do
+ 6P/T2tr/vsPD/6Ompv+Fh4f/a2tq/1dVU/9JRED/QDYx/zkuJ/8zLif/LDYy/yRISv8eYGj/HXqI/ySS
+ o/84qbr/VsDN/3bW3v+R5+v/n/L0/6D19/+Y8/f/i+/0/33p8f9w5e//YuDt/1Pa6/9G1er/PNHo/zbQ
+ 6P8z0On/MtDp/zDN5v8sxt//I7nS/xmowf8Ol6//BYmh/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8AgZn/Bomh/xCYsP8dqsL/KbvU/zLJ4f840Oj/OdPr/zrT
+ 6v880un/QdPp/0rX6v9W2+z/Y+Dt/3Dl7/996vH/jfD1/5z1+P+m9/n/pfP0/5Xl6P90ztb/TrK//yuW
+ p/8UfY//Dmd1/xJRWv8dP0H/KTQw/zUwKv9ANi//S0M+/1lUUf9qaWj/f4CA/5udnf+3vLz/0djY/+Xs
+ 7P/v9/f/8vr6//L6+v/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/x+fn/8fn5//H5+f/w+Pj/7vX1/+vy8v/o7+//5ezs/+Pq6v/h6Oj/4Ofn/+Dm5v/f5uX/3+Xl/9/l
+ 5P/f5eT/3+Xl/9/m5f/g5ub/4Ofn/+Ho6P/j6ur/5ezs/+jv7//r8vL/7vX1//D4+P/x+fn/8fn5//H5
+ +f/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/y+vr/8vr6/+/3
+ 9//l7Oz/0djY/7e8vP+bnZ3/f4CA/2ppaP9ZVFH/S0M+/0A2L/81MCr/KTQw/x0/Qf8SUVr/Dmd1/xR9
+ j/8rlqf/TrK//3TO1v+V5ej/pfP0/6b3+f+c9fj/jfD1/33q8f9w5e//Y+Dt/1bb7P9K1+r/QdPp/zzS
+ 6f860+r/OdPr/zjQ6P8yyeH/KbvU/x2qwv8QmLD/Bomh/wCBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/B4mh/xGYsP8eqsL/K7zU/zXK4v880un/QNXs/0PW
+ 7P9G1ur/S9fq/1Pa6/9c3uz/ZuHu/3Hl7/996vH/jvH2/573+v+q+vv/qvX1/5nk5v94yM3/UKaw/yuF
+ kv8Tanj/DFRg/xBCSP8aNTb/KS8r/zcyK/9IPzj/W1NO/3Braf+FhIT/m5yc/7O2tv/Kz9D/3+Xl/+71
+ 9f/1/f3/9v7+//T8/P/x+fn/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//L5
+ +f/0+/v/9v39//b9/f/0+vr/7fPz/+Pp6f/Z39//0NbW/8rPz//Fysr/wsfG/8DEw/++wsD/vcG//73A
+ vv+9wL7/vcG//77CwP/AxMP/wsfG/8XKyv/Kz8//0NbW/9nf3//j6en/7fPz//T6+v/2/f3/9v39//T7
+ +//y+fn/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//H5+f/0/Pz/9v7+//X9
+ /f/u9fX/3+Xl/8rP0P+ztrb/m5yc/4WEhP9wa2n/W1NO/0g/OP83Miv/KS8r/xo1Nv8QQkj/DFRg/xNq
+ eP8rhZL/UKaw/3jIzf+Z5Ob/qvX1/6r6+/+e9/r/jvH2/33q8f9x5e//ZuHu/1ze7P9T2uv/S9fq/0bW
+ 6v9D1uz/QNXs/zzS6f81yuL/K7zU/x6qwv8RmLD/B4mh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/B4mh/xGYsP8eqsL/K7zU/zbL4v8/0+r/Rtft/0zZ
+ 7f9S2uz/WNzs/17e7f9k4e3/auPu/3Lm7/996vH/jfH2/5/5/P+s/P3/rfb2/57i4/9+wcT/V5qg/zN1
+ fP8cV1//E0NJ/xQ0Nv8cLCr/KSwm/zo0Lf9SSUP/bWdi/4qGhP+kpKP/uru7/8zP0P/b4OH/6O7v//H4
+ +P/1/f3/9v7+//T8/P/x+fn/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/7/j4/+/4+P/v+Pj/8Pj4//P6
+ +v/4/f3//P////z+/v/3+Pj/6uzs/9nb2//Gycn/tbm5/6mtrf+hpKP/m56c/5iZlv+VlZL/kpKP/5GR
+ jf+RkY3/kpKP/5WVkv+YmZb/m56c/6Gko/+pra3/tbm5/8bJyf/Z29v/6uzs//f4+P/8/v7//P////j9
+ /f/z+vr/8Pj4/+/4+P/v+Pj/7/j4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//H5+f/0/Pz/9v7+//X9
+ /f/x+Pj/6O7v/9vg4f/Mz9D/uru7/6Sko/+KhoT/bWdi/1JJQ/86NC3/KSwm/xwsKv8UNDb/E0NJ/xxX
+ X/8zdXz/V5qg/37BxP+e4uP/rfb2/6z8/f+f+fz/jfH2/33q8f9y5u//auPu/2Th7f9e3u3/WNzs/1La
+ 7P9M2e3/Rtft/z/T6v82y+L/K7zU/x6qwv8RmLD/B4mh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/B4mh/xCYsP8dqsL/KrzU/zbK4v9B1Or/S9nt/1Xd
+ 7v9d3+3/ZeHu/2nj7v9s5O7/cOXv/3Xn8P996vH/jPH3/535/P+q/P3/rPX1/5/f3v+Curr/X4+P/z5m
+ Z/8oSEn/HTQ0/xsoJv8gJB//LCki/z44Mf9cVE7/gHp2/6Shn//DwsL/19jY/+Pm5//q7+//7vT1//H4
+ +P/z+/v/8/v7//L6+v/x+fn/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/7/j4/+/4+P/v+Pj/8Pj4//T6
+ +v/5/v7//f////3////19vb/4+Pk/8rLzP+wsbL/mJqa/4iJif98fXv/dHNw/25saP9qZ2L/Z2Ne/2Vi
+ XP9lYlz/Z2Ne/2pnYv9ubGj/dHNw/3x9e/+IiYn/mJqa/7Cxsv/Ky8z/4+Pk//X29v/9/////f////n+
+ /v/0+vr/8Pj4/+/4+P/v+Pj/7/j4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//H5+f/y+vr/8/v7//P7
+ +//x+Pj/7vT1/+rv7//j5uf/19jY/8PCwv+koZ//gHp2/1xUTv8+ODH/LCki/yAkH/8bKCb/HTQ0/yhI
+ Sf8+Zmf/X4+P/4K6uv+f397/rPX1/6r8/f+d+fz/jPH3/33q8f915/D/cOXv/2zk7v9p4+7/ZeHu/13f
+ 7f9V3e7/S9nt/0HU6v82yuL/KrzU/x2qwv8QmLD/B4mh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8cqsL/KbvU/zXK4v9C1Or/T9vt/1zf
+ 7/9n4u//b+Xv/3Pm7/915/D/dufw/3jo8P9/6vH/i/D2/5n2+v+j+Pr/pe/w/5nX1/+AsK//YoOB/0VZ
+ Vv8yOzb/Jykk/yMgGv8lIBn/Lyki/0M9Nv9lX1n/j4uH/7q3tf/b29r/7u/v//X4+f/1+vr/8vj5//D4
+ +P/w+Pj/8Pn5//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8fj4//P6
+ +v/4/f3/+/7+//n7+//u7+//2NjY/7q7u/+am5v/fn9//2tqaf9dW1n/U1BM/01IQv9IQjv/RD02/0I7
+ NP9COzT/RD02/0hCO/9NSEL/U1BM/11bWf9ramn/fn9//5qbm/+6u7v/2NjY/+7v7//5+/v/+/7+//j9
+ /f/z+vr/8fj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pn5//D4
+ +P/w+Pj/8vj5//X6+v/1+Pn/7u/v/9vb2v+6t7X/j4uH/2VfWf9DPTb/Lyki/yUgGf8jIBr/Jykk/zI7
+ Nv9FWVb/YoOB/4Cwr/+Z19f/pe/w/6P4+v+Z9vr/i/D2/3/q8f946PD/dufw/3Xn8P9z5u//b+Xv/2fi
+ 7/9c3+//T9vt/0LU6v81yuL/KbvU/xyqwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1er/Udzu/2Dh
+ 7/9s5O//defw/3rp8P996vH/furx/3/q8f+C6vH/ie3z/5Dw9f+U7vL/k+Pm/4jKzP9zo6P/W3d0/0VP
+ Sf82Myz/LSQc/ygeFv8qIRn/NS0m/0lDPf9taGP/mpaT/8bEw//o6ej/+vz8///////7////9fz8//H4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8fn5//L6+v/z+vr/8vn5//H3
+ 9v/x9PT/7vDv/+bn5v/Y19b/wcC//6Oiof+Eg4L/aWhn/1ZUUv9IRUL/Pzo1/zgyK/8zLCT/Lycf/y0l
+ HP8tJRz/Lycf/zMsJP84Miv/Pzo1/0hFQv9WVFL/aWhn/4SDgv+joqH/wcC//9jX1v/m5+b/7vDv//H0
+ 9P/x9/b/8vn5//P6+v/y+vr/8fn5//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/x+Pj/9fz8//v/////////+vz8/+jp6P/GxMP/mpaT/21oY/9JQz3/NS0m/yohGf8oHhb/LSQc/zYz
+ LP9FT0n/W3d0/3Ojo/+Iysz/k+Pm/5Tu8v+Q8PX/ie3z/4Lq8f9/6vH/furx/33q8f966fD/defw/2zk
+ 7/9g4e//Udzu/0PV6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1er/Utzu/2Hh
+ 7/9u5e//eOjw/3/r8f+E7fL/h+3z/4jt8v+I6/H/hunw/4Lm7f993ub/ddDY/2q3vf9ck5X/TGtq/z9H
+ Qv82Lyf/MCMb/y4gGP8wJh7/OjMt/09KRf9zb2v/npyZ/8rIx//s6+v//f7+///////8////9vz8//H4
+ +P/w+Pj/7/j4//D4+P/w+Pj/8Pj4//D4+P/v+Pj/7/j4//D4+P/x+fn/9Pz8//j+/v/5////9vv7/+/z
+ 8v/k5uX/19fV/8fFw/+0sq//npuY/4WCf/9saWf/V1RR/0dDP/87NjH/Miwm/ywlHv8nHxf/JBsT/yIZ
+ EP8iGRD/JBsT/ycfF/8sJR7/Miwm/zs2Mf9HQz//V1RR/2xpZ/+Fgn//npuY/7Syr//HxcP/19fV/+Tm
+ 5f/v8/L/9vv7//n////4/v7/9Pz8//H5+f/w+Pj/7/j4/+/4+P/w+Pj/8Pj4//D4+P/w+Pj/7/j4//D4
+ +P/x+Pj/9vz8//z//////////f7+/+zr6//KyMf/npyZ/3Nva/9PSkX/OjMt/zAmHv8uIBj/MCMb/zYv
+ J/8/R0L/TGtq/1yTlf9qt73/ddDY/33e5v+C5u3/hunw/4jr8f+I7fL/h+3z/4Tt8v9/6/H/eOjw/27l
+ 7/9h4e//Utzu/0PV6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1er/Utzu/2Dh
+ 7/9u5e//eejw/4Ps8v+M7/T/kvH1/5Pw9P+P6/D/g+Tr/3PZ4/9hy9f/UrnG/0ihrP8/gYf/Ol9g/zZC
+ Pv80Lyf/MyYe/zMmHv83Lij/Qj04/1dTUP94d3T/oaGg/8rLyv/q7Oz/+v7+//7////7////9fz8//H4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/v+Pj/7/j4//D4+P/y+fn/9/39//z////+////+fn5/+rp
+ 6P/U0tD/ure0/6CcmP+KhYH/dnFt/2VgW/9VUEv/R0I9/zw3Mf8zLSf/LSYf/yggGf8kHBT/IhkQ/yEY
+ D/8hGA//IhkQ/yQcFP8oIBn/LSYf/zMtJ/88NzH/R0I9/1VQS/9lYFv/dnFt/4qFgf+gnJj/ure0/9TS
+ 0P/q6ej/+fn5//7////8////9/39//L5+f/w+Pj/7/j4/+/4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/x+Pj/9fz8//v////+////+v7+/+rs7P/Ky8r/oaGg/3h3dP9XU1D/Qj04/zcuKP8zJh7/MyYe/zQv
+ J/82Qj7/Ol9g/z+Bh/9Ioaz/UrnG/2HL1/9z2eP/g+Tr/4/r8P+T8PT/kvH1/4zv9P+D7PL/eejw/27l
+ 7/9g4e//Utzu/0PV6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1er/Udzu/1/g
+ 7/9t5O//eejw/4Xt8/+S8fX/m/T3/53y9f+V6+//gN7l/2TM2P9It8f/MqGy/yiKmf8lb3j/KFRX/y09
+ Ov8yLyn/Nisk/zovKP9BOTT/TUpH/2FgXv+AgYD/paen/8nNzf/l6+v/9fv7//n////3////8/v7//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/v+Pj/7/j4//D4+P/z+vr/+P7+//7/////////9/f3/+Hg
+ 3//Bvrv/nJiU/3p1cP9hW1X/UUtF/0dBOv9BOjT/PDUv/zYwKf8yKyT/Lycg/ywkHP8qIhr/KSEY/ygg
+ F/8oIBf/KSEY/yoiGv8sJBz/Lycg/zIrJP82MCn/PDUv/0E6NP9HQTr/UUtF/2FbVf96dXD/nJiU/8G+
+ u//h4N//9/f3///////+////+P7+//P6+v/w+Pj/7/j4/+/4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8/v7//f////5////9fv7/+Xr6//Jzc3/paen/4CBgP9hYF7/TUpH/0E5NP86Lyj/Nisk/zIv
+ Kf8tPTr/KFRX/yVveP8oipn/MqGy/0i3x/9kzNj/gN7l/5Xr7/+d8vX/m/T3/5Lx9f+F7fP/eejw/23k
+ 7/9f4O//Udzu/0PV6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4ft8/+X8/f/ovb4/6X09v+a6+3/f9jf/1vAy/84pbX/HYye/xJ1hf8TXWn/G0hN/yc4
+ Nv8xMCr/OjEq/0M6NP9OSET/XVpZ/3FxcP+Njo7/rLCw/8vQ0P/j6ur/8fj4//X9/f/1/f3/8vr6//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//H4+P/y+fn/9vz8//n9/f/3+fn/7Ozs/9LQ
+ z/+sqaX/gn14/1xWUP9DPDX/Ny8o/zMsJP80LSX/Ni8n/zYvKP82Lyj/NzAp/zgxKf85Mir/OjIq/zoy
+ Kv86Mir/OjIq/zkyKv84MSn/NzAp/zYvKP82Lyj/Ni8n/zQtJf8zLCT/Ny8o/0M8Nf9cVlD/gn14/6yp
+ pf/S0M//7Ozs//f5+f/5/f3/9vz8//L5+f/x+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8vr6//X9/f/1/f3/8fj4/+Pq6v/L0ND/rLCw/42Ojv9xcXD/XVpZ/05IRP9DOjT/OjEq/zEw
+ Kv8nODb/G0hN/xNdaf8SdYX/HYye/ziltf9bwMv/f9jf/5rr7f+l9Pb/ovb4/5fz9/+H7fP/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4ju9P+Z9Pj/pfj6/6j19v+d6ev/gNLX/1q0vv8zlKL/F3iI/wxicP8OTlf/Fz5B/yUz
+ Mf8zMSv/QDgx/1BHQf9hW1j/dHJx/4iJif+go6P/ur6//9LY2P/l7Oz/8Pj4//T8/P/z/Pz/8fn5//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//L5+f/z+/v/9Pv7//P6+v/x9/b/7/Pz/+vt7P/i4uH/0tDP/7e0
+ sf+Sjon/a2Vf/0lCO/80LCT/KyMb/ysjG/8vKCH/Ni8o/zs0Lv9COzX/SUM8/1BJQ/9VT0j/WFJL/1pT
+ Tf9aU03/WFJL/1VPSP9QSUP/SUM8/0I7Nf87NC7/Ni8o/y8oIf8rIxv/KyMb/zQsJP9JQjv/a2Vf/5KO
+ if+3tLH/0tDP/+Li4f/r7ez/7/Pz//H39v/z+vr/9Pv7//P7+//y+fn/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8fn5//P8/P/0/Pz/8Pj4/+Xs7P/S2Nj/ur6//6Cjo/+IiYn/dHJx/2FbWP9QR0H/QDgx/zMx
+ K/8lMzH/Fz5B/w5OV/8MYnD/F3iI/zOUov9atL7/gNLX/53p6/+o9fb/pfj6/5n0+P+I7vT/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4nu9P+Z9fn/pvn7/6r29v+f5+j/g8zP/16pr/84hI3/HWVw/xFQWf8RPkT/GDMz/yUu
+ Kv81Miv/SEA6/2BYU/95dHH/kZCP/6enp/+6vb3/zdHR/9zi4v/o8PD/7/j4//L7+//y+/v/8fn5//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8fn5//T7+//4/v7/+v////j9/f/x9PT/5Obl/9TU0//BwL3/rKml/5KO
+ if90bmn/Vk9I/z01Lf8tJR3/KCAZ/yojHP8yKyX/OzYw/0ZBO/9UT0r/ZF9a/3Nuaf9+eXT/hH97/4iD
+ fv+Ig37/hH97/355dP9zbmn/ZF9a/1RPSv9GQTv/OzYw/zIrJf8qIxz/KCAZ/y0lHf89NS3/Vk9I/3Ru
+ af+Sjon/rKml/8HAvf/U1NP/5Obl//H09P/4/f3/+v////j+/v/0+/v/8fn5//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8fn5//L7+//y+/v/7/j4/+jw8P/c4uL/zdHR/7q9vf+np6f/kZCP/3l0cf9gWFP/SEA6/zUy
+ K/8lLir/GDMz/xE+RP8RUFn/HWVw/ziEjf9eqa//g8zP/5/n6P+q9vb/pvn7/5n1+f+J7vT/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9P+Z9vn/pfr8/6n19v+g5eX/h8bH/2SeoP9Cdnn/KFVY/xw/Qv8YMTH/HSkm/ycq
+ JP84Myz/UElC/3BpZP+RjYr/sK+t/8bHx//W2Nj/4OTl/+ft7f/s8/P/8Pj4//H6+v/x+fn/8Pn5//D4
+ +P/w+Pj/8Pj4/+/4+P/w+Pj/8fn5//b8/P/8//////////v8/P/u7ez/19XT/7q3tP+dmJX/gn14/2tl
+ X/9WT0j/RDw0/zYuJv8uJh7/LSUe/zErJP85NC//RUE9/1VRTv9rZ2T/g4B9/5qWk/+rqKX/tbGu/7m2
+ s/+5trP/tbGu/6uopf+alpP/g4B9/2tnZP9VUU7/RUE9/zk0L/8xKyT/LSUe/y4mHv82Lib/RDw0/1ZP
+ SP9rZV//gn14/52Ylf+6t7T/19XT/+7t7P/7/Pz///////z////2/Pz/8fn5//D4+P/v+Pj/8Pj4//D4
+ +P/w+Pj/8Pn5//H5+f/x+vr/8Pj4/+zz8//n7e3/4OTl/9bY2P/Gx8f/sK+t/5GNiv9waWT/UElC/zgz
+ LP8nKiT/HSkm/xgxMf8cP0L/KFVY/0J2ef9knqD/h8bH/6Dl5f+p9fb/pfr8/5n2+f+I7/T/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+Y9vr/pPr8/6j19v+h4+P/isHA/2uVlP9Mamj/M0dE/ycyL/8hJSH/ISEb/yom
+ H/86NC3/V1BJ/314c/+no6D/ysnI/+Li4v/t7/D/8fX1//D29v/v9vb/8Pj4//D5+f/w+fn/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8fn5//b9/f/8//////////n7+//m5+b/x8XD/6Cdmf96dXD/XFZQ/0lC
+ O/89NS3/Ni4m/zMrI/8zKyT/NS8o/zs2Mf9FQj7/VFFP/2dmZP+CgYD/oZ+e/728u//T0dD/393c/+Xk
+ 4v/l5OL/393c/9PR0P+9vLv/oZ+e/4KBgP9nZmT/VFFP/0VCPv87NjH/NS8o/zMrJP8zKyP/Ni4m/z01
+ Lf9JQjv/XFZQ/3p1cP+gnZn/x8XD/+bn5v/5+/v///////z////2/f3/8fn5//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D5+f/w+fn/8Pj4/+/29v/w9vb/8fX1/+3v8P/i4uL/ysnI/6ejoP99eHP/V1BJ/zo0
+ Lf8qJh//ISEb/yElIf8nMi//M0dE/0xqaP9rlZT/isHA/6Hj4/+o9fb/pPr8/5j2+v+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9vv/o/r9/6j19v+h4uH/jL27/2+Pi/9RYVz/Oj03/y0pIf8lHRb/JBwT/ysj
+ G/88NC3/W1VO/4aBff+0sa7/29vZ//P09P/8////+/////b8/P/x+fn/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//T6+v/3/Pz/9/r6/+7v7//Y19b/tLKv/4qFgf9hW1X/Qzw1/zQs
+ JP8tJR3/LiYe/zMrJP84MSv/Pzo0/0lFQf9VU1H/ZmVk/3t8e/+YmZn/uLm5/9bX1v/s7e3/+fr5////
+ ////////+fr5/+zt7f/W19b/uLm5/5iZmf97fHv/ZmVk/1VTUf9JRUH/Pzo0/zgxK/8zKyT/LiYe/y0l
+ Hf80LCT/Qzw1/2FbVf+KhYH/tLKv/9jX1v/u7+//9/r6//f8/P/0+vr/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//H5+f/2/Pz/+/////z////z9PT/29vZ/7Sxrv+GgX3/W1VO/zw0
+ Lf8rIxv/JBwT/yUdFv8tKSH/Oj03/1FhXP9vj4v/jL27/6Hi4f+o9fb/o/r9/5f2+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eD/jby5/3GMiP9UXVf/PTkx/y8kG/8nGhH/JRkQ/ywi
+ Gv88NS3/XFZQ/4mEgP+4tbP/4eDe//n6+f////////////r////1/Pz/8/v7//P7+//z+/v/8/v7//P7
+ +//z/Pz/9Pz8//T8/f/z+/v/8fj4/+/19f/s8PH/5ejo/9jZ2f/BwL//npuY/3Zxbf9RS0T/Ny8o/ysj
+ G/8oIBn/LSUe/zUvKP8/OjT/S0dD/1pYVf9ra2n/fn9//5SWlv+usLD/ysvL/+Pk5P/29vb/////////
+ //////////////b29v/j5OT/ysvL/66wsP+Ulpb/fn9//2traf9aWFX/S0dD/z86NP81Lyj/LSUe/ygg
+ Gf8rIxv/Ny8o/1FLRP92cW3/npuY/8HAv//Y2dn/5ejo/+zw8f/v9fX/8fj4//P7+//0/P3/9Pz8//P8
+ /P/z+/v/8/v7//P7+//z+/v/8/v7//X8/P/6///////////////5+vn/4eDe/7i1s/+JhID/XFZQ/zw1
+ Lf8sIhr/JRkQ/ycaEf8vJBv/PTkx/1RdV/9xjIj/jby5/6Hh4P+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eD/jbu4/3GMh/9UXVb/PTgw/zAjGv8nGRD/JRkQ/ywi
+ Gf88NS3/XFZQ/4mEgP+4tbL/4eDe//n6+v////////////3////4////9v////b////2////9v////b/
+ ///3////+P////n////3////8fn5/+ju7//c4eH/zdDQ/7u7u/+joqH/hYJ//2RfW/9HQTr/Mywk/ysj
+ G/8qIxz/MSsk/zs2Mf9JRUH/WlhV/25ubP+Fh4b/m56e/7CztP/FyMj/2dzc/+vs7P/4+fn/////////
+ //////////////j5+f/r7Oz/2dzc/8XIyP+ws7T/m56e/4WHhv9ubmz/WlhV/0lFQf87NjH/MSsk/yoj
+ HP8rIxv/Mywk/0dBOv9kX1v/hYJ//6Oiof+7u7v/zdDQ/9zh4f/o7u//8fn5//f////5////+P////f/
+ ///2////9v////b////2////9v////j////9///////////////5+vr/4eDe/7i1sv+JhID/XFZQ/zw1
+ Lf8sIhn/JRkQ/ycZEP8wIxr/PTgw/1RdVv9xjIf/jbu4/6Hh4P+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eD/jby5/3GNiP9TXlf/PDkx/y8kHP8nGhH/JRkQ/ywi
+ Gv88NS3/XFZQ/4iEgP+3tbL/4ODe//j6+v////////////z////3////9v////b+///2/v//9v7///b/
+ ///3////+f////n////2////7fX1/93k5P/Jzs7/srW1/5ucnP+Eg4L/bGlm/1VQS/9BOjT/NC0l/y8o
+ If8yKyX/OTQv/0VCPv9VU1H/a2tp/4WHhv+go6P/uL29/8vQ0f/a4OD/5evs/+709P/1+/v/+v////z/
+ ///8////+v////X7+//u9PT/5evs/9rg4P/L0NH/uL29/6Cjo/+Fh4b/a2tp/1VTUf9FQj7/OTQv/zIr
+ Jf8vKCH/NC0l/0E6NP9VUEv/bGlm/4SDgv+bnJz/srW1/8nOzv/d5OT/7fX1//b////5////+f////f/
+ ///2////9v7///b+///2/v//9v////f////8///////////////4+vr/4ODe/7e1sv+IhID/XFZQ/zw1
+ Lf8sIhr/JRkQ/ycaEf8vJBz/PDkx/1NeV/9xjYj/jby5/6Hh4P+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3CNif9TX1n/PDoz/y8mHv8nGxP/JRoS/ywi
+ Gv87NC3/WVRO/4KAfP+usK3/1NjX/+vy8f/0/Pz/9f39//L5+f/u9vb/7fX1/+319f/t9fX/7fX1/+31
+ 9f/v9/f/8fn5//L6+v/u9vX/4urp/87U1P+0uLj/mJqa/35/fv9paGf/V1RR/0dCPf88NS//Ni8n/zYv
+ KP87NjD/RUE9/1RRT/9mZWT/fn9//5uenv+4vb3/0dfX/+Ho6P/q8fH/7vX1//D39//x+Pj/8/r6//T7
+ +//0+/v/8/r6//H4+P/w9/f/7vX1/+rx8f/h6Oj/0dfX/7i9vf+bnp7/fn9//2ZlZP9UUU//RUE9/zs2
+ MP82Lyj/Ni8n/zw1L/9HQj3/V1RR/2loZ/9+f37/mJqa/7S4uP/O1NT/4urp/+729f/y+vr/8fn5/+/3
+ 9//t9fX/7fX1/+319f/t9fX/7fX1/+729v/y+fn/9f39//T8/P/r8vH/1NjX/66wrf+CgHz/WVRO/zs0
+ Lf8sIhr/JRoS/ycbE/8vJh7/PDoz/1NfWf9wjYn/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/y8mHv8nHBT/JhsT/ywj
+ G/86Myv/VE9I/3h2cf+en5z/v8PB/9Ta2P/d4+L/3uTj/9vh4P/Y3t3/2N7d/9je3f/Y3t3/2N7d/9je
+ 3f/Z397/3OLh/9zi4f/Y3t3/zdLR/7i8u/+doJ//gYKB/2hoZv9WVFL/R0RA/z03Mv83MCn/Ni8o/zs0
+ Lv9GQTv/VVFO/2dmZP97fHv/lJaW/7C0tP/L0NH/4ejo/+729v/z+/v/9Pz8//L6+v/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/y+vr/9Pz8//P7+//u9vb/4ejo/8vQ0f+wtLT/lJaW/3t8e/9nZmT/VVFO/0ZB
+ O/87NC7/Ni8o/zcwKf89NzL/R0RA/1ZUUv9oaGb/gYKB/52gn/+4vLv/zdLR/9je3f/c4uH/3OLh/9nf
+ 3v/Y3t3/2N7d/9je3f/Y3t3/2N7d/9je3f/b4eD/3uTj/93j4v/U2tj/v8PB/56fnP94dnH/VE9I/zoz
+ K/8sIxv/JhsT/yccFP8vJh7/PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/y8mHv8oHRX/Jx0U/y0k
+ G/84MCn/TEZA/2hlX/+GhYH/oKGe/7CzsP+3urj/uLu5/7a5tv+ztrT/s7a0/7O2tP+ztrT/s7a0/7O2
+ tP+0t7X/trm3/7e6t/+0t7T/qqyq/5iamP+CgoD/ampn/1ZUUv9IRUH/PTg0/zUvKf8zLCX/Ni8o/0I7
+ Nf9UT0r/a2dk/4KBgP+YmZn/r7Gy/8XKyv/a4OD/6vHx//P7+//2////9f7+//L7+//w+Pj/7/j4/+/3
+ 9//v9/f/7/j4//D4+P/y+/v/9f7+//b////z+/v/6vHx/9rg4P/Fysr/r7Gy/5iZmf+CgYD/a2dk/1RP
+ Sv9COzX/Ni8o/zMsJf81Lyn/PTg0/0hFQf9WVFL/ampn/4KCgP+Ympj/qqyq/7S3tP+3urf/trm3/7S3
+ tf+ztrT/s7a0/7O2tP+ztrT/s7a0/7O2tP+2ubb/uLu5/7e6uP+ws7D/oKGe/4aFgf9oZV//TEZA/zgw
+ Kf8tJBv/Jx0U/ygdFf8vJh7/PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/y8nH/8pHhb/KR4W/y0k
+ HP81Lib/Qzw1/1VRSv9pZmH/enl0/4WFgP+KioX/ioqG/4mJhP+Ih4P/iIeD/4iHg/+Ih4P/iIeD/4iH
+ g/+IiIP/iomF/4qKhf+Ih4P/gYB8/3V0b/9mY1//VlNO/0hEQP8+OTT/NjAq/zApI/8wKSH/NzAp/0lD
+ PP9kX1r/g4B9/6Gfnv+4ubn/y83O/9re3v/l6+z/7vX1//T8/P/1/v7/9Pz8//L6+v/w+Pj/7/j4/+/3
+ 9//v9/f/7/j4//D4+P/y+vr/9Pz8//X+/v/0/Pz/7vX1/+Xr7P/a3t7/y83O/7i5uf+hn57/g4B9/2Rf
+ Wv9JQzz/NzAp/zApIf8wKSP/NjAq/z45NP9IRED/VlNO/2ZjX/91dG//gYB8/4iHg/+KioX/iomF/4iI
+ g/+Ih4P/iIeD/4iHg/+Ih4P/iIeD/4iHg/+JiYT/ioqG/4qKhf+FhYD/enl0/2lmYf9VUUr/Qzw1/zUu
+ Jv8tJBz/KR4W/ykeFv8vJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/y8nH/8qHxf/KyAY/y4l
+ Hf8zKyP/OjMr/0M9Nv9OSEL/V1JM/1xYUv9fW1X/X1tV/19aVP9eWlT/XlpT/15aU/9eWlP/XlpT/15a
+ U/9eWlT/X1tV/19bVf9eWlT/WlZQ/1RQSv9MR0H/RD84/z03Mf83MSv/MSoj/y0lHv8uJh//ODEp/1BJ
+ Q/9zbmn/mpaT/728u//W19b/5Obn/+vw8P/u9PT/8Pf3//L6+v/y+/v/8vr6//H5+f/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/x+fn/8vr6//L7+//y+vr/8Pf3/+709P/r8PD/5Obn/9bX1v+9vLv/mpaT/3Nu
+ af9QSUP/ODEp/y4mH/8tJR7/MSoj/zcxK/89NzH/RD84/0xHQf9UUEr/WlZQ/15aVP9fW1X/X1tV/15a
+ VP9eWlP/XlpT/15aU/9eWlP/XlpT/15aVP9fWlT/X1tV/19bVf9cWFL/V1JM/05IQv9DPTb/OjMr/zMr
+ I/8uJR3/KyAY/yofF/8vJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnH/8rIBj/LCEZ/y4m
+ Hf8xKSH/Mysj/zYvJ/85Mir/PDUu/z43MP8/ODD/Pzgw/z44MP8+NzD/Pjcw/z43MP8+NzD/Pjcw/z43
+ MP8+NzD/Pjgw/z44MP8+NzD/PTYv/zs0Lf85Miv/Ny8o/zUtJv8yKyP/LSYe/yoiGv8tJR3/OTIq/1VP
+ SP9+eXT/q6il/9PR0P/s7e3/9/r6//n9/f/1+/v/8fj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8fj4//X7+//5/f3/9/r6/+zt7f/T0dD/q6il/355
+ dP9VT0j/OTIq/y0lHf8qIhr/LSYe/zIrI/81LSb/Ny8o/zkyK/87NC3/PTYv/z43MP8+ODD/Pjgw/z43
+ MP8+NzD/Pjcw/z43MP8+NzD/Pjcw/z43MP8+ODD/Pzgw/z84MP8+NzD/PDUu/zkyKv82Lyf/Mysj/zEp
+ If8uJh3/LCEZ/ysgGP8wJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnH/8sIRn/LCIa/y8m
+ Hv8wKCD/MCcf/y8nHv8vJh3/LyYd/y8mHP8vJRz/LiUc/y8lHP8vJRz/LyYc/y8mHP8vJhz/LyYc/y8m
+ HP8vJRz/LyUc/y4lHP8vJRz/LyYc/y8mHf8vJh3/MCce/zAnH/8vJx7/KyMa/ykgGP8sIxv/OTIq/1hR
+ Sv+Dfnn/s6+s/9zb2v/39/f////////////5////8vn5//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8vn5//n///////////////f39//c29r/s6+s/4N+
+ ef9YUUr/OTIq/ywjG/8pIBj/KyMa/y8nHv8wJx//MCce/y8mHf8vJh3/LyYc/y8lHP8uJRz/LyUc/y8l
+ HP8vJhz/LyYc/y8mHP8vJhz/LyYc/y8lHP8vJRz/LiUc/y8lHP8vJhz/LyYd/y8mHf8vJx7/MCcf/zAo
+ IP8vJh7/LCIa/ywhGf8wJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnH/8sIRn/LCIa/y8m
+ Hv8wJx//LyYd/y4kGv8sIhf/KyAU/ysfE/8qHxL/Kh8S/yofEv8qHxL/Kh8S/yofEv8qHxL/Kh8S/yof
+ Ev8qHxL/Kh8S/yofEv8qHxL/KyAT/ywhFf8tIhf/LiQZ/y8lG/8vJRv/KyIY/ykgFv8sIxv/OTIq/1hR
+ S/+Dfnn/s6+t/9zb2v/39/f////////////5////8vn5//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8vn5//n///////////////f39//c29r/s6+t/4N+
+ ef9YUUv/OTIq/ywjG/8pIBb/KyIY/y8lG/8vJRv/LiQZ/y0iF/8sIRX/KyAT/yofEv8qHxL/Kh8S/yof
+ Ev8qHxL/Kh8S/yofEv8qHxL/Kh8S/yofEv8qHxL/Kh8S/yofEv8rHxP/KyAU/ywiF/8uJBr/LyYd/zAn
+ H/8vJh7/LCIa/ywhGf8wJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnH/8sIRn/LCIa/y8m
+ Hv8wKB//LyYd/y4lGv8uIxf/LSEU/ywgE/8sIBL/LCAS/ywgEv8sIBL/LCAT/ywgE/8sIBP/LCAT/ywg
+ E/8sIBL/LCAS/ywgEv8sIBL/LSET/y0iFf8uIxf/LyUZ/zAmG/8vJhv/LCIY/ykgFv8sIxv/OjIq/1hR
+ S/+Dfnn/s6+t/9zb2v/39/f////////////5////8vn5//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8vn5//n///////////////f39//c29r/s6+t/4N+
+ ef9YUUv/OjIq/ywjG/8pIBb/LCIY/y8mG/8wJhv/LyUZ/y4jF/8tIhX/LSET/ywgEv8sIBL/LCAS/ywg
+ Ev8sIBP/LCAT/ywgE/8sIBP/LCAT/ywgEv8sIBL/LCAS/ywgEv8sIBP/LSEU/y4jF/8uJRr/LyYd/zAo
+ H/8vJh7/LCIa/ywhGf8wJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnH/8sIRn/LCIa/y8m
+ Hv8wKCD/MCgf/y8nHv8vJh3/LyYd/y8mHP8vJhz/LyYc/y8mHP8vJhz/LyYc/y8mHP8vJhz/LyYc/y8m
+ HP8vJhz/LyYc/y8mHP8vJhz/LyYc/y8mHf8vJx3/MCce/zAnH/8vJx7/KyMa/ykgGP8sIxv/OjIq/1hR
+ Sv+Dfnn/s6+s/9zb2v/39/f////////////5////8vn5//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8vn5//n///////////////f39//c29r/s6+s/4N+
+ ef9YUUr/OjIq/ywjG/8pIBj/KyMa/y8nHv8wJx//MCce/y8nHf8vJh3/LyYc/y8mHP8vJhz/LyYc/y8m
+ HP8vJhz/LyYc/y8mHP8vJhz/LyYc/y8mHP8vJhz/LyYc/y8mHP8vJhz/LyYd/y8mHf8vJx7/MCgf/zAo
+ IP8vJh7/LCIa/ywhGf8wJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnH/8sIRj/LCIZ/y8m
+ Hf8wKCH/Lykj/y4qJ/8uKyr/LSwt/y0sL/8sLDD/LCww/ywsMP8sLC//LCwv/ywsL/8sLC//LCwv/yws
+ L/8sLC//LCww/ywsMP8sLC//LCwu/ywrLf8sKir/LCko/ywoJv8sJyP/KSMe/ycgGv8rJB3/OTEq/1VP
+ SP9+eXT/q6il/9PR0P/s7e3/9/r6//n9/f/1+/v/8fj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/w+Pj/8Pj4//D4+P/w+Pj/8fj4//X7+//5/f3/9/r6/+zt7f/T0dD/q6il/355
+ dP9VT0j/OTEq/yskHf8nIRr/KSMe/ywnI/8tKCb/LCko/ywqKv8sKy3/LCwu/ywsL/8sLDD/LCww/yws
+ L/8sLC//LCwv/ywsL/8sLC//LCwv/ywsL/8sLDD/LCww/ywsMP8tLC//LSwt/y4rKv8uKif/Lykj/zAo
+ If8vJh3/LCIZ/ywhGP8wJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnH/8sIBf/LSEY/y8m
+ Hf8vKSP/Lisr/ysuNv8oMUH/JjRL/yU2Uf8kNlT/JDZU/yQ2U/8lNVL/JTVS/yU1Uv8lNVL/JTVS/yU1
+ Uv8lNlL/JTZT/yU2U/8lNVL/JDRO/yMxSP8iLUD/Iio4/yInMf8jJSv/IiEj/yMgHv8pIx//NzAp/1BK
+ Q/90bmn/mpeT/728u//W19b/5Obn/+vw8P/u9PT/8Pf3//L6+v/y+/v/8vr6//H5+f/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/x+fn/8vr6//L7+//y+vr/8Pf3/+709P/r8PD/5Obn/9bX1v+9vLv/mpeT/3Ru
+ af9QSkP/NzAp/yokH/8lIR7/JCMk/yUnK/8lKTH/JCw4/yQvQf8kMkj/JTRO/yU1Uv8lNlP/JTZT/yU1
+ Uv8lNVL/JTVS/yU1Uv8lNVL/JTVS/yU1Uv8kNlP/JDZU/yQ2VP8lNlH/JjRL/ygxQf8rLjb/Lisr/y8p
+ I/8vJh3/LSEY/ywgF/8wJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnH/8sIBb/LSEW/y8l
+ HP8vKib/Ky41/yc0Sv8iOmD/HT9z/xtDfv8ZRIP/GUOD/xpDgf8aQn//GkJ//xpCf/8aQn//GkJ//xpC
+ f/8aQoD/GkOB/xpDgf8aQn//GT95/xg5bf8WMl3/FCtN/xQlP/8WIjX/GR8q/x4fI/8mIyH/NC4p/0pD
+ PP9mYFr/hIB9/6Ggnv+4ubn/y83O/9re3v/l6+z/7vX1//T8/P/1/v7/9Pz8//L6+v/w+Pj/7/j4/+/3
+ 9//v9/f/7/j4//D4+P/y+vr/9Pz8//X+/v/0/Pz/7vX1/+Xr7P/a3t7/y83O/7i5uf+hoJ7/hIB9/2Vg
+ Wv9KQzz/NS8p/yglIv8hIiT/HiMr/xwnNv8aKkH/GS9O/xk1Xv8aO23/Gj95/xpCf/8aQoH/GkKB/xpC
+ gP8aQn//GkJ//xpCf/8aQn//GkJ//xpCf/8aQ4H/GUOD/xlEg/8bQ37/HT9z/yI6YP8nNEr/Ky41/y8q
+ Jv8vJRz/LSEW/ywgFv8wJx//PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnHv8sIBX/LSAU/y8l
+ G/8uKij/KTE//yI5Xv8aQn//FEqb/xBPrf8OUbT/DlG0/w9Qsf8PT6//D06u/w9Orv8PTq7/D06u/w9O
+ rv8PT6//D1Cx/w9Qsv8PTq//Dkql/w1ClP8KOH3/CS9m/wknUf8NIkH/EyA0/xogKv8lJCX/Mi0o/0M8
+ Nf9XUEr/bGhk/4OBgP+YmZn/r7Gy/8XKyv/a4OD/6vHx//P7+//2////9f7+//L7+//w+Pj/7/j4/+/3
+ 9//v9/f/7/j4//D4+P/y+/v/9f7+//b////z+/v/6vHx/9rg4P/Fysr/r7Gy/5iZmf+DgYD/bGhk/1ZQ
+ Sv9CPDX/Mi0o/yclJf8eIyr/GCQ1/xMnQ/8QLFL/DjNn/w47fv8PRJT/D0ul/w9Or/8PULL/D0+x/w9P
+ r/8PTq7/D06u/w9Orv8PTq7/D06u/w9Pr/8PULH/DlG0/w5RtP8QT63/FEqb/xpCf/8iOV7/KTE//y4q
+ KP8vJRv/LSAU/ywgFf8wJx7/PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3COif9TX1n/PDsz/zAnHv8tHxT/LiAT/y8l
+ G/8uKyv/JzJH/x49bv8USJf/DFG7/wdX0f8FWtv/BVrc/wVa2f8GWdb/BlnW/wZZ1v8GWdb/BlnW/wZZ
+ 1v8GWdf/Blra/wZb2v8GWdb/BlXL/wZNtv8GQpv/Bjd//wkvZv8NKVL/FCZA/xwlMv8mJir/MCwo/zw1
+ Lv9JQjv/V1NO/2hmZP97fHv/lJaW/7C0tP/L0NH/4ejo/+729v/z+/v/9Pz8//L6+v/w+Pj/8Pj4//D4
+ +P/w+Pj/8Pj4//D4+P/y+vr/9Pz8//P7+//u9vb/4ejo/8vQ0f+wtLT/lJaW/3t8e/9oZmT/V1NO/0lC
+ O/88NS7/MCso/yUmKf8bJDL/EiVA/wsoUf8HLWX/BTZ//wVBm/8FTLb/BlXL/wZZ1v8GW9r/Blra/wZZ
+ 1/8GWdb/BlnW/wZZ1v8GWdb/BlnW/wZZ1v8FWtn/BVrc/wVa2/8HV9H/DFG7/xRIl/8ePW7/JzJH/y4r
+ K/8vJRv/LiAT/y0fFP8wJx7/PDsz/1NfWf9wjon/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eH/jby6/3CNif9TX1n/PDoz/zAnHv8tHxP/LiAS/y8l
+ Gv8tKyz/JjJK/xw9df8RSKL/CFLK/wJY4/8AXO7/AF7x/wBe7/8BX+3/AV/t/wFf7f8BX+3/AV/t/wFf
+ 7f8AYO//AGDx/wBg8v8AX+7/Alzi/wdXzv8MULT/EkiX/xhBff8dO2b/IjRR/yYvPf8qKy//MCsn/zcw
+ KP8+NzD/SEM+/1RST/9mZWT/fn9//5uenv+4vb3/0dfX/+Ho6P/q8fH/7vX1//D39//x+Pj/8/r6//T7
+ +//0+/v/8/r6//H4+P/w9/f/7vX1/+rx8f/h6Oj/0dfX/7i9vf+bnp7/fn9//2ZlZP9VUk//SUM+/0A5
+ MP84MCj/Lyon/yQnLv8aJTv/DyZN/wcqYv8CL3n/ADmU/wBFsf8AUcz/AVri/wFf7v8BYfL/AWHx/wFg
+ 7/8BX+3/AV/t/wFf7f8BX+3/AV/t/wFf7f8AXu//AF7x/wBc7v8CWOP/CFLK/xFIov8cPXX/JjJK/y0r
+ LP8vJRr/LiAS/y0fE/8wJx7/PDoz/1NfWf9wjYn/jby6/6Hh4f+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eD/jby5/3GNiP9TXlf/PDkx/zEmHP8tHhL/Lh8R/zAl
+ Gv8tKiz/JjFK/xs5df8QQqL/B0vK/wFS5P8AV/H/AFv2/wBe9v8AYPX/AGL2/wBi9/8AYvf/AGL3/wBi
+ 9v8AYfj/AGD5/wBg+v8AX/f/Bl/t/xJh3f8hYsn/MGOx/ztgmf8/WYH/PU1l/zc+Sv8yMTT/Lyol/zEp
+ If81LSX/PDYv/0ZCP/9VU1H/a2tp/4WHhv+go6P/uL29/8vQ0f/a4OD/5evs/+709P/1+/v/+v////z/
+ ///8////+v////X7+//u9PT/5evs/9rg4P/L0NH/uL29/6Cjo/+FhoX/a2pp/1VTUf9HQz//Pzkw/zoy
+ Jv82LSL/Lyol/yUnMf8aJ0X/EChc/wcsdv8BMo7/ADyo/wBIwv8AVNr/AF3s/wBi9/8AZPv/AGP6/wBi
+ +P8AYvf/AGL3/wBi9/8AYvf/AGL2/wBg9f8AXvb/AFv2/wBX8f8BUuT/B0vK/xBCov8bOXX/JjFK/y0q
+ LP8wJRr/Lh8R/y0eEv8xJhz/PDkx/1NeV/9xjYj/jby5/6Hh4P+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eD/jbu4/3GMh/9UXVb/PTgw/zElG/8uHhH/Lx8R/zAl
+ Gv8tKiv/Ji5I/xszcP8QOpv/B0DB/wFH2/8ATen/AFTw/wBa8/8AX/X/AGL3/wBj+P8AY/j/AGL3/wBi
+ 9/8AYPj/AF75/wBd+f8AXvf/C2Hx/yBr5/88eNv/VoLL/2eGt/9qfp7/YGp9/05RWf88Ojr/MCok/ywk
+ G/8tJRz/Mywl/zw3Mf9JRUH/WlhV/25ubP+Fh4b/m56e/7CztP/FyMj/2dzc/+vs7P/4+fn/////////
+ //////////////j5+f/r7Oz/2dzc/8XIyP+ws7T/m56e/4WHhv9ubmz/WVdV/0lFQf8+OTL/OTEm/zct
+ Hv80Kh3/Lykk/yYoNf8bKE//ECpt/wcui/8BNKT/AD66/wBJz/8AVeH/AF3v/wBi9/8AZPr/AGP6/wBi
+ +P8AYvf/AGL3/wBj+P8AY/j/AGL3/wBf9f8AWvP/AFTw/wBN6f8BR9v/B0DB/xA6m/8bM3D/Ji5I/y0q
+ K/8wJRr/Lx8R/y4eEf8xJRv/PTgw/1RdVv9xjIf/jbu4/6Hh4P+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9/v/o/r9/6j19v+h4eD/jby5/3GMiP9UXVf/PTkx/zElHP8uHxL/LiAS/zAl
+ Gv8tKSr/JitE/xstaP8QMI//BzWy/wE7y/8AQ9v/AEzl/wBW6/8AXfD/AGHz/wBi9f8AYvX/AGH0/wBh
+ 8/8AX/T/AF30/wBc9P8AXvP/D2bw/y537v9Wjur/e6Hi/5Sr1P+Worr/hImV/2dna/9KRUT/NC4o/ywk
+ G/8qIhn/Lice/zYvKP8/OjT/S0dD/1pYVf9ra2n/fn9//5SWlv+usLD/ysvL/+Pk5P/29vb/////////
+ //////////////b29v/j5OT/ysvL/66wsP+Ulpb/fn9//2traf9ZWFX/S0dD/z86NP84MSn/NSwg/zQq
+ G/8zKRz/Likm/yYpPf8bK1z/EC1//wcyoP8BOLj/AEHL/wBL2v8AVeX/AF3u/wBh8/8AYvX/AGL1/wBh
+ 9P8AYfP/AGH0/wBi9P8AYvX/AGHz/wBd8P8AVuv/AEzl/wBD2/8BO8v/BzWy/xAwj/8bLWj/JitE/y0p
+ Kv8wJRr/LiAS/y4fEv8xJRz/PTkx/1RdV/9xjIj/jby5/6Hh4P+o9fb/o/r9/5f3+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/17g
+ 7/9s5O//eejw/4jv9f+X9vv/o/r9/6j19v+h4uH/jL27/2+Pi/9RYVz/Oj03/y8qIv8sIxf/LSMW/y8m
+ HP8tKCn/JihA/xwoYP8RKYP/Byyj/wEyu/8AO83/AEba/wBS5P8AW+v/AGDw/wBi8v8AYfL/AGHx/wBg
+ 8P8AYPD/AF/w/wBf8f8GZPH/GW/w/z+G8/9uovX/mrz0/7fI6v+5wNL/o6Ss/4B9f/9bVlT/QDo0/zMr
+ JP8uJh3/LyYe/zMrJP84MSv/Pzo0/0lFQf9VU1H/ZmVk/3t8e/+YmZn/uLm5/9bX1v/s7e3/+fr5////
+ ////////+fr5/+zt7f/W19b/uLm5/5iZmf97fHv/ZmVk/1VTUf9JRUH/Pzo0/zgxK/8zKyT/MSgf/zEo
+ Hv8vKCP/LCox/yQrSv8aLmz/DzKR/wY2sv8BPMn/AETY/wBN4v8AVuj/AFzt/wBg8P8AYfL/AGHx/wBg
+ 8f8AYPD/AGHx/wBi8v8AYvL/AGDw/wBb6/8AUuT/AEba/wA7zf8BMrv/Byyj/xEpg/8cKGD/JihA/y0o
+ Kf8vJhz/LSMW/ywjF/8vKiL/Oj03/1FhXP9vj4v/jL27/6Hi4f+o9fb/o/r9/5f2+/+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9D1Or/UNvu/13g
+ 7/9r5O//eOjw/4fv9f+X9vr/pPr8/6j19v+h4+P/isHA/2uVlP9Mamj/M0dE/ygzL/8mKiL/Kigd/y0p
+ IP8tKSn/Jic8/xwmWP8RJXf/ByiV/wEtrf8AN8H/AETR/wBQ3/8AWun/AGDw/wBh8v8AYfL/AGDx/wJh
+ 8P8GZPD/C2fx/xNs8f8hdPL/N4Lz/1ya+P+Jtf3/sc7+/8za9v/O0+L/ubnA/5iVl/90b2//WFJP/0dA
+ Ov88NS3/Ni4m/zQsI/80LCT/NzAp/z04Mv9HQz//VVJP/2hmZP+DgYD/oaCe/728u//T0dD/393c/+Xj
+ 4v/l4+L/393c/9PR0P+9vLv/oaCe/4OBgP9oZmT/VVJP/0dDP/8+OTL/ODEp/zMrJP8vKCL/LSYk/ysn
+ Kv8qKTX/JixG/x8vYP8WMoH/DTek/wU8wv8BQtb/AEni/wBR6f8AWOz/AF3u/wBg8P8AYfH/AGHx/wBg
+ 8P8AYPD/AGHx/wBi8v8AYvL/AGDw/wBa6f8AUN//AETR/wA3wf8BLa3/ByiV/xEld/8cJlj/Jic8/y0p
+ Kf8tKSD/Kigd/yYqIv8oMy//M0dE/0xqaP9rlZT/isHA/6Hj4/+o9fb/pPr8/5j2+v+I7/X/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9C1Or/T9vt/1zg
+ 7/9p5O//dujw/4bu9P+X9vn/pPn7/6n19v+g5eX/h8bH/2WeoP9Cdnn/KFVY/x1AQv8dNTL/JC8o/yss
+ Jf8sKSn/JiY4/xwkT/8RJGr/ByaF/wEsnf8ANrP/AEPI/wBQ2v8AWuf/AGDw/wBh8/8AYPP/AGDx/wVj
+ 8P8RavH/IXTy/zWB8/9Lj/T/ZJ72/4Sz+v+myf//xdv//9jk+//Z3+z/ysvS/7Gvs/+VkpP/fHd2/2hi
+ Xv9WTkf/Rj40/zsxJv80Kx//Myof/zYuJf89NzD/SEM+/1dTTv9saGT/hIB9/5qXk/+rqKX/tbGu/7m2
+ s/+5trP/tbGu/6uopf+al5P/hIB9/2xoZP9XU07/SUM+/z85MP85MSb/NSwg/zEoH/8tJiT/KSYv/yUo
+ Pv8iK1H/HS5m/xczf/8QOJv/Cj63/wREz/8BSt//AE/o/wBV7f8AWu7/AF7v/wBg8P8AYfH/AGHw/wBg
+ 8P8AYPD/AGHx/wBi8/8AYvP/AGDw/wBa5/8AUNr/AEPI/wA2s/8BLJ3/ByaF/xEkav8cJE//JiY4/ywp
+ Kf8rLCX/JC8o/x01Mv8dQEL/KFVY/0J2ef9knqD/h8bH/6Dl5f+p9fb/pfr8/5n2+f+I7/T/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zXK4v9C1Or/Ttvt/1vg
+ 7/9o4+//defw/4Xu9P+X9fj/pPn7/6n29v+f5+j/g8zP/16pr/84hI3/HWVw/xJQWf8VQkT/Hjc0/ygw
+ K/8rKin/JiYz/x0kRf8RJFz/ByZ1/wEsjP8ANqX/AEO9/wBQ1P8AWub/AF/w/wBg8/8AX/P/AF/x/wdl
+ 8P8ccfL/OYPz/1mX9f95q/f/k7z5/6zL/P/C2f//0+T//93o/f/e5fP/1trk/8jJ0f+2tbr/op+i/4yH
+ h/9ya2f/WFBI/0M5Lv82LB//MSca/zIpHf83Lyb/Pzgw/0lCO/9WUEr/ZWBa/3Ruaf9+eXT/hH97/4eC
+ fv+Hgn7/hH97/355dP90bmn/ZWBa/1ZQSv9JQjv/QDkw/zoyJv83LR7/NCob/zEoHv8rJyr/JSg+/x8q
+ V/8ZLnL/EzKK/w43oP8KPrb/BkbK/wJM2v8AUub/AFbs/wBa7/8AXO//AF/v/wBg8P8AYfD/AGDw/wBg
+ 8P8AYPD/AGHx/wBi8/8AYvT/AGDw/wBa5v8AUNT/AEO9/wA2pf8BLIz/ByZ1/xEkXP8dJEX/JiYz/ysq
+ Kf8oMCv/Hjc0/xVCRP8SUFn/HWVw/ziEjf9eqa//g8zP/5/n6P+q9vb/pvn7/5n1+f+J7vT/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/xCYsP8bqcL/KLvU/zbK4v9C1Or/UNvu/13g
+ 7/9q5O//d+jw/4fu8/+Y9Pj/pfj6/6j19v+d6ev/gNLX/1q0vv80lKL/F3iI/w1icP8RUFf/HEFB/yc1
+ Mf8rLCr/JiYu/x0jO/8RJE7/Bydl/wEtfP8AN5b/AESz/wBQzv8AWuT/AF/w/wBf9P8AXvT/AF/x/wpm
+ 8f8ld/L/S4/0/3Wp9/+cwfn/uNL7/8re/f/V5f7/3On+/97q/f/f6Pj/3eTz/9fd6//N0d7/vsDL/6am
+ rf+GhIb/ZWBe/0hBO/82LST/LiUb/y4lHP8yKiH/NzAo/zw1Lv9CPDX/SkM8/1BKQ/9VT0j/WFJL/1pT
+ Tf9aU03/WFJL/1VPSP9QSkP/SkM8/0I8Nf88NS7/ODAo/zYtIv80Kh3/Mykc/y8oI/8qKTX/IitR/xku
+ cv8RMZL/Cjar/wY9v/8ERc7/Ak3a/wFU4/8AWer/AFzu/wBe8P8AX/D/AF/w/wBg8P8AYPD/AGDw/wBg
+ 8P8AYPD/AGHy/wBi9P8AYvT/AGDw/wBa5P8AUM7/AESz/wA3lv8BLXz/Bydl/xEkTv8dIzv/JiYu/yss
+ Kv8nNTH/HEFB/xFQV/8NYnD/F3iI/zOUov9atL7/gNLX/53p6/+o9fb/pfj6/5n0+P+I7vT/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/w+YsP8bqcL/KLvU/zbK4v9E1er/U9zu/2Ph
+ 7/9y5fD/gOnx/43u9P+b9Pf/pff5/6b19v+a6+3/f9jf/1u/y/83pbX/HYye/xN1hf8WX2n/H0tN/yg5
+ Nv8sLSr/JyYq/x4jMv8UJEL/CihW/wQtbP8BN4n/AESq/wBRyf8AW+L/AF/w/wBf9f8AXfT/AF7y/wpm
+ 8f8oefL/UpP1/4Cv9/+oyfr/xNr7/9Tk/P/c6f3/3ur9/97q/P/e6fz/3un9/9vm/P/T3vb/xM/m/6y0
+ yf+KkKD/Z2h0/0dGTP8yLzL/KSUm/ygjIv8rJiT/Lion/zArKP8yLSj/NS8p/zcwKf85MSr/OjIq/zoy
+ Kv86Mir/OjIq/zkxKv83MCn/NS8p/zItKP8wKyj/Lyon/y8qJf8vKST/Likm/ywqMf8mLEb/HS5m/xMy
+ iv8KNqv/BDzF/wFC1v8ASuD/AFPm/wBZ6v8AXu7/AGDw/wBg8f8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg
+ 8P8AYPD/AGHy/wBi9P8AYvX/AGDw/wBb4v8AUcn/AESq/wE3if8ELWz/CihW/xQkQv8eIzL/JyYq/ywt
+ Kv8oOTb/H0tN/xZfaf8TdYX/HYye/ziltf9bwMv/f9jf/5rr7f+l9Pb/ovb4/5fz9/+H7fP/eejw/2zk
+ 7/9e4O//UNvu/0PU6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8AgZn/Bomh/w6XsP8ZqcL/JrvT/zTK4v9G1er/Wt3v/2/j
+ 8f+C6PL/kOzz/5rw9f+h9Pf/o/X4/6Dz9f+U6+//ft3l/2PM1/9Ht8f/MqGy/yiKmf8ncHj/KlVX/y4+
+ Ov8uLSn/KSQk/yEhKf8YIzb/ECdI/wsuX/8HOH7/BESj/wJRxv8BW+L/AGDx/wBg9/8AXvX/AF/y/wlm
+ 8f8kdvL/SY30/3Gm9v+Xvvn/ss/6/8Xb+//T4/z/2+j9/97q/f/e6v7/2Oj//8/i///B2P//r8fz/5at
+ 2f94i7T/WGaL/zxGZv8qMEv/ISY8/x8jNP8hJDH/JCYu/yUmKf8nJST/KSQg/yokHf8sIxr/LSMY/y0j
+ F/8tIxf/LSMY/ywjGv8qJB3/KSQg/yclJP8lJin/JScu/yUnMf8mKDX/Jik9/yQrSv8fL2D/FzN//w83
+ oP8HPb//AkLW/wBJ4/8AUOr/AFft/wBd7v8AYPD/AGLx/wBh8f8AYfH/AGDw/wBg8P8AYPD/AGDw/wBg
+ 8P8AYPD/AGHy/wBi9v8AYvf/AGHx/wFb4v8CUcb/BESj/wc4fv8LLl//ECdI/xgjNv8hISn/KSQk/y4t
+ Kf8uPjr/KlVX/ydweP8oipn/MqGy/0i3x/9kzNj/gN7l/5Xr7/+d8vX/m/T3/5Lx9f+F7fP/eejw/23k
+ 7/9f4O//Udzu/0PV6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6V/wB+lf8AgZn/Bomh/w2XsP8WqMH/I7rT/zLJ4f9H1er/Yt7w/37m
+ 8v+W6/T/pu/1/6vy9v+o9Pf/ofP2/5fw9P+M6/D/f+Pq/2/Z4/9fy9f/UrnG/0ihrP9Bgof/O2Bg/zdC
+ Pv8xLSf/KyIf/yUfIP8fISr/GSc6/xQuUf8POHP/CkWc/wVSxP8CXOP/AGH0/wBh+f8AYPf/AGDz/wdk
+ 8f8acPH/NIDz/1KT9f9wpvb/i7b4/6XH+f++1vv/0eL8/9zp/f/b6P7/zeH//7fV//+exP//hrD2/2+Y
+ 4v9We8X/P16k/yxEhf8eMm3/Fyhc/xYlT/8XJUT/GSU7/xskMf8eIij/IiEg/yYgGf8pHxT/Kh4R/yse
+ D/8rHg//Kh4R/ykfFP8mIBn/IiEg/x4iKP8bJDH/GiU7/xonRf8aKFD/Gytd/xoubP8WMoH/ETib/ws+
+ tv8FRc7/AUrg/wBQ6v8AVu7/AFvw/wBe8P8AYfH/AGLx/wBh8f8AYfH/AGDw/wBg8P8AYPD/AGDw/wBg
+ 8P8AYPD/AGHz/wBj+P8AY/n/AGH0/wJc4/8FUsT/CkWc/w84c/8ULlH/GSc6/x8hKv8lHyD/KyIf/zEt
+ J/83Qj7/O2Bg/0GCh/9Ioaz/UrnG/2HL1/9z2eP/g+Tr/4/r8P+T8PT/kvH1/4zv9P+D7PL/eejw/27l
+ 7/9g4e//Utzu/0PV6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6V/wB+lf8AgZn/BYmh/wyXsP8VqMH/IrrT/zPK4f9M1uv/beDx/5Dp
+ 9P+t7/b/vfP4/731+P+x9Pf/oPH2/5Du8/+G6vD/gejv/37l7f963ub/dNDY/2q3vf9dlJX/Tmxq/z9I
+ Qv80Lif/LSIb/ykeGf8mISD/Iicv/x0uRv8XOGn/D0WV/wlSwP8DXOL/AGH0/wBi+v8AYfj/AGDz/wRj
+ 8f8OafH/HHLx/y588/9DifT/W5n1/32u9/+ixfn/wtn7/9Xl/P/T5P3/vNf+/5rC/v90qvv/VpP0/0B+
+ 5v8waNP/I1O8/xlBpv8SNJL/Dix//wwobf8NJ1z/DyZN/xMkP/8YIzP/HyIn/yYiHv8rIRf/LSET/y8h
+ Ef8vIRH/LSET/yshF/8mIh7/HyIn/xgjM/8TJD//DyZN/w4oXf8PKm7/Dy1//w8ykf8NN6T/Cj63/wZG
+ yv8DTdr/AVPm/wBX7f8AW/D/AF3w/wBf8P8AYfH/AGHx/wBh8f8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg
+ 8P8AYPD/AGHz/wBj+P8AY/r/AGL0/wNc4v8JUsD/D0WV/xc4af8dLkb/Iicv/yYhIP8pHhn/LSIb/zQu
+ J/8/SEL/TWxq/1yTlf9qt73/ddDY/33e5v+C5u3/hunw/4jr8f+I7fL/h+3z/4Tt8v9/6/H/eOjw/27l
+ 7/9h4e//Utzu/0PV6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/Bomh/w6XsP8YqcL/JrvU/zrL4v9W2Oz/e+Py/6Ls
+ 9v/B8vj/0fb6/833+f+69Pj/ovD1/47s8/+F6/H/hu3z/43v9f+T7vL/k+Pm/4jKzP90pKP/XHh0/0VP
+ Sf81Miz/LSQc/ysgFv8rIhr/Kicm/yYtPP8eN2D/FUSM/wtQuP8EWtz/AGDv/wBh9v8AYfb/AGDy/wJh
+ 8P8EY/D/B2Xw/w5o8f8acPL/MH7z/1aW9f+Fs/j/r836/8jc/P/F2/z/p8n7/3yu+f9Okfb/K3jw/xhm
+ 6P8PV93/C0rR/wk/wv8HN7L/BTGf/wQti/8FK3X/Byli/wsoUv8TJ0P/HCc2/yUnLP8sJyT/MCcf/zEn
+ HP8xJxz/MCcf/ywnJP8lJyz/HCc2/xMnQ/8LKFL/Bypi/wUsdv8FLov/BjKg/wY2sv8FPML/BETP/wNM
+ 2v8BVOP/AFnq/wBd7v8AXvD/AF/w/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg
+ 8P8AYPD/AGHy/wBi9v8AYvb/AGDv/wRa3P8LULj/FUSM/x43YP8mLTz/Kicm/ysiGv8rIBb/LSQc/zUy
+ LP9FT0n/XHh0/3Sko/+Iysz/k+Pm/5Tu8v+Q8PX/ie3z/4Lq8f9/6vH/furx/33q8f966fD/defw/2zk
+ 7/9g4e//Udzu/0PV6v82yuL/KLvU/xupwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH2V/wB9lf8BgZn/CImh/xOZsP8iq8P/NL7V/0rP5P9n3O7/jOb0/7Hv
+ +P/P9fr/3vj7/9j4+v/D9fj/qvH1/5Xt8/+M7PP/kfH2/5v3+/+k+Pr/pe/w/5jX1/9/sK//YYOB/0VZ
+ Vv8yOzb/Kisk/yklGv8sJRr/Ligi/yotNP8iNVb/GECA/w1Mq/8FVc7/AFvj/wBe7f8AX+//AF/v/wBg
+ 7/8AX/D/AF7w/wBe8P8DYvD/Fm7x/zuF8/9rovb/lr35/7DO+v+tzPr/j7r5/2Ke9/8zgfT/EWnv/wFa
+ 6/8AT+b/AEff/wBC1v8BPMn/ADi4/wA0o/8AMY3/ATB5/wYuaP8OLln/GC5N/yEuQv8oLjr/LC41/y4u
+ M/8uLjP/LC41/yguOv8hLkL/GC5N/w4uWf8GLmj/ATB5/wAyjf8ANKP/ADi4/wE8yf8BQtb/AUrf/wBS
+ 5v8AWer/AF7u/wBg8P8AYfH/AGHx/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDx/wBg
+ 8P8AYO//AF/v/wBf7/8AXu3/AFvj/wVVzv8NTKv/GECA/yI1Vv8qLTT/Ligi/ywlGv8pJRr/Kisk/zI7
+ Nv9FWVb/YoOB/4Cwr/+Z19f/pe/w/6P4+v+Z9vr/i/D2/3/q8f946PD/dufw/3Xn8P9z5u//b+Xv/2fi
+ 7/9c3+//T9vt/0LU6v81yuL/KbvU/xyqwv8QmLD/Bomh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Afpb/AHyU/wB8lP8Bf5f/DImg/x6asP80rsT/TcTX/2fV5/+D4vH/ouv3/8Hy
+ +v/Z9/v/5Pn8/9/5+//O9vn/uPL3/6Xv9f+e8PX/ofX5/6n7/f+v/f7/rfX1/53e3v9/ubn/XY6P/z1m
+ Z/8oSEn/ITY0/yMtJv8pKiD/Lioi/ywsL/8kMkv/GTpw/w5El/8FTLj/AFLN/wBX2/8AW+T/AF7q/wBg
+ 7v8AX/H/AFzx/wBa8f8AXPD/DmXx/y158v9TkfX/dqj3/4y2+P+Jtfj/cKX3/0yO9f8mdfL/C2Lw/wBW
+ 7f8AT+v/AEvo/wBH4v8ARNj/AEDK/wA+uP8AO6b/ADqV/wQ4hv8LOHr/Ezhv/xo4Zv8gOGD/Izhb/yQ4
+ Wf8kOFn/Izhb/yA4YP8aOGb/Ezhv/ws4ev8EOIb/ADqV/wA7pv8APbj/AEDK/wBE2P8ASeL/AE/o/wBW
+ 7P8AXO7/AGDw/wBi8f8AYvH/AGHx/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYfH/AGHy/wBh
+ 8f8AYO7/AF7q/wBb5P8AV9v/AFLN/wVMuP8ORJf/GTpw/yQyS/8sLC//Lioi/ykqIP8jLSb/ITY0/yhI
+ Sf8+Zmf/X4+P/4K6uv+f397/rPX1/6r8/f+d+fz/jPH3/33q8f915/D/cOXv/2zk7v9p4+7/ZeHu/13f
+ 7f9V3e7/S9nt/0HU6v82yuL/KrzU/x2qwv8QmLD/B4mh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Afpb/AHuU/wB6k/8Bfpb/EYig/yqbsf9Ks8b/a8rb/4nd6/+j6vX/u/H6/9D2
+ /P/f+Pz/5/r8/+P5/P/Y9/r/yfX5/7zz9/+18/f/tfj7/7f9/v+3/v7/r/b2/5rh4v95wMP/U5qf/zF0
+ fP8cWF//FkVJ/xs4Nv8kMSr/LC0m/ywsLf8lLkH/GjNe/w46f/8FQZz/AEiz/wBPxv8AVtb/AFvj/wBf
+ 7f8AYPL/AF7z/wBc8v8AXPD/CmLw/x9v8f85gfP/UZH1/2Cb9f9emvX/TY/1/zR+8/8abfH/B2Dw/wBY
+ 7v8AU+3/AFHs/wBP6P8ATeL/AEvY/wBJzP8AR7//AEaz/wNFqf8HRaD/DUWY/xJFkv8WRY3/GEWK/xlF
+ if8ZRYn/GEWK/xZFjf8SRZL/DUWY/wdFoP8DRan/AEaz/wBHv/8ASMz/AEvY/wBN4v8AUen/AFXt/wBa
+ 7/8AXvD/AGDx/wBh8f8AYfH/AGHx/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8f8AYfL/AGLz/wBi
+ 8v8AYO3/AFvj/wBV1v8AT8b/AEiz/wVBnP8OOn//GjNe/yUuQf8sLC3/LC0m/yQxKv8bODb/FkVJ/xxY
+ X/8zdXz/V5qg/37BxP+e4uP/rfb2/6z8/f+f+fz/jfH2/33q8f9y5u//auPu/2Th7f9e3u3/WNzs/1La
+ 7P9M2e3/Rtft/z/T6v82y+L/K7zU/x6qwv8RmLD/B4mh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Afpb/AHuU/wB6k/8Cfpf/FYqh/zefs/9guMn/idLe/6zl7//D8fj/0/f8/975
+ /f/k+fz/5/n8/+b5/P/h+fv/2vj7/9P3+v/M9/r/yfr8/8X9/v+9/f3/r/X2/5bj5f9zx83/TKWv/ymF
+ kv8Tanj/DlZg/xVFSf8gOTb/KjAr/ysrK/8kKjf/GixN/w4wZv8FNoD/AD2X/wBGr/8AUMf/AFjc/wBe
+ 6/8AYfL/AGD0/wBf8/8AXvH/BWHw/xFp8f8fcvL/LHvy/zSA8/8zf/P/Knny/xxx8v8OZ/H/BGDw/wBc
+ 7/8AWe//AFju/wBX7P8AVuj/AFTj/wBT3P8AUtX/AFLP/wJRyf8EUcT/B1HA/wpRvf8MUbr/DVG5/w1R
+ uP8NUbj/DVG5/wxRuv8KUb3/B1HA/wRRxP8CUcn/AFLP/wBS1f8AU9z/AFTj/wBW6P8AWOz/AFru/wBc
+ 7/8AX/D/AGDw/wBh8f8AYfH/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8f8AYfP/AGL0/wBi
+ 8v8AX+v/AFjc/wBPx/8ARq//AD2X/wU2gP8OMGb/GixN/yQqN/8rKyv/KjAr/yA5Nv8VRUn/DlZg/xNq
+ eP8rhZL/UKaw/3jHzf+Z5Ob/qvX1/6r6+/+e9/r/jvH2/33q8f9x5e//ZuHu/1ze7P9T2uv/S9fq/0bW
+ 6v9D1uz/QNXs/zzS6f81yuL/K7zU/x6qwv8RmLD/B4mh/wGBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB/l/8HhJv/H5Cm/0WmuP90v83/otni/8fs8v/b9/v/5fv+/+f7
+ /v/n+v3/5/n8/+j6/P/o+vz/6Pr8/+X6/P/f+vz/2fz9/9D+/v/E/Pz/svX2/5fl6f9zztb/TLK//yqW
+ p/8UfY//D2d1/xVTWv8gQUH/KTQw/ysqKv8kJi//GiY9/w8pUf8GLmf/ATR+/wA+m/8ASrn/AFTU/wBc
+ 5/8AYPH/AGH0/wBg8/8AYPH/AmHw/wZj8P8KZvH/D2nx/xJr8f8Ra/H/Dmnx/wpm8f8FY/D/AWHw/wBf
+ 8P8AXu//AF3v/wBd7v8AXO3/AFzr/wBc6f8AW+b/AFvk/wFb4/8BW+H/Alvg/wNb3/8EW97/BFvd/wVb
+ 3f8FW93/BFvd/wRb3v8DW9//Alvg/wFb4f8BW+P/AFvk/wBb5v8AXOn/AFzr/wBc7f8AXe7/AF7v/wBf
+ 7/8AX/D/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8f8AYfP/AGH0/wBg
+ 8f8AXOf/AFTU/wBKuf8APpv/ATR+/wYuZ/8PKVH/GiY9/yQmL/8rKir/KTQw/yBBQf8VU1r/D2d1/xR9
+ j/8rlqf/TrK//3TO1v+V5ej/pfP0/6b3+f+c9fj/jfD1/33q8f9w5e//Y+Dt/1bb7P9K1+r/QdPp/zzS
+ 6f860+r/OdPr/zjQ6P8yyeH/KbvU/x2qwv8QmLD/Bomh/wCBmf8AfZX/AH2V/wB/l/8AgJj/AICY/wCA
+ mP8Afpf/AH+X/wOBmf8Fgpr/CYSb/xGIn/8gkKX/Op2w/2Cxwf+MydT/tt/m/9fw9f/o+fz/7fz//+z8
+ /v/p+v3/6Pn8/+r6/P/s+v3/7vv9/+78/f/q/P3/4/39/9r+/v/M/Pz/uvb3/6Hp7f9/19//WsHO/zqp
+ uv8lkqT/HXqI/x9haP8mSUr/LDYy/yspJ/8lIyf/HSIw/xMkQP8LKVP/Bi9s/wQ5i/8CRK3/AU/N/wBX
+ 4/8AXO//AF7z/wBf8v8AX/D/AF/w/wBf8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg
+ 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDx/wBg8f8AYPH/AGDx/wBg
+ 8f8AYPH/AGDx/wBg8f8AYPH/AGDx/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg
+ 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8f8AYPH/AGDx/wBg8f8AX/P/AF70/wBc
+ 7/8AV+P/AU/M/wJErf8EOYv/Bi9r/wspU/8TJED/HCIw/yUjJ/8rKSf/LDYy/ydKSv8gYWj/HnqI/ySS
+ o/84qbr/VsDN/3bW3v+R5+v/n/L0/6D19/+Y8/f/i+/0/33p8f9w5e//YuDt/1Pa6/9G1er/PNHo/zbQ
+ 6P8z0On/MtDp/zDN5v8sxt//I7nS/xmowf8Ol6//BYmh/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8Ae5T/AH2V/waAmP8Rhp3/H42j/zGXq/9Ho7T/YbHA/4LCzv+l1N3/xubs/97z9v/r+vz/7/z+/+z7
+ /v/p+v3/6Pn8/+r6/P/u+/3/8fz9//H8/f/v/f3/6f3+/+L+/v/W/Pz/x/j4/7Hu8v+U4un/dNLd/1e/
+ zf9Cqrj/No+a/zJwdf8wUVD/Lzcy/ywnIv8mHx7/IB4k/xkhMf8UJ0T/Dyxc/wo1fv8GP6P/A0nG/wFQ
+ 4P8AVe3/AFjy/wBa8v8AW/D/AFzw/wBc8P8AXPD/AFzw/wBb8P8AXPD/AF3w/wBe8P8AX/D/AGDw/wBg
+ 8P8AYfD/AGHx/wBh8f8AYfH/AGLy/wBi8/8AYvT/AGL1/wBi9f8AYvb/AGL2/wBi9/8AYvf/AGL3/wBi
+ 9/8AYvf/AGL3/wBi9/8AYvf/AGL2/wBi9v8AYvX/AGL1/wBi9P8AYvP/AGLy/wBh8f8AYfH/AGHx/wBh
+ 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGHx/wBh8v8AYfP/AGHz/wBf8/8AXfT/AFr0/wBW
+ 7v8BUOD/A0jG/wY/o/8KNX7/Dyxc/xQnRP8ZITH/IB4k/yYfHv8sJyL/MDcy/zJRUP80cHX/OY+a/0Gp
+ uP9Rvsz/ZtDb/3ze5v+N6O7/lu/z/5fy9f+R8fX/h+7z/3zp8f9x5e//Y+Dt/1Pa7P9F1er/OdDo/zLO
+ 5/8tzef/Kszn/yfJ5P8iwtz/G7XQ/xKlv/8Lla7/BIih/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AeJH/AHuU/wqBmf8di6H/N5ms/1Wpuf90ucb/jsfR/6fU3f++4ef/0uzx/+H0+P/p+fz/6/r9/+r6
+ /f/o+fz/6Pn8/+r6/P/t+/3/8Pz9//H8/f/w/P3/7f3+/+j9/v/g/P3/1Pn6/8P09v+t7fL/k+Pr/3vV
+ 3v9mwcv/VqSr/0l/gf8+WVf/NTk0/y0lH/8oHRj/JB0b/yEhJv8dJjf/GCtP/xIycv8MOpr/BkG//wJI
+ 2v8ATen/AFLv/wBW8P8AWe//AFvw/wBc8P8AXPD/AFzw/wBc8P8AXPD/AF3w/wBe8P8AX/D/AGDw/wBg
+ 8P8AYfD/AGHw/wBh8f8AYfH/AGHy/wBh8/8AYvP/AGL0/wBi9f8AYvX/AGL1/wBi9v8AYvb/AGL2/wBi
+ 9v8AYvb/AGL2/wBi9v8AYvb/AGL1/wBi9f8AYvX/AGL0/wBi8/8AYfP/AGHy/wBh8f8AYfH/AGHw/wBg
+ 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPH/AGHy/wBi8/8AYvT/AGH0/wBe9P8AWvT/AFXx/wBP
+ 6v8CSNr/BkG//ww5mv8SMnL/GCtP/x0mN/8hISb/JB0b/ygdGP8tJR//NTk0/0BaV/9NgIL/WaSr/2XB
+ yv9v093/et/o/4Pm7f+J6vD/jO3y/4zv9P+J7vP/g+zy/3vp8f9x5e//ZOHu/1Xb7P9G1er/OdDo/zDN
+ 5/8oy+b/Isnk/xzE4f8Wvdn/EbHN/wuivf8GlK3/A4ig/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AeZL/AH2W/w6FnP8pk6f/TqW2/3e6x/+dztf/t9zi/8jl6v/T7PD/2/H1/+D1+f/l+Pv/5/n8/+f5
+ /P/n+fz/5/n8/+n6/P/s+/3/7vv9/+/8/f/v/P3/7v39/+39/f/p/P3/4fv7/9X4+v/F9vn/svL2/57p
+ 7f+K19v/dri6/2GPj/9NZWH/PEA6/zAqI/8rIBj/KR8X/ygjH/8mJy7/IStF/xkvZ/8QNY7/CDq0/wJA
+ 0P8AR+H/AE3p/wBU7P8AWe7/AF3v/wBf8f8AX/H/AF/w/wBf8P8AX/D/AF/w/wBf8P8AYPD/AGDw/wBg
+ 8P8AYPD/AGDw/wBg8P8AYPD/AGDx/wBh8f8AYfH/AGHx/wBh8v8AYfL/AGHy/wBh8v8AYfL/AGHy/wBh
+ 8v8AYfL/AGHy/wBh8v8AYfL/AGHy/wBh8v8AYfL/AGHx/wBh8f8AYfH/AGDx/wBg8P8AYPD/AGDw/wBg
+ 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGHx/wBi8v8AYvL/AGDx/wBc7/8AVu7/AE/q/wBH
+ 4f8CQdD/CDq0/xA1jv8ZL2f/IStF/yYnLv8oIx//KR8X/ysgGP8wKiP/PUA6/09lYf9lkI//eLi7/4bW
+ 2/+M5uv/jOzy/4ns8/+F6/H/g+vx/4Hr8v+A6/L/furx/3no8P9w5e//ZOHu/1bb7P9H1ur/OtDo/y7M
+ 5v8kyeT/GsXi/xLA3v8Mudb/B63K/wSgu/8Dkqz/AYeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8CgZn/C4Wc/x2Oo/88nrD/ZbLA/5PJ0v+73eP/1Oru/9/x9P/i9Pf/4fX4/+H1+f/i9/r/5Pj7/+X4
+ /P/m+fz/5/n8/+n6/P/r+vz/7Pv9/+77/f/u/P3/7/z9//D8/f/u/P3/6vz8/+L7/f/X/f7/yv3+/7r3
+ +P+n5+j/kMnJ/3agnv9cdXH/RU9J/zY3MP8wKiH/LiYb/y4nHv8tKSj/Jyo7/x4sWv8UMH//DDSj/wY7
+ wP8EQ9L/Bk3e/wlY5f8LYer/DGbv/wpn8f8HZvH/BGPx/wFh8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg
+ 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg
+ 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg
+ 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYO//AGDu/wBg7f8AX+v/AFzn/wBX4/8AUOD/AEja/wJB
+ 0P8FOr//DDWk/xUwgP8fLVv/Jyo7/y0pKP8uJx7/LiYb/zAqIf82NzD/RU9J/111cf94oZ7/j8nJ/57m
+ 5/+g8/b/mfX5/47x9v+D6/L/fOnw/3no8P946PD/d+jw/3Tm7/9s5O//YeDt/1Tb7P9H1ur/OtDo/y3M
+ 5v8hyOT/FcPh/wu93P8EtdT/AarI/wCduv8Akav/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8olKj/MZir/0Cgsv9crr3/gsDM/6rV3P/O5+r/4vHz/+n2+P/p9/n/5fb5/+L2+v/i9vr/4/f7/+T4
+ +//m+Pz/5/n8/+n6/P/q+vz/6/v9/+z7/f/u+/3/7/z9//H8/f/x/P3/7/z9/+r9/v/k////2////8/+
+ /v++8vH/ptjW/4m0sv9sjYr/Umpm/0BRS/84QDj/NDUp/zMuIv8wKiT/Kicw/yEmSf8XKGj/EC2I/w01
+ o/8QQbj/GVLK/yJj2f8qceX/K3jt/yR28f8acPL/D2jx/wVi8P8AX/D/AF7x/wBf8f8AYPH/AGHy/wBh
+ 8v8AYfH/AGHx/wBh8f8AYfH/AGHw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg
+ 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGHw/wBh8f8AYfH/AGHx/wBh
+ 8f8AYfL/AGHy/wBh8v8AYfP/AGHz/wBh8v8AX+//AF7q/wBb4/8AWNz/AFTU/wFPzP8DSMb/BUG//wg6
+ tP8MNaT/EjCK/xorav8jKEr/Kygx/zAqJP8zLiL/NTUp/zhAOP9AUUv/UGpm/2mNiv+EtLH/nNfW/6rv
+ 7/+q+fv/n/n8/5Dz+P+B7PP/eOjw/3Pm7/9w5e//buTv/2vj7v9k4O7/W93t/1DZ6/9E1er/OdDo/y3M
+ 5f8gx+P/E8Lg/wm82/8CtNP/AKnH/wCduf8AkKv/AIaf/wCAmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP9gsL7/ZrPB/3G4xf+Gws3/odDY/77f5P/Y7O//5vP1/+v3+P/p9/n/5fb6/+L2+v/i9vr/4/f7/+T4
+ +//m+Pz/5/n8/+j5/P/p+vz/6vr8/+v7/f/s+/3/7vv9//D7/f/x/P3/8Pz9/+79/v/s////6P///9//
+ ///R9/f/uuTj/5zJyP99q6r/YY2M/010cv9CXlj/O0lA/zY4Lf8xKyP/KiMm/yEfNP8ZIEv/FCVk/xUv
+ ff8gQZb/Mlqw/0Z0yf9TiN3/VZDr/0mM8v80f/P/HXDy/wpj8f8AXfH/AFzy/wBd8/8AYPT/AGH0/wBi
+ 9P8AYvT/AGLz/wBi8v8AYvL/AGHx/wBh8f8AYfD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg
+ 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBh8P8AYfH/AGHx/wBi8v8AYvL/AGLz/wBi
+ 8/8AYvT/AGL0/wBi9v8AY/j/AGP4/wBi9v8AX+//AFvk/wBV1v8AT8f/AUq5/wNErf8HP6P/Czma/xA1
+ jv8VMID/Gitq/yAmUP8mIzj/LCQn/zIrI/83OC3/PElA/0JdWP9NdHL/XY2M/3Sqqf+OyMf/o+Lh/670
+ 8/+t+/v/ofn8/5Hz9/+B7PL/dufw/27l7/9p4u7/ZOHt/1/e7f9Y3Oz/Udnr/0nX6/9B0+n/ONDo/y3M
+ 5f8gx+P/FMLg/wm82/8Cs9P/AKnH/wCcuf8AkKv/AIaf/wCAmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP+Xy9T/m83W/6HQ2P+t1t3/vd7j/87m6v/d7vD/5fP0/+f19//m9vj/4/b5/+L2+v/i9vr/4/f7/+T4
+ +//m+Pz/5/n8/+j5/P/o+vz/6fr8/+n6/P/q+vz/7Pv9/+77/f/v+/3/8Pz9//D9/v/w////7////+r/
+ ///e+vr/ye7u/6zd3v+Oycv/cbK1/1ybnP9Nfn3/QmBb/zpEPP8zLif/KyEg/yMbJP8dGzH/GyFD/yEt
+ Wf8zRHX/UGWW/2yHuf+Bodb/g6vq/3Cj8v9QkPT/LXny/xBm8f8BXfH/AFvy/wBc8/8AX/T/AGH0/wBi
+ 9P8AYvT/AGLz/wBi8v8AYvL/AGHx/wBh8f8AYfH/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg
+ 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBh8f8AYfH/AGHx/wBi8v8AYvL/AGLz/wBi
+ 9P8AYvT/AGL1/wBi9/8AY/n/AGP6/wBi9v8AXu3/AFfb/wBPxv8ARq//AT6b/wU5i/8LNX7/EjJy/xkv
+ Z/8fLVv/IyhK/yYjOP8pICj/LSMh/zMvJ/86RDz/Q2Bb/05+ff9bmpz/a7K0/3/Iyv+U29z/pevr/671
+ 9f+r+fr/oPf5/5Hx9v+B6/L/defw/2vj7v9h4O3/Wd3s/1La6/9L1+r/R9bq/0LU6v8+0un/N8/n/y3M
+ 5f8hx+P/FMLg/wm82/8CtNP/AKnH/wCcuf8AkKv/AIaf/wCAmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP++3+T/v9/l/8Ph5v/I4+j/z+fr/9fr7v/e7vH/4vHz/+Pz9f/i9Pf/4vX4/+H2+f/i9/r/4/f7/+X4
+ +//m+Pz/5/n8/+f5/P/o+fz/6Pn8/+j5/P/p+vz/6vr8/+z7/f/u+/3/7/z9//D9/f/y/v7/8v///+/+
+ /v/l+/v/0fX2/7fu8P+b4+f/gNPY/2q9wf9ZnZ//S3h2/z9UT/82ODL/Ligj/ygfHv8lHiP/JyUv/zEz
+ Qv9KTV7/bXOF/5Garf+puNH/q8Po/5K48v9ooPX/O4Ty/xVt8P8BYfD/AFzw/wBc8P8AXvD/AGDw/wBg
+ 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg
+ 8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg8P8AYPD/AGDw/wBg
+ 8P8AYPD/AGDw/wBh8f8AYfT/AGL0/wBg7/8AW+P/AFLN/wBIs/8APZf/ATR+/wYva/8OLFz/GCtP/yEr
+ Rf8nKjv/Kygx/ywkJ/8tIyH/MCkj/zY4Mv9AVVD/TXh2/1udn/9pvcH/eNLX/4jh5f+Y6+7/pPHy/6r1
+ 9v+n9vf/nfT3/5Dw9P+B6/L/dOfw/2ji7v9c3uz/UNnr/0fW6v9B0+n/PtLp/zzS6f870en/Ns/n/y3M
+ 5v8hyOP/FcPg/wm82/8CtNP/AKnH/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP/E4ub/xeLn/8jj6P/M5ur/0ujs/9jr7v/e7vH/4fHz/+Ly9f/i9Pf/4fX4/+H2+f/i9/r/4/f7/+X4
+ +//m+Pz/5/n8/+f5/P/n+fz/5/n8/+f5/P/o+fz/6vr8/+z7/f/t+/3/7vz9/+/8/f/v/f3/7/39/+v8
+ /f/h+vz/0fn7/7v3+/+j8/j/i+ju/3jV2v9mtbn/VY+Q/0hpZ/8+TEb/ODo0/zQxK/81MCr/OzYx/0hE
+ Qf9iXlz/h4OC/6yqq//FyM//xtPm/63I8f+DsPT/VJPy/yx67/8Ua+3/CWPq/wRf5/8CXeT/AVvj/wBa
+ 4/8AWeX/AFrn/wBa6f8AW+v/AFzs/wBd7v8AXu//AF/w/wBg8P8AYPH/AGDx/wBg8P8AYPD/AGDw/wBg
+ 8P8AYPD/AGDw/wBg8P8AYPD/AGDx/wBg8f8AYPD/AF/w/wBe7/8AXe7/AFzs/wBb6/8AWun/AFrn/wBa
+ 5v8AWuT/AFvi/wFb4v8CXOP/A1zi/wRa3P8FVc7/BEy4/wNBnP8ENoD/Bi5n/wspU/8UJ0T/HSY3/yYn
+ Lv8tKSj/MCok/zIrI/8zLyf/Njgy/z1LRv9Jamf/WJCQ/2i2uf921dr/g+ju/5Dx9v+b9fj/ovX3/6X1
+ 9v+i9Pb/mfL1/43u8/+A6vH/dObw/2bh7v9Y3Oz/S9fq/0DT6f860ej/ONDo/znQ6P850Oj/Ns/n/y3M
+ 5v8iyOP/FcPg/wm82/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP+m0tr/qNTb/67X3v+32+H/xOHm/9Ho7P/d7vH/5PL0/+b09v/l9fj/4/X5/+L2+v/i9/r/4/f7/+X4
+ +//m+fz/5/n8/+f5/P/n+fz/5/n8/+f5/P/o+fz/6/r8/+77/f/w/P3/8Pz9/+78/f/q+/z/5Pr8/9z5
+ +//S+Pr/xfn8/7b6/v+m+f7/lfP4/4Xk6f90ycz/Yqep/1OGhf9Ja2n/RlxX/0dUTf9OUkr/WVdO/2hj
+ Wf+BeW//oZmP/8C6s//V09H/1tzl/8HT7/+ev/L/dabw/1GP7P84fuf/JW/f/xdi1v8MWM7/BFHK/wBN
+ y/8ATND/AE3X/wBP3v8AUuT/AFXo/wBY7P8AXO//AF/y/wBh9P8AYvT/AGL0/wBh9P8AYfT/AGH0/wBh
+ 9P8AYfT/AGH0/wBh9P8AYfT/AGL0/wBi9P8AYfT/AF/y/wBc7/8AWOz/AFXo/wBS5P8AUN//AFDa/wBQ
+ 1P8AUM7/AVHJ/wNRxv8GUsT/CVLA/wtQuP8NTKv/DUSX/w06f/8NMGb/DylR/xMkQP8ZITH/ISEm/ygj
+ H/8uJx7/My4i/zc4Lf86RDz/QFVQ/0lqZ/9XiIf/Z6mr/3bKzv+E5On/jvL4/5b4/f+b+Pz/nfX4/53z
+ 9v+a8vX/k/D0/4rt8v+A6vH/dOfw/2bh7v9X3Oz/Sdbq/z3S6f830Oj/Ns/o/zjQ6P850Oj/Ns/o/y7M
+ 5v8iyOT/FcPg/wq82/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP9yucX/d7vI/4HAzP+TydP/qtXc/8Th5v/a7e//5vP1/+r2+P/o9/n/5fb5/+L2+v/i9/r/4/f7/+X4
+ +//m+fz/5/n8/+f5/P/n+fz/5/n8/+f5/P/o+fz/7Pr9//D8/f/z/f3/8v39/+z8/f/h+vv/1Pf6/8b1
+ +P+69Pj/svX5/6v4/P+l+f7/nfb7/5Ls8P+C2Nz/cb/C/2GmqP9YkpP/WIaF/2CAff9tf3n/fYJ6/46K
+ gf+impH/ubGn/8/IwP/d2tb/3uDl/9Db7P+4zu//m7zt/36o6f9kleD/SX/S/y9owf8YU7L/CESr/wA9
+ rP8APLb/AD7C/wBC0P8ARtr/AEzi/wBS6f8AWe//AF70/wBi9/8AY/j/AGP4/wBi+P8AYvf/AGL3/wBi
+ 9/8AYvf/AGL3/wBi9/8AYvj/AGP4/wBj+P8AYvf/AF70/wBZ7/8AUun/AEzi/wBG2v8ARNH/AEPI/wBD
+ vf8ARLP/AkSq/wVEo/8LRZz/EEWV/xVEjP8YQID/GTpw/xkzXv8ZLE3/GiY9/x0iMP8gHiT/JB0b/ykf
+ F/8uJhv/NTUp/zxJQP9DYFv/TXh2/1iQkP9nqav/d8PG/4ba3v+R7PD/mPb6/5r5/f+Z9/v/lvP3/5Pw
+ 9P+P7/P/i+7y/4bs8v9+6vH/defw/2fi7v9Y3Oz/Sdbq/z3S6f830Oj/Ns/o/zjQ6f850en/N9Do/y/N
+ 5v8jyeT/FsPg/wq92/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP85nK//QKCy/0+nuP9ptML/i8XP/7HY3//S6ez/5PL0/+r3+P/p9/r/5ff6/+L2+v/i9/r/4/f7/+X4
+ +//m+fz/5/n8/+f5/P/n+fz/5/n8/+f5/P/o+fz/7Pr9//H8/f/z/f3/8Pz9/+b7/P/V+Pr/wfT4/67x
+ 9v+h8PX/nfH2/570+P+h9vr/ovb5/53x8/+Q5ef/f9XZ/3HGyf9pubz/bbK0/3qurv+Mrav/oa6r/7Kz
+ rv/Bu7b/z8jC/9rV0P/h39z/4uLk/9zh6f/Q2+z/wNHr/6vC5f+Qrdn/bZDF/0dwrf8lUpn/CzyO/wAx
+ kP8ALpz/ADCt/wA1v/8AO83/AELY/wBM4v8AVev/AF3x/wBh9v8AY/f/AGP3/wBi9/8AYvb/AGL2/wBi
+ 9v8AYvb/AGL2/wBi9v8AYvf/AGP3/wBj9/8AYfb/AF3x/wBV6/8AS+L/AELY/wA7zf8AN8H/ADaz/wA2
+ pf8AN5b/AjeJ/wg4fv8POHP/Fzhp/x43YP8iNVb/JDJL/yQuQf8kKjf/JCYv/yUjJ/8mHx7/KB0Y/ysg
+ GP8wKiH/OEA4/0JdWP9Ofn3/W52f/2i2uf92ys7/htre/5Pn6v+c8fP/n/b5/5z2+v+W8/j/jvD1/4jt
+ 8/+F7PL/g+vx/4Dr8f986fH/dOfw/2ji7v9Z3Oz/Stfq/z7S6f840Oj/N9Do/zjQ6f850en/N8/o/y/N
+ 5v8jyOT/FcPg/wq92/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8LhZz/FIqg/yaTp/9EorP/bbbD/5rN1f/C4eb/2u3w/+Pz9f/l9fj/4/X5/+H1+f/i9/r/4/f7/+X4
+ +//m+Pz/5/n8/+f5/P/n+fz/5/n8/+f5/P/o+fz/6vr8/+37/f/t+/3/5/r8/9r4+//F9fj/rvH2/5nt
+ 9P+M7PL/i+3z/5Lw9P+c8/b/o/T2/6Pz9f+a7vD/jOfq/4Hf5P972d7/gtXa/5PT1/+p0tT/v9PT/9DU
+ 0//a19X/4NvZ/+Pf3v/k4+L/4+Tl/+Tl6P/i5er/3OHp/87W4/+0wdX/jKG9/157ov8zV4r/Ej18/wIu
+ ff8AKYn/ACma/wAtrf8BMrv/ATrI/wFF1P8BUN7/AVnm/wFe6/8BYO3/AWDt/wFf7P8BX+v/AV/r/wFf
+ 6/8BX+v/AV/r/wFf6/8BX+z/AWDt/wFg7f8BXuv/AVnm/wFQ3v8BRdT/ATrI/wEyu/8BLa3/ACyd/wAs
+ jP8BLXz/BC1s/wsuX/8ULlH/HS5G/yYtPP8qLTT/LCwv/ywsLf8rKyv/Kyoq/yspJ/8sJyL/LSUf/zAq
+ I/82NzD/QFFL/010cv9bmpz/ab3B/3bV2v+E5On/kezw/5zx8/+j8/X/o/T2/5zz9v+S8PT/iO3z/4Dq
+ 8f986fH/e+nw/3rp8P946PD/ceXv/2bh7v9Y3Oz/Stfq/z/S6f840Oj/N9Do/zfQ6P830Oj/NM7n/yzM
+ 5f8hyOP/FMPg/wm82/8CtNP/AKnI/wCduf8AkKv/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8Ae5T/AH+X/w+Hnv8slqr/VKm5/3+/y/+o09v/weHm/9Dp7v/Y7/P/3fL2/+D1+f/j9/v/5fj7/+X4
+ /P/m+Pz/5vn8/+f5/P/o+fz/6Pn8/+j5/P/m+fz/5Pn8/+H4+//c9/v/0/b6/8Xz+P+y8Pb/nO30/4rr
+ 8v+A6vH/gevx/4ru8/+W8fT/oPT2/6T09v+f8/b/mPH1/5Hu9P+Q7PL/mevw/6rq7v+/6ez/1Onq/+Lp
+ 6P/p6Of/6ujn/+nn5v/m5+b/5ufm/+np5//s6+n/6+ro/+Li4v/Lz9T/prC+/3qMpP9PaYz/Lk59/xs8
+ e/8RMoH/DC2M/wormf8ILaT/BjOv/wY+uv8GScT/B1LM/wdX0f8HWdP/B1nT/wdY0v8HWNL/B1jS/wdY
+ 0v8HWNL/B1jS/wdY0v8HWNL/B1nT/wdZ0/8HV9H/B1LM/wdJxf8HP7v/BzSw/wcso/8HKJX/BiaF/wYm
+ df8HJ2X/CihW/xAnSP8ZJzr/Iicv/yonJv8uKCL/Lioi/ywtJv8qMCv/KTQw/yw2Mv8wNzL/NTk0/z1A
+ Ov9FT0n/UGpm/12NjP9rsrT/eNLX/4Po7v+O8vj/mPb6/5/2+f+j9Pb/ofT2/5nx9f+O7vP/g+vy/3vp
+ 8P925/D/dOfw/3Pm7/9w5e//auPu/2Df7f9U2+z/SNbq/z7S6f840Oj/Nc/n/zTO5/8yzeb/Lszl/yfJ
+ 5P8cxuL/EsHf/wi82/8CtNP/AKnI/wCduf8Akav/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AeJH/AHuU/wuCmv8hjqP/P52v/2Cuvf+BwMv/m87X/7Ha4f/E5Or/1O3y/+D0+P/n+Pv/6fn8/+j5
+ /P/m+Pz/5vj7/+f5/P/q+vz/7Pr9/+v6/f/m+fz/3ff7/9D0+f/C8fj/tO72/6bs9f+Y6vP/iuny/4Dp
+ 8f976fD/ferx/4Xs8v+P7/P/mPH1/5/z9v+h9Pj/ovX5/6T2+/+p9vv/s/b7/8L2+v/T9vj/4vX2/+30
+ 9P/w8vH/7u/v/+rt7P/n6ur/5eno/+nq6P/t7ej/7+zn/+rn4v/Z2Nf/vcDG/5uksv95iJ7/XG+Q/0Zb
+ h/80SYP/JjqB/xswgv8TLIX/Dy6L/w42lP8PQJ3/EEik/xBMqP8QTqr/EE6q/xBNqf8QTan/EE2p/xBN
+ qf8QTan/EE2p/xBNqf8QTan/EE6q/xBOqv8QTKj/EEik/xBBnv8QOJb/EDCN/xEpg/8QJXf/ECRq/xAk
+ XP8RJE7/FCRC/xgjNv8fISr/JiEg/ysiGv8sJRr/KSog/yQxKv8gOTb/IEFB/ydKSv8yUVD/QFpX/09l
+ Yf9ddXH/aY2K/3Sqqf9/yMr/iOHl/5Dx9v+W+P3/mvn9/5z2+v+c8/b/mfH1/5Lv9P+K7fL/gevx/3no
+ 8P9z5u//b+Xv/2rj7v9l4e7/X9/t/1fc7P9O2Ov/RdXq/z3S6f830Oj/Ms7n/y7M5f8qyuT/JMji/x7F
+ 4f8Vw+D/DcDe/wa72v8BtNP/AKrI/wCduf8Akav/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AepP/AHyV/weAmP8Uh57/JpGm/zydr/9Vqrr/b7jF/43H0v+s2OD/yOft/97y9v/p+fz/7Pr9/+n6
+ /f/m+Pv/5fj7/+j5/P/s+vz/7/v9/+37/f/k+fz/0vT6/7rv9/+j6fT/j+Xy/4Pk8f985PD/eeXw/3jn
+ 8P956PD/e+rx/4Dr8f+G7fL/ju7z/5bw9f+g8/f/q/b6/7f4/P/C+v7/zfv+/9j7/v/j+/z/7Pr7//H5
+ +f/x9vb/7vPz/+rw8P/m7e3/5Ovr/+br6v/q7On/7Ovn/+rn4//g3tv/0NDR/7u+xf+kq7j/jZaq/3V/
+ m/9bZon/Q015/y44a/8fLGT/GSpk/xcuaf8ZNnD/Gz12/xtAef8bQXr/G0F6/xtAef8bQHn/G0B5/xtA
+ ef8bQHn/G0B5/xtAef8bQHn/G0F6/xtBev8bQHn/Gz12/xs4cv8bMm3/Gy1n/xwoYP8cJlj/HCRP/xwk
+ Rf8dIzv/HiMy/yEhKf8lHyD/KR4Z/ysgFv8pJRr/Iy0m/xs4Nv8VRUn/FVNa/yBhaP80cHX/TYCC/2WQ
+ j/94oZ7/hLSx/47Ix/+U29z/mOvu/5v1+P+b+Pz/mff7/5bz+P+S8PT/ju7z/4rt8v+E7PL/f+rx/3jo
+ 8P9x5u//aePu/2Hf7f9Z3Oz/Utrr/0zY6/9H1ur/QtTq/zzS6f82z+f/L8zl/yfJ4/8gxuH/GcPf/xPB
+ 3v8Nv97/CL3d/wS62f8BtNP/AKrI/wCduv8Akav/AIaf/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AfZb/AH6X/wSBmP8Jg5v/D4ed/xqNov8slqn/RaO0/2i2xP+Sy9b/ueDn/9bv9P/m+Pv/6vr9/+j5
+ /f/k+Pv/4/f7/+b4+//r+fz/7fr8/+n6/P/c9/v/wvH4/6Pp9P+E4vH/bN3u/2Lc7f9j3e3/aeHu/3Hl
+ 7/936PD/eunw/3vq8f9+6vH/g+vy/43t8/+d8PX/sfT4/8T4+//V+v3/4fz9/+n9/f/u/P3/8fz8//L6
+ +v/x+Pj/7fb2/+ny8//l8PH/4+3u/+Ts7P/m6+r/6Onn/+fm5P/j4eD/3Nzd/9TV2P/HytD/tbrD/5yh
+ rf98gJD/W15x/z5AVv8rLUX/IidA/yAoQf8jLUb/JTJL/yY0TP8mNE3/JjRN/yY0Tf8mNEz/JjRM/yY0
+ TP8mNEz/JjRM/yY0TP8mNE3/JjRN/yY0Tf8mNEz/JjNL/yYwSf8mLUf/JitE/yYoQP8mJzz/JiY4/yYm
+ M/8mJi7/JyYq/ykkJP8rIh//LSIb/y0kHP8qKyT/ITY0/xZFSf8OVmD/D2d1/x56iP85j5r/WaSr/3i4
+ u/+Pycn/nNfW/6Pi4f+l6+v/pPHy/6L19/+d9fj/lvP3/47w9f+I7fP/g+vy/4Hr8f9/6vH/fOnw/3fn
+ 8P9u5O//Y+Dt/1jc7P9O2Ov/RtXq/0LU6f8/0+n/PdLp/znR6P8zzuf/Ksrk/yDG4f8Wwt7/Dr7c/wm8
+ 2/8GvNv/A7vb/wK52f8AtNP/AKrI/wCduv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wGAmP8AgJj/AH+X/wOBmf8Nh53/JJOo/0qnuf93wM3/o9jh/8Xq8f/Z9Pn/4fj8/+P4
+ /P/h9/v/4Pb6/+L3+v/k9/v/4vf7/9v2+v/L8vj/ruv1/4vj8f9p2+7/Utbr/0rW6v9P2ev/W93s/2ni
+ 7v9y5u//dufw/3bo8P936PD/e+nw/4br8v+Z7vT/sfL2/8n2+f/d+vv/6fz8//D9/f/y/f3/8/39//L8
+ /P/w+vr/7fj4/+n19v/l8vT/4/Dx/+Pt7v/l7Oz/5unp/+bn5v/k5eT/4uTl/97i5P/W3N//x87R/66z
+ t/+Mj5L/aGdq/0hFRv8zLi//KSUl/ycjJP8qJyj/LSor/y0rLP8tKyz/LSss/y0rLP8tKyz/LSss/y0r
+ LP8tKyz/LSss/y0rLP8tKyz/LSss/y0rLP8tKyz/LSss/y0qK/8tKSr/LSkq/y0oKf8tKSn/LCkp/ysq
+ Kf8rLCr/LC0q/y4tKf8xLSf/NC4n/zUyLP8yOzb/KEhJ/xxYX/8Tanj/FH2P/ySSo/9Bqbj/ZcHK/4bW
+ 2/+e5uf/qu/v/6708/+u9fX/qvX2/6X19v+d8/b/k/D0/4jt8/+A6vH/e+nw/3no8P946PD/d+fw/3Lm
+ 7/9p4u7/Xd7t/1DZ6/9F1er/PdLp/znR6P840Oj/N9Do/zXP5/8uzOX/Jcji/xnD3/8Pvtz/Brva/wK5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Afpb/AHyU/wB7lP8Cf5j/FYuh/zWesv9dtsf/hc7c/6fh7P+97PX/zfL5/9f1
+ +v/d9fr/3vX6/9z1+f/W8/n/zPH3/77t9f+r6fP/kOPx/3Lc7v9W1uv/Q9Pp/z7T6f9E1er/Udrr/1/f
+ 7f9p4u7/buTv/2/l7/9x5u//dufw/4Lq8f+U7fP/q/H2/8L1+P/V+Pr/4vv8/+r8/f/v/f7/8v7+//P9
+ /v/y/P3/7/r7/+v3+f/o9fb/5vP0/+fx8v/p7/D/6u3t/+nr6v/k6Oj/3ubn/9Tj5f/H297/tszO/56x
+ sv+AjYv/YWVg/0ZDOv80LCL/LCEW/yofFP8tIhf/LyQa/y8lGv8vJRr/LyUa/y8lGv8vJRr/LyUa/y8l
+ Gv8vJRr/LyUa/y8lGv8vJRr/LyUa/y8lGv8vJRr/LyUa/zAlGv8wJRr/MCUa/y8mHP8tKSD/Kywl/ygw
+ K/8nNTH/KDk2/y4+Ov83Qj7/P0hC/0VPSf9FWVb/PmZn/zN1fP8rhZL/K5an/zipuv9Rvsz/b9Pd/4zm
+ 6/+g8/b/qvn7/637+/+r+fr/p/b3/6L09v+a8vX/j+/z/4Xs8v986fH/dufw/3Pm7/9x5u//buTv/2ni
+ 7v9h3+3/Vtvs/0rX6v9A0+n/ONDo/zTO5/8yzuf/MM3m/y3L5f8nyeP/HsXg/xPA3f8KvNv/A7nZ/wC4
+ 2P8Audn/ALna/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Afpb/AHuU/wB6k/8BfZb/D4ef/yaYr/9CrsL/YMPW/33V5f+W4u//sOv1/8fx
+ +P/X9Pn/3fX5/9Xz+P/D7vb/rOjy/5Xi7/+A3e3/a9nr/1fV6v9H0un/PNHo/znR6P8/1On/SNfq/1Tb
+ 7P9d3u3/Y+Dt/2ji7v9t5e//dOfw/3/p8f+O7PL/n+/0/7Hy9v/B9fj/z/j6/9v6+//m/P3/7v3+//P+
+ /v/1/f7/8/z8/+/6+//s+Pn/6vb3/+z19v/w9fX/8fPz/+3w7//i6ur/0ePm/7va3/+jzdP/jLvB/3eg
+ pP9hfn7/TVtV/z08Mv8xJxr/LB0P/ysbDf8sHQ//LiAS/y4gEv8uIBL/LiAS/y4gEv8uIBL/LiAS/y4g
+ Ev8uIBL/LiAS/y4gEv8uIBL/LiAS/y4gEv8uIBL/LiAS/y4gEf8vHxH/LiAS/y0jFv8qKB3/JC8o/x43
+ NP8cQUH/H0tN/ypVV/87YGD/TWxq/1x4dP9ig4H/X4+P/1eaoP9QprD/TrK//1bAzf9m0Nv/et/o/4zs
+ 8v+Z9fn/n/n8/6H5/P+g9/n/nfT3/5ny9f+T8PT/i+7y/4Pr8f976fD/dOfw/27l7/9p4+7/Y+Dt/13e
+ 7f9W2+z/Tdjr/0XV6v890un/Ns/o/zHN5v8sy+X/KMnk/yPH4v8cxOD/FcHe/w693P8Hutr/ArjY/wC4
+ 2P8Audn/ALna/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Afpb/AHyV/wB8lP8Bfpf/CYaf/xWVrf8lpr7/OLnQ/0/J3/9s1un/kOLw/7Tr
+ 9f/O8fj/2PP5/8rw9/+t6PL/id7t/2jV6P9S0Ob/Rc7l/z3O5v86z+f/ONDo/znR6P880un/QtTq/0nX
+ 6v9Q2ev/WNzs/2Df7f9p4+7/c+bv/33p8P+G6/L/kO3z/5vv9P+n8fX/tfP3/8b2+f/X+fv/5vz9//H9
+ /v/1/f7/9f39//L7/P/w+vv/7/n6//L6+v/2+vr/9/n5//D19f/e6+3/wN7j/5vN1v93usX/W6Sw/0mL
+ lP89bXH/NlBO/zI2L/8uJRr/LB0Q/ysbDv8sHRD/LR8T/y0fE/8tHxP/LR8T/y0fE/8tHxP/LR8T/y0f
+ E/8tHxP/LR8T/y0fE/8tHxP/LR8T/y0fE/8tHxP/LR8T/y0fEv8uHhH/Lh8S/ywjF/8mKiL/HTUy/xVC
+ RP8RUFf/Fl9p/ydweP9Bgof/XJOV/3Sko/+AsK//grq6/37BxP94x83/dM7W/3bW3v983ub/g+bt/4ns
+ 8/+O8fb/kPP4/5Hz9/+R8fb/kPD0/43u8/+K7fL/huzy/4Dr8f966fD/c+bv/2rj7v9h3+3/WNzs/1DZ
+ 6/9K1+r/RdXq/0HT6f880en/Ns/n/y7M5v8nyeP/H8Xh/xfC3/8Rv93/DL3b/wi72v8Eudn/AbjY/wC4
+ 2P8Audn/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB9lf8AgJj/BIef/weSrP8Mobv/FrDL/ye+2f9Fy+P/cNnr/53l
+ 8v/A7fb/zPD3/7vr9P+U4e7/Z9Tn/z/K4v8qxd//JMTg/yfH4v8vy+X/Nc/n/zjQ6P860en/PNLp/z/T
+ 6f9F1er/Tdjr/1nc7P9l4e7/cOXv/3jo8P996fH/gerx/4Xr8f+N7PL/m+70/7Dy9v/G9fn/2/n7/+v8
+ /f/y/f3/9f39//T9/f/y/Pz/8vz8//b9/f/5//7/+f79/+/4+f/X7O//r9rh/4DDz/9Tq7v/M5Ok/yR7
+ iv8iY2z/JkxO/y04NP8wKyP/MCUb/zAjGf8wJRv/MCce/zAnHv8wJx7/MCce/zAnHv8wJx7/MCce/zAn
+ Hv8wJx7/MCce/zAnHv8wJx7/MCce/zAnHv8wJx7/MCce/zEmHP8xJRv/MSUc/y8qIv8oMy//HUBC/xJQ
+ Wf8NYnD/E3WF/yiKmf9Ioaz/are9/4jKzP+Z19f/n9/e/57i4/+Z5Ob/leXo/5Hn6/+N6O7/ierw/4Xr
+ 8f+D6/L/gezz/4Hs8v+B6/L/gevy/4Dq8f+A6vH/furx/3zp8f946PD/cOXv/2Xh7v9Z3Oz/Ttjr/0XV
+ 6v9A0+n/PdLp/zzR6f850Oj/NM7n/yvL5P8hxuH/FsLe/w6+3P8Iu9r/BLrZ/wK52f8BuNj/AbjY/wC4
+ 2f8Audr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCQq/8Anbn/AKrI/w231f8pxN//VtLn/4Xe
+ 7v+q5/L/t+r0/6Tl8f972ur/S8zj/yPC3f8Pvdv/Db7c/xbC3/8kyOL/L8zl/zTO5/82z+f/Ns/o/zjQ
+ 6P890un/RtXq/1La6/9f3+3/auPu/3Hl7/9z5u//cubv/3Pm7/945/D/hunx/5zt9P+18vf/zfb5/9/5
+ +//q+/z/7/z9//L9/f/y/f3/8/39//X////3////8////+f6+//N7fD/o9nh/3LBzv9FqLn/JpGk/xt8
+ jP8eaXP/KFda/zRIRf86PTf/PDkx/z04L/88OTH/PDoz/zw7M/88OzP/PDsz/zw7M/88OzP/PDsz/zw7
+ M/88OzP/PDsz/zw7M/88OzP/PDsz/zw7M/88OzP/PDoz/zw5Mf89ODD/PTkx/zo9N/8zR0T/KFVY/x1l
+ cP8XeIj/HYye/zKhsv9Sucb/ddDY/5Pj5v+l7/D/rPX1/6329v+q9fX/pfP0/5/y9P+W7/P/jO3y/4Pr
+ 8f986fD/eOjw/3bn8P915/D/dOfw/3Tm8P905/D/defw/3Tn8P9x5e//auPu/1/f7f9S2uv/RtXq/z3S
+ 6f840Oj/Ns/o/zbP5/80zuf/L8zl/ybI4/8bw+D/EL/d/we72v8Cudj/ALjY/wC42P8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgJn/AIaf/wCPq/8Am7j/AKjH/wa00/8dv9z/Qsvk/2nW
+ 6f+I3u3/k+Du/4Pc7P9h0ub/Ocbg/xe92/8Hudn/B7ra/w++3f8bxOD/Jsjj/yvL5P8uzOb/Mc3m/zTO
+ 5/850ej/QtTp/0zY6/9X3Oz/YN/t/2bh7v9m4u7/Y+Ht/2Lh7f9n4u7/c+Tv/4jo8v+h7fT/ufL3/8z2
+ +f/a+fv/5fv8/+39/f/y/v7/8/7+//L////t////5P3+/9X4+v+97fH/mtzk/3LI1P9Ps8L/NqCw/y+Q
+ nv80gYr/P3R3/0ppZ/9RYVz/VF5X/1RdVv9UXlf/U19Z/1NfWf9TX1n/U19Z/1NfWf9TX1n/U19Z/1Nf
+ Wf9TX1n/U19Z/1NfWf9TX1n/U19Z/1NfWf9TX1n/U19Z/1NeV/9UXVb/VF1X/1FhXP9Mamj/QnZ5/ziE
+ jf8zlKL/OKW1/0i3x/9hy9f/fd7m/5Tu8v+j+Pr/qvz9/6z8/f+q+vv/pvf5/6D19/+X8vX/jO/0/4Hr
+ 8v956PD/c+bv/27l7/9r4+7/aOLu/2bh7v9m4u7/Z+Lu/2ji7v9m4e7/YN/t/1fc7P9M2Ov/QtTp/znR
+ 6P80zuf/Mc3m/y7M5v8ry+T/Jsjj/x7F4P8Vwd7/DL3b/wS52f8AuNj/ALfX/wC31/8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgJn/AIaf/wCQq/8Am7n/AKfH/wSz0v8UvNr/LsXg/0rN
+ 5f9f0uf/Z9Tn/1zR5v9EyuL/KMHd/xC72f8FuNj/BLnZ/wq82/8TwN3/G8Pg/yHG4f8nyeP/LMvl/zLO
+ 5/840Oj/P9Pp/0fW6v9O2Ov/VNvs/1jc7P9X3Oz/VNzs/1Tb7P9X3Oz/Y9/t/3Xj7/+K6fL/oe70/7Xy
+ 9//H9vn/2Pn7/+b8/P/w/f7/8v7+/+z+/v/g/P7/0Pn8/770+P+r7PH/k+Ho/3vT3f9mxtH/WLnF/1Sv
+ uP9ZpKv/YZue/2qUk/9vj4v/cY2I/3GMh/9xjYj/cI2J/3COif9wjon/cI6J/3COif9wjon/cI6J/3CO
+ if9wjon/cI6J/3COif9wjon/cI6J/3COif9wjon/cI2J/3GNiP9xjIf/cYyI/2+Pi/9rlZT/ZJ6g/16p
+ r/9atL7/W8DL/2TM2P9z2eP/gubt/5Dw9f+Z9vr/nfn8/5/5/P+e9/r/nPX4/5jz9/+R8fX/ie7z/4Dr
+ 8v946PD/cOXv/2ni7v9h4O3/XN7s/1jc7P9X3Oz/WNzs/1nc7P9Y3Oz/VNvs/07Y6/9H1ur/P9Pp/zjQ
+ 6P8yzuf/LMvl/yfJ4/8hxuH/G8Pg/xTB3v8Ovtz/CLva/wO52P8At9j/ALfX/wC31/8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgJn/AIaf/wCQq/8AnLn/AKnH/wKz0/8Lutr/GsDe/ynF
+ 4P82x+H/Osjh/zTG4P8mwt3/Fr3b/wm52f8DuNj/ArjY/wW62f8KvNv/EL/c/xbC3v8fxeH/KMnk/zDN
+ 5v830Oj/PdLp/0LU6v9F1er/SNbq/0rX6v9J1+r/R9bq/0fW6v9K1+r/VNrr/2Pe7f915O//ieny/5zu
+ 9P+x8vb/x/b5/9z6+//p/P3/7Pz9/+L7/P/P+Pv/ufT4/6bw9f+Y6/H/jubt/4bg5/+A2uH/fdTb/33P
+ 1P+Ayc3/hcTF/4nAv/+Mvbv/jby5/427uf+NvLn/jby6/428uv+NvLr/jby6/428uv+NvLr/jby6/428
+ uv+NvLr/jby6/428uv+NvLr/jby6/428uv+NvLr/jby6/428uf+Nu7j/jby5/4y9u/+KwcD/h8bH/4PM
+ z/+A0tf/f9jf/4De5f+D5Ov/hunw/4nt8/+L8Pb/jPH3/43x9v+O8fb/jfD1/4vv9P+H7vP/g+zy/37q
+ 8f936PD/buTv/2Th7f9Z3ez/UNnr/0vX6v9J1ur/Sdbq/0rX6v9K1+r/SNbq/0XV6v9C1Or/PdLp/zfQ
+ 6P8wzeb/KMnk/x/F4f8Wwt7/EL/d/wu92/8Hu9r/BLnZ/wK42P8AuNj/ALfY/wC42P8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIaf/wCRq/8Anbr/AKrI/wG00/8Eudn/Cr3c/w++
+ 3P8Uvtz/Fb7b/xO92/8OvNr/CLrZ/wO52P8BuNj/ALjY/wG42P8Dudn/B7va/w6+3P8Xwt//I8fi/y3L
+ 5f81z+f/OdHo/zzS6f890un/PtLp/z/S6f8+0un/PdLp/z3S6f9A0+n/SNbq/1Ta6/9i3+3/c+Tv/4Xp
+ 8f+b7vT/tfL3/8z2+f/d+fv/4Pn7/9T3+v+99Pj/pfD1/5Hs8/+J6/H/ierw/47q7/+V6+7/murt/53p
+ 6/+f5+j/oOXl/6Dj4/+h4uH/oeHg/6Hh4P+h4eD/oeHh/6Hh4f+h4eH/oeHh/6Hh4f+h4eH/oeHh/6Hh
+ 4f+h4eH/oeHh/6Hh4f+h4eH/oeHh/6Hh4f+h4eH/oeHh/6Hh4P+h4eD/oeHg/6Hi4f+h4+P/oOXl/5/n
+ 6P+d6ev/muvt/5Xr7/+P6/D/iOvx/4Lq8f9/6vH/ferx/33q8f996vH/ferx/33p8f986fH/e+nx/3no
+ 8P905u//a+Pu/1/e7f9S2uv/R9bq/0DT6f890un/PdLp/z7S6f8/0un/PtLp/z3S6f880un/OdHo/zXP
+ 5/8ty+X/I8fi/xfC3/8Ovtz/B7va/wO52f8Budj/AbjY/wG42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wG6
+ 2v8Budn/AbjY/wG42P8BuNj/ALjY/wC42P8AuNj/ALjY/wC32P8AuNj/ArnY/wi72v8Rv93/HMTg/yfJ
+ 4/8uzOX/M87n/zbP5/830Oj/ONDo/zjQ6P840Oj/N9Do/zfQ6P860ej/QNPp/0nX6v9V2+z/YuDt/3Ll
+ 7/+H6fL/n+30/7bx9//H9Pj/y/T5/8Dz+P+r7/X/lOzz/4Tq8f+A6vH/hezy/5Dv8/+c8vX/pfT2/6j1
+ 9v+q9vb/qfX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j1
+ 9v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qPX2/6j19v+o9fb/qfX2/6r2
+ 9v+o9fb/pfT2/53y9f+T8PT/iO3y/3/q8f946PD/defw/3Lm7/9x5e//cOXv/3Dl7/9x5e//ceXv/3Dl
+ 7/9s5O//ZODu/1jc7P9L1+r/QdPp/zrR6P830Oj/N9Do/zjQ6P840Oj/ONDo/zfQ6P82z+f/M87n/y7M
+ 5f8nyeP/HMTg/xG/3f8Iu9r/ArnY/wC42P8At9j/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALna/wC4
+ 2f8At9j/ALbX/wC21/8At9f/ALfY/wC42P8AuNj/ALjY/wC31/8At9f/AbjY/wa62f8Nvdv/FcHe/x7F
+ 4P8lyOL/Ksrk/y7M5f8yzuf/Nc/n/zfQ6P830Oj/Ns/o/zbP6P840Oj/PdLp/0PV6v9M2ev/Vtzs/2Lg
+ 7f9y4+//hubx/5jp8/+m6/X/q+31/6Ts9P+W6/P/h+nx/33p8f986vH/g+3y/47w9P+Z9Pf/ovb4/6X4
+ +v+m+fv/pfr8/6T6/P+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6
+ /f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+j+v3/o/r9/6P6/f+k+vz/pfr8/6b5
+ +/+l+Pr/ovb4/5v09/+S8fX/h+3z/37q8f925/D/cOXv/2rj7v9m4e7/Y+Dt/2Lg7f9j4O3/ZOHu/2Th
+ 7v9h4O3/W93t/1HZ6/9H1ur/PtLp/zjQ6P82z+j/Ns/o/zfQ6P830Oj/Nc/n/zLO5/8uzOX/Ksrk/yXI
+ 4v8exeD/FcHe/w292/8Gutn/AbjY/wC31/8At9f/ALfY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALna/wC4
+ 2f8At9j/ALbX/wC21/8At9f/ALfY/wC42P8AuNj/ALjY/wC32P8At9f/AbjY/wS52f8Iu9r/Db3c/xPA
+ 3f8Zw9//IMbh/yfJ4/8uzOX/NM7n/zfQ6P840On/ONDp/zjQ6P850Oj/PNLp/0DU6f9F1ur/TNjr/1Tb
+ 7P9e3e3/at/u/3fg7/+A4vD/huTx/4Xl8f+B5vH/fOfw/3no8P976vH/gezy/4nv9P+R8fX/lvP3/5n0
+ +P+Z9fn/mfb5/5j2+v+X9vv/l/f7/5f3+/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f3
+ +/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f3+/+X9/v/l/f7/5f2+/+Y9vr/mfb5/5n1
+ +f+Z9Pj/l/P3/5Lx9f+M7/T/hO3y/33q8f915/D/bOTu/2Th7f9c3uz/Vtvs/1Pa6/9T2uz/Vdvs/1bb
+ 7P9U2+z/UNnr/0nX6/9D1Or/PNLp/znQ6P840Oj/ONDp/zjQ6f830Oj/NM7n/y7M5f8nyeP/IMbh/xnD
+ 3/8TwN3/Db3c/wi72v8Eudn/AbjY/wC31/8At9f/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC5
+ 2v8AuNj/ALfY/wC32P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wK42P8Dudn/Brra/wm8
+ 2/8Pvtz/FsLe/yDG4f8qyuT/Ms3m/zfQ6P850en/OdHp/znQ6P850Oj/OtHo/zzS6f8/0+n/Q9Tq/0fW
+ 6v9M1uv/Udfr/1fY7P9d2ez/Ytvt/2je7v9t4e7/ceTv/3bn8P966fD/furx/4Ls8v+F7fP/h+3z/4ju
+ 9P+J7vT/iO/0/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv
+ 9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/1/4jv9f+I7/X/iO/0/4nu
+ 9P+I7vT/h+3z/4Xt8/+D7PL/f+vx/3rp8P9z5u//aePu/17e7f9T2uv/Stfq/0bV6v9F1er/RtXq/0fW
+ 6v9H1ur/RNXq/0HT6f8+0un/O9Hp/znQ6P850Oj/OdHp/znR6f830Oj/Ms3m/yrK5P8gxuH/FsLe/w++
+ 3P8JvNv/Brra/wO52f8CuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIef/wCRq/8Anrr/AKrI/wCz0/8AuNj/ALra/wC6
+ 2v8Audn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wK5
+ 2f8Gu9r/Dr7c/xnD3/8kyOL/Lszl/zTO5/83z+j/N9Do/zbP6P82z+f/Ns/n/zfP5/830Oj/OdDo/zrR
+ 6P870ej/PdHo/z/R6f9C0un/SNXq/1HY6/9c3ez/Z+Hu/3Dl7/915/D/eOjw/3no8P956PD/eejw/3no
+ 8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no
+ 8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no8P956PD/eejw/3no
+ 8P956PD/eejw/3no8P956PD/eOjw/3Xn8P9v5e//ZeHu/1jc7P9L1+r/QdPp/zzR6P850Oj/OdDo/zrQ
+ 6P860Oj/OdDo/zjQ6P83z+f/Ns/n/zbP5/82z+j/N9Do/zfP6P80zuf/Lszl/yTI4v8Zw9//Dr7c/wa7
+ 2v8Cudn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5
+ 2f8Autr/ALra/wC42P8As9P/AKrI/wCeuv8Akav/AIef/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIeg/wCRrP8Anrr/AKrI/wC00/8Audn/ALvb/wC6
+ 2v8Audn/ALnZ/wC52f8Audn/ALnZ/wC52f8Audn/ALnZ/wC52f8Audn/ALnZ/wC42f8AuNj/ALjY/wC4
+ 2P8Dudn/Crzb/xPB3v8exeH/J8nk/yzM5f8vzeb/L83m/y7M5v8tzOb/Lczm/y3M5f8tzOX/Lczl/y3M
+ 5v8uzOb/L83n/zHO5/81z+j/O9Lp/0XW6v9R2uz/Xd/t/2fi7/9s5O//buXv/27l7/9t5O//bOTv/2zk
+ 7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk
+ 7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk7/9s5O//bOTv/2zk
+ 7/9s5O//bOTv/23k7/9u5e//buXv/2zk7/9n4u//Xd/t/1La7P9G1ur/PNLp/zbQ6P8yzuf/MM3n/y7M
+ 5v8tzOb/Lczl/yzM5f8tzOX/Lczm/y3M5v8uzOb/L83m/y/N5v8szOX/J8nk/x7F4f8Twd7/Crzb/wO5
+ 2f8AuNj/ALjY/wC42P8AuNn/ALnZ/wC52f8Audn/ALnZ/wC52f8Audn/ALnZ/wC52f8Audn/ALnZ/wC5
+ 2f8Autr/ALvb/wC52f8AtNP/AKrI/wCeuv8Akaz/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIeg/wCRrP8Anrv/AKvJ/wC11P8Autr/ALzc/wC7
+ 3P8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC52v8Audn/ALnZ/wC5
+ 2f8Cutr/B7zb/w6/3v8Ww+D/Hcbi/yHI4/8jyOT/I8nk/yLI5P8iyOP/Icjj/yDI4/8gx+P/H8fj/yDI
+ 5P8jyeT/Jsvm/yrN5/8wz+n/NtLq/z/V6/9K2ez/U9zu/1vf7/9g4e//YeHv/2Dh7/9f4O//XuDv/17g
+ 7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g
+ 7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g7/9e4O//XuDv/17g
+ 7/9e4O//XuDv/1/g7/9g4e//YeHv/2Dh7/9c3+//Vd3u/0zZ7f9D1uz/OtPq/zPQ6f8tzef/KMvm/yTJ
+ 5P8hyOT/H8fj/x/H4/8gx+P/Icjj/yLI4/8iyOT/I8nk/yPI5P8hyOP/Hcbi/xbD4P8Ov97/B7zb/wK6
+ 2v8Audn/ALnZ/wC52f8Audr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC6
+ 2v8Au9z/ALzc/wC62v8AtdT/AKvJ/wCeu/8Akaz/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIeg/wCSrP8An7v/AKvK/wC11f8Autv/ALzd/wC8
+ 3P8Au9v/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALna/wC5
+ 2v8Butr/BLvb/wm93f8OwN7/EsHf/xTD4P8Vw+D/FsPg/xXD4P8Vw+D/FMPg/xPC4P8TwuD/E8Lg/xXD
+ 4f8axeL/IMjk/yjM5v8wz+n/N9Lq/z7V6/9E1+z/Stnt/0/b7f9R3O7/Utzu/1Lc7v9R3O7/UNvu/1Db
+ 7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db
+ 7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db7v9Q2+7/UNvu/1Db
+ 7v9Q2+7/UNvu/1Hc7v9S3O7/Utzu/1Hc7v9P2+3/S9nt/0bX7f9A1ez/OdPr/zLQ6f8qzOf/Isnk/xrF
+ 4v8Vw+H/E8Lg/xLC4P8TwuD/FMPg/xXD4P8Vw+D/FsPg/xXD4P8Uw+D/EsHf/w7A3v8Jvd3/BLvb/wG6
+ 2v8Audr/ALna/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC62v8Autr/ALra/wC7
+ 2/8AvNz/ALzd/wC62/8AtdX/AKvK/wCfu/8Akqz/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgZn/AIeg/wCRrP8Anrr/AKrI/wC00/8Audn/ALrb/wC6
+ 2v8Audn/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC4
+ 2P8BuNj/ArnZ/wS62f8Gu9r/CLzb/wm82/8Kvdv/Cr3b/wq82/8JvNv/Cbzb/wi82/8HvNv/CLzb/wu9
+ 3P8SwN7/HMTh/ybJ5P8wzeb/N9Do/zvS6f8/0+r/QdTq/0LU6v9D1er/Q9Xq/0PV6v9D1er/Q9Tq/0PU
+ 6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU
+ 6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU6v9D1Or/Q9Tq/0PU
+ 6v9D1Or/Q9Tq/0PV6v9D1er/Q9Xq/0PV6v9C1Or/QdTq/z/T6v880un/ONDo/zDN5v8nyeT/HMTh/xLA
+ 3v8Lvdz/CLzb/we82/8IvNv/Cbzb/wm82/8KvNv/Cr3b/wq92/8JvNv/CLzb/wa72v8Eutn/ArnZ/wG4
+ 2P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC42P8AuNj/ALjY/wC5
+ 2f8Autr/ALrb/wC52f8AtNP/AKrI/wCeuv8Akaz/AIeg/wCBmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH6W/wB+lv8AgJn/AIaf/wCQqv8Am7f/AKfE/wCvzv8AtNP/ALXV/wC1
+ 1P8AtNP/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz
+ 0/8As9P/ALTT/wG00/8BtNP/ArTT/wK00/8CtNP/ArTT/wK00/8CtNP/ArTT/wG00/8As9P/AbTT/wS1
+ 1P8Mudb/Fr3Z/yLC3P8sxt//Msnh/zXK4v82y+L/Nsri/zXK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK
+ 4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK
+ 4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK
+ 4v82yuL/Nsri/zbK4v82yuL/Nsri/zbK4v81yuL/Nsri/zbL4v81yuL/Msnh/yzG3/8iwtz/Fr3Z/wy5
+ 1v8EtdT/AbTT/wCz0/8BtNP/ArTT/wK00/8CtNP/ArTT/wK00/8CtNP/ArTT/wG00/8BtNP/ALTT/wCz
+ 0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wCz0/8As9P/ALPT/wC0
+ 0/8AtdT/ALXV/wC00/8Ar87/AKfE/wCbt/8AkKr/AIaf/wCAmf8Afpb/AH6W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8Af5f/AH+W/wB/lv8AgJj/AIWe/wCNp/8AlrH/AJ+8/wCnxP8Aqsj/AKvK/wCr
+ yf8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCq
+ yP8Aqsj/AKrI/wCqyP8Aqsj/AKnI/wCpyP8Aqcj/AKnI/wCpyP8Aqcj/AKnH/wCpx/8Aqcf/AKnH/wKq
+ yP8Ircr/EbHN/xu10P8judL/KbvU/yu81P8rvNT/KrzU/ym71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi7
+ 1P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi7
+ 1P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8ou9T/KLvU/yi7
+ 1P8ou9T/KLvU/yi71P8ou9T/KLvU/yi71P8pu9T/KrzU/yu81P8rvNT/KbvU/yO50v8btdD/EbHN/wit
+ yv8Cqsj/AKnH/wCpx/8Aqcf/AKnH/wCpyP8Aqcj/AKnI/wCpyP8Aqcj/AKnI/wCqyP8Aqsj/AKrI/wCq
+ yP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCqyP8Aqsj/AKrI/wCq
+ yP8Aq8n/AKvK/wCqyP8Ap8T/AJ+8/wCWsf8Ajaf/AIWe/wCAmP8Af5b/AH+W/wB/l/8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AH+X/wB/l/8AgJj/AIOc/wCJov8AkKr/AJax/wCbt/8Anrr/AJ+7/wCe
+ u/8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCe
+ uv8Anrr/AJ26/wCduv8Anbn/AJ25/wCduf8Anbn/AJ25/wCduf8Anbn/AJ25/wCcuf8AnLn/AJ25/wKd
+ uv8GoLv/DKK9/xOlv/8ZqMH/HarC/x6qwv8eqsL/HarC/xyqwv8bqcL/G6nC/xupwv8bqcL/G6nC/xup
+ wv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xup
+ wv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8bqcL/G6nC/xup
+ wv8bqcL/G6nC/xupwv8bqcL/G6nC/xupwv8cqsL/HarC/x6qwv8eqsL/HarC/xmowf8Tpb//DKK9/wag
+ u/8Cnbr/AJ25/wCcuf8AnLn/AJ25/wCduf8Anbn/AJ25/wCduf8Anbn/AJ25/wCduf8Anbr/AJ26/wCe
+ uv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCeuv8Anrr/AJ66/wCe
+ uv8Anrv/AJ+7/wCeuv8Am7f/AJax/wCQqv8AiaL/AIOc/wCAmP8Af5f/AH+X/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AH+X/wB/l/8AgJj/AIKa/wCFnv8AiaL/AI2n/wCQqv8Akaz/AJKs/wCR
+ rP8Akaz/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCR
+ q/8Akav/AJGr/wCRq/8Akav/AJGr/wCQq/8AkKv/AJCr/wCQq/8AkKv/AJCr/wCQq/8AkKv/AJCr/wGR
+ q/8Dkqz/B5St/wuVrv8Ol6//EJiw/xGYsP8RmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCY
+ sP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCY
+ sP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCY
+ sP8QmLD/EJiw/xCYsP8QmLD/EJiw/xCYsP8QmLD/EJiw/xGYsP8RmLD/EJiw/w6Xr/8Lla7/B5St/wOS
+ rP8Bkav/AJCr/wCQq/8AkKv/AJCr/wCQq/8AkKv/AJCr/wCQq/8AkKv/AJGr/wCRq/8Akav/AJGr/wCR
+ q/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCRq/8Akav/AJGr/wCR
+ rP8Akaz/AJKs/wCRrP8AkKr/AI2n/wCJov8AhZ7/AIKa/wCAmP8Af5f/AH+X/wCAmP8AgJj/AICY/wCA
+ mP8AgJj7AICY/ACAmPwAgJj8AICY/QCAmP4AgJj/AIGZ/wCCmv8Ag5z/AIWe/wCGn/8Ah5//AIeg/wCH
+ oP8Ah6D/AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCH
+ n/8Ah5//AIef/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCH
+ oP8Bh6D/A4ig/wSIof8FiaH/Bomh/weJof8HiaH/B4mh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJ
+ of8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJ
+ of8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/Bomh/waJ
+ of8GiaH/Bomh/waJof8GiaH/Bomh/waJof8GiaH/B4mh/weJof8HiaH/Bomh/wWJof8EiKH/A4ig/wGH
+ oP8Ah6D/AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIaf/wCGn/8Ahp//AIef/wCH
+ n/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCHn/8Ah5//AIef/wCH
+ oP8Ah6D/AIeg/wCHn/8Ahp//AIWe/wCDnP8Agpr/AIGZ/wCAmP8AgJj+AICY/QCAmPwAgJj8AICY/ACA
+ mPsAgJjcAICY3gCAmOEAgJjmAICY7QCAmPQAgJj7AICY/wCAmP8AgJj/AICY/wCAmf8AgZn/AIGZ/wCB
+ mf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCB
+ mf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCAmf8AgJn/AICZ/wCB
+ mf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGB
+ mf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGB
+ mf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGB
+ mf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AYGZ/wGBmf8BgZn/AIGZ/wCBmf8AgZn/AIGZ/wCB
+ mf8AgZn/AICZ/wCAmf8AgJn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCB
+ mf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCBmf8AgZn/AIGZ/wCB
+ mf8AgZn/AIGZ/wCBmf8AgJn/AICY/wCAmP8AgJj/AICY/wCAmPsAgJj0AICY7QCAmOYAgJjhAICY3gCA
+ mNwAgJimAICYqgCAmLEAgJi+AICY0ACAmOMAgJj0AICY/gB/l/8Af5f/AH+W/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9
+ lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9
+ lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9
+ lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH+W/wB/l/8Af5f/AICY/gCAmPQAgJjjAICY0ACAmL4AgJixAICYqgCA
+ mKYAgJhoAICYbwCAmHsAgJiSAICYrwCAmNAAgJjtAICY/QB/l/8Af5f/AH+X/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9
+ lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9
+ lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9
+ lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB9lf8AfZX/AH2V/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+lv8Afpb/AH6W/wB+
+ lv8Afpb/AH6W/wB+lv8Afpb/AH+X/wB/l/8Af5f/AICY/QCAmO0AgJjQAICYrwCAmJIAgJh7AICYbwCA
+ mGgAgJgwAICYOQCAmEoAgJhpAICYkgCAmL4AgJjmAICY/ACAmP8AgJj/AH+X/wB/l/8Af5f/AH+X/wB/
+ l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/
+ l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/
+ l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/
+ l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/
+ l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/
+ l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/
+ l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/
+ l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wB/
+ l/8Af5f/AH+X/wB/l/8Af5f/AH+X/wCAmP8AgJj/AICY/ACAmOYAgJi+AICYkgCAmGkAgJhKAICYOQCA
+ mDAAgJgGAICYEQCAmCYAgJhKAICYewCAmLEAgJjhAICY/ACAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/ACAmOEAgJixAICYewCAmEoAgJgmAICYEQCA
+ mAYAgJgAAICYAACAmBQAgJg7AICYcACAmKsAgJjeAICY/ACAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/ACAmN4AgJirAICYcACAmDsAgJgUAICYAACA
+ mAAAgJgAAICYAACAmBQAgJg7AICYcACAmKsAgJjeAICY/ACAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/wCA
+ mP8AgJj/AICY/wCAmP8AgJj/AICY/wCAmP8AgJj/AICY/ACAmN4AgJirAICYcACAmDsAgJgUAICYAACA
+ mADAAAAAAAAAAAAAAAAAAAAAAAAMAMAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAwAwAAAAAAAAAAAAAAAAAAAAAAA
+ DAA=
+
+
\ No newline at end of file
diff --git a/DS_Map/Editors/ScriptEditor.Designer.cs b/DS_Map/Editors/ScriptEditor.Designer.cs
index 9d00b3a..2c0a62c 100644
--- a/DS_Map/Editors/ScriptEditor.Designer.cs
+++ b/DS_Map/Editors/ScriptEditor.Designer.cs
@@ -28,826 +28,593 @@ namespace DSPRE.Editors
/// the contents of this method with the code editor.
///
private void InitializeComponent() {
- this.selectScriptFileComboBox = new System.Windows.Forms.ComboBox();
- this.label5 = new System.Windows.Forms.Label();
- this.scriptEditorTabControl = new System.Windows.Forms.TabControl();
- this.scriptsTabPage = new System.Windows.Forms.TabPage();
- this.PanelSearchScripts = new System.Windows.Forms.Panel();
- this.BtnNextFindScript = new System.Windows.Forms.Button();
- this.BtnPrevFindScript = new System.Windows.Forms.Button();
- this.BtnCloseFindScript = new System.Windows.Forms.Button();
- this.panelFindScriptTextBox = new System.Windows.Forms.TextBox();
- this.scintillaScriptsPanel = new System.Windows.Forms.Panel();
- this.functionsTabPage = new System.Windows.Forms.TabPage();
- this.PanelSearchFunctions = new System.Windows.Forms.Panel();
- this.BtnNextFindFunc = new System.Windows.Forms.Button();
- this.BtnPrevFindFunc = new System.Windows.Forms.Button();
- this.BtnCloseFindFunc = new System.Windows.Forms.Button();
- this.panelFindFunctionTextBox = new System.Windows.Forms.TextBox();
- this.scintillaFunctionsPanel = new System.Windows.Forms.Panel();
- this.actionsTabPage = new System.Windows.Forms.TabPage();
- this.PanelSearchActions = new System.Windows.Forms.Panel();
- this.BtnNextFindActions = new System.Windows.Forms.Button();
- this.BtnPrevFindActions = new System.Windows.Forms.Button();
- this.BtnCloseFindActions = new System.Windows.Forms.Button();
- this.panelFindActionTextBox = new System.Windows.Forms.TextBox();
- this.scintillaActionsPanel = new System.Windows.Forms.Panel();
- this.addScriptFileButton = new System.Windows.Forms.Button();
- this.removeScriptFileButton = new System.Windows.Forms.Button();
- this.saveScriptFileButton = new System.Windows.Forms.Button();
- this.exportScriptFileButton = new System.Windows.Forms.Button();
- this.importScriptFileButton = new System.Windows.Forms.Button();
- this.groupBox8 = new System.Windows.Forms.GroupBox();
- this.searchInScriptsButton = new System.Windows.Forms.Button();
- this.searchOnlyCurrentScriptCheckBox = new System.Windows.Forms.CheckBox();
- this.scrollToBlockStartcheckBox = new System.Windows.Forms.CheckBox();
- this.scriptSearchCaseSensitiveCheckBox = new System.Windows.Forms.CheckBox();
- this.searchInScriptsTextBox = new System.Windows.Forms.TextBox();
- this.label31 = new System.Windows.Forms.Label();
- this.searchProgressBar = new System.Windows.Forms.ProgressBar();
- this.label30 = new System.Windows.Forms.Label();
- this.label29 = new System.Windows.Forms.Label();
- this.searchInScriptsResultListBox = new System.Windows.Forms.ListBox();
- this.groupBox24 = new System.Windows.Forms.GroupBox();
- this.ScriptNavigatorTabControl = new System.Windows.Forms.TabControl();
- this.ScriptsNavTab = new System.Windows.Forms.TabPage();
- this.scriptsNavListbox = new System.Windows.Forms.ListBox();
- this.FunctionsNavTab = new System.Windows.Forms.TabPage();
- this.functionsNavListbox = new System.Windows.Forms.ListBox();
- this.ActionsNavTab = new System.Windows.Forms.TabPage();
- this.actionsNavListbox = new System.Windows.Forms.ListBox();
- this.openFindScriptEditorButton = new System.Windows.Forms.Button();
- this.expandScriptTextButton = new System.Windows.Forms.Button();
- this.compressScriptTextButton = new System.Windows.Forms.Button();
- this.scriptEditorWordWrapCheckbox = new System.Windows.Forms.CheckBox();
- this.scriptEditorWhitespacesCheckbox = new System.Windows.Forms.CheckBox();
- this.groupBox26 = new System.Windows.Forms.GroupBox();
- this.scriptEditorNumberFormatNoPreference = new System.Windows.Forms.RadioButton();
- this.scriptEditorNumberFormatDecimal = new System.Windows.Forms.RadioButton();
- this.scriptEditorNumberFormatHex = new System.Windows.Forms.RadioButton();
- this.viewLevelScriptButton = new System.Windows.Forms.Button();
- this.locateCurrentScriptFile = new System.Windows.Forms.Button();
- this.scriptEditorTabControl.SuspendLayout();
- this.scriptsTabPage.SuspendLayout();
- this.PanelSearchScripts.SuspendLayout();
- this.functionsTabPage.SuspendLayout();
- this.PanelSearchFunctions.SuspendLayout();
- this.actionsTabPage.SuspendLayout();
- this.PanelSearchActions.SuspendLayout();
- this.groupBox8.SuspendLayout();
- this.groupBox24.SuspendLayout();
- this.ScriptNavigatorTabControl.SuspendLayout();
- this.ScriptsNavTab.SuspendLayout();
- this.FunctionsNavTab.SuspendLayout();
- this.ActionsNavTab.SuspendLayout();
- this.groupBox26.SuspendLayout();
- this.SuspendLayout();
- //
- // selectScriptFileComboBox
- //
- this.selectScriptFileComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
- this.selectScriptFileComboBox.FormattingEnabled = true;
- this.selectScriptFileComboBox.Location = new System.Drawing.Point(7, 24);
- this.selectScriptFileComboBox.Name = "selectScriptFileComboBox";
- this.selectScriptFileComboBox.Size = new System.Drawing.Size(152, 21);
- this.selectScriptFileComboBox.TabIndex = 0;
- this.selectScriptFileComboBox.SelectedIndexChanged += new System.EventHandler(this.selectScriptFileComboBox_SelectedIndexChanged);
- //
- // label5
- //
- this.label5.AutoSize = true;
- this.label5.Location = new System.Drawing.Point(5, 8);
- this.label5.Name = "label5";
- this.label5.Size = new System.Drawing.Size(53, 13);
- this.label5.TabIndex = 1;
- this.label5.Text = "Script File";
- //
- // scriptEditorTabControl
- //
- this.scriptEditorTabControl.Controls.Add(this.scriptsTabPage);
- this.scriptEditorTabControl.Controls.Add(this.functionsTabPage);
- this.scriptEditorTabControl.Controls.Add(this.actionsTabPage);
- this.scriptEditorTabControl.Location = new System.Drawing.Point(481, 22);
- this.scriptEditorTabControl.Name = "scriptEditorTabControl";
- this.scriptEditorTabControl.SelectedIndex = 0;
- this.scriptEditorTabControl.Size = new System.Drawing.Size(692, 591);
- this.scriptEditorTabControl.TabIndex = 18;
- this.scriptEditorTabControl.SelectedIndexChanged += new System.EventHandler(this.scriptEditorTabControl_TabIndexChanged);
- //
- // scriptsTabPage
- //
- this.scriptsTabPage.Controls.Add(this.PanelSearchScripts);
- this.scriptsTabPage.Controls.Add(this.scintillaScriptsPanel);
- this.scriptsTabPage.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.scriptsTabPage.Location = new System.Drawing.Point(4, 22);
- this.scriptsTabPage.Name = "scriptsTabPage";
- this.scriptsTabPage.Padding = new System.Windows.Forms.Padding(3);
- this.scriptsTabPage.Size = new System.Drawing.Size(684, 565);
- this.scriptsTabPage.TabIndex = 0;
- this.scriptsTabPage.Text = "Scripts";
- this.scriptsTabPage.UseVisualStyleBackColor = true;
- //
- // PanelSearchScripts
- //
- this.PanelSearchScripts.BackColor = System.Drawing.Color.White;
- this.PanelSearchScripts.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
- this.PanelSearchScripts.Controls.Add(this.BtnNextFindScript);
- this.PanelSearchScripts.Controls.Add(this.BtnPrevFindScript);
- this.PanelSearchScripts.Controls.Add(this.BtnCloseFindScript);
- this.PanelSearchScripts.Controls.Add(this.panelFindScriptTextBox);
- this.PanelSearchScripts.Location = new System.Drawing.Point(386, 3);
- this.PanelSearchScripts.Name = "PanelSearchScripts";
- this.PanelSearchScripts.Size = new System.Drawing.Size(292, 40);
- this.PanelSearchScripts.TabIndex = 14;
- this.PanelSearchScripts.Visible = false;
- //
- // BtnNextFindScript
- //
- this.BtnNextFindScript.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.BtnNextFindScript.ForeColor = System.Drawing.Color.White;
- this.BtnNextFindScript.Image = global::DSPRE.Properties.Resources.arrowdown;
- this.BtnNextFindScript.Location = new System.Drawing.Point(233, 4);
- this.BtnNextFindScript.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.BtnNextFindScript.Name = "BtnNextFindScript";
- this.BtnNextFindScript.Size = new System.Drawing.Size(25, 30);
- this.BtnNextFindScript.TabIndex = 32;
- this.BtnNextFindScript.Tag = "Find next (Enter)";
- this.BtnNextFindScript.UseVisualStyleBackColor = true;
- this.BtnNextFindScript.Click += new System.EventHandler(this.BtnNextFindScript_Click);
- //
- // BtnPrevFindScript
- //
- this.BtnPrevFindScript.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.BtnPrevFindScript.ForeColor = System.Drawing.Color.White;
- this.BtnPrevFindScript.Image = global::DSPRE.Properties.Resources.arrowup;
- this.BtnPrevFindScript.Location = new System.Drawing.Point(205, 4);
- this.BtnPrevFindScript.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.BtnPrevFindScript.Name = "BtnPrevFindScript";
- this.BtnPrevFindScript.Size = new System.Drawing.Size(25, 30);
- this.BtnPrevFindScript.TabIndex = 31;
- this.BtnPrevFindScript.Tag = "Find previous (Shift+Enter)";
- this.BtnPrevFindScript.UseVisualStyleBackColor = true;
- this.BtnPrevFindScript.Click += new System.EventHandler(this.BtnPrevFindScript_Click);
- //
- // BtnCloseFindScript
- //
- this.BtnCloseFindScript.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.BtnCloseFindScript.ForeColor = System.Drawing.Color.White;
- this.BtnCloseFindScript.Image = global::DSPRE.Properties.Resources.Cross;
- this.BtnCloseFindScript.Location = new System.Drawing.Point(261, 4);
- this.BtnCloseFindScript.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.BtnCloseFindScript.Name = "BtnCloseFindScript";
- this.BtnCloseFindScript.Size = new System.Drawing.Size(25, 30);
- this.BtnCloseFindScript.TabIndex = 33;
- this.BtnCloseFindScript.Tag = "Close (Esc)";
- this.BtnCloseFindScript.UseVisualStyleBackColor = true;
- this.BtnCloseFindScript.Click += new System.EventHandler(this.BtnCloseFindScript_Click);
- //
- // panelFindScriptTextBox
- //
- this.panelFindScriptTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
- this.panelFindScriptTextBox.Font = new System.Drawing.Font("Segoe UI", 13.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.panelFindScriptTextBox.Location = new System.Drawing.Point(10, 6);
- this.panelFindScriptTextBox.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.panelFindScriptTextBox.Name = "panelFindScriptTextBox";
- this.panelFindScriptTextBox.Size = new System.Drawing.Size(189, 25);
- this.panelFindScriptTextBox.TabIndex = 30;
- this.panelFindScriptTextBox.TextChanged += new System.EventHandler(this.panelFindScriptTextBox_TextChanged);
- this.panelFindScriptTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.scriptTxtFind_KeyDown);
- //
- // scintillaScriptsPanel
- //
- this.scintillaScriptsPanel.Dock = System.Windows.Forms.DockStyle.Fill;
- this.scintillaScriptsPanel.Location = new System.Drawing.Point(3, 3);
- this.scintillaScriptsPanel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.scintillaScriptsPanel.Name = "scintillaScriptsPanel";
- this.scintillaScriptsPanel.Size = new System.Drawing.Size(678, 559);
- this.scintillaScriptsPanel.TabIndex = 19;
- //
- // functionsTabPage
- //
- this.functionsTabPage.Controls.Add(this.PanelSearchFunctions);
- this.functionsTabPage.Controls.Add(this.scintillaFunctionsPanel);
- this.functionsTabPage.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.functionsTabPage.Location = new System.Drawing.Point(4, 22);
- this.functionsTabPage.Name = "functionsTabPage";
- this.functionsTabPage.Padding = new System.Windows.Forms.Padding(3);
- this.functionsTabPage.Size = new System.Drawing.Size(684, 565);
- this.functionsTabPage.TabIndex = 1;
- this.functionsTabPage.Text = "Functions";
- this.functionsTabPage.UseVisualStyleBackColor = true;
- //
- // PanelSearchFunctions
- //
- this.PanelSearchFunctions.BackColor = System.Drawing.Color.White;
- this.PanelSearchFunctions.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
- this.PanelSearchFunctions.Controls.Add(this.BtnNextFindFunc);
- this.PanelSearchFunctions.Controls.Add(this.BtnPrevFindFunc);
- this.PanelSearchFunctions.Controls.Add(this.BtnCloseFindFunc);
- this.PanelSearchFunctions.Controls.Add(this.panelFindFunctionTextBox);
- this.PanelSearchFunctions.Location = new System.Drawing.Point(386, 3);
- this.PanelSearchFunctions.Name = "PanelSearchFunctions";
- this.PanelSearchFunctions.Size = new System.Drawing.Size(292, 40);
- this.PanelSearchFunctions.TabIndex = 16;
- this.PanelSearchFunctions.Visible = false;
- //
- // BtnNextFindFunc
- //
- this.BtnNextFindFunc.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.BtnNextFindFunc.ForeColor = System.Drawing.Color.White;
- this.BtnNextFindFunc.Image = global::DSPRE.Properties.Resources.arrowdown;
- this.BtnNextFindFunc.Location = new System.Drawing.Point(233, 4);
- this.BtnNextFindFunc.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.BtnNextFindFunc.Name = "BtnNextFindFunc";
- this.BtnNextFindFunc.Size = new System.Drawing.Size(25, 30);
- this.BtnNextFindFunc.TabIndex = 36;
- this.BtnNextFindFunc.Tag = "Find next (Enter)";
- this.BtnNextFindFunc.UseVisualStyleBackColor = true;
- this.BtnNextFindFunc.Click += new System.EventHandler(this.BtnNextFindFunc_Click);
- //
- // BtnPrevFindFunc
- //
- this.BtnPrevFindFunc.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.BtnPrevFindFunc.ForeColor = System.Drawing.Color.White;
- this.BtnPrevFindFunc.Image = global::DSPRE.Properties.Resources.arrowup;
- this.BtnPrevFindFunc.Location = new System.Drawing.Point(205, 4);
- this.BtnPrevFindFunc.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.BtnPrevFindFunc.Name = "BtnPrevFindFunc";
- this.BtnPrevFindFunc.Size = new System.Drawing.Size(25, 30);
- this.BtnPrevFindFunc.TabIndex = 35;
- this.BtnPrevFindFunc.Tag = "Find previous (Shift+Enter)";
- this.BtnPrevFindFunc.UseVisualStyleBackColor = true;
- this.BtnPrevFindFunc.Click += new System.EventHandler(this.BtnPrevFindFunc_Click);
- //
- // BtnCloseFindFunc
- //
- this.BtnCloseFindFunc.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.BtnCloseFindFunc.ForeColor = System.Drawing.Color.White;
- this.BtnCloseFindFunc.Image = global::DSPRE.Properties.Resources.Cross;
- this.BtnCloseFindFunc.Location = new System.Drawing.Point(261, 4);
- this.BtnCloseFindFunc.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.BtnCloseFindFunc.Name = "BtnCloseFindFunc";
- this.BtnCloseFindFunc.Size = new System.Drawing.Size(25, 30);
- this.BtnCloseFindFunc.TabIndex = 37;
- this.BtnCloseFindFunc.Tag = "Close (Esc)";
- this.BtnCloseFindFunc.UseVisualStyleBackColor = true;
- this.BtnCloseFindFunc.Click += new System.EventHandler(this.BtnCloseFindFunc_Click);
- //
- // panelFindFunctionTextBox
- //
- this.panelFindFunctionTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
- this.panelFindFunctionTextBox.Font = new System.Drawing.Font("Segoe UI", 13.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.panelFindFunctionTextBox.Location = new System.Drawing.Point(10, 6);
- this.panelFindFunctionTextBox.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.panelFindFunctionTextBox.Name = "panelFindFunctionTextBox";
- this.panelFindFunctionTextBox.Size = new System.Drawing.Size(189, 25);
- this.panelFindFunctionTextBox.TabIndex = 34;
- this.panelFindFunctionTextBox.TextChanged += new System.EventHandler(this.panelFindFunctionTextBox_TextChanged);
- this.panelFindFunctionTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.functionTxtFind_KeyDown);
- //
- // scintillaFunctionsPanel
- //
- this.scintillaFunctionsPanel.Dock = System.Windows.Forms.DockStyle.Fill;
- this.scintillaFunctionsPanel.Location = new System.Drawing.Point(3, 3);
- this.scintillaFunctionsPanel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.scintillaFunctionsPanel.Name = "scintillaFunctionsPanel";
- this.scintillaFunctionsPanel.Size = new System.Drawing.Size(678, 559);
- this.scintillaFunctionsPanel.TabIndex = 20;
- //
- // actionsTabPage
- //
- this.actionsTabPage.Controls.Add(this.PanelSearchActions);
- this.actionsTabPage.Controls.Add(this.scintillaActionsPanel);
- this.actionsTabPage.Font = new System.Drawing.Font("Microsoft Sans Serif", 9.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.actionsTabPage.Location = new System.Drawing.Point(4, 22);
- this.actionsTabPage.Name = "actionsTabPage";
- this.actionsTabPage.Padding = new System.Windows.Forms.Padding(3);
- this.actionsTabPage.Size = new System.Drawing.Size(684, 565);
- this.actionsTabPage.TabIndex = 2;
- this.actionsTabPage.Text = "Actions";
- this.actionsTabPage.UseVisualStyleBackColor = true;
- //
- // PanelSearchActions
- //
- this.PanelSearchActions.BackColor = System.Drawing.Color.White;
- this.PanelSearchActions.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
- this.PanelSearchActions.Controls.Add(this.BtnNextFindActions);
- this.PanelSearchActions.Controls.Add(this.BtnPrevFindActions);
- this.PanelSearchActions.Controls.Add(this.BtnCloseFindActions);
- this.PanelSearchActions.Controls.Add(this.panelFindActionTextBox);
- this.PanelSearchActions.Location = new System.Drawing.Point(386, 3);
- this.PanelSearchActions.Name = "PanelSearchActions";
- this.PanelSearchActions.Size = new System.Drawing.Size(292, 40);
- this.PanelSearchActions.TabIndex = 16;
- this.PanelSearchActions.Visible = false;
- //
- // BtnNextFindActions
- //
- this.BtnNextFindActions.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.BtnNextFindActions.ForeColor = System.Drawing.Color.White;
- this.BtnNextFindActions.Image = global::DSPRE.Properties.Resources.arrowdown;
- this.BtnNextFindActions.Location = new System.Drawing.Point(233, 4);
- this.BtnNextFindActions.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.BtnNextFindActions.Name = "BtnNextFindActions";
- this.BtnNextFindActions.Size = new System.Drawing.Size(25, 30);
- this.BtnNextFindActions.TabIndex = 40;
- this.BtnNextFindActions.Tag = "Find next (Enter)";
- this.BtnNextFindActions.UseVisualStyleBackColor = true;
- this.BtnNextFindActions.Click += new System.EventHandler(this.BtnNextFindActions_Click);
- //
- // BtnPrevFindActions
- //
- this.BtnPrevFindActions.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.BtnPrevFindActions.ForeColor = System.Drawing.Color.White;
- this.BtnPrevFindActions.Image = global::DSPRE.Properties.Resources.arrowup;
- this.BtnPrevFindActions.Location = new System.Drawing.Point(205, 4);
- this.BtnPrevFindActions.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.BtnPrevFindActions.Name = "BtnPrevFindActions";
- this.BtnPrevFindActions.Size = new System.Drawing.Size(25, 30);
- this.BtnPrevFindActions.TabIndex = 39;
- this.BtnPrevFindActions.Tag = "Find previous (Shift+Enter)";
- this.BtnPrevFindActions.UseVisualStyleBackColor = true;
- this.BtnPrevFindActions.Click += new System.EventHandler(this.BtnPrevFindActions_Click);
- //
- // BtnCloseFindActions
- //
- this.BtnCloseFindActions.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
- this.BtnCloseFindActions.ForeColor = System.Drawing.Color.White;
- this.BtnCloseFindActions.Image = global::DSPRE.Properties.Resources.Cross;
- this.BtnCloseFindActions.Location = new System.Drawing.Point(261, 4);
- this.BtnCloseFindActions.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.BtnCloseFindActions.Name = "BtnCloseFindActions";
- this.BtnCloseFindActions.Size = new System.Drawing.Size(25, 30);
- this.BtnCloseFindActions.TabIndex = 41;
- this.BtnCloseFindActions.Tag = "Close (Esc)";
- this.BtnCloseFindActions.UseVisualStyleBackColor = true;
- this.BtnCloseFindActions.Click += new System.EventHandler(this.BtnCloseFindActions_Click);
- //
- // panelFindActionTextBox
- //
- this.panelFindActionTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
- this.panelFindActionTextBox.Font = new System.Drawing.Font("Segoe UI", 13.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.panelFindActionTextBox.Location = new System.Drawing.Point(10, 6);
- this.panelFindActionTextBox.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.panelFindActionTextBox.Name = "panelFindActionTextBox";
- this.panelFindActionTextBox.Size = new System.Drawing.Size(189, 25);
- this.panelFindActionTextBox.TabIndex = 38;
- this.panelFindActionTextBox.TextChanged += new System.EventHandler(this.panelFindActionTextBox_TextChanged);
- this.panelFindActionTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.actionTxtFind_KeyDown);
- //
- // scintillaActionsPanel
- //
- this.scintillaActionsPanel.Dock = System.Windows.Forms.DockStyle.Fill;
- this.scintillaActionsPanel.Location = new System.Drawing.Point(3, 3);
- this.scintillaActionsPanel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
- this.scintillaActionsPanel.Name = "scintillaActionsPanel";
- this.scintillaActionsPanel.Size = new System.Drawing.Size(678, 559);
- this.scintillaActionsPanel.TabIndex = 21;
- //
- // addScriptFileButton
- //
- this.addScriptFileButton.Image = global::DSPRE.Properties.Resources.addIcon;
- this.addScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.addScriptFileButton.Location = new System.Drawing.Point(369, 667);
- this.addScriptFileButton.Name = "addScriptFileButton";
- this.addScriptFileButton.Size = new System.Drawing.Size(106, 25);
- this.addScriptFileButton.TabIndex = 4;
- this.addScriptFileButton.Text = "Add Script File";
- this.addScriptFileButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
- this.addScriptFileButton.UseVisualStyleBackColor = true;
- this.addScriptFileButton.Click += new System.EventHandler(this.addScriptFileButton_Click);
- //
- // removeScriptFileButton
- //
- this.removeScriptFileButton.Image = global::DSPRE.Properties.Resources.deleteIcon;
- this.removeScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.removeScriptFileButton.Location = new System.Drawing.Point(369, 694);
- this.removeScriptFileButton.Name = "removeScriptFileButton";
- this.removeScriptFileButton.Size = new System.Drawing.Size(106, 25);
- this.removeScriptFileButton.TabIndex = 5;
- this.removeScriptFileButton.Text = "Remove Last";
- this.removeScriptFileButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
- this.removeScriptFileButton.UseVisualStyleBackColor = true;
- this.removeScriptFileButton.Click += new System.EventHandler(this.removeScriptFileButton_Click);
- //
- // saveScriptFileButton
- //
- this.saveScriptFileButton.Image = global::DSPRE.Properties.Resources.saveButton;
- this.saveScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.saveScriptFileButton.Location = new System.Drawing.Point(6, 50);
- this.saveScriptFileButton.Name = "saveScriptFileButton";
- this.saveScriptFileButton.Size = new System.Drawing.Size(154, 23);
- this.saveScriptFileButton.TabIndex = 1;
- this.saveScriptFileButton.Text = "&Save Current File";
- this.saveScriptFileButton.UseVisualStyleBackColor = true;
- this.saveScriptFileButton.Click += new System.EventHandler(this.saveScriptFileButton_Click);
- //
- // exportScriptFileButton
- //
- this.exportScriptFileButton.Image = global::DSPRE.Properties.Resources.exportArrow;
- this.exportScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.exportScriptFileButton.Location = new System.Drawing.Point(294, 667);
- this.exportScriptFileButton.Name = "exportScriptFileButton";
- this.exportScriptFileButton.Size = new System.Drawing.Size(70, 52);
- this.exportScriptFileButton.TabIndex = 3;
- this.exportScriptFileButton.Text = "&Export \r\nFile";
- this.exportScriptFileButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
- this.exportScriptFileButton.UseVisualStyleBackColor = true;
- this.exportScriptFileButton.Click += new System.EventHandler(this.exportScriptFileButton_Click);
- //
- // importScriptFileButton
- //
- this.importScriptFileButton.Image = global::DSPRE.Properties.Resources.importArrow;
- this.importScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.importScriptFileButton.Location = new System.Drawing.Point(219, 667);
- this.importScriptFileButton.Name = "importScriptFileButton";
- this.importScriptFileButton.Size = new System.Drawing.Size(70, 52);
- this.importScriptFileButton.TabIndex = 2;
- this.importScriptFileButton.Text = "&Import\r\nFile";
- this.importScriptFileButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
- this.importScriptFileButton.UseVisualStyleBackColor = true;
- this.importScriptFileButton.Click += new System.EventHandler(this.importScriptFileButton_Click);
- //
- // groupBox8
- //
- this.groupBox8.Controls.Add(this.searchInScriptsButton);
- this.groupBox8.Controls.Add(this.searchOnlyCurrentScriptCheckBox);
- this.groupBox8.Controls.Add(this.scrollToBlockStartcheckBox);
- this.groupBox8.Controls.Add(this.scriptSearchCaseSensitiveCheckBox);
- this.groupBox8.Controls.Add(this.searchInScriptsTextBox);
- this.groupBox8.Controls.Add(this.label31);
- this.groupBox8.Controls.Add(this.searchProgressBar);
- this.groupBox8.Controls.Add(this.label30);
- this.groupBox8.Controls.Add(this.label29);
- this.groupBox8.Controls.Add(this.searchInScriptsResultListBox);
- this.groupBox8.Location = new System.Drawing.Point(2, 315);
- this.groupBox8.Name = "groupBox8";
- this.groupBox8.Size = new System.Drawing.Size(472, 298);
- this.groupBox8.TabIndex = 18;
- this.groupBox8.TabStop = false;
- this.groupBox8.Text = "Search for commands:";
- //
- // searchInScriptsButton
- //
- this.searchInScriptsButton.Image = global::DSPRE.Properties.Resources.SearchMiniIcon;
- this.searchInScriptsButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.searchInScriptsButton.Location = new System.Drawing.Point(272, 27);
- this.searchInScriptsButton.Name = "searchInScriptsButton";
- this.searchInScriptsButton.Size = new System.Drawing.Size(69, 36);
- this.searchInScriptsButton.TabIndex = 13;
- this.searchInScriptsButton.Text = "Search";
- this.searchInScriptsButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
- this.searchInScriptsButton.UseVisualStyleBackColor = true;
- this.searchInScriptsButton.Click += new System.EventHandler(this.searchInScriptsButton_Click);
- //
- // searchOnlyCurrentScriptCheckBox
- //
- this.searchOnlyCurrentScriptCheckBox.AutoSize = true;
- this.searchOnlyCurrentScriptCheckBox.Location = new System.Drawing.Point(347, 15);
- this.searchOnlyCurrentScriptCheckBox.Name = "searchOnlyCurrentScriptCheckBox";
- this.searchOnlyCurrentScriptCheckBox.Size = new System.Drawing.Size(84, 17);
- this.searchOnlyCurrentScriptCheckBox.TabIndex = 14;
- this.searchOnlyCurrentScriptCheckBox.Text = "Only Current";
- this.searchOnlyCurrentScriptCheckBox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.searchOnlyCurrentScriptCheckBox.UseVisualStyleBackColor = true;
- //
- // scrollToBlockStartcheckBox
- //
- this.scrollToBlockStartcheckBox.AutoSize = true;
- this.scrollToBlockStartcheckBox.Location = new System.Drawing.Point(347, 61);
- this.scrollToBlockStartcheckBox.Name = "scrollToBlockStartcheckBox";
- this.scrollToBlockStartcheckBox.Size = new System.Drawing.Size(116, 17);
- this.scrollToBlockStartcheckBox.TabIndex = 16;
- this.scrollToBlockStartcheckBox.Text = "Scroll to block start";
- this.scrollToBlockStartcheckBox.UseVisualStyleBackColor = true;
- //
- // scriptSearchCaseSensitiveCheckBox
- //
- this.scriptSearchCaseSensitiveCheckBox.AutoSize = true;
- this.scriptSearchCaseSensitiveCheckBox.Location = new System.Drawing.Point(347, 38);
- this.scriptSearchCaseSensitiveCheckBox.Name = "scriptSearchCaseSensitiveCheckBox";
- this.scriptSearchCaseSensitiveCheckBox.Size = new System.Drawing.Size(83, 17);
- this.scriptSearchCaseSensitiveCheckBox.TabIndex = 15;
- this.scriptSearchCaseSensitiveCheckBox.Text = "Match Case";
- this.scriptSearchCaseSensitiveCheckBox.UseVisualStyleBackColor = true;
- //
- // searchInScriptsTextBox
- //
- this.searchInScriptsTextBox.Location = new System.Drawing.Point(11, 36);
- this.searchInScriptsTextBox.Name = "searchInScriptsTextBox";
- this.searchInScriptsTextBox.Size = new System.Drawing.Size(255, 20);
- this.searchInScriptsTextBox.TabIndex = 12;
- this.searchInScriptsTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.searchInScriptsTextBox_KeyDown);
- //
- // label31
- //
- this.label31.AutoSize = true;
- this.label31.Location = new System.Drawing.Point(11, 261);
- this.label31.Name = "label31";
- this.label31.Size = new System.Drawing.Size(48, 13);
- this.label31.TabIndex = 37;
- this.label31.Text = "Progress";
- //
- // searchProgressBar
- //
- this.searchProgressBar.Location = new System.Drawing.Point(11, 277);
- this.searchProgressBar.Name = "searchProgressBar";
- this.searchProgressBar.Size = new System.Drawing.Size(452, 14);
- this.searchProgressBar.TabIndex = 36;
- //
- // label30
- //
- this.label30.AutoSize = true;
- this.label30.Location = new System.Drawing.Point(11, 68);
- this.label30.Name = "label30";
- this.label30.Size = new System.Drawing.Size(42, 13);
- this.label30.TabIndex = 35;
- this.label30.Text = "Results";
- //
- // label29
- //
- this.label29.AutoSize = true;
- this.label29.Location = new System.Drawing.Point(11, 20);
- this.label29.Name = "label29";
- this.label29.Size = new System.Drawing.Size(77, 13);
- this.label29.TabIndex = 33;
- this.label29.Text = "Line to search:";
- //
- // searchInScriptsResultListBox
- //
- this.searchInScriptsResultListBox.Location = new System.Drawing.Point(11, 84);
- this.searchInScriptsResultListBox.Name = "searchInScriptsResultListBox";
- this.searchInScriptsResultListBox.Size = new System.Drawing.Size(452, 173);
- this.searchInScriptsResultListBox.TabIndex = 17;
- this.searchInScriptsResultListBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.searchInScriptsResultListBox_KeyDown);
- this.searchInScriptsResultListBox.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.searchInScripts_GoToEntryResult);
- //
- // groupBox24
- //
- this.groupBox24.Controls.Add(this.ScriptNavigatorTabControl);
- this.groupBox24.Location = new System.Drawing.Point(3, 75);
- this.groupBox24.Name = "groupBox24";
- this.groupBox24.Size = new System.Drawing.Size(472, 234);
- this.groupBox24.TabIndex = 42;
- this.groupBox24.TabStop = false;
- this.groupBox24.Text = "Navigator";
- //
- // ScriptNavigatorTabControl
- //
- this.ScriptNavigatorTabControl.Controls.Add(this.ScriptsNavTab);
- this.ScriptNavigatorTabControl.Controls.Add(this.FunctionsNavTab);
- this.ScriptNavigatorTabControl.Controls.Add(this.ActionsNavTab);
- this.ScriptNavigatorTabControl.Location = new System.Drawing.Point(6, 16);
- this.ScriptNavigatorTabControl.Name = "ScriptNavigatorTabControl";
- this.ScriptNavigatorTabControl.SelectedIndex = 0;
- this.ScriptNavigatorTabControl.Size = new System.Drawing.Size(456, 209);
- this.ScriptNavigatorTabControl.TabIndex = 8;
- //
- // ScriptsNavTab
- //
- this.ScriptsNavTab.Controls.Add(this.scriptsNavListbox);
- this.ScriptsNavTab.Location = new System.Drawing.Point(4, 22);
- this.ScriptsNavTab.Name = "ScriptsNavTab";
- this.ScriptsNavTab.Padding = new System.Windows.Forms.Padding(3);
- this.ScriptsNavTab.Size = new System.Drawing.Size(448, 183);
- this.ScriptsNavTab.TabIndex = 0;
- this.ScriptsNavTab.Text = "Scripts";
- this.ScriptsNavTab.UseVisualStyleBackColor = true;
- //
- // scriptsNavListbox
- //
- this.scriptsNavListbox.Dock = System.Windows.Forms.DockStyle.Fill;
- this.scriptsNavListbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.scriptsNavListbox.ItemHeight = 15;
- this.scriptsNavListbox.Location = new System.Drawing.Point(3, 3);
- this.scriptsNavListbox.Name = "scriptsNavListbox";
- this.scriptsNavListbox.Size = new System.Drawing.Size(442, 177);
- this.scriptsNavListbox.TabIndex = 9;
- this.scriptsNavListbox.SelectedIndexChanged += new System.EventHandler(this.scriptsNavListbox_SelectedIndexChanged);
- //
- // FunctionsNavTab
- //
- this.FunctionsNavTab.Controls.Add(this.functionsNavListbox);
- this.FunctionsNavTab.Location = new System.Drawing.Point(4, 22);
- this.FunctionsNavTab.Name = "FunctionsNavTab";
- this.FunctionsNavTab.Padding = new System.Windows.Forms.Padding(3);
- this.FunctionsNavTab.Size = new System.Drawing.Size(448, 183);
- this.FunctionsNavTab.TabIndex = 1;
- this.FunctionsNavTab.Text = "Functions";
- this.FunctionsNavTab.UseVisualStyleBackColor = true;
- //
- // functionsNavListbox
- //
- this.functionsNavListbox.Dock = System.Windows.Forms.DockStyle.Fill;
- this.functionsNavListbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.functionsNavListbox.ItemHeight = 15;
- this.functionsNavListbox.Location = new System.Drawing.Point(3, 3);
- this.functionsNavListbox.Name = "functionsNavListbox";
- this.functionsNavListbox.Size = new System.Drawing.Size(442, 177);
- this.functionsNavListbox.TabIndex = 10;
- this.functionsNavListbox.SelectedIndexChanged += new System.EventHandler(this.functionsNavListbox_SelectedIndexChanged);
- //
- // ActionsNavTab
- //
- this.ActionsNavTab.Controls.Add(this.actionsNavListbox);
- this.ActionsNavTab.Location = new System.Drawing.Point(4, 22);
- this.ActionsNavTab.Name = "ActionsNavTab";
- this.ActionsNavTab.Padding = new System.Windows.Forms.Padding(3);
- this.ActionsNavTab.Size = new System.Drawing.Size(448, 183);
- this.ActionsNavTab.TabIndex = 2;
- this.ActionsNavTab.Text = "Actions";
- this.ActionsNavTab.UseVisualStyleBackColor = true;
- //
- // actionsNavListbox
- //
- this.actionsNavListbox.Dock = System.Windows.Forms.DockStyle.Fill;
- this.actionsNavListbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.actionsNavListbox.ItemHeight = 15;
- this.actionsNavListbox.Location = new System.Drawing.Point(3, 3);
- this.actionsNavListbox.Name = "actionsNavListbox";
- this.actionsNavListbox.Size = new System.Drawing.Size(442, 177);
- this.actionsNavListbox.TabIndex = 11;
- this.actionsNavListbox.SelectedIndexChanged += new System.EventHandler(this.actionsNavListbox_SelectedIndexChanged);
- //
- // openFindScriptEditorButton
- //
- this.openFindScriptEditorButton.Image = global::DSPRE.Properties.Resources.SearchMiniIcon;
- this.openFindScriptEditorButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.openFindScriptEditorButton.Location = new System.Drawing.Point(1079, 11);
- this.openFindScriptEditorButton.Name = "openFindScriptEditorButton";
- this.openFindScriptEditorButton.Size = new System.Drawing.Size(24, 24);
- this.openFindScriptEditorButton.TabIndex = 27;
- this.openFindScriptEditorButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
- this.openFindScriptEditorButton.UseVisualStyleBackColor = true;
- this.openFindScriptEditorButton.Click += new System.EventHandler(this.openFindScriptEditorButton_Click);
- //
- // expandScriptTextButton
- //
- this.expandScriptTextButton.Image = global::DSPRE.Properties.Resources.expandArrow;
- this.expandScriptTextButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.expandScriptTextButton.Location = new System.Drawing.Point(1107, 11);
- this.expandScriptTextButton.Name = "expandScriptTextButton";
- this.expandScriptTextButton.Size = new System.Drawing.Size(24, 24);
- this.expandScriptTextButton.TabIndex = 28;
- this.expandScriptTextButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
- this.expandScriptTextButton.UseVisualStyleBackColor = true;
- this.expandScriptTextButton.Click += new System.EventHandler(this.ScriptEditorExpandButton_Click);
- //
- // compressScriptTextButton
- //
- this.compressScriptTextButton.Image = global::DSPRE.Properties.Resources.compressArrow;
- this.compressScriptTextButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.compressScriptTextButton.Location = new System.Drawing.Point(1135, 11);
- this.compressScriptTextButton.Name = "compressScriptTextButton";
- this.compressScriptTextButton.Size = new System.Drawing.Size(24, 24);
- this.compressScriptTextButton.TabIndex = 29;
- this.compressScriptTextButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
- this.compressScriptTextButton.UseVisualStyleBackColor = true;
- this.compressScriptTextButton.Click += new System.EventHandler(this.ScriptEditorCollapseButton_Click);
- //
- // scriptEditorWordWrapCheckbox
- //
- this.scriptEditorWordWrapCheckbox.Appearance = System.Windows.Forms.Appearance.Button;
- this.scriptEditorWordWrapCheckbox.AutoSize = true;
- this.scriptEditorWordWrapCheckbox.Checked = true;
- this.scriptEditorWordWrapCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
- this.scriptEditorWordWrapCheckbox.Location = new System.Drawing.Point(907, 12);
- this.scriptEditorWordWrapCheckbox.Name = "scriptEditorWordWrapCheckbox";
- this.scriptEditorWordWrapCheckbox.Size = new System.Drawing.Size(72, 23);
- this.scriptEditorWordWrapCheckbox.TabIndex = 25;
- this.scriptEditorWordWrapCheckbox.Text = "Word Wrap";
- this.scriptEditorWordWrapCheckbox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.scriptEditorWordWrapCheckbox.UseVisualStyleBackColor = true;
- this.scriptEditorWordWrapCheckbox.CheckedChanged += new System.EventHandler(this.scriptEditorWordWrapCheckbox_CheckedChanged);
- //
- // scriptEditorWhitespacesCheckbox
- //
- this.scriptEditorWhitespacesCheckbox.Appearance = System.Windows.Forms.Appearance.Button;
- this.scriptEditorWhitespacesCheckbox.AutoSize = true;
- this.scriptEditorWhitespacesCheckbox.Location = new System.Drawing.Point(981, 12);
- this.scriptEditorWhitespacesCheckbox.Name = "scriptEditorWhitespacesCheckbox";
- this.scriptEditorWhitespacesCheckbox.Size = new System.Drawing.Size(79, 23);
- this.scriptEditorWhitespacesCheckbox.TabIndex = 26;
- this.scriptEditorWhitespacesCheckbox.Text = "Whitespaces";
- this.scriptEditorWhitespacesCheckbox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
- this.scriptEditorWhitespacesCheckbox.UseVisualStyleBackColor = true;
- this.scriptEditorWhitespacesCheckbox.CheckedChanged += new System.EventHandler(this.viewWhiteSpacesButton_Click);
- //
- // groupBox26
- //
- this.groupBox26.Controls.Add(this.scriptEditorNumberFormatNoPreference);
- this.groupBox26.Controls.Add(this.scriptEditorNumberFormatDecimal);
- this.groupBox26.Controls.Add(this.scriptEditorNumberFormatHex);
- this.groupBox26.Location = new System.Drawing.Point(700, 4);
- this.groupBox26.Name = "groupBox26";
- this.groupBox26.Size = new System.Drawing.Size(190, 36);
- this.groupBox26.TabIndex = 50;
- this.groupBox26.TabStop = false;
- this.groupBox26.Text = "Number Format Preference";
- //
- // scriptEditorNumberFormatNoPreference
- //
- this.scriptEditorNumberFormatNoPreference.AutoSize = true;
- this.scriptEditorNumberFormatNoPreference.Checked = true;
- this.scriptEditorNumberFormatNoPreference.Location = new System.Drawing.Point(11, 14);
- this.scriptEditorNumberFormatNoPreference.Name = "scriptEditorNumberFormatNoPreference";
- this.scriptEditorNumberFormatNoPreference.Size = new System.Drawing.Size(47, 17);
- this.scriptEditorNumberFormatNoPreference.TabIndex = 22;
- this.scriptEditorNumberFormatNoPreference.TabStop = true;
- this.scriptEditorNumberFormatNoPreference.Text = "Auto";
- this.scriptEditorNumberFormatNoPreference.UseVisualStyleBackColor = true;
- this.scriptEditorNumberFormatNoPreference.CheckedChanged += new System.EventHandler(this.UpdateScriptNumberFormatNoPref);
- //
- // scriptEditorNumberFormatDecimal
- //
- this.scriptEditorNumberFormatDecimal.AutoSize = true;
- this.scriptEditorNumberFormatDecimal.Location = new System.Drawing.Point(121, 14);
- this.scriptEditorNumberFormatDecimal.Name = "scriptEditorNumberFormatDecimal";
- this.scriptEditorNumberFormatDecimal.Size = new System.Drawing.Size(63, 17);
- this.scriptEditorNumberFormatDecimal.TabIndex = 24;
- this.scriptEditorNumberFormatDecimal.Text = "Decimal";
- this.scriptEditorNumberFormatDecimal.UseVisualStyleBackColor = true;
- this.scriptEditorNumberFormatDecimal.CheckedChanged += new System.EventHandler(this.UpdateScriptNumberFormatDec);
- //
- // scriptEditorNumberFormatHex
- //
- this.scriptEditorNumberFormatHex.AutoSize = true;
- this.scriptEditorNumberFormatHex.Location = new System.Drawing.Point(68, 14);
- this.scriptEditorNumberFormatHex.Name = "scriptEditorNumberFormatHex";
- this.scriptEditorNumberFormatHex.Size = new System.Drawing.Size(44, 17);
- this.scriptEditorNumberFormatHex.TabIndex = 23;
- this.scriptEditorNumberFormatHex.Text = "Hex";
- this.scriptEditorNumberFormatHex.UseVisualStyleBackColor = true;
- this.scriptEditorNumberFormatHex.CheckedChanged += new System.EventHandler(this.UpdateScriptNumberFormatHex);
- //
- // viewLevelScriptButton
- //
- this.viewLevelScriptButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.viewLevelScriptButton.Location = new System.Drawing.Point(481, 681);
- this.viewLevelScriptButton.Name = "viewLevelScriptButton";
- this.viewLevelScriptButton.Size = new System.Drawing.Size(91, 25);
- this.viewLevelScriptButton.TabIndex = 6;
- this.viewLevelScriptButton.Text = "View level script";
- this.viewLevelScriptButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
- this.viewLevelScriptButton.UseVisualStyleBackColor = true;
- this.viewLevelScriptButton.Click += new System.EventHandler(this.viewLevelScriptButton_Click);
- //
- // locateCurrentScriptFile
- //
- this.locateCurrentScriptFile.Image = global::DSPRE.Properties.Resources.open_file;
- this.locateCurrentScriptFile.Location = new System.Drawing.Point(423, 29);
- this.locateCurrentScriptFile.Name = "locateCurrentScriptFile";
- this.locateCurrentScriptFile.Size = new System.Drawing.Size(42, 40);
- this.locateCurrentScriptFile.TabIndex = 7;
- this.locateCurrentScriptFile.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
- this.locateCurrentScriptFile.UseVisualStyleBackColor = true;
- this.locateCurrentScriptFile.Click += new System.EventHandler(this.locateCurrentScriptFile_Click);
- //
- // ScriptEditor
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.Controls.Add(this.locateCurrentScriptFile);
- this.Controls.Add(this.groupBox24);
- this.Controls.Add(this.viewLevelScriptButton);
- this.Controls.Add(this.selectScriptFileComboBox);
- this.Controls.Add(this.groupBox26);
- this.Controls.Add(this.label5);
- this.Controls.Add(this.scriptEditorWhitespacesCheckbox);
- this.Controls.Add(this.scriptEditorWordWrapCheckbox);
- this.Controls.Add(this.addScriptFileButton);
- this.Controls.Add(this.compressScriptTextButton);
- this.Controls.Add(this.removeScriptFileButton);
- this.Controls.Add(this.expandScriptTextButton);
- this.Controls.Add(this.saveScriptFileButton);
- this.Controls.Add(this.openFindScriptEditorButton);
- this.Controls.Add(this.exportScriptFileButton);
- this.Controls.Add(this.importScriptFileButton);
- this.Controls.Add(this.groupBox8);
- this.Controls.Add(this.scriptEditorTabControl);
- this.Name = "ScriptEditor";
- this.Size = new System.Drawing.Size(1177, 735);
- this.scriptEditorTabControl.ResumeLayout(false);
- this.scriptsTabPage.ResumeLayout(false);
- this.PanelSearchScripts.ResumeLayout(false);
- this.PanelSearchScripts.PerformLayout();
- this.functionsTabPage.ResumeLayout(false);
- this.PanelSearchFunctions.ResumeLayout(false);
- this.PanelSearchFunctions.PerformLayout();
- this.actionsTabPage.ResumeLayout(false);
- this.PanelSearchActions.ResumeLayout(false);
- this.PanelSearchActions.PerformLayout();
- this.groupBox8.ResumeLayout(false);
- this.groupBox8.PerformLayout();
- this.groupBox24.ResumeLayout(false);
- this.ScriptNavigatorTabControl.ResumeLayout(false);
- this.ScriptsNavTab.ResumeLayout(false);
- this.FunctionsNavTab.ResumeLayout(false);
- this.ActionsNavTab.ResumeLayout(false);
- this.groupBox26.ResumeLayout(false);
- this.groupBox26.PerformLayout();
- this.ResumeLayout(false);
- this.PerformLayout();
+ this.selectScriptFileComboBox = new System.Windows.Forms.ComboBox();
+ this.label5 = new System.Windows.Forms.Label();
+ this.PanelSearchScripts = new System.Windows.Forms.Panel();
+ this.BtnNextFindScript = new System.Windows.Forms.Button();
+ this.BtnPrevFindScript = new System.Windows.Forms.Button();
+ this.BtnCloseFindScript = new System.Windows.Forms.Button();
+ this.panelFindScriptTextBox = new System.Windows.Forms.TextBox();
+ this.scintillaScriptsPanel = new System.Windows.Forms.Panel();
+ this.addScriptFileButton = new System.Windows.Forms.Button();
+ this.removeScriptFileButton = new System.Windows.Forms.Button();
+ this.saveScriptFileButton = new System.Windows.Forms.Button();
+ this.exportScriptFileButton = new System.Windows.Forms.Button();
+ this.importScriptFileButton = new System.Windows.Forms.Button();
+ this.groupBox8 = new System.Windows.Forms.GroupBox();
+ this.searchInScriptsButton = new System.Windows.Forms.Button();
+ this.searchOnlyCurrentScriptCheckBox = new System.Windows.Forms.CheckBox();
+ this.scrollToBlockStartcheckBox = new System.Windows.Forms.CheckBox();
+ this.scriptSearchCaseSensitiveCheckBox = new System.Windows.Forms.CheckBox();
+ this.searchInScriptsTextBox = new System.Windows.Forms.TextBox();
+ this.label31 = new System.Windows.Forms.Label();
+ this.searchProgressBar = new System.Windows.Forms.ProgressBar();
+ this.label30 = new System.Windows.Forms.Label();
+ this.label29 = new System.Windows.Forms.Label();
+ this.searchInScriptsResultListBox = new System.Windows.Forms.ListBox();
+ this.groupBox24 = new System.Windows.Forms.GroupBox();
+ this.ScriptNavigatorTabControl = new System.Windows.Forms.TabControl();
+ this.ScriptsNavTab = new System.Windows.Forms.TabPage();
+ this.scriptsNavListbox = new System.Windows.Forms.ListBox();
+ this.FunctionsNavTab = new System.Windows.Forms.TabPage();
+ this.functionsNavListbox = new System.Windows.Forms.ListBox();
+ this.ActionsNavTab = new System.Windows.Forms.TabPage();
+ this.actionsNavListbox = new System.Windows.Forms.ListBox();
+ this.openFindScriptEditorButton = new System.Windows.Forms.Button();
+ this.expandScriptTextButton = new System.Windows.Forms.Button();
+ this.compressScriptTextButton = new System.Windows.Forms.Button();
+ this.scriptEditorWordWrapCheckbox = new System.Windows.Forms.CheckBox();
+ this.scriptEditorWhitespacesCheckbox = new System.Windows.Forms.CheckBox();
+ this.groupBox26 = new System.Windows.Forms.GroupBox();
+ this.scriptEditorNumberFormatNoPreference = new System.Windows.Forms.RadioButton();
+ this.scriptEditorNumberFormatDecimal = new System.Windows.Forms.RadioButton();
+ this.scriptEditorNumberFormatHex = new System.Windows.Forms.RadioButton();
+ this.viewLevelScriptButton = new System.Windows.Forms.Button();
+ this.locateCurrentScriptFile = new System.Windows.Forms.Button();
+ this.PanelSearchScripts.SuspendLayout();
+ this.scintillaScriptsPanel.SuspendLayout();
+ this.groupBox8.SuspendLayout();
+ this.groupBox24.SuspendLayout();
+ this.ScriptNavigatorTabControl.SuspendLayout();
+ this.ScriptsNavTab.SuspendLayout();
+ this.FunctionsNavTab.SuspendLayout();
+ this.ActionsNavTab.SuspendLayout();
+ this.groupBox26.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // selectScriptFileComboBox
+ //
+ this.selectScriptFileComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+ this.selectScriptFileComboBox.FormattingEnabled = true;
+ this.selectScriptFileComboBox.Location = new System.Drawing.Point(7, 24);
+ this.selectScriptFileComboBox.Name = "selectScriptFileComboBox";
+ this.selectScriptFileComboBox.Size = new System.Drawing.Size(152, 21);
+ this.selectScriptFileComboBox.TabIndex = 0;
+ this.selectScriptFileComboBox.SelectedIndexChanged += new System.EventHandler(this.selectScriptFileComboBox_SelectedIndexChanged);
+ //
+ // label5
+ //
+ this.label5.AutoSize = true;
+ this.label5.Location = new System.Drawing.Point(5, 8);
+ this.label5.Name = "label5";
+ this.label5.Size = new System.Drawing.Size(53, 13);
+ this.label5.TabIndex = 1;
+ this.label5.Text = "Script File";
+ //
+ // PanelSearchScripts
+ //
+ this.PanelSearchScripts.BackColor = System.Drawing.Color.White;
+ this.PanelSearchScripts.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
+ this.PanelSearchScripts.Controls.Add(this.BtnNextFindScript);
+ this.PanelSearchScripts.Controls.Add(this.BtnPrevFindScript);
+ this.PanelSearchScripts.Controls.Add(this.BtnCloseFindScript);
+ this.PanelSearchScripts.Controls.Add(this.panelFindScriptTextBox);
+ this.PanelSearchScripts.Location = new System.Drawing.Point(383, 3);
+ this.PanelSearchScripts.Name = "PanelSearchScripts";
+ this.PanelSearchScripts.Size = new System.Drawing.Size(292, 40);
+ this.PanelSearchScripts.TabIndex = 14;
+ this.PanelSearchScripts.Visible = false;
+ //
+ // BtnNextFindScript
+ //
+ this.BtnNextFindScript.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.BtnNextFindScript.ForeColor = System.Drawing.Color.White;
+ this.BtnNextFindScript.Image = global::DSPRE.Properties.Resources.arrowdown;
+ this.BtnNextFindScript.Location = new System.Drawing.Point(233, 4);
+ this.BtnNextFindScript.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.BtnNextFindScript.Name = "BtnNextFindScript";
+ this.BtnNextFindScript.Size = new System.Drawing.Size(25, 30);
+ this.BtnNextFindScript.TabIndex = 32;
+ this.BtnNextFindScript.Tag = "Find next (Enter)";
+ this.BtnNextFindScript.UseVisualStyleBackColor = true;
+ this.BtnNextFindScript.Click += new System.EventHandler(this.BtnNextFindScript_Click);
+ //
+ // BtnPrevFindScript
+ //
+ this.BtnPrevFindScript.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.BtnPrevFindScript.ForeColor = System.Drawing.Color.White;
+ this.BtnPrevFindScript.Image = global::DSPRE.Properties.Resources.arrowup;
+ this.BtnPrevFindScript.Location = new System.Drawing.Point(205, 4);
+ this.BtnPrevFindScript.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.BtnPrevFindScript.Name = "BtnPrevFindScript";
+ this.BtnPrevFindScript.Size = new System.Drawing.Size(25, 30);
+ this.BtnPrevFindScript.TabIndex = 31;
+ this.BtnPrevFindScript.Tag = "Find previous (Shift+Enter)";
+ this.BtnPrevFindScript.UseVisualStyleBackColor = true;
+ this.BtnPrevFindScript.Click += new System.EventHandler(this.BtnPrevFindScript_Click);
+ //
+ // BtnCloseFindScript
+ //
+ this.BtnCloseFindScript.FlatStyle = System.Windows.Forms.FlatStyle.Flat;
+ this.BtnCloseFindScript.ForeColor = System.Drawing.Color.White;
+ this.BtnCloseFindScript.Image = global::DSPRE.Properties.Resources.Cross;
+ this.BtnCloseFindScript.Location = new System.Drawing.Point(261, 4);
+ this.BtnCloseFindScript.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.BtnCloseFindScript.Name = "BtnCloseFindScript";
+ this.BtnCloseFindScript.Size = new System.Drawing.Size(25, 30);
+ this.BtnCloseFindScript.TabIndex = 33;
+ this.BtnCloseFindScript.Tag = "Close (Esc)";
+ this.BtnCloseFindScript.UseVisualStyleBackColor = true;
+ this.BtnCloseFindScript.Click += new System.EventHandler(this.BtnCloseFindScript_Click);
+ //
+ // panelFindScriptTextBox
+ //
+ this.panelFindScriptTextBox.BorderStyle = System.Windows.Forms.BorderStyle.None;
+ this.panelFindScriptTextBox.Font = new System.Drawing.Font("Segoe UI", 13.8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.panelFindScriptTextBox.Location = new System.Drawing.Point(10, 6);
+ this.panelFindScriptTextBox.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.panelFindScriptTextBox.Name = "panelFindScriptTextBox";
+ this.panelFindScriptTextBox.Size = new System.Drawing.Size(189, 25);
+ this.panelFindScriptTextBox.TabIndex = 30;
+ this.panelFindScriptTextBox.TextChanged += new System.EventHandler(this.panelFindScriptTextBox_TextChanged);
+ this.panelFindScriptTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.scriptTxtFind_KeyDown);
+ //
+ // scintillaScriptsPanel
+ //
+ this.scintillaScriptsPanel.Controls.Add(this.PanelSearchScripts);
+ this.scintillaScriptsPanel.Location = new System.Drawing.Point(483, 50);
+ this.scintillaScriptsPanel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+ this.scintillaScriptsPanel.Name = "scintillaScriptsPanel";
+ this.scintillaScriptsPanel.Size = new System.Drawing.Size(678, 559);
+ this.scintillaScriptsPanel.TabIndex = 19;
+ //
+ // addScriptFileButton
+ //
+ this.addScriptFileButton.Image = global::DSPRE.Properties.Resources.addIcon;
+ this.addScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.addScriptFileButton.Location = new System.Drawing.Point(369, 667);
+ this.addScriptFileButton.Name = "addScriptFileButton";
+ this.addScriptFileButton.Size = new System.Drawing.Size(106, 25);
+ this.addScriptFileButton.TabIndex = 4;
+ this.addScriptFileButton.Text = "Add Script File";
+ this.addScriptFileButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.addScriptFileButton.UseVisualStyleBackColor = true;
+ this.addScriptFileButton.Click += new System.EventHandler(this.addScriptFileButton_Click);
+ //
+ // removeScriptFileButton
+ //
+ this.removeScriptFileButton.Image = global::DSPRE.Properties.Resources.deleteIcon;
+ this.removeScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.removeScriptFileButton.Location = new System.Drawing.Point(369, 694);
+ this.removeScriptFileButton.Name = "removeScriptFileButton";
+ this.removeScriptFileButton.Size = new System.Drawing.Size(106, 25);
+ this.removeScriptFileButton.TabIndex = 5;
+ this.removeScriptFileButton.Text = "Remove Last";
+ this.removeScriptFileButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.removeScriptFileButton.UseVisualStyleBackColor = true;
+ this.removeScriptFileButton.Click += new System.EventHandler(this.removeScriptFileButton_Click);
+ //
+ // saveScriptFileButton
+ //
+ this.saveScriptFileButton.Image = global::DSPRE.Properties.Resources.saveButton;
+ this.saveScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.saveScriptFileButton.Location = new System.Drawing.Point(6, 50);
+ this.saveScriptFileButton.Name = "saveScriptFileButton";
+ this.saveScriptFileButton.Size = new System.Drawing.Size(154, 23);
+ this.saveScriptFileButton.TabIndex = 1;
+ this.saveScriptFileButton.Text = "&Save Current File";
+ this.saveScriptFileButton.UseVisualStyleBackColor = true;
+ this.saveScriptFileButton.Click += new System.EventHandler(this.saveScriptFileButton_Click);
+ //
+ // exportScriptFileButton
+ //
+ this.exportScriptFileButton.Image = global::DSPRE.Properties.Resources.exportArrow;
+ this.exportScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.exportScriptFileButton.Location = new System.Drawing.Point(294, 667);
+ this.exportScriptFileButton.Name = "exportScriptFileButton";
+ this.exportScriptFileButton.Size = new System.Drawing.Size(70, 52);
+ this.exportScriptFileButton.TabIndex = 3;
+ this.exportScriptFileButton.Text = "&Export \r\nFile";
+ this.exportScriptFileButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.exportScriptFileButton.UseVisualStyleBackColor = true;
+ this.exportScriptFileButton.Click += new System.EventHandler(this.exportScriptFileButton_Click);
+ //
+ // importScriptFileButton
+ //
+ this.importScriptFileButton.Image = global::DSPRE.Properties.Resources.importArrow;
+ this.importScriptFileButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.importScriptFileButton.Location = new System.Drawing.Point(219, 667);
+ this.importScriptFileButton.Name = "importScriptFileButton";
+ this.importScriptFileButton.Size = new System.Drawing.Size(70, 52);
+ this.importScriptFileButton.TabIndex = 2;
+ this.importScriptFileButton.Text = "&Import\r\nFile";
+ this.importScriptFileButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.importScriptFileButton.UseVisualStyleBackColor = true;
+ this.importScriptFileButton.Click += new System.EventHandler(this.importScriptFileButton_Click);
+ //
+ // groupBox8
+ //
+ this.groupBox8.Controls.Add(this.searchInScriptsButton);
+ this.groupBox8.Controls.Add(this.searchOnlyCurrentScriptCheckBox);
+ this.groupBox8.Controls.Add(this.scrollToBlockStartcheckBox);
+ this.groupBox8.Controls.Add(this.scriptSearchCaseSensitiveCheckBox);
+ this.groupBox8.Controls.Add(this.searchInScriptsTextBox);
+ this.groupBox8.Controls.Add(this.label31);
+ this.groupBox8.Controls.Add(this.searchProgressBar);
+ this.groupBox8.Controls.Add(this.label30);
+ this.groupBox8.Controls.Add(this.label29);
+ this.groupBox8.Controls.Add(this.searchInScriptsResultListBox);
+ this.groupBox8.Location = new System.Drawing.Point(2, 315);
+ this.groupBox8.Name = "groupBox8";
+ this.groupBox8.Size = new System.Drawing.Size(472, 298);
+ this.groupBox8.TabIndex = 18;
+ this.groupBox8.TabStop = false;
+ this.groupBox8.Text = "Search for commands:";
+ //
+ // searchInScriptsButton
+ //
+ this.searchInScriptsButton.Image = global::DSPRE.Properties.Resources.SearchMiniIcon;
+ this.searchInScriptsButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.searchInScriptsButton.Location = new System.Drawing.Point(272, 27);
+ this.searchInScriptsButton.Name = "searchInScriptsButton";
+ this.searchInScriptsButton.Size = new System.Drawing.Size(69, 36);
+ this.searchInScriptsButton.TabIndex = 13;
+ this.searchInScriptsButton.Text = "Search";
+ this.searchInScriptsButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.searchInScriptsButton.UseVisualStyleBackColor = true;
+ this.searchInScriptsButton.Click += new System.EventHandler(this.searchInScriptsButton_Click);
+ //
+ // searchOnlyCurrentScriptCheckBox
+ //
+ this.searchOnlyCurrentScriptCheckBox.AutoSize = true;
+ this.searchOnlyCurrentScriptCheckBox.Location = new System.Drawing.Point(347, 15);
+ this.searchOnlyCurrentScriptCheckBox.Name = "searchOnlyCurrentScriptCheckBox";
+ this.searchOnlyCurrentScriptCheckBox.Size = new System.Drawing.Size(84, 17);
+ this.searchOnlyCurrentScriptCheckBox.TabIndex = 14;
+ this.searchOnlyCurrentScriptCheckBox.Text = "Only Current";
+ this.searchOnlyCurrentScriptCheckBox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.searchOnlyCurrentScriptCheckBox.UseVisualStyleBackColor = true;
+ //
+ // scrollToBlockStartcheckBox
+ //
+ this.scrollToBlockStartcheckBox.AutoSize = true;
+ this.scrollToBlockStartcheckBox.Location = new System.Drawing.Point(347, 61);
+ this.scrollToBlockStartcheckBox.Name = "scrollToBlockStartcheckBox";
+ this.scrollToBlockStartcheckBox.Size = new System.Drawing.Size(116, 17);
+ this.scrollToBlockStartcheckBox.TabIndex = 16;
+ this.scrollToBlockStartcheckBox.Text = "Scroll to block start";
+ this.scrollToBlockStartcheckBox.UseVisualStyleBackColor = true;
+ //
+ // scriptSearchCaseSensitiveCheckBox
+ //
+ this.scriptSearchCaseSensitiveCheckBox.AutoSize = true;
+ this.scriptSearchCaseSensitiveCheckBox.Location = new System.Drawing.Point(347, 38);
+ this.scriptSearchCaseSensitiveCheckBox.Name = "scriptSearchCaseSensitiveCheckBox";
+ this.scriptSearchCaseSensitiveCheckBox.Size = new System.Drawing.Size(83, 17);
+ this.scriptSearchCaseSensitiveCheckBox.TabIndex = 15;
+ this.scriptSearchCaseSensitiveCheckBox.Text = "Match Case";
+ this.scriptSearchCaseSensitiveCheckBox.UseVisualStyleBackColor = true;
+ //
+ // searchInScriptsTextBox
+ //
+ this.searchInScriptsTextBox.Location = new System.Drawing.Point(11, 36);
+ this.searchInScriptsTextBox.Name = "searchInScriptsTextBox";
+ this.searchInScriptsTextBox.Size = new System.Drawing.Size(255, 20);
+ this.searchInScriptsTextBox.TabIndex = 12;
+ this.searchInScriptsTextBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.searchInScriptsTextBox_KeyDown);
+ //
+ // label31
+ //
+ this.label31.AutoSize = true;
+ this.label31.Location = new System.Drawing.Point(11, 261);
+ this.label31.Name = "label31";
+ this.label31.Size = new System.Drawing.Size(48, 13);
+ this.label31.TabIndex = 37;
+ this.label31.Text = "Progress";
+ //
+ // searchProgressBar
+ //
+ this.searchProgressBar.Location = new System.Drawing.Point(11, 277);
+ this.searchProgressBar.Name = "searchProgressBar";
+ this.searchProgressBar.Size = new System.Drawing.Size(452, 14);
+ this.searchProgressBar.TabIndex = 36;
+ //
+ // label30
+ //
+ this.label30.AutoSize = true;
+ this.label30.Location = new System.Drawing.Point(11, 68);
+ this.label30.Name = "label30";
+ this.label30.Size = new System.Drawing.Size(42, 13);
+ this.label30.TabIndex = 35;
+ this.label30.Text = "Results";
+ //
+ // label29
+ //
+ this.label29.AutoSize = true;
+ this.label29.Location = new System.Drawing.Point(11, 20);
+ this.label29.Name = "label29";
+ this.label29.Size = new System.Drawing.Size(77, 13);
+ this.label29.TabIndex = 33;
+ this.label29.Text = "Line to search:";
+ //
+ // searchInScriptsResultListBox
+ //
+ this.searchInScriptsResultListBox.Location = new System.Drawing.Point(11, 84);
+ this.searchInScriptsResultListBox.Name = "searchInScriptsResultListBox";
+ this.searchInScriptsResultListBox.Size = new System.Drawing.Size(452, 173);
+ this.searchInScriptsResultListBox.TabIndex = 17;
+ this.searchInScriptsResultListBox.KeyDown += new System.Windows.Forms.KeyEventHandler(this.searchInScriptsResultListBox_KeyDown);
+ this.searchInScriptsResultListBox.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(this.searchInScripts_GoToEntryResult);
+ //
+ // groupBox24
+ //
+ this.groupBox24.Controls.Add(this.ScriptNavigatorTabControl);
+ this.groupBox24.Location = new System.Drawing.Point(3, 75);
+ this.groupBox24.Name = "groupBox24";
+ this.groupBox24.Size = new System.Drawing.Size(472, 234);
+ this.groupBox24.TabIndex = 42;
+ this.groupBox24.TabStop = false;
+ this.groupBox24.Text = "Navigator";
+ //
+ // ScriptNavigatorTabControl
+ //
+ this.ScriptNavigatorTabControl.Controls.Add(this.ScriptsNavTab);
+ this.ScriptNavigatorTabControl.Controls.Add(this.FunctionsNavTab);
+ this.ScriptNavigatorTabControl.Controls.Add(this.ActionsNavTab);
+ this.ScriptNavigatorTabControl.Location = new System.Drawing.Point(6, 16);
+ this.ScriptNavigatorTabControl.Name = "ScriptNavigatorTabControl";
+ this.ScriptNavigatorTabControl.SelectedIndex = 0;
+ this.ScriptNavigatorTabControl.Size = new System.Drawing.Size(456, 209);
+ this.ScriptNavigatorTabControl.TabIndex = 8;
+ //
+ // ScriptsNavTab
+ //
+ this.ScriptsNavTab.Controls.Add(this.scriptsNavListbox);
+ this.ScriptsNavTab.Location = new System.Drawing.Point(4, 22);
+ this.ScriptsNavTab.Name = "ScriptsNavTab";
+ this.ScriptsNavTab.Padding = new System.Windows.Forms.Padding(3);
+ this.ScriptsNavTab.Size = new System.Drawing.Size(448, 183);
+ this.ScriptsNavTab.TabIndex = 0;
+ this.ScriptsNavTab.Text = "Scripts";
+ this.ScriptsNavTab.UseVisualStyleBackColor = true;
+ //
+ // scriptsNavListbox
+ //
+ this.scriptsNavListbox.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.scriptsNavListbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.scriptsNavListbox.ItemHeight = 15;
+ this.scriptsNavListbox.Location = new System.Drawing.Point(3, 3);
+ this.scriptsNavListbox.Name = "scriptsNavListbox";
+ this.scriptsNavListbox.Size = new System.Drawing.Size(442, 177);
+ this.scriptsNavListbox.TabIndex = 9;
+ this.scriptsNavListbox.SelectedIndexChanged += new System.EventHandler(this.scriptsNavListbox_SelectedIndexChanged);
+ //
+ // FunctionsNavTab
+ //
+ this.FunctionsNavTab.Controls.Add(this.functionsNavListbox);
+ this.FunctionsNavTab.Location = new System.Drawing.Point(4, 22);
+ this.FunctionsNavTab.Name = "FunctionsNavTab";
+ this.FunctionsNavTab.Padding = new System.Windows.Forms.Padding(3);
+ this.FunctionsNavTab.Size = new System.Drawing.Size(448, 183);
+ this.FunctionsNavTab.TabIndex = 1;
+ this.FunctionsNavTab.Text = "Functions";
+ this.FunctionsNavTab.UseVisualStyleBackColor = true;
+ //
+ // functionsNavListbox
+ //
+ this.functionsNavListbox.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.functionsNavListbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.functionsNavListbox.ItemHeight = 15;
+ this.functionsNavListbox.Location = new System.Drawing.Point(3, 3);
+ this.functionsNavListbox.Name = "functionsNavListbox";
+ this.functionsNavListbox.Size = new System.Drawing.Size(442, 177);
+ this.functionsNavListbox.TabIndex = 10;
+ this.functionsNavListbox.SelectedIndexChanged += new System.EventHandler(this.functionsNavListbox_SelectedIndexChanged);
+ //
+ // ActionsNavTab
+ //
+ this.ActionsNavTab.Controls.Add(this.actionsNavListbox);
+ this.ActionsNavTab.Location = new System.Drawing.Point(4, 22);
+ this.ActionsNavTab.Name = "ActionsNavTab";
+ this.ActionsNavTab.Padding = new System.Windows.Forms.Padding(3);
+ this.ActionsNavTab.Size = new System.Drawing.Size(448, 183);
+ this.ActionsNavTab.TabIndex = 2;
+ this.ActionsNavTab.Text = "Actions";
+ this.ActionsNavTab.UseVisualStyleBackColor = true;
+ //
+ // actionsNavListbox
+ //
+ this.actionsNavListbox.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.actionsNavListbox.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.actionsNavListbox.ItemHeight = 15;
+ this.actionsNavListbox.Location = new System.Drawing.Point(3, 3);
+ this.actionsNavListbox.Name = "actionsNavListbox";
+ this.actionsNavListbox.Size = new System.Drawing.Size(442, 177);
+ this.actionsNavListbox.TabIndex = 11;
+ this.actionsNavListbox.SelectedIndexChanged += new System.EventHandler(this.actionsNavListbox_SelectedIndexChanged);
+ //
+ // openFindScriptEditorButton
+ //
+ this.openFindScriptEditorButton.Image = global::DSPRE.Properties.Resources.SearchMiniIcon;
+ this.openFindScriptEditorButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.openFindScriptEditorButton.Location = new System.Drawing.Point(1079, 11);
+ this.openFindScriptEditorButton.Name = "openFindScriptEditorButton";
+ this.openFindScriptEditorButton.Size = new System.Drawing.Size(24, 24);
+ this.openFindScriptEditorButton.TabIndex = 27;
+ this.openFindScriptEditorButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.openFindScriptEditorButton.UseVisualStyleBackColor = true;
+ this.openFindScriptEditorButton.Click += new System.EventHandler(this.openFindScriptEditorButton_Click);
+ //
+ // expandScriptTextButton
+ //
+ this.expandScriptTextButton.Image = global::DSPRE.Properties.Resources.expandArrow;
+ this.expandScriptTextButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.expandScriptTextButton.Location = new System.Drawing.Point(1107, 11);
+ this.expandScriptTextButton.Name = "expandScriptTextButton";
+ this.expandScriptTextButton.Size = new System.Drawing.Size(24, 24);
+ this.expandScriptTextButton.TabIndex = 28;
+ this.expandScriptTextButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.expandScriptTextButton.UseVisualStyleBackColor = true;
+ this.expandScriptTextButton.Click += new System.EventHandler(this.ScriptEditorExpandButton_Click);
+ //
+ // compressScriptTextButton
+ //
+ this.compressScriptTextButton.Image = global::DSPRE.Properties.Resources.compressArrow;
+ this.compressScriptTextButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.compressScriptTextButton.Location = new System.Drawing.Point(1135, 11);
+ this.compressScriptTextButton.Name = "compressScriptTextButton";
+ this.compressScriptTextButton.Size = new System.Drawing.Size(24, 24);
+ this.compressScriptTextButton.TabIndex = 29;
+ this.compressScriptTextButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.compressScriptTextButton.UseVisualStyleBackColor = true;
+ this.compressScriptTextButton.Click += new System.EventHandler(this.ScriptEditorCollapseButton_Click);
+ //
+ // scriptEditorWordWrapCheckbox
+ //
+ this.scriptEditorWordWrapCheckbox.Appearance = System.Windows.Forms.Appearance.Button;
+ this.scriptEditorWordWrapCheckbox.AutoSize = true;
+ this.scriptEditorWordWrapCheckbox.Checked = true;
+ this.scriptEditorWordWrapCheckbox.CheckState = System.Windows.Forms.CheckState.Checked;
+ this.scriptEditorWordWrapCheckbox.Location = new System.Drawing.Point(907, 12);
+ this.scriptEditorWordWrapCheckbox.Name = "scriptEditorWordWrapCheckbox";
+ this.scriptEditorWordWrapCheckbox.Size = new System.Drawing.Size(72, 23);
+ this.scriptEditorWordWrapCheckbox.TabIndex = 25;
+ this.scriptEditorWordWrapCheckbox.Text = "Word Wrap";
+ this.scriptEditorWordWrapCheckbox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.scriptEditorWordWrapCheckbox.UseVisualStyleBackColor = true;
+ this.scriptEditorWordWrapCheckbox.CheckedChanged += new System.EventHandler(this.scriptEditorWordWrapCheckbox_CheckedChanged);
+ //
+ // scriptEditorWhitespacesCheckbox
+ //
+ this.scriptEditorWhitespacesCheckbox.Appearance = System.Windows.Forms.Appearance.Button;
+ this.scriptEditorWhitespacesCheckbox.AutoSize = true;
+ this.scriptEditorWhitespacesCheckbox.Location = new System.Drawing.Point(981, 12);
+ this.scriptEditorWhitespacesCheckbox.Name = "scriptEditorWhitespacesCheckbox";
+ this.scriptEditorWhitespacesCheckbox.Size = new System.Drawing.Size(79, 23);
+ this.scriptEditorWhitespacesCheckbox.TabIndex = 26;
+ this.scriptEditorWhitespacesCheckbox.Text = "Whitespaces";
+ this.scriptEditorWhitespacesCheckbox.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
+ this.scriptEditorWhitespacesCheckbox.UseVisualStyleBackColor = true;
+ this.scriptEditorWhitespacesCheckbox.CheckedChanged += new System.EventHandler(this.viewWhiteSpacesButton_Click);
+ //
+ // groupBox26
+ //
+ this.groupBox26.Controls.Add(this.scriptEditorNumberFormatNoPreference);
+ this.groupBox26.Controls.Add(this.scriptEditorNumberFormatDecimal);
+ this.groupBox26.Controls.Add(this.scriptEditorNumberFormatHex);
+ this.groupBox26.Location = new System.Drawing.Point(700, 4);
+ this.groupBox26.Name = "groupBox26";
+ this.groupBox26.Size = new System.Drawing.Size(190, 36);
+ this.groupBox26.TabIndex = 50;
+ this.groupBox26.TabStop = false;
+ this.groupBox26.Text = "Number Format Preference";
+ //
+ // scriptEditorNumberFormatNoPreference
+ //
+ this.scriptEditorNumberFormatNoPreference.AutoSize = true;
+ this.scriptEditorNumberFormatNoPreference.Checked = true;
+ this.scriptEditorNumberFormatNoPreference.Location = new System.Drawing.Point(11, 14);
+ this.scriptEditorNumberFormatNoPreference.Name = "scriptEditorNumberFormatNoPreference";
+ this.scriptEditorNumberFormatNoPreference.Size = new System.Drawing.Size(47, 17);
+ this.scriptEditorNumberFormatNoPreference.TabIndex = 22;
+ this.scriptEditorNumberFormatNoPreference.TabStop = true;
+ this.scriptEditorNumberFormatNoPreference.Text = "Auto";
+ this.scriptEditorNumberFormatNoPreference.UseVisualStyleBackColor = true;
+ this.scriptEditorNumberFormatNoPreference.CheckedChanged += new System.EventHandler(this.UpdateScriptNumberFormatNoPref);
+ //
+ // scriptEditorNumberFormatDecimal
+ //
+ this.scriptEditorNumberFormatDecimal.AutoSize = true;
+ this.scriptEditorNumberFormatDecimal.Location = new System.Drawing.Point(121, 14);
+ this.scriptEditorNumberFormatDecimal.Name = "scriptEditorNumberFormatDecimal";
+ this.scriptEditorNumberFormatDecimal.Size = new System.Drawing.Size(63, 17);
+ this.scriptEditorNumberFormatDecimal.TabIndex = 24;
+ this.scriptEditorNumberFormatDecimal.Text = "Decimal";
+ this.scriptEditorNumberFormatDecimal.UseVisualStyleBackColor = true;
+ this.scriptEditorNumberFormatDecimal.CheckedChanged += new System.EventHandler(this.UpdateScriptNumberFormatDec);
+ //
+ // scriptEditorNumberFormatHex
+ //
+ this.scriptEditorNumberFormatHex.AutoSize = true;
+ this.scriptEditorNumberFormatHex.Location = new System.Drawing.Point(68, 14);
+ this.scriptEditorNumberFormatHex.Name = "scriptEditorNumberFormatHex";
+ this.scriptEditorNumberFormatHex.Size = new System.Drawing.Size(44, 17);
+ this.scriptEditorNumberFormatHex.TabIndex = 23;
+ this.scriptEditorNumberFormatHex.Text = "Hex";
+ this.scriptEditorNumberFormatHex.UseVisualStyleBackColor = true;
+ this.scriptEditorNumberFormatHex.CheckedChanged += new System.EventHandler(this.UpdateScriptNumberFormatHex);
+ //
+ // viewLevelScriptButton
+ //
+ this.viewLevelScriptButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
+ this.viewLevelScriptButton.Location = new System.Drawing.Point(481, 681);
+ this.viewLevelScriptButton.Name = "viewLevelScriptButton";
+ this.viewLevelScriptButton.Size = new System.Drawing.Size(91, 25);
+ this.viewLevelScriptButton.TabIndex = 6;
+ this.viewLevelScriptButton.Text = "View level script";
+ this.viewLevelScriptButton.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.viewLevelScriptButton.UseVisualStyleBackColor = true;
+ this.viewLevelScriptButton.Click += new System.EventHandler(this.viewLevelScriptButton_Click);
+ //
+ // locateCurrentScriptFile
+ //
+ this.locateCurrentScriptFile.Image = global::DSPRE.Properties.Resources.open_file;
+ this.locateCurrentScriptFile.Location = new System.Drawing.Point(423, 29);
+ this.locateCurrentScriptFile.Name = "locateCurrentScriptFile";
+ this.locateCurrentScriptFile.Size = new System.Drawing.Size(42, 40);
+ this.locateCurrentScriptFile.TabIndex = 7;
+ this.locateCurrentScriptFile.TextAlign = System.Drawing.ContentAlignment.MiddleLeft;
+ this.locateCurrentScriptFile.UseVisualStyleBackColor = true;
+ this.locateCurrentScriptFile.Click += new System.EventHandler(this.locateCurrentScriptFile_Click);
+ //
+ // ScriptEditor
+ //
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.Controls.Add(this.scintillaScriptsPanel);
+ this.Controls.Add(this.locateCurrentScriptFile);
+ this.Controls.Add(this.groupBox24);
+ this.Controls.Add(this.viewLevelScriptButton);
+ this.Controls.Add(this.selectScriptFileComboBox);
+ this.Controls.Add(this.groupBox26);
+ this.Controls.Add(this.label5);
+ this.Controls.Add(this.scriptEditorWhitespacesCheckbox);
+ this.Controls.Add(this.scriptEditorWordWrapCheckbox);
+ this.Controls.Add(this.addScriptFileButton);
+ this.Controls.Add(this.compressScriptTextButton);
+ this.Controls.Add(this.removeScriptFileButton);
+ this.Controls.Add(this.expandScriptTextButton);
+ this.Controls.Add(this.saveScriptFileButton);
+ this.Controls.Add(this.openFindScriptEditorButton);
+ this.Controls.Add(this.exportScriptFileButton);
+ this.Controls.Add(this.importScriptFileButton);
+ this.Controls.Add(this.groupBox8);
+ this.Name = "ScriptEditor";
+ this.Size = new System.Drawing.Size(1177, 735);
+ this.PanelSearchScripts.ResumeLayout(false);
+ this.PanelSearchScripts.PerformLayout();
+ this.scintillaScriptsPanel.ResumeLayout(false);
+ this.groupBox8.ResumeLayout(false);
+ this.groupBox8.PerformLayout();
+ this.groupBox24.ResumeLayout(false);
+ this.ScriptNavigatorTabControl.ResumeLayout(false);
+ this.ScriptsNavTab.ResumeLayout(false);
+ this.FunctionsNavTab.ResumeLayout(false);
+ this.ActionsNavTab.ResumeLayout(false);
+ this.groupBox26.ResumeLayout(false);
+ this.groupBox26.PerformLayout();
+ this.ResumeLayout(false);
+ this.PerformLayout();
}
@@ -857,28 +624,12 @@ namespace DSPRE.Editors
public System.Windows.Forms.ComboBox selectScriptFileComboBox;
private System.Windows.Forms.Label label5;
- public System.Windows.Forms.TabControl scriptEditorTabControl;
- private System.Windows.Forms.TabPage scriptsTabPage;
private System.Windows.Forms.Panel PanelSearchScripts;
private System.Windows.Forms.Button BtnNextFindScript;
private System.Windows.Forms.Button BtnPrevFindScript;
private System.Windows.Forms.Button BtnCloseFindScript;
private System.Windows.Forms.TextBox panelFindScriptTextBox;
private System.Windows.Forms.Panel scintillaScriptsPanel;
- private System.Windows.Forms.TabPage functionsTabPage;
- private System.Windows.Forms.Panel PanelSearchFunctions;
- private System.Windows.Forms.Button BtnNextFindFunc;
- private System.Windows.Forms.Button BtnPrevFindFunc;
- private System.Windows.Forms.Button BtnCloseFindFunc;
- private System.Windows.Forms.TextBox panelFindFunctionTextBox;
- private System.Windows.Forms.Panel scintillaFunctionsPanel;
- private System.Windows.Forms.TabPage actionsTabPage;
- private System.Windows.Forms.Panel PanelSearchActions;
- private System.Windows.Forms.Button BtnNextFindActions;
- private System.Windows.Forms.Button BtnPrevFindActions;
- private System.Windows.Forms.Button BtnCloseFindActions;
- private System.Windows.Forms.TextBox panelFindActionTextBox;
- private System.Windows.Forms.Panel scintillaActionsPanel;
private System.Windows.Forms.Button addScriptFileButton;
private System.Windows.Forms.Button removeScriptFileButton;
private System.Windows.Forms.Button saveScriptFileButton;
diff --git a/DS_Map/Editors/ScriptEditor.cs b/DS_Map/Editors/ScriptEditor.cs
index 9e1a3d0..77e3326 100644
--- a/DS_Map/Editors/ScriptEditor.cs
+++ b/DS_Map/Editors/ScriptEditor.cs
@@ -13,14 +13,8 @@ using System.Globalization;
namespace DSPRE.Editors {
public partial class ScriptEditor : UserControl {
public bool scriptEditorIsReady { get; set; } = false;
- private Scintilla ScriptTextArea;
- private Scintilla FunctionTextArea;
- private Scintilla ActionTextArea;
private SearchManager scriptSearchManager;
- private SearchManager functionSearchManager;
- private SearchManager actionSearchManager;
- private Scintilla currentScintillaEditor;
- private SearchManager currentSearchManager;
+ private Scintilla ScriptTextArea;
private bool scriptsDirty = false;
private bool functionsDirty = false;
private bool actionsDirty = false;
@@ -118,7 +112,6 @@ namespace DSPRE.Editors {
public void OpenScriptEditor(MainProgram parent, int scriptFileID) {
SetupScriptEditor(parent);
- scriptEditorTabControl.SelectedIndex = 0;
selectScriptFileComboBox.SelectedIndex = scriptFileID;
EditorPanels.mainTabControl.SelectedTab = EditorPanels.scriptEditorTabPage;
}
@@ -132,9 +125,6 @@ namespace DSPRE.Editors {
secondaryKeyWords = String.Join(" ", RomInfo.ScriptComparisonOperatorsDict.Values) +
" " + String.Join(" ", ScriptDatabase.specialOverworlds.Values) +
" " + String.Join(" ", ScriptDatabase.overworldDirections.Values) +
- " " + ScriptFile.ContainerTypes.Script.ToString() +
- " " + ScriptFile.ContainerTypes.Function.ToString() +
- " " + ScriptFile.ContainerTypes.Action.ToString() +
" " + Event.EventType.Overworld +
" " + Overworld.MovementCodeKW;
secondaryKeyWords += " " + secondaryKeyWords.ToUpper() + " " + secondaryKeyWords.ToLower();
@@ -145,52 +135,25 @@ namespace DSPRE.Editors {
scintillaScriptsPanel.Controls.Clear();
scintillaScriptsPanel.Controls.Add(ScriptTextArea);
- FunctionTextArea = new Scintilla();
- functionSearchManager = new SearchManager(EditorPanels.MainProgram, FunctionTextArea, panelFindFunctionTextBox, PanelSearchFunctions);
- scintillaFunctionsPanel.Controls.Clear();
- scintillaFunctionsPanel.Controls.Add(FunctionTextArea);
-
- ActionTextArea = new Scintilla();
- actionSearchManager = new SearchManager(EditorPanels.MainProgram, ActionTextArea, panelFindActionTextBox, PanelSearchActions);
- scintillaActionsPanel.Controls.Clear();
- scintillaActionsPanel.Controls.Add(ActionTextArea);
-
- currentScintillaEditor = ScriptTextArea;
- currentSearchManager = scriptSearchManager;
-
// BASIC CONFIG
ScriptTextArea.TextChanged += (OnTextChangedScript);
- FunctionTextArea.TextChanged += (OnTextChangedFunction);
- ActionTextArea.TextChanged += (OnTextChangedAction);
// INITIAL VIEW CONFIG
InitialViewConfig(ScriptTextArea);
- InitialViewConfig(FunctionTextArea);
- InitialViewConfig(ActionTextArea);
InitSyntaxColoring(ScriptTextArea);
- InitSyntaxColoring(FunctionTextArea);
- InitSyntaxColoring(ActionTextArea);
// NUMBER MARGIN
InitNumberMargin(ScriptTextArea, ScriptTextArea_MarginClick);
- InitNumberMargin(FunctionTextArea, FunctionTextArea_MarginClick);
- InitNumberMargin(ActionTextArea, ActionTextArea_MarginClick);
// BOOKMARK MARGIN
InitBookmarkMargin(ScriptTextArea);
- InitBookmarkMargin(FunctionTextArea);
- InitBookmarkMargin(ActionTextArea);
// CODE FOLDING MARGIN
InitCodeFolding(ScriptTextArea);
- InitCodeFolding(FunctionTextArea);
- InitCodeFolding(ActionTextArea);
// INIT HOTKEYS
InitHotkeys(ScriptTextArea, scriptSearchManager);
- InitHotkeys(FunctionTextArea, functionSearchManager);
- InitHotkeys(ActionTextArea, actionSearchManager);
// INIT TOOLTIPS DWELLING
/*
@@ -202,6 +165,8 @@ namespace DSPRE.Editors {
FunctionTextArea.DwellEnd += TextArea_DwellEnd;
FunctionTextArea.DwellStart += TextArea_DwellStart;
*/
+
+ // Style for prefixed words (label_*, script_*)
}
private void populate_selectScriptFileComboBox(int selectedIndex = 0) {
@@ -227,7 +192,6 @@ namespace DSPRE.Editors {
}
private void InitSyntaxColoring(Scintilla textArea) {
- // Configure the default style
textArea.StyleResetDefault();
textArea.Styles[Style.Default].Font = "Consolas";
textArea.Styles[Style.Default].Size = 12;
@@ -235,20 +199,74 @@ namespace DSPRE.Editors {
textArea.Styles[Style.Default].ForeColor = Color.FromArgb(0xFFFFFF);
textArea.StyleClearAll();
- // Configure the lexer styles
- textArea.Styles[Style.Python.Identifier].ForeColor = Color.FromArgb(0xD0DAE2);
- textArea.Styles[Style.Python.CommentLine].ForeColor = Color.FromArgb(0x40BF57);
- textArea.Styles[Style.Python.Number].ForeColor = Color.FromArgb(0xFFFF00);
- textArea.Styles[Style.Python.String].ForeColor = Color.FromArgb(0xFF00FF);
- textArea.Styles[Style.Python.Character].ForeColor = Color.FromArgb(0xE95454);
- textArea.Styles[Style.Python.Operator].ForeColor = Color.FromArgb(0xFFFF00);
- textArea.Styles[Style.Python.Word].ForeColor = Color.FromArgb(0x48A8EE);
- textArea.Styles[Style.Python.Word2].ForeColor = Color.FromArgb(0xF98906);
+ // Configure Assembly lexer styles
+ textArea.Styles[Style.Asm.Identifier].ForeColor = Color.FromArgb(0xD0DAE2);
+ textArea.Styles[Style.Asm.Number].ForeColor = Color.FromArgb(0xFFFF00);
+ textArea.Styles[Style.Asm.String].ForeColor = Color.FromArgb(0xFF00FF);
+ textArea.Styles[Style.Asm.Character].ForeColor = Color.FromArgb(0xE95454);
+ textArea.Styles[Style.Asm.Operator].ForeColor = Color.FromArgb(0xFFFF00);
+ textArea.Styles[Style.Asm.Comment].ForeColor = Color.FromArgb(0x40BF57);
- textArea.Lexer = Lexer.Python;
+ // For command keywords - use CpuInstruction style
+ textArea.Styles[Style.Asm.CpuInstruction].ForeColor = Color.FromArgb(0x48A8EE);
- textArea.SetKeywords(0, cmdKeyWords);
- textArea.SetKeywords(1, secondaryKeyWords);
+ // For secondary keywords - use Directive style
+ textArea.Styles[Style.Asm.Directive].ForeColor = Color.FromArgb(0xF98906);
+
+ // Configure indicators for prefix highlighting
+ textArea.Indicators[0].Style = IndicatorStyle.TextFore;
+ textArea.Indicators[0].ForeColor = Color.FromArgb(0x8A2BE2); // Purple for label_*
+ textArea.Indicators[0].Under = false; // Draw over the lexer's styling
+
+ textArea.Indicators[1].Style = IndicatorStyle.TextFore;
+ textArea.Indicators[1].ForeColor = Color.FromArgb(0x00CED1); // Cyan for script_*
+ textArea.Indicators[1].Under = false; // Draw over the lexer's styling
+
+ // Set the lexer and keywords
+ textArea.Lexer = Lexer.Asm;
+ textArea.SetKeywords(0, cmdKeyWords); // CPU Instructions index
+ textArea.SetKeywords(3, secondaryKeyWords); // Directives index
+
+ // Apply the highlighting
+ textArea.TextChanged += (sender, e) => HighlightPrefixedWords(textArea);
+
+ // Initial highlighting
+ HighlightPrefixedWords(textArea);
+ }
+
+ private void HighlightPrefixedWords(Scintilla textArea) {
+ // Clear existing indicators
+ textArea.IndicatorCurrent = 0;
+ textArea.IndicatorClearRange(0, textArea.TextLength);
+ textArea.IndicatorCurrent = 1;
+ textArea.IndicatorClearRange(0, textArea.TextLength);
+
+ // Process each line individually
+ for (int i = 0; i < textArea.Lines.Count; i++) {
+ string lineText = textArea.Lines[i].Text;
+ int linePos = textArea.Lines[i].Position;
+
+ // Trim for detection but use original text for positions
+ string trimmedLine = lineText.Trim();
+
+ // Handle script_ lines
+ if (trimmedLine.Contains("script_") && trimmedLine.EndsWith(":")) {
+ int startPos = linePos + lineText.IndexOf("script_");
+ int endPos = linePos + lineText.IndexOf(":", lineText.IndexOf("script_")) + 1;
+
+ textArea.IndicatorCurrent = 1;
+ textArea.IndicatorFillRange(startPos, endPos - startPos);
+ }
+
+ // Handle label_ lines
+ if (trimmedLine.Contains("label_") && trimmedLine.EndsWith(":")) {
+ int startPos = linePos + lineText.IndexOf("label_");
+ int endPos = linePos + lineText.IndexOf(":", lineText.IndexOf("label_")) + 1;
+
+ textArea.IndicatorCurrent = 0;
+ textArea.IndicatorFillRange(startPos, endPos - startPos);
+ }
+ }
}
private void InitNumberMargin(Scintilla textArea, EventHandler textArea_MarginClick) {
@@ -372,10 +390,8 @@ namespace DSPRE.Editors {
private void ScriptEditorSetClean() {
Helpers.DisableHandlers();
- scriptsTabPage.Text = ScriptFile.ContainerTypes.Script.ToString() + "s";
- functionsTabPage.Text = ScriptFile.ContainerTypes.Function.ToString() + "s";
- actionsTabPage.Text = ScriptFile.ContainerTypes.Action.ToString() + "s";
- scriptsDirty = functionsDirty = actionsDirty = false;
+ //scriptsTabPage.Text = ScriptFile.ContainerTypes.Script.ToString() + "s";
+ scriptsDirty = false;
Helpers.EnableHandlers();
}
@@ -383,33 +399,13 @@ namespace DSPRE.Editors {
private void OnTextChangedScript(object sender, EventArgs e) {
ScriptTextArea.Margins[NUMBER_MARGIN].Width = ScriptTextArea.Lines.Count.ToString().Length * 13;
scriptsDirty = true;
- scriptsTabPage.Text = ScriptFile.ContainerTypes.Script.ToString() + "s" + "*";
- }
-
- private void OnTextChangedFunction(object sender, EventArgs e) {
- FunctionTextArea.Margins[NUMBER_MARGIN].Width = FunctionTextArea.Lines.Count.ToString().Length * 13;
- functionsDirty = true;
- functionsTabPage.Text = ScriptFile.ContainerTypes.Function.ToString() + "s" + "*";
- }
-
- private void OnTextChangedAction(object sender, EventArgs e) {
- ActionTextArea.Margins[NUMBER_MARGIN].Width = ActionTextArea.Lines.Count.ToString().Length * 13;
- actionsDirty = true;
- actionsTabPage.Text = ScriptFile.ContainerTypes.Action.ToString() + "s" + "*";
+ //scriptsTabPage.Text = ScriptFile.ContainerTypes.Script.ToString() + "s" + "*";
}
private void ScriptTextArea_MarginClick(object sender, MarginClickEventArgs e) {
MarginClick(ScriptTextArea, e);
}
- private void FunctionTextArea_MarginClick(object sender, MarginClickEventArgs e) {
- MarginClick(FunctionTextArea, e);
- }
-
- private void ActionTextArea_MarginClick(object sender, MarginClickEventArgs e) {
- MarginClick(ActionTextArea, e);
- }
-
private void MarginClick(Scintilla textArea, MarginClickEventArgs e) {
if (e.Margin == BOOKMARK_MARGIN) {
// Do we have a marker for this line?
@@ -480,12 +476,12 @@ namespace DSPRE.Editors {
return false;
}
+ // Keep all the code that handles unsaved changes
if (scriptsDirty || functionsDirty || actionsDirty) {
DialogResult d = MessageBox.Show("There are unsaved changes in this Script File.\nDo you wish to discard them?", "Unsaved work", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
if (!d.Equals(DialogResult.Yes)) {
Helpers.DisableHandlers();
- // selectScriptFileComboBox.SelectedItem = currentScriptFile;
selectScriptFileComboBox.SelectedIndex = (int)currentScriptFile.fileID;
Helpers.EnableHandlers();
return false;
@@ -495,18 +491,13 @@ namespace DSPRE.Editors {
Helpers.DisableHandlers();
ScriptFile lastScriptFile = currentScriptFile;
- // currentScriptFile = (ScriptFile)selectScriptFileComboBox.SelectedItem;
- currentScriptFile = new ScriptFile(selectScriptFileComboBox.SelectedIndex); // Load script file
+ // Load the script file using our new label-based constructor
+ currentScriptFile = new ScriptFile(selectScriptFileComboBox.SelectedIndex);
+ // Clear only the script text area and nav listbox
ScriptTextArea.ClearAll();
- FunctionTextArea.ClearAll();
- ActionTextArea.ClearAll();
-
scriptsNavListbox.Items.Clear();
- functionsNavListbox.Items.Clear();
- actionsNavListbox.Items.Clear();
- //prevent buttons from flickering when the combobox selection changes
bool typeChanged = true;
if (lastScriptFile != null) {
typeChanged = lastScriptFile.isLevelScript != currentScriptFile.isLevelScript;
@@ -545,9 +536,7 @@ namespace DSPRE.Editors {
}
if (!currentScriptFile.isLevelScript) {
- displayScriptFile(ScriptFile.ContainerTypes.Script, currentScriptFile.allScripts, scriptsNavListbox, ScriptTextArea);
- displayScriptFile(ScriptFile.ContainerTypes.Function, currentScriptFile.allFunctions, functionsNavListbox, FunctionTextArea);
- displayScriptFileActions(ScriptFile.ContainerTypes.Action, currentScriptFile.allActions, actionsNavListbox, ActionTextArea);
+ displayScriptFile(scriptsNavListbox, ScriptTextArea);
}
ScriptEditorSetClean();
@@ -558,84 +547,35 @@ namespace DSPRE.Editors {
return true;
}
- static void displayScriptFile(ScriptFile.ContainerTypes containerType, List commandList, ListBox navListBox, Scintilla textArea) {
- string buffer = "";
- /* Add commands */
- for (int i = 0; i < commandList.Count; i++) {
- ScriptCommandContainer scriptCommandContainer = commandList[i];
-
- /* Write header */
- string header = containerType + " " + (i + 1);
- buffer += header + ':' + Environment.NewLine;
- navListBox.Items.Add(header);
-
- /* If current command is identical to another, print UseScript instead of commands */
- if (scriptCommandContainer.usedScriptID < 0) {
- for (int j = 0; j < scriptCommandContainer.commands.Count; j++) {
- ScriptCommand command = scriptCommandContainer.commands[j];
- if (!ScriptDatabase.endCodes.Contains(command.id)) {
- buffer += '\t';
- }
-
- buffer += command.name + Environment.NewLine;
- }
- } else {
- buffer += '\t' + "UseScript_#" + scriptCommandContainer.usedScriptID + Environment.NewLine;
- }
-
- textArea.AppendText(buffer + Environment.NewLine);
- buffer = "";
+ private void displayScriptFile(ListBox navListBox, Scintilla textArea) {
+ if (currentScriptFile.CommandSequence == null || currentScriptFile.CommandSequence.Count == 0) {
+ return;
}
- }
- static void displayScriptFileActions(ScriptFile.ContainerTypes containerType, List commandList, ListBox navListBox, Scintilla textArea) {
- /* Add movements */
- string buffer = "";
- for (int i = 0; i < commandList.Count; i++) {
- ScriptActionContainer currentCommand = commandList[i];
-
- string header = containerType + " " + (i + 1);
- buffer += header + ':' + Environment.NewLine;
- navListBox.Items.Add(header);
-
- for (int j = 0; j < currentCommand.commands.Count; j++) {
- ScriptAction command = currentCommand.commands[j];
- if (!ScriptDatabase.movementEndCodes.Contains(command.id)) {
- buffer += '\t';
- }
-
- buffer += command.name + Environment.NewLine;
+ // First add all labels to the nav listbox
+ HashSet addedLabels = new HashSet();
+ foreach (var cmdPos in currentScriptFile.CommandSequence) {
+ if (!string.IsNullOrEmpty(cmdPos.Label) && !addedLabels.Contains(cmdPos.Label)) {
+ navListBox.Items.Add(cmdPos.Label);
+ addedLabels.Add(cmdPos.Label);
}
-
- textArea.AppendText(buffer + Environment.NewLine);
- buffer = "";
}
+
+ // Generate the script text
+ string scriptText = currentScriptFile.ToText();
+ textArea.Text = scriptText;
}
private void scriptEditorZoomInButton_Click(object sender, EventArgs e) {
- ZoomIn(currentScintillaEditor);
+ ZoomIn(ScriptTextArea);
}
private void scriptEditorZoomOutButton_Click(object sender, EventArgs e) {
- ZoomOut(currentScintillaEditor);
+ ZoomOut(ScriptTextArea);
}
private void scriptEditorZoomResetButton_Click(object sender, EventArgs e) {
- ZoomDefault(currentScintillaEditor);
- }
-
- private void scriptEditorTabControl_TabIndexChanged(object sender, EventArgs e) {
- if (scriptEditorTabControl.SelectedTab == scriptsTabPage) {
- currentSearchManager = scriptSearchManager;
- currentScintillaEditor = ScriptTextArea;
- } else if (scriptEditorTabControl.SelectedTab == functionsTabPage) {
- currentSearchManager = functionSearchManager;
- currentScintillaEditor = FunctionTextArea;
- } else {
- //Actions
- currentSearchManager = actionSearchManager;
- currentScintillaEditor = ActionTextArea;
- }
+ ZoomDefault(ScriptTextArea);
}
private void removeScriptFileButton_Click(object sender, EventArgs e) {
@@ -660,18 +600,20 @@ namespace DSPRE.Editors {
/* Add new event file to event folder */
int fileID = selectScriptFileComboBox.Items.Count;
- ScriptFile scriptFile = new ScriptFile(
- scriptLines: new Scintilla { Text = "Script 1:\nEnd" }.Lines.ToStringsList(trim: true),
- functionLines: null,
- actionLines: null,
- fileID
- );
+ // Create a simple script with one labeled section
+ List scriptLines = new List {
+ "script_0:",
+ "\tEnd"
+ };
- //check if ScriptFile instance was created successfully
+ // Use the new constructor that just takes script lines
+ ScriptFile scriptFile = new ScriptFile(scriptLines, fileID);
+
+ // Check if ScriptFile instance was created successfully
if (scriptFile.SaveToFileDefaultDir(fileID, showSuccessMessage: false)) {
/* Update ComboBox and select new file */
- selectScriptFileComboBox.Items.Add(scriptFile);
- selectScriptFileComboBox.SelectedItem = scriptFile;
+ selectScriptFileComboBox.Items.Add($"Script File {fileID}");
+ selectScriptFileComboBox.SelectedIndex = selectScriptFileComboBox.Items.Count - 1;
}
}
@@ -679,19 +621,13 @@ namespace DSPRE.Editors {
/* Create new ScriptFile object using the values in the script editor */
int fileID = currentScriptFile.fileID;
+ // We only need the script text area now, not function or action areas
ScriptFile userEdited = new ScriptFile(
- scriptLines: ScriptTextArea.Lines.ToStringsList(trim: true),
- functionLines: FunctionTextArea.Lines.ToStringsList(trim: true),
- actionLines: ActionTextArea.Lines.ToStringsList(trim: true),
- fileID
+ ScriptTextArea.Lines.ToStringsList(trim: true),
+ fileID
);
- if (userEdited.hasNoScripts) {
- MessageBox.Show("This " + nameof(ScriptFile) + " couldn't be saved. A minimum of one script is required.", "Can't save", MessageBoxButtons.OK, MessageBoxIcon.Warning);
- return;
- }
-
- //check if ScriptFile instance was created successfully
+ // Check if ScriptFile instance was created successfully
if (userEdited.SaveToFileDefaultDir(fileID)) {
currentScriptFile = userEdited;
ScriptEditorSetClean();
@@ -779,98 +715,54 @@ namespace DSPRE.Editors {
scriptSearchManager.CloseSearch();
}
- private void BtnNextFindFunc_Click(object sender, EventArgs e) {
- findNext(functionSearchManager);
- }
-
- private void BtnPrevFindFunc_Click(object sender, EventArgs e) {
- findNext(functionSearchManager);
- }
-
- private void panelFindFunctionTextBox_TextChanged(object sender, EventArgs e) {
- findNext(functionSearchManager);
- }
-
- private void functionTxtFind_KeyDown(object sender, KeyEventArgs e) {
- TxtFindKeyDown(functionSearchManager, e);
- }
-
- private void BtnCloseFindFunc_Click(object sender, EventArgs e) {
- functionSearchManager.CloseSearch();
- }
-
- private void BtnNextFindActions_Click(object sender, EventArgs e) {
- findNext(actionSearchManager);
- }
-
- private void BtnPrevFindActions_Click(object sender, EventArgs e) {
- findNext(actionSearchManager);
- }
-
- private void panelFindActionTextBox_TextChanged(object sender, EventArgs e) {
- findNext(actionSearchManager);
- }
-
- private void actionTxtFind_KeyDown(object sender, KeyEventArgs e) {
- TxtFindKeyDown(actionSearchManager, e);
- }
-
- private void BtnCloseFindActions_Click(object sender, EventArgs e) {
- actionSearchManager.CloseSearch();
- }
void scrollResultToTop(SearchManager searchManager) {
int resultStart = searchManager.textAreaScintilla.CurrentLine - ScriptEditorSearchResult.ResultsPadding;
searchManager.textAreaScintilla.FirstVisibleLine = resultStart;
}
- private void NavigatorGoTo(ListBox listBox, TabPage tabPage, SearchManager searchManager, ScriptFile.ContainerTypes containerType) {
+ private void NavigatorGoTo(ListBox listBox, ScriptFile.ContainerTypes containerType) {
if (listBox.SelectedIndex < 0) {
return;
}
- scriptEditorTabControl.SelectedTab = tabPage;
int commandNumber = listBox.SelectedIndex + 1;
string CommandBlockOpen = $"{containerType} {commandNumber}:";
- searchManager.Find(true, false, CommandBlockOpen);
+ scriptSearchManager.Find(true, false, CommandBlockOpen);
- scrollResultToTop(searchManager);
+ scrollResultToTop(scriptSearchManager);
}
private void scriptsNavListbox_SelectedIndexChanged(object sender, EventArgs e) {
- NavigatorGoTo((ListBox)sender, scriptsTabPage, scriptSearchManager, ScriptFile.ContainerTypes.Script);
+ NavigatorGoTo((ListBox)sender, ScriptFile.ContainerTypes.Script);
}
private void functionsNavListbox_SelectedIndexChanged(object sender, EventArgs e) {
- NavigatorGoTo((ListBox)sender, functionsTabPage, functionSearchManager, ScriptFile.ContainerTypes.Function);
+ //NavigatorGoTo((ListBox)sender, functionsTabPage, functionSearchManager, ScriptFile.ContainerTypes.Function);
}
private void actionsNavListbox_SelectedIndexChanged(object sender, EventArgs e) {
- NavigatorGoTo((ListBox)sender, actionsTabPage, actionSearchManager, ScriptFile.ContainerTypes.Action);
+ //NavigatorGoTo((ListBox)sender, actionsTabPage, actionSearchManager, ScriptFile.ContainerTypes.Action);
}
private void openFindScriptEditorButton_Click(object sender, EventArgs e) {
- currentSearchManager.OpenSearch();
+ scriptSearchManager.OpenSearch();
}
private void ScriptEditorExpandButton_Click(object sender, EventArgs e) {
- currentScintillaEditor.FoldAll(FoldAction.Expand);
+ ScriptTextArea.FoldAll(FoldAction.Expand);
}
private void ScriptEditorCollapseButton_Click(object sender, EventArgs e) {
- currentScintillaEditor.FoldAll(FoldAction.Contract);
+ ScriptTextArea.FoldAll(FoldAction.Contract);
}
private void scriptEditorWordWrapCheckbox_CheckedChanged(object sender, EventArgs e) {
ScriptTextArea.WrapMode = scriptEditorWordWrapCheckbox.Checked ? WrapMode.Word : WrapMode.None;
- FunctionTextArea.WrapMode = scriptEditorWordWrapCheckbox.Checked ? WrapMode.Word : WrapMode.None;
- ActionTextArea.WrapMode = scriptEditorWordWrapCheckbox.Checked ? WrapMode.Word : WrapMode.None;
}
private void viewWhiteSpacesButton_Click(object sender, EventArgs e) {
ScriptTextArea.ViewWhitespace = scriptEditorWhitespacesCheckbox.Checked ? WhitespaceMode.VisibleAlways : WhitespaceMode.Invisible;
- FunctionTextArea.ViewWhitespace = scriptEditorWhitespacesCheckbox.Checked ? WhitespaceMode.VisibleAlways : WhitespaceMode.Invisible;
- ActionTextArea.ViewWhitespace = scriptEditorWhitespacesCheckbox.Checked ? WhitespaceMode.VisibleAlways : WhitespaceMode.Invisible;
}
private void searchInScriptsTextBox_KeyDown(object sender, KeyEventArgs e) {
@@ -925,17 +817,20 @@ namespace DSPRE.Editors {
List scriptsToSearch = getScriptsToSearch();
string searchString = searchInScriptsTextBox.Text;
- Func searchCriteriaCS = (string s) => s.IndexOf(searchString, StringComparison.InvariantCulture) >= 0;
- Func searchCriteriaCI = (string s) => s.IndexOf(searchString, StringComparison.InvariantCultureIgnoreCase) >= 0;
- Func searchCriteria = scriptSearchCaseSensitiveCheckBox.Checked ? searchCriteriaCS : searchCriteriaCI;
+ bool searchCriteriaCS(string s) => s.IndexOf(searchString, StringComparison.InvariantCulture) >= 0;
+ bool searchCriteriaCI(string s) => s.IndexOf(searchString, StringComparison.InvariantCultureIgnoreCase) >= 0;
+
+ Func searchCriteria;
+ if (scriptSearchCaseSensitiveCheckBox.Checked) {
+ searchCriteria = searchCriteriaCS;
+ } else {
+ searchCriteria = searchCriteriaCI;
+ }
List results = new List();
foreach (ScriptFile scriptFile in scriptsToSearch) {
- List scriptResults = SearchInScripts(scriptFile, scriptFile.allScripts, searchCriteria);
- List functionResults = SearchInScripts(scriptFile, scriptFile.allFunctions, searchCriteria);
- // List actionResults = SearchInScripts(scriptFile, scriptFile.allActions, searchCriteria);
+ List scriptResults = SearchInScripts(scriptFile, searchCriteria);
results.AddRange(scriptResults);
- results.AddRange(functionResults);
// results.AddRange(actionResults);
}
@@ -948,21 +843,9 @@ namespace DSPRE.Editors {
bw.RunWorkerAsync();
}
- private List SearchInScripts(ScriptFile scriptFile, List commandContainers, Func criteria) {
+ private List SearchInScripts(ScriptFile scriptFile, Func criteria) {
List results = new List();
- for (int j = 0; j < commandContainers.Count; j++) {
- if (commandContainers[j].commands is null) {
- continue;
- }
-
- ScriptCommandContainer scriptCommandContainer = commandContainers[j];
- foreach (ScriptCommand scriptCommand in scriptCommandContainer.commands) {
- if (criteria(scriptCommand.name)) {
- results.Add(new ScriptEditorSearchResult(scriptFile, scriptCommandContainer.containerType, j + 1, scriptCommand));
- }
- }
- }
return results;
}
@@ -987,19 +870,11 @@ namespace DSPRE.Editors {
selectScriptFileComboBox.SelectedIndex = scriptFile.fileID;
if (containerType == ScriptFile.ContainerTypes.Script) {
- displaySearchResult(scriptsTabPage, scriptSearchManager, searchResult);
- } else if (containerType == ScriptFile.ContainerTypes.Function) {
- displaySearchResult(functionsTabPage, functionSearchManager, searchResult);
- } else if (containerType == ScriptFile.ContainerTypes.Action) {
- displaySearchResult(actionsTabPage, actionSearchManager, searchResult);
+ displaySearchResult(scriptSearchManager, searchResult);
}
}
- private void displaySearchResult(TabPage tabPage, SearchManager searchManager, ScriptEditorSearchResult searchResult) {
- if (scriptEditorTabControl.SelectedTab != tabPage) {
- scriptEditorTabControl.SelectedTab = tabPage;
- }
-
+ private void displaySearchResult(SearchManager searchManager, ScriptEditorSearchResult searchResult) {
searchManager.Find(true, false, searchResult.CommandBlockOpen);
int blockStart = searchManager.textAreaScintilla.CurrentLine - ScriptEditorSearchResult.ResultsPadding;
diff --git a/DS_Map/Main Window.Designer.cs b/DS_Map/Main Window.Designer.cs
index a6bd6a0..e812202 100644
--- a/DS_Map/Main Window.Designer.cs
+++ b/DS_Map/Main Window.Designer.cs
@@ -30,22 +30,22 @@
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainProgram));
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle1 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle2 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle3 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle4 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle5 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle6 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle7 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle8 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle9 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle10 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle11 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle12 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle13 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle14 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle15 = new System.Windows.Forms.DataGridViewCellStyle();
- System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle16 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle17 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle18 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle19 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle20 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle21 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle22 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle23 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle24 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle25 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle26 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle27 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle28 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle29 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle30 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle31 = new System.Windows.Forms.DataGridViewCellStyle();
+ System.Windows.Forms.DataGridViewCellStyle dataGridViewCellStyle32 = new System.Windows.Forms.DataGridViewCellStyle();
this.mainTabControl = new System.Windows.Forms.TabControl();
this.headerEditorTabPage = new System.Windows.Forms.TabPage();
this.removeLastHeaderBTN = new System.Windows.Forms.Button();
@@ -856,7 +856,6 @@
this.weatherMapEditor = new System.Windows.Forms.ToolStripButton();
this.versionLabel = new System.Windows.Forms.Label();
this.toolTip1 = new System.Windows.Forms.ToolTip(this.components);
- this.exportScriptDatabaseJSONToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.mainTabControl.SuspendLayout();
this.headerEditorTabPage.SuspendLayout();
this.worldmapCoordsGroupBox.SuspendLayout();
@@ -2590,7 +2589,7 @@
//
this.resetColorTableButton.Image = global::DSPRE.Properties.Resources.resetColorTable;
this.resetColorTableButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.resetColorTableButton.Location = new System.Drawing.Point(11, 446);
+ this.resetColorTableButton.Location = new System.Drawing.Point(11, 451);
this.resetColorTableButton.Name = "resetColorTableButton";
this.resetColorTableButton.Size = new System.Drawing.Size(117, 32);
this.resetColorTableButton.TabIndex = 31;
@@ -2603,7 +2602,7 @@
//
this.importColorTableButton.Image = global::DSPRE.Properties.Resources.loadColorTable;
this.importColorTableButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.importColorTableButton.Location = new System.Drawing.Point(11, 479);
+ this.importColorTableButton.Location = new System.Drawing.Point(11, 484);
this.importColorTableButton.Name = "importColorTableButton";
this.importColorTableButton.Size = new System.Drawing.Size(117, 32);
this.importColorTableButton.TabIndex = 30;
@@ -2668,7 +2667,7 @@
//
this.removeHeightsButton.Image = ((System.Drawing.Image)(resources.GetObject("removeHeightsButton.Image")));
this.removeHeightsButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.removeHeightsButton.Location = new System.Drawing.Point(11, 402);
+ this.removeHeightsButton.Location = new System.Drawing.Point(11, 403);
this.removeHeightsButton.Name = "removeHeightsButton";
this.removeHeightsButton.Size = new System.Drawing.Size(117, 35);
this.removeHeightsButton.TabIndex = 26;
@@ -2694,7 +2693,7 @@
//
this.addHeightsButton.Image = ((System.Drawing.Image)(resources.GetObject("addHeightsButton.Image")));
this.addHeightsButton.ImageAlign = System.Drawing.ContentAlignment.MiddleRight;
- this.addHeightsButton.Location = new System.Drawing.Point(11, 366);
+ this.addHeightsButton.Location = new System.Drawing.Point(11, 367);
this.addHeightsButton.Name = "addHeightsButton";
this.addHeightsButton.Size = new System.Drawing.Size(117, 35);
this.addHeightsButton.TabIndex = 24;
@@ -2771,40 +2770,40 @@
this.headersGridView.AllowUserToResizeColumns = false;
this.headersGridView.AllowUserToResizeRows = false;
this.headersGridView.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None;
- dataGridViewCellStyle1.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
- dataGridViewCellStyle1.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
- dataGridViewCellStyle1.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- dataGridViewCellStyle1.ForeColor = System.Drawing.SystemColors.Info;
- dataGridViewCellStyle1.SelectionBackColor = System.Drawing.SystemColors.Highlight;
- dataGridViewCellStyle1.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
- dataGridViewCellStyle1.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
- this.headersGridView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle1;
+ dataGridViewCellStyle17.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
+ dataGridViewCellStyle17.BackColor = System.Drawing.Color.FromArgb(((int)(((byte)(64)))), ((int)(((byte)(64)))), ((int)(((byte)(64)))));
+ dataGridViewCellStyle17.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ dataGridViewCellStyle17.ForeColor = System.Drawing.SystemColors.Info;
+ dataGridViewCellStyle17.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+ dataGridViewCellStyle17.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
+ dataGridViewCellStyle17.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+ this.headersGridView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle17;
this.headersGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
- dataGridViewCellStyle2.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
- dataGridViewCellStyle2.BackColor = System.Drawing.SystemColors.Window;
- dataGridViewCellStyle2.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- dataGridViewCellStyle2.ForeColor = System.Drawing.SystemColors.ControlText;
- dataGridViewCellStyle2.Format = "D4";
- dataGridViewCellStyle2.SelectionBackColor = System.Drawing.SystemColors.Highlight;
- dataGridViewCellStyle2.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
- dataGridViewCellStyle2.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
- this.headersGridView.DefaultCellStyle = dataGridViewCellStyle2;
+ dataGridViewCellStyle18.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
+ dataGridViewCellStyle18.BackColor = System.Drawing.SystemColors.Window;
+ dataGridViewCellStyle18.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ dataGridViewCellStyle18.ForeColor = System.Drawing.SystemColors.ControlText;
+ dataGridViewCellStyle18.Format = "D4";
+ dataGridViewCellStyle18.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+ dataGridViewCellStyle18.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
+ dataGridViewCellStyle18.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
+ this.headersGridView.DefaultCellStyle = dataGridViewCellStyle18;
this.headersGridView.Location = new System.Drawing.Point(0, 0);
this.headersGridView.MultiSelect = false;
this.headersGridView.Name = "headersGridView";
- dataGridViewCellStyle3.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
- dataGridViewCellStyle3.BackColor = System.Drawing.SystemColors.Control;
- dataGridViewCellStyle3.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F);
- dataGridViewCellStyle3.ForeColor = System.Drawing.SystemColors.WindowText;
- dataGridViewCellStyle3.SelectionBackColor = System.Drawing.SystemColors.Highlight;
- dataGridViewCellStyle3.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
- dataGridViewCellStyle3.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
- this.headersGridView.RowHeadersDefaultCellStyle = dataGridViewCellStyle3;
+ dataGridViewCellStyle19.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
+ dataGridViewCellStyle19.BackColor = System.Drawing.SystemColors.Control;
+ dataGridViewCellStyle19.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F);
+ dataGridViewCellStyle19.ForeColor = System.Drawing.SystemColors.WindowText;
+ dataGridViewCellStyle19.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+ dataGridViewCellStyle19.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
+ dataGridViewCellStyle19.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+ this.headersGridView.RowHeadersDefaultCellStyle = dataGridViewCellStyle19;
this.headersGridView.RowHeadersWidth = 50;
this.headersGridView.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing;
- dataGridViewCellStyle4.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
- dataGridViewCellStyle4.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.headersGridView.RowsDefaultCellStyle = dataGridViewCellStyle4;
+ dataGridViewCellStyle20.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
+ dataGridViewCellStyle20.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.headersGridView.RowsDefaultCellStyle = dataGridViewCellStyle20;
this.headersGridView.RowTemplate.DefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
this.headersGridView.RowTemplate.Height = 18;
this.headersGridView.RowTemplate.Resizable = System.Windows.Forms.DataGridViewTriState.False;
@@ -2833,43 +2832,43 @@
this.heightsGridView.AllowUserToDeleteRows = false;
this.heightsGridView.AllowUserToResizeColumns = false;
this.heightsGridView.AllowUserToResizeRows = false;
- dataGridViewCellStyle5.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
- this.heightsGridView.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle5;
+ dataGridViewCellStyle21.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
+ this.heightsGridView.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle21;
this.heightsGridView.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None;
- dataGridViewCellStyle6.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
- dataGridViewCellStyle6.BackColor = System.Drawing.SystemColors.Control;
- dataGridViewCellStyle6.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F);
- dataGridViewCellStyle6.ForeColor = System.Drawing.SystemColors.WindowText;
- dataGridViewCellStyle6.SelectionBackColor = System.Drawing.SystemColors.Highlight;
- dataGridViewCellStyle6.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
- dataGridViewCellStyle6.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
- this.heightsGridView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle6;
+ dataGridViewCellStyle22.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
+ dataGridViewCellStyle22.BackColor = System.Drawing.SystemColors.Control;
+ dataGridViewCellStyle22.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F);
+ dataGridViewCellStyle22.ForeColor = System.Drawing.SystemColors.WindowText;
+ dataGridViewCellStyle22.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+ dataGridViewCellStyle22.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
+ dataGridViewCellStyle22.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+ this.heightsGridView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle22;
this.heightsGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
- dataGridViewCellStyle7.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
- dataGridViewCellStyle7.BackColor = System.Drawing.SystemColors.Window;
- dataGridViewCellStyle7.Font = new System.Drawing.Font("Tahoma", 8.25F);
- dataGridViewCellStyle7.ForeColor = System.Drawing.SystemColors.ControlText;
- dataGridViewCellStyle7.Format = "D2";
- dataGridViewCellStyle7.SelectionBackColor = System.Drawing.SystemColors.Highlight;
- dataGridViewCellStyle7.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
- dataGridViewCellStyle7.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
- this.heightsGridView.DefaultCellStyle = dataGridViewCellStyle7;
+ dataGridViewCellStyle23.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
+ dataGridViewCellStyle23.BackColor = System.Drawing.SystemColors.Window;
+ dataGridViewCellStyle23.Font = new System.Drawing.Font("Tahoma", 8.25F);
+ dataGridViewCellStyle23.ForeColor = System.Drawing.SystemColors.ControlText;
+ dataGridViewCellStyle23.Format = "D2";
+ dataGridViewCellStyle23.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+ dataGridViewCellStyle23.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
+ dataGridViewCellStyle23.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
+ this.heightsGridView.DefaultCellStyle = dataGridViewCellStyle23;
this.heightsGridView.Location = new System.Drawing.Point(0, 0);
this.heightsGridView.MultiSelect = false;
this.heightsGridView.Name = "heightsGridView";
- dataGridViewCellStyle8.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
- dataGridViewCellStyle8.BackColor = System.Drawing.SystemColors.Control;
- dataGridViewCellStyle8.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F);
- dataGridViewCellStyle8.ForeColor = System.Drawing.SystemColors.WindowText;
- dataGridViewCellStyle8.SelectionBackColor = System.Drawing.SystemColors.Highlight;
- dataGridViewCellStyle8.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
- dataGridViewCellStyle8.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
- this.heightsGridView.RowHeadersDefaultCellStyle = dataGridViewCellStyle8;
+ dataGridViewCellStyle24.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
+ dataGridViewCellStyle24.BackColor = System.Drawing.SystemColors.Control;
+ dataGridViewCellStyle24.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F);
+ dataGridViewCellStyle24.ForeColor = System.Drawing.SystemColors.WindowText;
+ dataGridViewCellStyle24.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+ dataGridViewCellStyle24.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
+ dataGridViewCellStyle24.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+ this.heightsGridView.RowHeadersDefaultCellStyle = dataGridViewCellStyle24;
this.heightsGridView.RowHeadersWidth = 50;
this.heightsGridView.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing;
- dataGridViewCellStyle9.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
- dataGridViewCellStyle9.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.heightsGridView.RowsDefaultCellStyle = dataGridViewCellStyle9;
+ dataGridViewCellStyle25.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
+ dataGridViewCellStyle25.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.heightsGridView.RowsDefaultCellStyle = dataGridViewCellStyle25;
this.heightsGridView.RowTemplate.DefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
this.heightsGridView.RowTemplate.Height = 18;
this.heightsGridView.RowTemplate.Resizable = System.Windows.Forms.DataGridViewTriState.False;
@@ -2896,43 +2895,43 @@
this.mapFilesGridView.AllowUserToDeleteRows = false;
this.mapFilesGridView.AllowUserToResizeColumns = false;
this.mapFilesGridView.AllowUserToResizeRows = false;
- dataGridViewCellStyle10.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
- this.mapFilesGridView.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle10;
+ dataGridViewCellStyle26.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
+ this.mapFilesGridView.AlternatingRowsDefaultCellStyle = dataGridViewCellStyle26;
this.mapFilesGridView.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.None;
- dataGridViewCellStyle11.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
- dataGridViewCellStyle11.BackColor = System.Drawing.SystemColors.Control;
- dataGridViewCellStyle11.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F);
- dataGridViewCellStyle11.ForeColor = System.Drawing.SystemColors.WindowText;
- dataGridViewCellStyle11.SelectionBackColor = System.Drawing.SystemColors.Highlight;
- dataGridViewCellStyle11.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
- dataGridViewCellStyle11.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
- this.mapFilesGridView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle11;
+ dataGridViewCellStyle27.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
+ dataGridViewCellStyle27.BackColor = System.Drawing.SystemColors.Control;
+ dataGridViewCellStyle27.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F);
+ dataGridViewCellStyle27.ForeColor = System.Drawing.SystemColors.WindowText;
+ dataGridViewCellStyle27.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+ dataGridViewCellStyle27.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
+ dataGridViewCellStyle27.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+ this.mapFilesGridView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle27;
this.mapFilesGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
- dataGridViewCellStyle12.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
- dataGridViewCellStyle12.BackColor = System.Drawing.SystemColors.Window;
- dataGridViewCellStyle12.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- dataGridViewCellStyle12.ForeColor = System.Drawing.SystemColors.ControlText;
- dataGridViewCellStyle12.Format = "D4";
- dataGridViewCellStyle12.SelectionBackColor = System.Drawing.SystemColors.Highlight;
- dataGridViewCellStyle12.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
- dataGridViewCellStyle12.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
- this.mapFilesGridView.DefaultCellStyle = dataGridViewCellStyle12;
+ dataGridViewCellStyle28.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
+ dataGridViewCellStyle28.BackColor = System.Drawing.SystemColors.Window;
+ dataGridViewCellStyle28.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ dataGridViewCellStyle28.ForeColor = System.Drawing.SystemColors.ControlText;
+ dataGridViewCellStyle28.Format = "D4";
+ dataGridViewCellStyle28.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+ dataGridViewCellStyle28.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
+ dataGridViewCellStyle28.WrapMode = System.Windows.Forms.DataGridViewTriState.False;
+ this.mapFilesGridView.DefaultCellStyle = dataGridViewCellStyle28;
this.mapFilesGridView.Location = new System.Drawing.Point(0, 0);
this.mapFilesGridView.MultiSelect = false;
this.mapFilesGridView.Name = "mapFilesGridView";
- dataGridViewCellStyle13.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
- dataGridViewCellStyle13.BackColor = System.Drawing.SystemColors.Control;
- dataGridViewCellStyle13.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F);
- dataGridViewCellStyle13.ForeColor = System.Drawing.SystemColors.WindowText;
- dataGridViewCellStyle13.SelectionBackColor = System.Drawing.SystemColors.Highlight;
- dataGridViewCellStyle13.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
- dataGridViewCellStyle13.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
- this.mapFilesGridView.RowHeadersDefaultCellStyle = dataGridViewCellStyle13;
+ dataGridViewCellStyle29.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
+ dataGridViewCellStyle29.BackColor = System.Drawing.SystemColors.Control;
+ dataGridViewCellStyle29.Font = new System.Drawing.Font("Microsoft Sans Serif", 7F);
+ dataGridViewCellStyle29.ForeColor = System.Drawing.SystemColors.WindowText;
+ dataGridViewCellStyle29.SelectionBackColor = System.Drawing.SystemColors.Highlight;
+ dataGridViewCellStyle29.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
+ dataGridViewCellStyle29.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+ this.mapFilesGridView.RowHeadersDefaultCellStyle = dataGridViewCellStyle29;
this.mapFilesGridView.RowHeadersWidth = 50;
this.mapFilesGridView.RowHeadersWidthSizeMode = System.Windows.Forms.DataGridViewRowHeadersWidthSizeMode.DisableResizing;
- dataGridViewCellStyle14.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
- dataGridViewCellStyle14.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.mapFilesGridView.RowsDefaultCellStyle = dataGridViewCellStyle14;
+ dataGridViewCellStyle30.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
+ dataGridViewCellStyle30.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.mapFilesGridView.RowsDefaultCellStyle = dataGridViewCellStyle30;
this.mapFilesGridView.RowTemplate.DefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
this.mapFilesGridView.RowTemplate.Height = 18;
this.mapFilesGridView.RowTemplate.Resizable = System.Windows.Forms.DataGridViewTriState.False;
@@ -7397,8 +7396,8 @@
this.textEditorDataGridView.Location = new System.Drawing.Point(12, 77);
this.textEditorDataGridView.Name = "textEditorDataGridView";
this.textEditorDataGridView.RowHeadersWidth = 68;
- dataGridViewCellStyle15.Font = new System.Drawing.Font("Consolas", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- this.textEditorDataGridView.RowsDefaultCellStyle = dataGridViewCellStyle15;
+ dataGridViewCellStyle31.Font = new System.Drawing.Font("Consolas", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ this.textEditorDataGridView.RowsDefaultCellStyle = dataGridViewCellStyle31;
this.textEditorDataGridView.Size = new System.Drawing.Size(873, 500);
this.textEditorDataGridView.TabIndex = 24;
this.textEditorDataGridView.CellValueChanged += new System.Windows.Forms.DataGridViewCellEventHandler(this.textEditorDataGridView_CellValueChanged);
@@ -7502,9 +7501,9 @@
this.cameraEditorDataGridView.CausesValidation = false;
this.cameraEditorDataGridView.CellBorderStyle = System.Windows.Forms.DataGridViewCellBorderStyle.Raised;
this.cameraEditorDataGridView.ColumnHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single;
- dataGridViewCellStyle16.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
- dataGridViewCellStyle16.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
- this.cameraEditorDataGridView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle16;
+ dataGridViewCellStyle32.Font = new System.Drawing.Font("Microsoft Sans Serif", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
+ dataGridViewCellStyle32.WrapMode = System.Windows.Forms.DataGridViewTriState.True;
+ this.cameraEditorDataGridView.ColumnHeadersDefaultCellStyle = dataGridViewCellStyle32;
this.cameraEditorDataGridView.ColumnHeadersHeightSizeMode = System.Windows.Forms.DataGridViewColumnHeadersHeightSizeMode.AutoSize;
this.cameraEditorDataGridView.Columns.AddRange(new System.Windows.Forms.DataGridViewColumn[] {
this.DistanceGVCol,
@@ -10270,7 +10269,7 @@
this.nSBMDUtilityToolStripMenuItem,
this.exportScriptDatabaseJSONToolStripMenuItem});
this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
- this.aboutToolStripMenuItem.Size = new System.Drawing.Size(46, 20);
+ this.aboutToolStripMenuItem.Size = new System.Drawing.Size(47, 20);
this.aboutToolStripMenuItem.Text = "Tools";
//
// romToolboxToolStripMenuItem
@@ -10430,7 +10429,7 @@
this.texturizeNSBMDToolStripMenuItem.Image = global::DSPRE.Properties.Resources.addTextureToNSBMD;
this.texturizeNSBMDToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
this.texturizeNSBMDToolStripMenuItem.Name = "texturizeNSBMDToolStripMenuItem";
- this.texturizeNSBMDToolStripMenuItem.Size = new System.Drawing.Size(251, 38);
+ this.texturizeNSBMDToolStripMenuItem.Size = new System.Drawing.Size(250, 38);
this.texturizeNSBMDToolStripMenuItem.Text = "Add/Replace NSBMD textures";
this.texturizeNSBMDToolStripMenuItem.Click += new System.EventHandler(this.nsbmdAddTexButton_Click);
//
@@ -10439,7 +10438,7 @@
this.untexturizeToolStripMenuItem.Image = global::DSPRE.Properties.Resources.removeTextureNSBMD;
this.untexturizeToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
this.untexturizeToolStripMenuItem.Name = "untexturizeToolStripMenuItem";
- this.untexturizeToolStripMenuItem.Size = new System.Drawing.Size(251, 38);
+ this.untexturizeToolStripMenuItem.Size = new System.Drawing.Size(250, 38);
this.untexturizeToolStripMenuItem.Text = "Remove textures from NSBMD";
this.untexturizeToolStripMenuItem.Click += new System.EventHandler(this.nsbmdRemoveTexButton_Click);
//
@@ -10448,7 +10447,7 @@
this.extractNSBTXFromNSBMDToolStripMenuItem.Image = global::DSPRE.Properties.Resources.saveTextureFromNSBMD;
this.extractNSBTXFromNSBMDToolStripMenuItem.ImageScaling = System.Windows.Forms.ToolStripItemImageScaling.None;
this.extractNSBTXFromNSBMDToolStripMenuItem.Name = "extractNSBTXFromNSBMDToolStripMenuItem";
- this.extractNSBTXFromNSBMDToolStripMenuItem.Size = new System.Drawing.Size(251, 38);
+ this.extractNSBTXFromNSBMDToolStripMenuItem.Size = new System.Drawing.Size(250, 38);
this.extractNSBTXFromNSBMDToolStripMenuItem.Text = "Save textures from NSBMD";
this.extractNSBTXFromNSBMDToolStripMenuItem.Click += new System.EventHandler(this.nsbmdExportTexButton_Click);
//
@@ -10920,13 +10919,6 @@
this.versionLabel.Text = "ROM:";
this.versionLabel.Visible = false;
//
- // exportScriptDatabaseJSONToolStripMenuItem
- //
- this.exportScriptDatabaseJSONToolStripMenuItem.Name = "exportScriptDatabaseJSONToolStripMenuItem";
- this.exportScriptDatabaseJSONToolStripMenuItem.Size = new System.Drawing.Size(220, 22);
- this.exportScriptDatabaseJSONToolStripMenuItem.Text = "Export ScriptDatabase JSON";
- this.exportScriptDatabaseJSONToolStripMenuItem.Click += new System.EventHandler(this.exportScriptDatabaseJSONToolStripMenuItem_Click);
- //
// MainProgram
//
this.AllowDrop = true;
diff --git a/DS_Map/Main Window.cs b/DS_Map/Main Window.cs
index e824e85..388671b 100644
--- a/DS_Map/Main Window.cs
+++ b/DS_Map/Main Window.cs
@@ -1028,19 +1028,6 @@ namespace DSPRE {
return;
}
- // Creating a dictionary linking events to headers to fetch header data for Event Editor
- if (PatchToolboxDialog.flag_DynamicHeadersPatchApplied || PatchToolboxDialog.CheckFilesDynamicHeadersPatchApplied()) {
- for (ushort i = 0; i < internalNames.Count; i++) {
- MapHeader h = MapHeader.LoadFromFile(RomInfo.gameDirs[DirNames.dynamicHeaders].unpackedDir + "\\" + i.ToString("D4"), i, 0);
- eventToHeader[h.eventFileID] = i;
- }
- } else {
- for (ushort i = 0; i < internalNames.Count; i++) {
- MapHeader h = MapHeader.LoadFromARM9(i);
- eventToHeader[h.eventFileID] = i;
- }
- }
-
/*Add list of options to each control */
currentTextArchive = new TextArchive(RomInfo.locationNamesTextNumber);
@@ -5507,12 +5494,12 @@ namespace DSPRE {
} else {
ScriptFile itemScript = new ScriptFile(RomInfo.itemScriptFileNumber);
owItemComboBox.Items.Clear();
- foreach (ScriptCommandContainer cont in itemScript.allScripts) {
- if (cont.commands.Count > 4) {
- continue;
- }
- owItemComboBox.Items.Add(BitConverter.ToUInt16(cont.commands[1].cmdParams[1], 0) + "x " + itemNames[BitConverter.ToUInt16(cont.commands[0].cmdParams[1], 0)]);
- }
+ //foreach (ScriptCommandContainer cont in itemScript.allScripts) {
+ // if (cont.commands.Count > 4) {
+ // continue;
+ // }
+ // owItemComboBox.Items.Add(BitConverter.ToUInt16(cont.commands[1].Parameters[1].RawData, 0) + "x " + itemNames[BitConverter.ToUInt16(cont.commands[0].Parameters[1].RawData, 0)]);
+ //}
}
/* Add ow movement list to box */
@@ -5542,6 +5529,19 @@ namespace DSPRE {
eventMatrixUpDown.Maximum = romInfo.GetMatrixCount() - 1;
eventAreaDataUpDown.Maximum = romInfo.GetAreaDataCount() - 1;
+ // Creating a dictionary linking events to headers to fetch header data for Event Editor
+ if (PatchToolboxDialog.flag_DynamicHeadersPatchApplied || PatchToolboxDialog.CheckFilesDynamicHeadersPatchApplied()) {
+ for (ushort i = 0; i < internalNames.Count; i++) {
+ MapHeader h = MapHeader.LoadFromFile(RomInfo.gameDirs[DirNames.dynamicHeaders].unpackedDir + "\\" + i.ToString("D4"), i, 0);
+ eventToHeader[h.eventFileID] = i;
+ }
+ } else {
+ for (ushort i = 0; i < internalNames.Count; i++) {
+ MapHeader h = MapHeader.LoadFromARM9(i);
+ eventToHeader[h.eventFileID] = i;
+ }
+ }
+
Helpers.EnableHandlers();
selectEventComboBox.SelectedIndex = 0;
@@ -5752,10 +5752,15 @@ namespace DSPRE {
if (Helpers.HandlersDisabled) {
return;
}
- Helpers.DisableHandlers();
+ ChangeLoadedEventFile(selectEventComboBox.SelectedIndex, 0);
+ }
+
+ private void ChangeLoadedEventFile(int evfile, ushort mapHeader) {
+ Helpers.DisableHandlers();
+
/* Load events data into EventFile class instance */
- currentEvFile = new EventFile(selectEventComboBox.SelectedIndex);
+ currentEvFile = new EventFile(evfile);
/* Update ListBoxes */
FillSpawnablesBox();
@@ -5763,7 +5768,7 @@ namespace DSPRE {
FillTriggersBox();
FillWarpsBox();
- if (eventToHeader.TryGetValue((ushort)selectEventComboBox.SelectedIndex, out ushort mapHeader)) {
+ if (mapHeader > 0 || eventToHeader.TryGetValue((ushort)selectEventComboBox.SelectedIndex, out mapHeader)) {
MapHeader h;
if (PatchToolboxDialog.flag_DynamicHeadersPatchApplied || PatchToolboxDialog.CheckFilesDynamicHeadersPatchApplied()) {
h = MapHeader.LoadFromFile(RomInfo.gameDirs[DirNames.dynamicHeaders].unpackedDir + "\\" + mapHeader.ToString("D4"), mapHeader, 0);
@@ -5788,6 +5793,7 @@ namespace DSPRE {
CenterEventViewOnEntities();
}
+
private void showEventsCheckBoxes_CheckedChanged(object sender, EventArgs e) {
if (Helpers.HandlersDisabled) {
return;
@@ -6655,20 +6661,26 @@ namespace DSPRE {
if (new EventFile(destHeader.eventFileID).warps.Count < destAnchor + 1) {
DialogResult d = MessageBox.Show("The selected warp's destination anchor doesn't exist.\n" +
"Do you want to open the destination map anyway?", "Warp is not connected", MessageBoxButtons.YesNo, MessageBoxIcon.Question);
- if (d == DialogResult.No)
- return;
- else {
+ if (d == DialogResult.Yes) {
eventMatrixUpDown.Value = destHeader.matrixID;
eventAreaDataUpDown.Value = destHeader.areaDataID;
+
+ Helpers.DisableHandlers();
selectEventComboBox.SelectedIndex = destHeader.eventFileID;
+ ChangeLoadedEventFile(destHeader.eventFileID, destHeaderID);
+
CenterEventViewOnEntities();
- return;
}
+ return;
}
eventMatrixUpDown.Value = destHeader.matrixID;
eventAreaDataUpDown.Value = destHeader.areaDataID;
+
+ Helpers.DisableHandlers();
selectEventComboBox.SelectedIndex = destHeader.eventFileID;
+ ChangeLoadedEventFile(destHeader.eventFileID, destHeaderID);
+
warpsListBox.SelectedIndex = destAnchor;
centerEventViewOnSelectedEvent_Click(sender, e);
@@ -9945,17 +9957,17 @@ namespace DSPRE {
string[] abilityNames = RomInfo.GetAbilityNames();
string[] moveNames = RomInfo.GetAttackNames();
- Helpers.statusLabelMessage("Setting up Pokemon Data Editor...");
+ Helpers.statusLabelMessage("Setting up Pokémon Data Editor...");
Update();
DSUtils.TryUnpackNarcs(new List { DirNames.personalPokeData, DirNames.learnsets, DirNames.evolutions, DirNames.monIcons });
RomInfo.SetMonIconsPalTableAddress();
PokemonEditor pde = new PokemonEditor(itemNames, abilityNames, moveNames);
- pde.ShowDialog();
-
Helpers.statusLabelMessage();
Update();
+
+ pde.ShowDialog();
}
private void overlayEditorToolStripMenuItem_Click(object sender, EventArgs e) {
diff --git a/DS_Map/Main Window.resx b/DS_Map/Main Window.resx
index 102933f..31fbb5d 100644
--- a/DS_Map/Main Window.resx
+++ b/DS_Map/Main Window.resx
@@ -118,834 +118,49 @@
System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN
- fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9
- hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC
- 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w
- 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2
- gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i
- 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU
- IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm
- Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei
- zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT
- 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg
- CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8
- SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu
- VRmTF6ps3wAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN
- fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9
- hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC
- 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w
- 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2
- gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i
- 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU
- IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm
- Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei
- zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT
- 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg
- CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8
- SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu
- VRmTF6ps3wAAAABJRU5ErkJggg==
-
-
-
- 533, 20
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN
- fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9
- hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC
- 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w
- 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2
- gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i
- 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN
- fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9
- hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC
- 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w
- 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2
- gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i
- 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU
- IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm
- Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei
- zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT
- 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg
- CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8
- SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu
- VRmTF6ps3wAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN
- fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9
- hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC
- 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w
- 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2
- gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i
- 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU
- IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm
- Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei
- zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT
- 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg
- CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8
- SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu
- VRmTF6ps3wAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN
- fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9
- hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC
- 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w
- 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2
- gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i
- 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU
- IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm
- Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei
- zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT
- 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg
- CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8
- SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu
- VRmTF6ps3wAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN
- fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9
- hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC
- 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w
- 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2
- gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i
- 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU
- IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm
- Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei
- zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT
- 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg
- CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8
- SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu
- VRmTF6ps3wAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU
- IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm
- Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei
- zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT
- 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg
- CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8
- SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu
- VRmTF6ps3wAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN
- fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9
- hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC
- 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w
- 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2
- gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i
- 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN
- fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9
- hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC
- 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w
- 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2
- gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i
- 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU
- IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm
- Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei
- zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT
- 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg
- CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8
- SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu
- VRmTF6ps3wAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN
- fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9
- hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC
- 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w
- 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2
- gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i
- 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU
- IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm
- Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei
- zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT
- 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg
- CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8
- SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu
- VRmTF6ps3wAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN
- fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9
- hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC
- 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w
- 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2
- gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i
- 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU
- IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm
- Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei
- zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT
- 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg
- CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8
- SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu
- VRmTF6ps3wAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN
- fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9
- hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC
- 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w
- 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2
- gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i
- 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU
- IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm
- Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei
- zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT
- 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg
- CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8
- SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu
- VRmTF6ps3wAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN
- fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9
- hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC
- 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w
- 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2
- gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i
- 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU
- IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm
- Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei
- zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT
- 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg
- CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8
- SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu
- VRmTF6ps3wAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN
- fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9
- hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC
- 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w
- 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2
- gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i
- 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU
- IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm
- Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei
- zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT
- 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg
- CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8
- SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu
- VRmTF6ps3wAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN
- fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9
- hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC
- 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w
- 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2
- gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i
- 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU
- IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm
- Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei
- zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT
- 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg
- CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8
- SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu
- VRmTF6ps3wAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN
- fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9
- hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC
- 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w
- 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2
- gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i
- 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU
- IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm
- Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei
- zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT
- 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg
- CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8
- SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu
- VRmTF6ps3wAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN
- fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9
- hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC
- 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w
- 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2
- gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i
- 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU
- IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm
- Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei
- zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT
- 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg
- CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8
- SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu
- VRmTF6ps3wAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAWdJREFUWEftlj1Ow0AQRi16I4gShFLRmAJX7lOlobDEDUwFEg0XCH+X4AC0nCAN
- fa7iM9AM+8UeaeKM12t77QJ5pFckOzvfy9qKHbSpMAw3dZQt7ctsbqTs28xn52Sjug8QUS08+OBL81n9
- hddXZ/T0eE8/228VrKFH2yvnS44E0Ly+OSENDNeCJejR9gLOkBwIcPjLw4p+d89HYLhNgte1vZipSagC
- 2gCAIRxSR5086C0AbBK2cIDZRWJRnQQAgjS0Xok3ga4MIvD1eusETmh5uTAxxbVHJuglgMFpmjYymy/w
- 3+BXgMOzLKM8z61EUURv7x97CSNzxxKgt4AWWAUCKE1iVAEUS5gaTyCO470Eg3tiVIEq5Yn4F0iSREX2
- gMEEXJkE/q+AdgMC2QOmSzAJNAq4vF4NchMCCLiwvDj1ewISXrRh+j4xyOWFRIJ+LwIAj1UMa4v6OO4i
- 0LZfQxVwwUcVAkHwB88gY6VhELoRAAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAZVJREFUWEftlj9qhEAUh/cCNptsWEJIEZAsmEKL9Om9UBCyaXKEvYY3sN02eIIU
- IYXY5Agv/oYZGWffjOO/hcAK36j45r3P4YmzCoJgEkTUgYtxIQYjQTYEfa5O88wLMWiTsrvtDQ1hc7Wm
- Zl4zfZyEGGSwKJ7nOdV17c3T7oHe9u+shCriQgwyOEMyJP2tjuJMX/vOPQfm4OAkVBEXYpDBrQCg71ei
- zxdx1guaKAEcYyTEIANbAby5KK6QK8HxHO+EhAI9oQtw9AoA+vnwWgGT2+2mSccXVvQK+PZAURQnIEeT
- 66Awi8tabgEfUCxN0xPiOKYwDFvW1xvrZwpGCajiZVlSVVVOIIE4m4RVIEkSK9HjvRDgCpooAZvEpBXg
- CproApzE4gJRFLX9ANATZxUwgcQiAlyvAD0GeAtwyRRDmtBksRXw5SLwf5rQxVlWgHsbxeUrWFTAZ1e8
- SBMC7Ocg4cOsK6CjP7TRxB2w8+EK9DGbABLh/84VsYH4WQQA/utINhR2PzAUTNSvp9BJPAYuqT+0+gPu
- VRmTF6ps3wAAAABJRU5ErkJggg==
-
-
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAFFJREFUOE+l0bENgEAMQ1ErG7AR69Ej9rnFMKL/BcbFa750UZST7QrGBMYExgTG
- hI7R3tCpuRu6NF7afnnf9gNorUR/RPqaBMYExgTGBMbvrAex4mNXAFOuwQAAAABJRU5ErkJggg==
+ vAAADrwBlbxySQAAAFBJREFUOE+l0bEJwDAMRNFDG3ijrJfeeJ8sFoW0vur7itd8sBCyulsJC5QFygJl
+ gdJduhKaqjehpepH48j/Nh+wr0TlR9y/hbJAWaAsUBaoD7HiY1fWoY0CAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAGJJREFUOE9j+P//P1bMMEXuHxD/Z5gm+x/ExqYGhLEKgjDYgAUK/8F41AD8BoAV
- gkIbAwNDH24AJCawYhSFpGJQFFPBACzOAmMkg/F5AVvAgDBYEm7AaEIi3wBEwsJhwH8GAOQLbolFp0OS
- AAAAAElFTkSuQmCC
+ vAAADrwBlbxySQAAAFxJREFUOE9j+P//PwM2zDBF7h/DFLn/DNNk/4PY6PJwdegCKAYsUPgPxqMG4DcA
+ HtoYWBaiGWwAJCawYhSFpGJQFFPBACzOAmMivYAeKCQHIrrAqAFoBiASFk4DAOQLbokdS+snAAAAAElF
+ TkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAFFJREFUOE+l0bENgEAMQ1ErG7AR69Ej9rnFMKL/BcbFa750UZST7QrGBMYExgTG
- hI7R3tCpuRu6NF7afnnf9gNorUR/RPqaBMYExgTGBMbvrAex4mNXAFOuwQAAAABJRU5ErkJggg==
+ vAAADrwBlbxySQAAAFBJREFUOE+l0bEJwDAMRNFDG3ijrJfeeJ8sFoW0vur7itd8sBCyulsJC5QFygJl
+ gdJduhKaqjehpepH48j/Nh+wr0TlR9y/hbJAWaAsUBaoD7HiY1fWoY0CAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAFFJREFUOE+l0bENgEAMQ1ErG7AR69Ej9rnFMKL/BcbFa750UZST7QrGBMYExgTG
- hI7R3tCpuRu6NF7afnnf9gNorUR/RPqaBMYExgTGBMbvrAex4mNXAFOuwQAAAABJRU5ErkJggg==
+ vAAADrwBlbxySQAAAFBJREFUOE+l0bEJwDAMRNFDG3ijrJfeeJ8sFoW0vur7itd8sBCyulsJC5QFygJl
+ gdJduhKaqjehpepH48j/Nh+wr0TlR9y/hbJAWaAsUBaoD7HiY1fWoY0CAAAAAElFTkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAGJJREFUOE9j+P//P1bMMEXuHxD/Z5gm+x/ExqYGhLEKgjDYgAUK/8F41AD8BoAV
- gkIbAwNDH24AJCawYhSFpGJQFFPBACzOAmMkg/F5AVvAgDBYEm7AaEIi3wBEwsJhwH8GAOQLbolFp0OS
- AAAAAElFTkSuQmCC
+ vAAADrwBlbxySQAAAFxJREFUOE9j+P//PwM2zDBF7h/DFLn/DNNk/4PY6PJwdegCKAYsUPgPxqMG4DcA
+ HtoYWBaiGWwAJCawYhSFpGJQFFPBACzOAmMivYAeKCQHIrrAqAFoBiASFk4DAOQLbokdS+snAAAAAElF
+ TkSuQmCC
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAGJJREFUOE9j+P//P1bMMEXuHxD/Z5gm+x/ExqYGhLEKgjDYgAUK/8F41AD8BoAV
- gkIbAwNDH24AJCawYhSFpGJQFFPBACzOAmMkg/F5AVvAgDBYEm7AaEIi3wBEwsJhwH8GAOQLbolFp0OS
- AAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAGJJREFUOE9j+P//P1bMMEXuHxD/Z5gm+x/ExqYGhLEKgjDYgAUK/8F41AD8BoAV
- gkIbAwNDH24AJCawYhSFpGJQFFPBACzOAmMkg/F5AVvAgDBYEm7AaEIi3wBEwsJhwH8GAOQLbolFp0OS
- AAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAI5JREFUSEtjGAXkAsOQtP8wDBWiHwBZmrbpJhhDHdACkaExgPkYZjkImydXwLFt
- YRdODDWCPIDNYmy4/OJ/rBjqANJDiVKLYZgsB1DDYhimeghgswQfJtsBUNDi0TjvPwhjM5wYTKkDYACr
- Q2Bi+DC1HAADYIcgOwAkRiSmHkD2IZBLXcNJALTx3QgCDAwAJg2KYP9PC1YAAAAASUVORK5CYII=
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAJ5JREFUSEtjGAWUgDg1q/8wDBWiLwBZfD2uC4yp7ghk3+HCC13T4A4A4RbjQDCG
- GkEZAFmAbDg+/L9gCQqmikNADrgd143VQhhGtxgdU+QQfA7AZhk+TJYjsDkAm+H4MFIItEAx8QDZAdgM
- x4dn2sWDMdAYmMWkWQ4CtSZ+cIPwYapbjAaQDcLAyA6gtsVEAZiP0SynO6Cvr4cZYGAAAAfPboEh2axl
- AAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAI5JREFUSEtjGAXkAsOQtP8wDBWiHwBZmrbpJhhDHdACkaExgPkYZjkImydXwLFt
- YRdODDWCPIDNYmy4/OJ/rBjqANJDiVKLYZgsB1DDYhimeghgswQfJtsBUNDi0TjvPwhjM5wYTKkDYACr
- Q2Bi+DC1HAADYIcgOwAkRiSmHkD2IZBLXcNJALTx3QgCDAwAJg2KYP9PC1YAAAAASUVORK5CYII=
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAJ5JREFUSEtjGAWUgDg1q/8wDBWiLwBZfD2uC4yp7ghk3+HCC13T4A4A4RbjQDCG
- GkEZAFmAbDg+/L9gCQqmikNADrgd143VQhhGtxgdU+QQfA7AZhk+TJYjsDkAm+H4MFIItEAx8QDZAdgM
- x4dn2sWDMdAYmMWkWQ4CtSZ+cIPwYapbjAaQDcLAyA6gtsVEAZiP0SynO6Cvr4cZYGAAAAfPboEh2axl
- AAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAGJJREFUOE9j+P//P1bMMEXuHxD/Z5gm+x/ExqYGhLEKgjDYgAUK/8F41AD8BoAV
- gkIbAwNDH24AJCawYhSFpGJQFFPBACzOAmMkg/F5AVvAgDBYEm7AaEIi3wBEwsJhwH8GAOQLbolFp0OS
- AAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAFFJREFUOE+l0bENgEAMQ1ErG7AR69Ej9rnFMKL/BcbFa750UZST7QrGBMYExgTG
- hI7R3tCpuRu6NF7afnnf9gNorUR/RPqaBMYExgTGBMbvrAex4mNXAFOuwQAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAJ5JREFUSEtjGAWUgDg1q/8wDBWiLwBZfD2uC4yp7ghk3+HCC13T4A4A4RbjQDCG
- GkEZAFmAbDg+/L9gCQqmikNADrgd143VQhhGtxgdU+QQfA7AZhk+TJYjsDkAm+H4MFIItEAx8QDZAdgM
- x4dn2sWDMdAYmMWkWQ4CtSZ+cIPwYapbjAaQDcLAyA6gtsVEAZiP0SynO6Cvr4cZYGAAAAfPboEh2axl
- AAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAI5JREFUSEtjGAXkAsOQtP8wDBWiHwBZmrbpJhhDHdACkaExgPkYZjkImydXwLFt
- YRdODDWCPIDNYmy4/OJ/rBjqANJDiVKLYZgsB1DDYhimeghgswQfJtsBUNDi0TjvPwhjM5wYTKkDYACr
- Q2Bi+DC1HAADYIcgOwAkRiSmHkD2IZBLXcNJALTx3QgCDAwAJg2KYP9PC1YAAAAASUVORK5CYII=
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAFFJREFUOE+l0bENgEAMQ1ErG7AR69Ej9rnFMKL/BcbFa750UZST7QrGBMYExgTG
- hI7R3tCpuRu6NF7afnnf9gNorUR/RPqaBMYExgTGBMbvrAex4mNXAFOuwQAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAGJJREFUOE9j+P//P1bMMEXuHxD/Z5gm+x/ExqYGhLEKgjDYgAUK/8F41AD8BoAV
- gkIbAwNDH24AJCawYhSFpGJQFFPBACzOAmMkg/F5AVvAgDBYEm7AaEIi3wBEwsJhwH8GAOQLbolFp0OS
- AAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAGJJREFUOE9j+P//P1bMMEXuHxD/Z5gm+x/ExqYGhLEKgjDYgAUK/8F41AD8BoAV
- gkIbAwNDH24AJCawYhSFpGJQFFPBACzOAmMkg/F5AVvAgDBYEm7AaEIi3wBEwsJhwH8GAOQLbolFp0OS
- AAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAJ5JREFUSEtjGAWUgDg1q/8wDBWiLwBZfD2uC4yp7ghk3+HCC13T4A4A4RbjQDCG
- GkEZAFmAbDg+/L9gCQqmikNADrgd143VQhhGtxgdU+QQfA7AZhk+TJYjsDkAm+H4MFIItEAx8QDZAdgM
- x4dn2sWDMdAYmMWkWQ4CtSZ+cIPwYapbjAaQDcLAyA6gtsVEAZiP0SynO6Cvr4cZYGAAAAfPboEh2axl
- AAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAI5JREFUSEtjGAXkAsOQtP8wDBWiHwBZmrbpJhhDHdACkaExgPkYZjkImydXwLFt
- YRdODDWCPIDNYmy4/OJ/rBjqANJDiVKLYZgsB1DDYhimeghgswQfJtsBUNDi0TjvPwhjM5wYTKkDYACr
- Q2Bi+DC1HAADYIcgOwAkRiSmHkD2IZBLXcNJALTx3QgCDAwAJg2KYP9PC1YAAAAASUVORK5CYII=
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAFFJREFUOE+l0bENgEAMQ1ErG7AR69Ej9rnFMKL/BcbFa750UZST7QrGBMYExgTG
- hI7R3tCpuRu6NF7afnnf9gNorUR/RPqaBMYExgTGBMbvrAex4mNXAFOuwQAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAGJJREFUOE9j+P//P1bMMEXuHxD/Z5gm+x/ExqYGhLEKgjDYgAUK/8F41AD8BoAV
- gkIbAwNDH24AJCawYhSFpGJQFFPBACzOAmMkg/F5AVvAgDBYEm7AaEIi3wBEwsJhwH8GAOQLbolFp0OS
- AAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAFFJREFUOE+l0bENgEAMQ1ErG7AR69Ej9rnFMKL/BcbFa750UZST7QrGBMYExgTG
- hI7R3tCpuRu6NF7afnnf9gNorUR/RPqaBMYExgTGBMbvrAex4mNXAFOuwQAAAABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAGJJREFUOE9j+P//P1bMMEXuHxD/Z5gm+x/ExqYGhLEKgjDYgAUK/8F41AD8BoAV
- gkIbAwNDH24AJCawYhSFpGJQFFPBACzOAmMkg/F5AVvAgDBYEm7AaEIi3wBEwsJhwH8GAOQLbolFp0OS
- AAAAAElFTkSuQmCC
-
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
- True
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAI5JREFUSEtjGAXkAsOQtP8wDBWiHwBZmrbpJhhDHdACkaExgPkYZjkImydXwLFt
- YRdODDWCPIDNYmy4/OJ/rBjqANJDiVKLYZgsB1DDYhimeghgswQfJtsBUNDi0TjvPwhjM5wYTKkDYACr
- Q2Bi+DC1HAADYIcgOwAkRiSmHkD2IZBLXcNJALTx3QgCDAwAJg2KYP9PC1YAAAAASUVORK5CYII=
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAJ5JREFUSEtjGAWUgDg1q/8wDBWiLwBZfD2uC4yp7ghk3+HCC13T4A4A4RbjQDCG
- GkEZAFmAbDg+/L9gCQqmikNADrgd143VQhhGtxgdU+QQfA7AZhk+TJYjsDkAm+H4MFIItEAx8QDZAdgM
- x4dn2sWDMdAYmMWkWQ4CtSZ+cIPwYapbjAaQDcLAyA6gtsVEAZiP0SynO6Cvr4cZYGAAAAfPboEh2axl
- AAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAYxJREFUOE/NkztLA0EUhe/ERQwoSPwDqQQLC8FKrG0F/4CdKNoFLKwEKysLQdDa
- 0sJC8YFudiYIYhobGwstxAdisLEK7F7PLjf7TJYkIPjBYYe5Zw7zuEvt4BoVWat5dqgC7ca0w5pWPUdN
- 4KvEno+nC1Ns6AGhnCOPjTpwHasoy9rjOYVJmD9SizvLqCO+JkuWJ8HOBrCz29SiHxztDXoJZOgTc82E
- x6hliUiC+5mGwY2MdOpVVQnj8K4wtjytZvFtxHx1fAtiiWCbFkKTf0cOjUspA0K2Q6+hd76gQSlFIHAJ
- xWYgjaOe06iUMsCzFQtsIHBIShF8QhZCRgKd0TAfSiEFWqaMkOcwUFNNSr3BVSpj8V6wo1YYhM5YEUv3
- uNryH+I7HhTIqDu2VX4vpnFtq4RdfaXC/Ma+wu7GxNY9aJONRJghg6A5jLv79dLg3i5jYTdop2yL9AIC
- X2OB+zLdP3jdOkKfAtlUkel/BI56DN2LFmW6fxDyCLVeeV2m++cvAtegTdGMTHeA6BdzLXdUY5VUpwAA
- AABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAI5JREFUSEtjGAXkAsOQtP8wDBWiHwBZmrbpJhhDHdACkaExgPkYZjkImydXwLFt
- YRdODDWCPIDNYmy4/OJ/rBjqANJDiVKLYZgsB1DDYhimeghgswQfJtsBUNDi0TjvPwhjM5wYTKkDYACr
- Q2Bi+DC1HAADYIcgOwAkRiSmHkD2IZBLXcNJALTx3QgCDAwAJg2KYP9PC1YAAAAASUVORK5CYII=
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAJ5JREFUSEtjGAWUgDg1q/8wDBWiLwBZfD2uC4yp7ghk3+HCC13T4A4A4RbjQDCG
- GkEZAFmAbDg+/L9gCQqmikNADrgd143VQhhGtxgdU+QQfA7AZhk+TJYjsDkAm+H4MFIItEAx8QDZAdgM
- x4dn2sWDMdAYmMWkWQ4CtSZ+cIPwYapbjAaQDcLAyA6gtsVEAZiP0SynO6Cvr4cZYGAAAAfPboEh2axl
- AAAAAElFTkSuQmCC
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAYxJREFUOE/NkztLA0EUhe/ERQwoSPwDqQQLC8FKrG0F/4CdKNoFLKwEKysLQdDa
- 0sJC8YFudiYIYhobGwstxAdisLEK7F7PLjf7TJYkIPjBYYe5Zw7zuEvt4BoVWat5dqgC7ca0w5pWPUdN
- 4KvEno+nC1Ns6AGhnCOPjTpwHasoy9rjOYVJmD9SizvLqCO+JkuWJ8HOBrCz29SiHxztDXoJZOgTc82E
- x6hliUiC+5mGwY2MdOpVVQnj8K4wtjytZvFtxHx1fAtiiWCbFkKTf0cOjUspA0K2Q6+hd76gQSlFIHAJ
- xWYgjaOe06iUMsCzFQtsIHBIShF8QhZCRgKd0TAfSiEFWqaMkOcwUFNNSr3BVSpj8V6wo1YYhM5YEUv3
- uNryH+I7HhTIqDu2VX4vpnFtq4RdfaXC/Ma+wu7GxNY9aJONRJghg6A5jLv79dLg3i5jYTdop2yL9AIC
- X2OB+zLdP3jdOkKfAtlUkel/BI56DN2LFmW6fxDyCLVeeV2m++cvAtegTdGMTHeA6BdzLXdUY5VUpwAA
- AABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAhRJREFUOE+tkT1ME2EYx2/QQWMiUcDR0dXFmRgSBwOackiIg4uJo1MB+4HAoAzE
- RJCQ6OBEIBHUGK0aY4SKg4NTSUxNSutHr9f2vnq9a68f1/593reA2qObb/LL+7yX//PL874n/JfVPf0a
- J6YiODYZwZFwZ44SXbcjOEl5ajvU6haELiaY/KhDVTUkJKUjyYwC4W4cwai2J+GrlwlurX6CVTQhGWWk
- C2X81GykjRJ+6SWqrVatFHB8/jvCWwZN3CYIkbVk28jZNY5sVpC1qpCLhOnwOqPbOLWQQGBTPWAC+lhx
- HIyIPiwtPsDiwjxxH6rTxOjIFV7nrQpOL+1gfEMF69ntbwkmNhTUanUYNUCrAAXaWc0ErNarVJfqOPNo
- B2OU9QjGyOq6Td7EwmadJASX0c6/l5s4+zgFP2V7ZtoE4x8UvEuW0WiiI2z1Lf+An7JeAb3B5XUJA2vp
- jlxak+B7KvFpDxBo8D2TAZdmrdPMrgt6lH9Y+SJj9IVMAg297YIJ+o1DzzPYTuoITc/iQv955EwXMTpv
- p3S+M+m1V1me9QgCUQNXX2YRT1sYHBiEP3wHVbp3PF3cB40GbrzN86xHENrScf1NDsl8FaI4jODMHOgS
- SOacfYAmbr5XeNYjGH7yDReXv+JeNIUhUYwFpmZjDz+nMLf5B3b2rcZ5tju4ntjtFw4T54j+v2g/t9NH
- 9AiCIPwGJelqUAd/T3AAAAAASUVORK5CYII=
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAYxJREFUOE/NkztLA0EUhe/ERQwoSPwDqQQLC8FKrG0F/4CdKNoFLKwEKysLQdDa
- 0sJC8YFudiYIYhobGwstxAdisLEK7F7PLjf7TJYkIPjBYYe5Zw7zuEvt4BoVWat5dqgC7ca0w5pWPUdN
- 4KvEno+nC1Ns6AGhnCOPjTpwHasoy9rjOYVJmD9SizvLqCO+JkuWJ8HOBrCz29SiHxztDXoJZOgTc82E
- x6hliUiC+5mGwY2MdOpVVQnj8K4wtjytZvFtxHx1fAtiiWCbFkKTf0cOjUspA0K2Q6+hd76gQSlFIHAJ
- xWYgjaOe06iUMsCzFQtsIHBIShF8QhZCRgKd0TAfSiEFWqaMkOcwUFNNSr3BVSpj8V6wo1YYhM5YEUv3
- uNryH+I7HhTIqDu2VX4vpnFtq4RdfaXC/Ma+wu7GxNY9aJONRJghg6A5jLv79dLg3i5jYTdop2yL9AIC
- X2OB+zLdP3jdOkKfAtlUkel/BI56DN2LFmW6fxDyCLVeeV2m++cvAtegTdGMTHeA6BdzLXdUY5VUpwAA
- AABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAhRJREFUOE+tkT1ME2EYx2/QQWMiUcDR0dXFmRgSBwOackiIg4uJo1MB+4HAoAzE
- RJCQ6OBEIBHUGK0aY4SKg4NTSUxNSutHr9f2vnq9a68f1/593reA2qObb/LL+7yX//PL874n/JfVPf0a
- J6YiODYZwZFwZ44SXbcjOEl5ajvU6haELiaY/KhDVTUkJKUjyYwC4W4cwai2J+GrlwlurX6CVTQhGWWk
- C2X81GykjRJ+6SWqrVatFHB8/jvCWwZN3CYIkbVk28jZNY5sVpC1qpCLhOnwOqPbOLWQQGBTPWAC+lhx
- HIyIPiwtPsDiwjxxH6rTxOjIFV7nrQpOL+1gfEMF69ntbwkmNhTUanUYNUCrAAXaWc0ErNarVJfqOPNo
- B2OU9QjGyOq6Td7EwmadJASX0c6/l5s4+zgFP2V7ZtoE4x8UvEuW0WiiI2z1Lf+An7JeAb3B5XUJA2vp
- jlxak+B7KvFpDxBo8D2TAZdmrdPMrgt6lH9Y+SJj9IVMAg297YIJ+o1DzzPYTuoITc/iQv955EwXMTpv
- p3S+M+m1V1me9QgCUQNXX2YRT1sYHBiEP3wHVbp3PF3cB40GbrzN86xHENrScf1NDsl8FaI4jODMHOgS
- SOacfYAmbr5XeNYjGH7yDReXv+JeNIUhUYwFpmZjDz+nMLf5B3b2rcZ5tju4ntjtFw4T54j+v2g/t9NH
- 9AiCIPwGJelqUAd/T3AAAAAASUVORK5CYII=
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAYxJREFUOE/NkztLA0EUhe/ERQwoSPwDqQQLC8FKrG0F/4CdKNoFLKwEKysLQdDa
- 0sJC8YFudiYIYhobGwstxAdisLEK7F7PLjf7TJYkIPjBYYe5Zw7zuEvt4BoVWat5dqgC7ca0w5pWPUdN
- 4KvEno+nC1Ns6AGhnCOPjTpwHasoy9rjOYVJmD9SizvLqCO+JkuWJ8HOBrCz29SiHxztDXoJZOgTc82E
- x6hliUiC+5mGwY2MdOpVVQnj8K4wtjytZvFtxHx1fAtiiWCbFkKTf0cOjUspA0K2Q6+hd76gQSlFIHAJ
- xWYgjaOe06iUMsCzFQtsIHBIShF8QhZCRgKd0TAfSiEFWqaMkOcwUFNNSr3BVSpj8V6wo1YYhM5YEUv3
- uNryH+I7HhTIqDu2VX4vpnFtq4RdfaXC/Ma+wu7GxNY9aJONRJghg6A5jLv79dLg3i5jYTdop2yL9AIC
- X2OB+zLdP3jdOkKfAtlUkel/BI56DN2LFmW6fxDyCLVeeV2m++cvAtegTdGMTHeA6BdzLXdUY5VUpwAA
- AABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAhRJREFUOE+tkT1ME2EYx2/QQWMiUcDR0dXFmRgSBwOackiIg4uJo1MB+4HAoAzE
- RJCQ6OBEIBHUGK0aY4SKg4NTSUxNSutHr9f2vnq9a68f1/593reA2qObb/LL+7yX//PL874n/JfVPf0a
- J6YiODYZwZFwZ44SXbcjOEl5ajvU6haELiaY/KhDVTUkJKUjyYwC4W4cwai2J+GrlwlurX6CVTQhGWWk
- C2X81GykjRJ+6SWqrVatFHB8/jvCWwZN3CYIkbVk28jZNY5sVpC1qpCLhOnwOqPbOLWQQGBTPWAC+lhx
- HIyIPiwtPsDiwjxxH6rTxOjIFV7nrQpOL+1gfEMF69ntbwkmNhTUanUYNUCrAAXaWc0ErNarVJfqOPNo
- B2OU9QjGyOq6Td7EwmadJASX0c6/l5s4+zgFP2V7ZtoE4x8UvEuW0WiiI2z1Lf+An7JeAb3B5XUJA2vp
- jlxak+B7KvFpDxBo8D2TAZdmrdPMrgt6lH9Y+SJj9IVMAg297YIJ+o1DzzPYTuoITc/iQv955EwXMTpv
- p3S+M+m1V1me9QgCUQNXX2YRT1sYHBiEP3wHVbp3PF3cB40GbrzN86xHENrScf1NDsl8FaI4jODMHOgS
- SOacfYAmbr5XeNYjGH7yDReXv+JeNIUhUYwFpmZjDz+nMLf5B3b2rcZ5tju4ntjtFw4T54j+v2g/t9NH
- 9AiCIPwGJelqUAd/T3AAAAAASUVORK5CYII=
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAYxJREFUOE/NkztLA0EUhe/ERQwoSPwDqQQLC8FKrG0F/4CdKNoFLKwEKysLQdDa
- 0sJC8YFudiYIYhobGwstxAdisLEK7F7PLjf7TJYkIPjBYYe5Zw7zuEvt4BoVWat5dqgC7ca0w5pWPUdN
- 4KvEno+nC1Ns6AGhnCOPjTpwHasoy9rjOYVJmD9SizvLqCO+JkuWJ8HOBrCz29SiHxztDXoJZOgTc82E
- x6hliUiC+5mGwY2MdOpVVQnj8K4wtjytZvFtxHx1fAtiiWCbFkKTf0cOjUspA0K2Q6+hd76gQSlFIHAJ
- xWYgjaOe06iUMsCzFQtsIHBIShF8QhZCRgKd0TAfSiEFWqaMkOcwUFNNSr3BVSpj8V6wo1YYhM5YEUv3
- uNryH+I7HhTIqDu2VX4vpnFtq4RdfaXC/Ma+wu7GxNY9aJONRJghg6A5jLv79dLg3i5jYTdop2yL9AIC
- X2OB+zLdP3jdOkKfAtlUkel/BI56DN2LFmW6fxDyCLVeeV2m++cvAtegTdGMTHeA6BdzLXdUY5VUpwAA
- AABJRU5ErkJggg==
-
-
-
-
- iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
- vAAADrwBlbxySQAAAhRJREFUOE+tkT1ME2EYx2/QQWMiUcDR0dXFmRgSBwOackiIg4uJo1MB+4HAoAzE
- RJCQ6OBEIBHUGK0aY4SKg4NTSUxNSutHr9f2vnq9a68f1/593reA2qObb/LL+7yX//PL874n/JfVPf0a
- J6YiODYZwZFwZ44SXbcjOEl5ajvU6haELiaY/KhDVTUkJKUjyYwC4W4cwai2J+GrlwlurX6CVTQhGWWk
- C2X81GykjRJ+6SWqrVatFHB8/jvCWwZN3CYIkbVk28jZNY5sVpC1qpCLhOnwOqPbOLWQQGBTPWAC+lhx
- HIyIPiwtPsDiwjxxH6rTxOjIFV7nrQpOL+1gfEMF69ntbwkmNhTUanUYNUCrAAXaWc0ErNarVJfqOPNo
- B2OU9QjGyOq6Td7EwmadJASX0c6/l5s4+zgFP2V7ZtoE4x8UvEuW0WiiI2z1Lf+An7JeAb3B5XUJA2vp
- jlxak+B7KvFpDxBo8D2TAZdmrdPMrgt6lH9Y+SJj9IVMAg297YIJ+o1DzzPYTuoITc/iQv955EwXMTpv
- p3S+M+m1V1me9QgCUQNXX2YRT1sYHBiEP3wHVbp3PF3cB40GbrzN86xHENrScf1NDsl8FaI4jODMHOgS
- SOacfYAmbr5XeNYjGH7yDReXv+JeNIUhUYwFpmZjDz+nMLf5B3b2rcZ5tju4ntjtFw4T54j+v2g/t9NH
- 9AiCIPwGJelqUAd/T3AAAAAASUVORK5CYII=
+ vAAADrwBlbxySQAAAFxJREFUOE9j+P//PwM2zDBF7h/DFLn/DNNk/4PY6PJwdegCKAYsUPgPxqMG4DcA
+ HtoYWBaiGWwAJCawYhSFpGJQFFPBACzOAmMivYAeKCQHIrrAqAFoBiASFk4DAOQLbokdS+snAAAAAElF
+ TkSuQmCC
@@ -1036,6 +251,786 @@
AQUBgAEBAa8BywEAAQEBQAEFAYABAQGgAQsBAAH9AUABBQGAAQEBoAF7ARgBxQFAAQUBwAEDAaABiwEk
Ae0BQAEFAcABAwGgAbMBJAHNAUABBQHgAQcBoAGnARgB7QFAAQUB8AEPAb8BzwEAAf0BfwH9AfwBPwGA
AR8BAAEBAQABAQL/Cw==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa
+ eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8
+ OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab
+ 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd
+ 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk
+ 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg
+ hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI
+ i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh
+ LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs
+ hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru
+ WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ
+ WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF
+ unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa
+ eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8
+ OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab
+ 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd
+ 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk
+ 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg
+ hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI
+ i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh
+ LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs
+ hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru
+ WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ
+ WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF
+ unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO
+ RK5CYII=
+
+
+
+ 533, 20
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa
+ eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8
+ OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab
+ 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd
+ 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk
+ 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg
+ hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa
+ eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8
+ OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab
+ 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd
+ 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk
+ 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg
+ hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI
+ i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh
+ LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs
+ hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru
+ WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ
+ WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF
+ unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa
+ eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8
+ OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab
+ 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd
+ 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk
+ 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg
+ hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI
+ i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh
+ LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs
+ hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru
+ WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ
+ WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF
+ unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa
+ eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8
+ OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab
+ 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd
+ 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk
+ 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg
+ hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI
+ i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh
+ LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs
+ hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru
+ WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ
+ WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF
+ unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa
+ eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8
+ OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab
+ 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd
+ 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk
+ 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg
+ hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI
+ i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh
+ LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs
+ hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru
+ WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ
+ WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF
+ unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI
+ i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh
+ LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs
+ hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru
+ WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ
+ WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF
+ unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa
+ eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8
+ OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab
+ 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd
+ 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk
+ 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg
+ hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa
+ eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8
+ OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab
+ 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd
+ 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk
+ 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg
+ hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI
+ i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh
+ LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs
+ hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru
+ WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ
+ WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF
+ unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa
+ eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8
+ OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab
+ 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd
+ 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk
+ 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg
+ hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI
+ i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh
+ LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs
+ hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru
+ WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ
+ WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF
+ unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa
+ eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8
+ OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab
+ 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd
+ 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk
+ 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg
+ hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI
+ i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh
+ LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs
+ hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru
+ WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ
+ WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF
+ unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa
+ eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8
+ OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab
+ 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd
+ 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk
+ 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg
+ hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI
+ i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh
+ LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs
+ hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru
+ WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ
+ WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF
+ unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa
+ eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8
+ OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab
+ 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd
+ 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk
+ 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg
+ hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI
+ i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh
+ LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs
+ hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru
+ WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ
+ WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF
+ unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa
+ eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8
+ OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab
+ 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd
+ 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk
+ 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg
+ hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI
+ i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh
+ LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs
+ hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru
+ WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ
+ WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF
+ unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa
+ eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8
+ OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab
+ 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd
+ 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk
+ 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg
+ hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI
+ i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh
+ LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs
+ hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru
+ WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ
+ WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF
+ unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa
+ eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8
+ OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab
+ 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd
+ 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk
+ 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg
+ hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI
+ i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh
+ LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs
+ hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru
+ WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ
+ WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF
+ unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa
+ eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8
+ OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab
+ 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd
+ 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk
+ 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg
+ hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI
+ i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh
+ LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs
+ hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru
+ WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ
+ WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF
+ unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAV9JREFUWEftlj1Ow0AQRiP6RWDZCKWiMQWu3FPRUFjiBqYCiYYLhACXyAHScgIa
+ eq7iM9AM+pJMtBrPrtfO4gJ5pNdk5+fZmtiezXqEMWbhQuYGhzGmk13eIk1OyYesA0TkZC9g/yivjLm8
+ OKGnx3v6+vxQwRlyZB2Qg50CSL65OiINNJdDJciRdYwc3hLg4S8P1/Tz/dwCzX0SfC7rAHpqEqqALLab
+ 8BAXLnlwsECXhG84C2wnbmOQAEtoyDxJNIGh/InAenkbBO7Q/Dzb74D9fBksgMZVVXWSpBmeDXEFeHhd
+ 19Q0jZc8z+n17X0jkaTZ3UH/Aikgh2lAAKFJjCpgS4wqUBTFRoLBTowqINndkfgCZVmqjCYQyiTwfwXk
+ 8k1L6GIS6BQI+bzSBOTy9V5CAIEQ5mfHLYFQVAEbPvRhjFmhUcgHiQ3yowgAvFbRrC/q63iIQN98DVUg
+ hBjBAr/PIGOlkOqMSQAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAYdJREFUWEftlkFKw0AUhnuB2VQjRcSFECzERbJw7z4XEsG68QheozfItlvJCVyI
+ i5CNR3jyD05J3rxJ3yRNVy18hJLk/79MXuksjDGLKRBRD37+EF6IMeYlBi4QK9ITQODN6opiSC6WZIwh
+ LqCV2Au48u12S23bqnlY39Hr5k2U4GUSPQGEIfS32dkjfW163yVwDz6SBC+TEAVs+fcz0eeTPfJSSWCs
+ hCiAJ7fljv+VkHjM11bCgZngr4JzUMBK/LyrVoBzvUqmC2hnoKoqD2QYYz4cvFwloAFlZVl65HlOaZru
+ WV4m3lx0GSXgyuu6pqZpBoEErgtJBAWKogiS3d9aAV4m4QRCEkGBIdwK8DKJroAkMbtAlmXeTJxUgAOJ
+ WQT4nDhGC/CgsUPIUQsMIa2AlrPAbAJ8TiYP4RCSgBa1AH+S86/gZAKaXbEkwF9T9BAC7OcgoYELaBEF
+ unRPhsBWCzsfHq7haAII0uyIuuD6owgA/K8jLBZxPxALbowVDuGFx8IDY/kD7lUZk+GYq/AAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAFxJREFUOE9j+P//PwM2zDBF7h/DFLn/DNNk/4PY6PJwdegCKAYsUPgPxqMG4DcA
+ HtoYWBaiGWwAJCawYhSFpGJQFFPBACzOAmMivYAeKCQHIrrAqAFoBiASFk4DAOQLbokdS+snAAAAAElF
+ TkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAI1JREFUSEtjYBgFZALDkLT/MIwuR3MAsjRt000whjqgBV0NTQDMxzDLQdg8uQKO
+ bQu7cGJ0s0gC2CzGhssv/seKoQ4gPZQotZgiB1DDYoocAAK4QgDdAkKYbAdAQYtH47z/IIxuMLGYUgfA
+ AFaHwMTwYWo5AAbADkF2ANRwYjD1ALIPqW44CYA2vhtRAAAmDYpgT13R+wAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAJdJREFUSEtjYBgFFIA4Nav/MIwuRxcAsvh6XBcYU90RyL7DhRe6psEdAMItxoFg
+ jG4WWQDZd4Tw/4IlKJgqDgE54HZcN4Zl+CxGxxQ5BJ8D0C0ihMlyBDYHoBtMCCOFQAsUEw+QHYBuMCE8
+ 0y4ejJEsJs1yEKg18YMbhA9T3WI0gGwQBkZ2ALUtJgoghwRdLUYD9PX1sAMAB89ugVJE7dUAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAI1JREFUSEtjYBgFZALDkLT/MIwuR3MAsjRt000whjqgBV0NTQDMxzDLQdg8uQKO
+ bQu7cGJ0s0gC2CzGhssv/seKoQ4gPZQotZgiB1DDYoocAAK4QgDdAkKYbAdAQYtH47z/IIxuMLGYUgfA
+ AFaHwMTwYWo5AAbADkF2ANRwYjD1ALIPqW44CYA2vhtRAAAmDYpgT13R+wAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAJdJREFUSEtjYBgFFIA4Nav/MIwuRxcAsvh6XBcYU90RyL7DhRe6psEdAMItxoFg
+ jG4WWQDZd4Tw/4IlKJgqDgE54HZcN4Zl+CxGxxQ5BJ8D0C0ihMlyBDYHoBtMCCOFQAsUEw+QHYBuMCE8
+ 0y4ejJEsJs1yEKg18YMbhA9T3WI0gGwQBkZ2ALUtJgoghwRdLUYD9PX1sAMAB89ugVJE7dUAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAFxJREFUOE9j+P//PwM2zDBF7h/DFLn/DNNk/4PY6PJwdegCKAYsUPgPxqMG4DcA
+ HtoYWBaiGWwAJCawYhSFpGJQFFPBACzOAmMivYAeKCQHIrrAqAFoBiASFk4DAOQLbokdS+snAAAAAElF
+ TkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAFBJREFUOE+l0bEJwDAMRNFDG3ijrJfeeJ8sFoW0vur7itd8sBCyulsJC5QFygJl
+ gdJduhKaqjehpepH48j/Nh+wr0TlR9y/hbJAWaAsUBaoD7HiY1fWoY0CAAAAAElFTkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAJdJREFUSEtjYBgFFIA4Nav/MIwuRxcAsvh6XBcYU90RyL7DhRe6psEdAMItxoFg
+ jG4WWQDZd4Tw/4IlKJgqDgE54HZcN4Zl+CxGxxQ5BJ8D0C0ihMlyBDYHoBtMCCOFQAsUEw+QHYBuMCE8
+ 0y4ejJEsJs1yEKg18YMbhA9T3WI0gGwQBkZ2ALUtJgoghwRdLUYD9PX1sAMAB89ugVJE7dUAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAI1JREFUSEtjYBgFZALDkLT/MIwuR3MAsjRt000whjqgBV0NTQDMxzDLQdg8uQKO
+ bQu7cGJ0s0gC2CzGhssv/seKoQ4gPZQotZgiB1DDYoocAAK4QgDdAkKYbAdAQYtH47z/IIxuMLGYUgfA
+ AFaHwMTwYWo5AAbADkF2ANRwYjD1ALIPqW44CYA2vhtRAAAmDYpgT13R+wAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAFBJREFUOE+l0bEJwDAMRNFDG3ijrJfeeJ8sFoW0vur7itd8sBCyulsJC5QFygJl
+ gdJduhKaqjehpepH48j/Nh+wr0TlR9y/hbJAWaAsUBaoD7HiY1fWoY0CAAAAAElFTkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAFxJREFUOE9j+P//PwM2zDBF7h/DFLn/DNNk/4PY6PJwdegCKAYsUPgPxqMG4DcA
+ HtoYWBaiGWwAJCawYhSFpGJQFFPBACzOAmMivYAeKCQHIrrAqAFoBiASFk4DAOQLbokdS+snAAAAAElF
+ TkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAFxJREFUOE9j+P//PwM2zDBF7h/DFLn/DNNk/4PY6PJwdegCKAYsUPgPxqMG4DcA
+ HtoYWBaiGWwAJCawYhSFpGJQFFPBACzOAmMivYAeKCQHIrrAqAFoBiASFk4DAOQLbokdS+snAAAAAElF
+ TkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAJdJREFUSEtjYBgFFIA4Nav/MIwuRxcAsvh6XBcYU90RyL7DhRe6psEdAMItxoFg
+ jG4WWQDZd4Tw/4IlKJgqDgE54HZcN4Zl+CxGxxQ5BJ8D0C0ihMlyBDYHoBtMCCOFQAsUEw+QHYBuMCE8
+ 0y4ejJEsJs1yEKg18YMbhA9T3WI0gGwQBkZ2ALUtJgoghwRdLUYD9PX1sAMAB89ugVJE7dUAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAI1JREFUSEtjYBgFZALDkLT/MIwuR3MAsjRt000whjqgBV0NTQDMxzDLQdg8uQKO
+ bQu7cGJ0s0gC2CzGhssv/seKoQ4gPZQotZgiB1DDYoocAAK4QgDdAkKYbAdAQYtH47z/IIxuMLGYUgfA
+ AFaHwMTwYWo5AAbADkF2ANRwYjD1ALIPqW44CYA2vhtRAAAmDYpgT13R+wAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAFBJREFUOE+l0bEJwDAMRNFDG3ijrJfeeJ8sFoW0vur7itd8sBCyulsJC5QFygJl
+ gdJduhKaqjehpepH48j/Nh+wr0TlR9y/hbJAWaAsUBaoD7HiY1fWoY0CAAAAAElFTkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAFxJREFUOE9j+P//PwM2zDBF7h/DFLn/DNNk/4PY6PJwdegCKAYsUPgPxqMG4DcA
+ HtoYWBaiGWwAJCawYhSFpGJQFFPBACzOAmMivYAeKCQHIrrAqAFoBiASFk4DAOQLbokdS+snAAAAAElF
+ TkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAFBJREFUOE+l0bEJwDAMRNFDG3ijrJfeeJ8sFoW0vur7itd8sBCyulsJC5QFygJl
+ gdJduhKaqjehpepH48j/Nh+wr0TlR9y/hbJAWaAsUBaoD7HiY1fWoY0CAAAAAElFTkSuQmCC
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAFxJREFUOE9j+P//PwM2zDBF7h/DFLn/DNNk/4PY6PJwdegCKAYsUPgPxqMG4DcA
+ HtoYWBaiGWwAJCawYhSFpGJQFFPBACzOAmMivYAeKCQHIrrAqAFoBiASFk4DAOQLbokdS+snAAAAAElF
+ TkSuQmCC
+
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+ True
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAI1JREFUSEtjYBgFZALDkLT/MIwuR3MAsjRt000whjqgBV0NTQDMxzDLQdg8uQKO
+ bQu7cGJ0s0gC2CzGhssv/seKoQ4gPZQotZgiB1DDYoocAAK4QgDdAkKYbAdAQYtH47z/IIxuMLGYUgfA
+ AFaHwMTwYWo5AAbADkF2ANRwYjD1ALIPqW44CYA2vhtRAAAmDYpgT13R+wAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAJdJREFUSEtjYBgFFIA4Nav/MIwuRxcAsvh6XBcYU90RyL7DhRe6psEdAMItxoFg
+ jG4WWQDZd4Tw/4IlKJgqDgE54HZcN4Zl+CxGxxQ5BJ8D0C0ihMlyBDYHoBtMCCOFQAsUEw+QHYBuMCE8
+ 0y4ejJEsJs1yEKg18YMbhA9T3WI0gGwQBkZ2ALUtJgoghwRdLUYD9PX1sAMAB89ugVJE7dUAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAX5JREFUOE/Fkr0rRWEcx7/PcZJblK5/4E7KYFAmma3KP2ATsSmDSZlMBqWYjQYD
+ ucS9z0tKLBaLgUFeEllMt87z1TnXy3N/nS5nkE99p9/3+ZyX5wfkQIcSjRqnxjw11oKs0mDWazVAAyXP
+ 5eJNNESLSzqwTTyt2kx0XJLnW/A6GqTDY44gP1Zt8xix9GR4E3XQ4lQceqPBPQ1us1g80aEhpNPSlUGN
+ YTok30Xs+boq033/KzrE3qhROrwEvXM6RK22tFzDRPBkT41+2fmEFiuB8IEH6JSdVDhFi0YWgzdW0Ss7
+ n9BiORC+8ABdsgPuImYVPVn20c0t2WjitarQ4uZLaOBk51ewjgoN1rM3Ci7F62hGdn8kMXF6Ea+hqPm5
+ 6ow11X4XJUktLtPiWcjSxT7yOuqT/R/xRi22vhWs19FYuE6FoMFhIDuhzlmRItDgLhBuyHlhWMc5Da6z
+ 1DAv5/8PHXbocPGRSTkvDB2ugltekPPC/IVwjg5LHxmRc8k7cy13VAsXPGAAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAI1JREFUSEtjYBgFZALDkLT/MIwuR3MAsjRt000whjqgBV0NTQDMxzDLQdg8uQKO
+ bQu7cGJ0s0gC2CzGhssv/seKoQ4gPZQotZgiB1DDYoocAAK4QgDdAkKYbAdAQYtH47z/IIxuMLGYUgfA
+ AFaHwMTwYWo5AAbADkF2ANRwYjD1ALIPqW44CYA2vhtRAAAmDYpgT13R+wAAAABJRU5ErkJggg==
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAYAAAB3AH1ZAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAJdJREFUSEtjYBgFFIA4Nav/MIwuRxcAsvh6XBcYU90RyL7DhRe6psEdAMItxoFg
+ jG4WWQDZd4Tw/4IlKJgqDgE54HZcN4Zl+CxGxxQ5BJ8D0C0ihMlyBDYHoBtMCCOFQAsUEw+QHYBuMCE8
+ 0y4ejJEsJs1yEKg18YMbhA9T3WI0gGwQBkZ2ALUtJgoghwRdLUYD9PX1sAMAB89ugVJE7dUAAAAASUVO
+ RK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAX5JREFUOE/Fkr0rRWEcx7/PcZJblK5/4E7KYFAmma3KP2ATsSmDSZlMBqWYjQYD
+ ucS9z0tKLBaLgUFeEllMt87z1TnXy3N/nS5nkE99p9/3+ZyX5wfkQIcSjRqnxjw11oKs0mDWazVAAyXP
+ 5eJNNESLSzqwTTyt2kx0XJLnW/A6GqTDY44gP1Zt8xix9GR4E3XQ4lQceqPBPQ1us1g80aEhpNPSlUGN
+ YTok30Xs+boq033/KzrE3qhROrwEvXM6RK22tFzDRPBkT41+2fmEFiuB8IEH6JSdVDhFi0YWgzdW0Ss7
+ n9BiORC+8ABdsgPuImYVPVn20c0t2WjitarQ4uZLaOBk51ewjgoN1rM3Ci7F62hGdn8kMXF6Ea+hqPm5
+ 6ow11X4XJUktLtPiWcjSxT7yOuqT/R/xRi22vhWs19FYuE6FoMFhIDuhzlmRItDgLhBuyHlhWMc5Da6z
+ 1DAv5/8PHXbocPGRSTkvDB2ugltekPPC/IVwjg5LHxmRc8k7cy13VAsXPGAAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAhFJREFUOE+tjjtMU2EYhv9BB42JBAFHR1cXZ2JIHAxoSpEQBxcTR6cWBIotgzIQ
+ E6kNCQ5ORBJBjdGiMYa24uDgBImpCbSKLaU9l95v55z2MecgKL1sfsmT//2T93vyCfE/psuzSqfbz6kp
+ Pydc7Tnp8tNxz88ZzypCiGMH+x2mYOqTiiwrbMWltkR2JcSDMBMh5UBiTY8puLv0mXwuSzxdIpYpsaMU
+ iKWL/FKL7Cj5/SxlOD33A9d6mk53g2AypFAsFEgWNItEtsJevkoiVyWRLVt5Vy1w1rvFeFBucUFQplIu
+ M2y3Me97jM87h8/7CLlcZ2T4upVT+Qrn5rcZDciYO0cEYwEJTdNJa6BUIKNhZVNgZrUKclHn/JNtnAGp
+ WeAMyBhG3Voyy1kdMvofmb4vU0t1LjyN4gjIdE83CEbXJD5EStTqtMWc3sWfONakFoKgzLWVOP3LsbZc
+ XY5jexG3rm0hULC9TIChga6DYYCmHeHZ1wQjrxM4Awo9jYKxkMLgq102IyqTnhku910imTXYiKhsRlXr
+ NaU33+5Z3SbBeCjNjTd7hGN5BvoHcLjuU61DOJY7hFqN2+9TVrdJMLmucutdkkiqit0+xMT0LAYQSZYP
+ gTp3PkpWt0kw9Pw7Vxa/8TAUZdBu3xh3z2wsfIkyG/yL+bctha1u18TK1oHguBDiohCi7x8a/430CiG6
+ zeXfJelqUKnUyCAAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAX5JREFUOE/Fkr0rRWEcx7/PcZJblK5/4E7KYFAmma3KP2ATsSmDSZlMBqWYjQYD
+ ucS9z0tKLBaLgUFeEllMt87z1TnXy3N/nS5nkE99p9/3+ZyX5wfkQIcSjRqnxjw11oKs0mDWazVAAyXP
+ 5eJNNESLSzqwTTyt2kx0XJLnW/A6GqTDY44gP1Zt8xix9GR4E3XQ4lQceqPBPQ1us1g80aEhpNPSlUGN
+ YTok30Xs+boq033/KzrE3qhROrwEvXM6RK22tFzDRPBkT41+2fmEFiuB8IEH6JSdVDhFi0YWgzdW0Ss7
+ n9BiORC+8ABdsgPuImYVPVn20c0t2WjitarQ4uZLaOBk51ewjgoN1rM3Ci7F62hGdn8kMXF6Ea+hqPm5
+ 6ow11X4XJUktLtPiWcjSxT7yOuqT/R/xRi22vhWs19FYuE6FoMFhIDuhzlmRItDgLhBuyHlhWMc5Da6z
+ 1DAv5/8PHXbocPGRSTkvDB2ugltekPPC/IVwjg5LHxmRc8k7cy13VAsXPGAAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAhFJREFUOE+tjjtMU2EYhv9BB42JBAFHR1cXZ2JIHAxoSpEQBxcTR6cWBIotgzIQ
+ E6kNCQ5ORBJBjdGiMYa24uDgBImpCbSKLaU9l95v55z2MecgKL1sfsmT//2T93vyCfE/psuzSqfbz6kp
+ Pydc7Tnp8tNxz88ZzypCiGMH+x2mYOqTiiwrbMWltkR2JcSDMBMh5UBiTY8puLv0mXwuSzxdIpYpsaMU
+ iKWL/FKL7Cj5/SxlOD33A9d6mk53g2AypFAsFEgWNItEtsJevkoiVyWRLVt5Vy1w1rvFeFBucUFQplIu
+ M2y3Me97jM87h8/7CLlcZ2T4upVT+Qrn5rcZDciYO0cEYwEJTdNJa6BUIKNhZVNgZrUKclHn/JNtnAGp
+ WeAMyBhG3Voyy1kdMvofmb4vU0t1LjyN4gjIdE83CEbXJD5EStTqtMWc3sWfONakFoKgzLWVOP3LsbZc
+ XY5jexG3rm0hULC9TIChga6DYYCmHeHZ1wQjrxM4Awo9jYKxkMLgq102IyqTnhku910imTXYiKhsRlXr
+ NaU33+5Z3SbBeCjNjTd7hGN5BvoHcLjuU61DOJY7hFqN2+9TVrdJMLmucutdkkiqit0+xMT0LAYQSZYP
+ gTp3PkpWt0kw9Pw7Vxa/8TAUZdBu3xh3z2wsfIkyG/yL+bctha1u18TK1oHguBDiohCi7x8a/430CiG6
+ zeXfJelqUKnUyCAAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAX5JREFUOE/Fkr0rRWEcx7/PcZJblK5/4E7KYFAmma3KP2ATsSmDSZlMBqWYjQYD
+ ucS9z0tKLBaLgUFeEllMt87z1TnXy3N/nS5nkE99p9/3+ZyX5wfkQIcSjRqnxjw11oKs0mDWazVAAyXP
+ 5eJNNESLSzqwTTyt2kx0XJLnW/A6GqTDY44gP1Zt8xix9GR4E3XQ4lQceqPBPQ1us1g80aEhpNPSlUGN
+ YTok30Xs+boq033/KzrE3qhROrwEvXM6RK22tFzDRPBkT41+2fmEFiuB8IEH6JSdVDhFi0YWgzdW0Ss7
+ n9BiORC+8ABdsgPuImYVPVn20c0t2WjitarQ4uZLaOBk51ewjgoN1rM3Ci7F62hGdn8kMXF6Ea+hqPm5
+ 6ow11X4XJUktLtPiWcjSxT7yOuqT/R/xRi22vhWs19FYuE6FoMFhIDuhzlmRItDgLhBuyHlhWMc5Da6z
+ 1DAv5/8PHXbocPGRSTkvDB2ugltekPPC/IVwjg5LHxmRc8k7cy13VAsXPGAAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAhFJREFUOE+tjjtMU2EYhv9BB42JBAFHR1cXZ2JIHAxoSpEQBxcTR6cWBIotgzIQ
+ E6kNCQ5ORBJBjdGiMYa24uDgBImpCbSKLaU9l95v55z2MecgKL1sfsmT//2T93vyCfE/psuzSqfbz6kp
+ Pydc7Tnp8tNxz88ZzypCiGMH+x2mYOqTiiwrbMWltkR2JcSDMBMh5UBiTY8puLv0mXwuSzxdIpYpsaMU
+ iKWL/FKL7Cj5/SxlOD33A9d6mk53g2AypFAsFEgWNItEtsJevkoiVyWRLVt5Vy1w1rvFeFBucUFQplIu
+ M2y3Me97jM87h8/7CLlcZ2T4upVT+Qrn5rcZDciYO0cEYwEJTdNJa6BUIKNhZVNgZrUKclHn/JNtnAGp
+ WeAMyBhG3Voyy1kdMvofmb4vU0t1LjyN4gjIdE83CEbXJD5EStTqtMWc3sWfONakFoKgzLWVOP3LsbZc
+ XY5jexG3rm0hULC9TIChga6DYYCmHeHZ1wQjrxM4Awo9jYKxkMLgq102IyqTnhku910imTXYiKhsRlXr
+ NaU33+5Z3SbBeCjNjTd7hGN5BvoHcLjuU61DOJY7hFqN2+9TVrdJMLmucutdkkiqit0+xMT0LAYQSZYP
+ gTp3PkpWt0kw9Pw7Vxa/8TAUZdBu3xh3z2wsfIkyG/yL+bctha1u18TK1oHguBDiohCi7x8a/430CiG6
+ zeXfJelqUKnUyCAAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAX5JREFUOE/Fkr0rRWEcx7/PcZJblK5/4E7KYFAmma3KP2ATsSmDSZlMBqWYjQYD
+ ucS9z0tKLBaLgUFeEllMt87z1TnXy3N/nS5nkE99p9/3+ZyX5wfkQIcSjRqnxjw11oKs0mDWazVAAyXP
+ 5eJNNESLSzqwTTyt2kx0XJLnW/A6GqTDY44gP1Zt8xix9GR4E3XQ4lQceqPBPQ1us1g80aEhpNPSlUGN
+ YTok30Xs+boq033/KzrE3qhROrwEvXM6RK22tFzDRPBkT41+2fmEFiuB8IEH6JSdVDhFi0YWgzdW0Ss7
+ n9BiORC+8ABdsgPuImYVPVn20c0t2WjitarQ4uZLaOBk51ewjgoN1rM3Ci7F62hGdn8kMXF6Ea+hqPm5
+ 6ow11X4XJUktLtPiWcjSxT7yOuqT/R/xRi22vhWs19FYuE6FoMFhIDuhzlmRItDgLhBuyHlhWMc5Da6z
+ 1DAv5/8PHXbocPGRSTkvDB2ugltekPPC/IVwjg5LHxmRc8k7cy13VAsXPGAAAAAASUVORK5CYII=
+
+
+
+
+ iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
+ vAAADrwBlbxySQAAAhFJREFUOE+tjjtMU2EYhv9BB42JBAFHR1cXZ2JIHAxoSpEQBxcTR6cWBIotgzIQ
+ E6kNCQ5ORBJBjdGiMYa24uDgBImpCbSKLaU9l95v55z2MecgKL1sfsmT//2T93vyCfE/psuzSqfbz6kp
+ Pydc7Tnp8tNxz88ZzypCiGMH+x2mYOqTiiwrbMWltkR2JcSDMBMh5UBiTY8puLv0mXwuSzxdIpYpsaMU
+ iKWL/FKL7Cj5/SxlOD33A9d6mk53g2AypFAsFEgWNItEtsJevkoiVyWRLVt5Vy1w1rvFeFBucUFQplIu
+ M2y3Me97jM87h8/7CLlcZ2T4upVT+Qrn5rcZDciYO0cEYwEJTdNJa6BUIKNhZVNgZrUKclHn/JNtnAGp
+ WeAMyBhG3Voyy1kdMvofmb4vU0t1LjyN4gjIdE83CEbXJD5EStTqtMWc3sWfONakFoKgzLWVOP3LsbZc
+ XY5jexG3rm0hULC9TIChga6DYYCmHeHZ1wQjrxM4Awo9jYKxkMLgq102IyqTnhku910imTXYiKhsRlXr
+ NaU33+5Z3SbBeCjNjTd7hGN5BvoHcLjuU61DOJY7hFqN2+9TVrdJMLmucutdkkiqit0+xMT0LAYQSZYP
+ gTp3PkpWt0kw9Pw7Vxa/8TAUZdBu3xh3z2wsfIkyG/yL+bctha1u18TK1oHguBDiohCi7x8a/430CiG6
+ zeXfJelqUKnUyCAAAAAASUVORK5CYII=
@@ -1047,8 +1042,11 @@
386, 19
+
+ 533, 20
+
- 100
+ 57
diff --git a/DS_Map/PatchToolboxDialog.cs b/DS_Map/PatchToolboxDialog.cs
index 3749d5e..c96b456 100644
--- a/DS_Map/PatchToolboxDialog.cs
+++ b/DS_Map/PatchToolboxDialog.cs
@@ -258,18 +258,18 @@ namespace DSPRE
public static bool CheckScriptsStandardizedItemNumbers()
{
ScriptFile itemScript = new ScriptFile(RomInfo.itemScriptFileNumber);
- if (itemScript.allScripts.Count - 1 < new TextArchive(RomInfo.itemNamesTextNumber).messages.Count)
- {
- return false;
- }
+ //if (itemScript.allScripts.Count - 1 < new TextArchive(RomInfo.itemNamesTextNumber).messages.Count)
+ //{
+ // return false;
+ //}
- for (ushort i = 0; i < itemScript.allScripts.Count - 1; i++)
- {
- if (BitConverter.ToUInt16(itemScript.allScripts[i].commands[0].cmdParams[1], 0) != i || BitConverter.ToUInt16(itemScript.allScripts[i].commands[1].cmdParams[1], 0) != 1)
- {
- return false;
- }
- }
+ //for (ushort i = 0; i < itemScript.allScripts.Count - 1; i++)
+ //{
+ // if (BitConverter.ToUInt16(itemScript.allScripts[i].commands[0].Parameters[1].RawData, 0) != i || BitConverter.ToUInt16(itemScript.allScripts[i].commands[1].Parameters[1].RawData, 0) != 1)
+ // {
+ // return false;
+ // }
+ //}
return true;
}
@@ -590,12 +590,12 @@ namespace DSPRE
ScriptFile itemScriptFile = new ScriptFile(RomInfo.itemScriptFileNumber);
// Create map for: script no. -> vanilla item
- int[] vanillaItemsArray = new int[itemScriptFile.allScripts.Count - 1];
-
- for (int i = 0; i < itemScriptFile.allScripts.Count - 1; i++)
- {
- vanillaItemsArray[i] = BitConverter.ToInt16(itemScriptFile.allScripts[i].commands[0].cmdParams[1], 0);
- };
+ //int[] vanillaItemsArray = new int[itemScriptFile.allScripts.Count - 1];
+ //
+ //for (int i = 0; i < itemScriptFile.allScripts.Count - 1; i++)
+ //{
+ // vanillaItemsArray[i] = BitConverter.ToInt16(itemScriptFile.allScripts[i].commands[0].Parameters[1].RawData, 0);
+ //};
// Parse all event files and fix instances of ground items according to the new order
int cnt = Filesystem.GetEventFileCount();
@@ -617,7 +617,7 @@ namespace DSPRE
if (isItem)
{
int itemScriptID = eventFile.overworlds[j].scriptNumber - (itemScrMin - 1);
- eventFile.overworlds[j].scriptNumber = (ushort)(itemScrMin + vanillaItemsArray[itemScriptID - 1]);
+ //eventFile.overworlds[j].scriptNumber = (ushort)(itemScrMin + vanillaItemsArray[itemScriptID - 1]);
dirty = true;
}
}
@@ -644,29 +644,29 @@ namespace DSPRE
using (DSUtils.EasyWriter ewr = new DSUtils.EasyWriter(ow9path, ow9offs))
{
- ewr.Write((ushort)(itemScrMin + vanillaItemsArray[itemScriptID - 1]));
+ //ewr.Write((ushort)(itemScrMin + vanillaItemsArray[itemScriptID - 1]));
}
}
// Sort scripts in the Script File according to item indices
int itemCount = new TextArchive(RomInfo.itemNamesTextNumber).messages.Count;
- ScriptCommandContainer executeGive = new ScriptCommandContainer((uint)itemCount + 1, itemScriptFile.allScripts[itemScriptFile.allScripts.Count - 1]);
+ //ScriptCommandContainer executeGive = new ScriptCommandContainer((uint)itemCount + 1, itemScriptFile.allScripts[itemScriptFile.allScripts.Count - 1]);
- itemScriptFile.allScripts.Clear();
+ //itemScriptFile.allScripts.Clear();
- for (ushort i = 0; i < itemCount; i++)
- {
- List cmdList = new List {
- new ScriptCommand("SetVar 0x8008 " + i),
- new ScriptCommand("SetVar 0x8009 0x1"),
- new ScriptCommand("Jump Function_#1")
- };
-
- itemScriptFile.allScripts.Add(new ScriptCommandContainer((ushort)(i + 1), ScriptFile.ContainerTypes.Script, commandList: cmdList));
- }
-
- itemScriptFile.allScripts.Add(executeGive);
- itemScriptFile.allFunctions[0].usedScriptID = itemCount + 1;
+ //for (ushort i = 0; i < itemCount; i++)
+ //{
+ // List cmdList = new List {
+ // new ScriptCommand("SetVar 0x8008 " + i),
+ // new ScriptCommand("SetVar 0x8009 0x1"),
+ // new ScriptCommand("Jump Function_#1")
+ // };
+ //
+ // itemScriptFile.allScripts.Add(new ScriptCommandContainer((ushort)(i + 1), ScriptFile.ContainerTypes.Script, commandList: cmdList));
+ //}
+ //
+ //itemScriptFile.allScripts.Add(executeGive);
+ //itemScriptFile.allFunctions[0].usedScriptID = itemCount + 1;
itemScriptFile.SaveToFileDefaultDir(RomInfo.itemScriptFileNumber, showSuccessMessage: false);
MessageBox.Show("Operation successful.", "Process completed.", MessageBoxButtons.OK, MessageBoxIcon.Information);
diff --git a/DS_Map/ROMFiles/LearnsetData.cs b/DS_Map/ROMFiles/LearnsetData.cs
index ade3efb..ca44fdc 100644
--- a/DS_Map/ROMFiles/LearnsetData.cs
+++ b/DS_Map/ROMFiles/LearnsetData.cs
@@ -8,6 +8,7 @@ namespace DSPRE {
internal class LearnsetData : RomFile {
public static readonly int bitsMove = 9;
public static readonly int bitsLevel = 7;
+ public static readonly int VanillaLimit = 20;
public readonly UniqueList<(byte level, ushort move)> list;
diff --git a/DS_Map/ROMFiles/ScriptActionContainer.cs b/DS_Map/ROMFiles/ScriptActionContainer.cs
deleted file mode 100644
index a004d56..0000000
--- a/DS_Map/ROMFiles/ScriptActionContainer.cs
+++ /dev/null
@@ -1,13 +0,0 @@
-using System.Collections.Generic;
-
-namespace DSPRE.ROMFiles {
- public class ScriptActionContainer {
- public List commands;
- public uint manualUserID;
-
- public ScriptActionContainer(uint actionNumber, List commands = null) {
- manualUserID = actionNumber;
- this.commands = commands;
- }
- }
-}
diff --git a/DS_Map/ROMFiles/ScriptCommandContainer.cs b/DS_Map/ROMFiles/ScriptCommandContainer.cs
deleted file mode 100644
index 5654980..0000000
--- a/DS_Map/ROMFiles/ScriptCommandContainer.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-using System.Collections.Generic;
-
-namespace DSPRE.ROMFiles {
- public class ScriptCommandContainer {
- public List commands;
- public uint manualUserID;
- public int usedScriptID; //useScript ID referenced by this Script/Function
- public ScriptFile.ContainerTypes containerType;
- internal static readonly string functionStart;
-
- public ScriptCommandContainer(uint scriptNumber, ScriptFile.ContainerTypes containerType, int usedScriptID = -1, List commandList = null) {
- manualUserID = scriptNumber;
- this.usedScriptID = usedScriptID;
- this.containerType = containerType;
- commands = commandList;
- }
-
- public ScriptCommandContainer(uint newID, ScriptCommandContainer toCopy) {
- manualUserID = newID;
- usedScriptID = toCopy.usedScriptID;
- containerType = toCopy.containerType;
- commands = new List(toCopy.commands); //command parameters need to be copied recursively
- }
- }
-}
diff --git a/DS_Map/ROMFiles/ScriptFile.cs b/DS_Map/ROMFiles/ScriptFile.cs
index 6040972..f037539 100644
--- a/DS_Map/ROMFiles/ScriptFile.cs
+++ b/DS_Map/ROMFiles/ScriptFile.cs
@@ -1,8 +1,8 @@
-using DSPRE.Resources;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
+using System.Text;
using System.Windows.Forms;
using static DSPRE.RomInfo;
@@ -11,11 +11,12 @@ namespace DSPRE.ROMFiles {
/// Class to store script file data in Pokémon NDS games
///
public class ScriptFile : RomFile {
- //this enum doesn't really make much sense now but it will, once scripts can be called and jumped to
+ public List CommandSequence { get; set; } = new List();
+ public Dictionary OffsetToLabelMap { get; set; } = new Dictionary();
public enum ContainerTypes {
- Function,
Action,
- Script
+ Script,
+ Label
};
public struct ContainerReference {
@@ -23,31 +24,32 @@ namespace DSPRE.ROMFiles {
public uint offsetInFile;
}
- public List allScripts = new List();
- public List allFunctions = new List();
- public List allActions = new List();
public int fileID = -1;
public bool isLevelScript = new bool();
- public bool hasNoScripts { get { return fileID == int.MaxValue; } }
+ public bool HasNoScripts { get { return fileID == int.MaxValue; } }
public static readonly char[] specialChars = { 'x', 'X', '#', '.', '_' };
- public ScriptFile(Stream fs, bool readFunctions = true, bool readActions = true) {
- List scriptOffsets = new List();
- List functionOffsets = new List();
- List movementOffsets = new List();
+ public ScriptFile(Stream fs) {
+ // Initialize collections
+ CommandSequence = new List();
+ OffsetToLabelMap = new Dictionary();
using (BinaryReader br = new BinaryReader(fs)) {
- /* Read script offsets from the header */
- isLevelScript = true; // Is Level Script as long as magic number FD13 doesn't exist
+ // Read header to find entry points
+ List entryPointOffsets = new List();
+ isLevelScript = true; // Is Level Script until proved otherwise
+
try {
+ int entryPointIndex = 0;
while (true) {
+ long headerPos = br.BaseStream.Position;
uint checker = br.ReadUInt16();
br.BaseStream.Position -= 0x2;
uint value = br.ReadUInt32();
- if (value == 0 && scriptOffsets.Count == 0) {
+ if (value == 0 && entryPointOffsets.Count == 0) {
isLevelScript = true;
break;
}
@@ -58,12 +60,17 @@ namespace DSPRE.ROMFiles {
break;
}
- int offsetFromStart = (int)(value + br.BaseStream.Position); // Don't change order of addition
- scriptOffsets.Add(offsetFromStart);
+ int offsetFromStart = (int)(value + headerPos + 4);
+ entryPointOffsets.Add(offsetFromStart);
+
+ // Create entry point label
+ string entryLabel = $"script_{entryPointIndex}";
+ OffsetToLabelMap[offsetFromStart] = entryLabel;
+ entryPointIndex++;
}
} catch (EndOfStreamException) {
if (!isLevelScript) {
- MessageBox.Show("Script File couldn't be read correctly.", "Unexpected EOF", MessageBoxButtons.OK, MessageBoxIcon.Error); // Now this may appear in a few level scripts that don't have a 4-byte aligned "00 00 00 00"
+ MessageBox.Show("Script File couldn't be read correctly.", "Unexpected EOF", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
@@ -71,90 +78,56 @@ namespace DSPRE.ROMFiles {
return;
}
- /* Read scripts */
- for (uint current = 0; current < scriptOffsets.Count; current++) {
- int index = scriptOffsets.FindIndex(x => x == scriptOffsets[(int)current]); // Check for UseScript
+ // Skip the 0xFD13 marker
+ br.ReadUInt16();
- if (index == current) {
- br.BaseStream.Position = scriptOffsets[(int)current];
+ // Process commands until end of file
+ while (br.BaseStream.Position < br.BaseStream.Length) {
+ int currentOffset = (int)br.BaseStream.Position;
- List cmdList = new List();
- bool endScript = new bool();
- while (!endScript) {
- ScriptCommand cmd = ReadCommand(br, ref functionOffsets, ref movementOffsets);
- if (cmd.cmdParams is null) {
- return;
- }
+ // Sometimes we might hit padding bytes - try to detect and skip
+ if (br.BaseStream.Position + 2 <= br.BaseStream.Length) {
+ byte[] peekBytes = br.ReadBytes(2);
+ br.BaseStream.Position -= 2;
- cmdList.Add(cmd);
-
- if (ScriptDatabase.endCodes.Contains((ushort)cmd.id)) {
- endScript = true;
- }
- }
-
- allScripts.Add(new ScriptCommandContainer(current + 1, ContainerTypes.Script, commandList: cmdList));
- } else {
- allScripts.Add(new ScriptCommandContainer(current + 1, ContainerTypes.Script, usedScriptID: index + 1));
- }
- }
-
- /* Read functions */
- if (readFunctions) {
- for (uint current = 0; current < functionOffsets.Count; current++) {
- br.BaseStream.Position = functionOffsets[(int)current];
- int posInList = scriptOffsets.IndexOf(functionOffsets[(int)current]); // Check for UseScript
-
- if (posInList == -1) {
- List cmdList = new List();
- bool endFunction = new bool();
- while (!endFunction) {
- ScriptCommand command = ReadCommand(br, ref functionOffsets, ref movementOffsets);
- if (command.cmdParams is null) {
- return;
- }
-
- cmdList.Add(command);
- if (ScriptDatabase.endCodes.Contains((ushort)command.id)) {
- endFunction = true;
- }
- }
-
- allFunctions.Add(new ScriptCommandContainer(current + 1, ContainerTypes.Function, commandList: cmdList));
- } else {
- allFunctions.Add(new ScriptCommandContainer(current + 1, ContainerTypes.Function, usedScriptID: posInList + 1));
+ // Check if these look like padding
+ if (peekBytes[0] == 0 && peekBytes[1] == 0) {
+ // Skip padding byte
+ br.ReadByte();
+ continue;
}
}
- }
- if (readActions) {
- /* Read movements */
- for (uint current = 0; current < movementOffsets.Count; current++) {
- br.BaseStream.Position = movementOffsets[(int)current];
-
- List cmdList = new List();
- bool endMovement = new bool();
- while (!endMovement) {
- ushort id = br.ReadUInt16();
- if (id == 0xFE) {
- endMovement = true;
- cmdList.Add(new ScriptAction(id, 0));
- } else {
- cmdList.Add(new ScriptAction(id, br.ReadUInt16()));
- }
- }
-
- allActions.Add(new ScriptActionContainer(current + 1, commands: cmdList));
+ ScriptCommand cmd = ReadCommand(br);
+ if (cmd == null || cmd.id == null) {
+ break; // End of file or error
}
+
+ // Check if this is an entry point or jump target
+ bool isEntryPoint = false;
+ int entryPointIndex = -1;
+ string label = null;
+
+ if (OffsetToLabelMap.TryGetValue(currentOffset, out string existingLabel)) {
+ label = existingLabel;
+ isEntryPoint = existingLabel.StartsWith("script_");
+ if (isEntryPoint) {
+ entryPointIndex = int.Parse(existingLabel.Substring("script_".Length));
+ }
+ }
+
+ // Add to command sequence
+ CommandSequence.Add(new ScriptCommandPosition(
+ cmd, currentOffset, label, isEntryPoint, entryPointIndex));
}
}
}
- public ScriptFile(int fileID, bool readFunctions = true, bool readActions = true) : this(getFileStream(fileID), readFunctions, readActions) {
+ public ScriptFile(int fileID) : this(getFileStream(fileID)) {
this.fileID = fileID;
}
- static FileStream getFileStream(int fileID) {
+ public static FileStream getFileStream(int fileID) {
string path = Filesystem.GetScriptPath(fileID);
return new FileStream(path, FileMode.OpenOrCreate);
}
@@ -164,732 +137,441 @@ namespace DSPRE.ROMFiles {
return $"{prefix}Script File " + this.fileID;
}
- public ScriptFile(List scripts, List functions, List movements, int fileID = -1) {
- allScripts = scripts;
- allFunctions = functions;
- allActions = movements;
- isLevelScript = false;
- }
-
- public ScriptFile(IEnumerable scriptLines, IEnumerable functionLines, IEnumerable actionLines, int fileID = -1) {
- //TODO: give user the possibility to jump to/call a script
- //once it's done, this Predicate below will be the only one needed, since there will be no distinction between
- //a script and a function
- bool functionEndCondition(List<(int linenum, string text)> source, int x, ushort? id) {
- return source[x].text.TrimEnd().IgnoreCaseEquals(RomInfo.ScriptCommandNamesDict[0x0002]) //End
- || source[x].text.IndexOf(RomInfo.ScriptCommandNamesDict[0x0016] + ' ' + ContainerTypes.Function.ToString(), StringComparison.InvariantCultureIgnoreCase) >= 0 //Jump Function_#
- || source[x].text.TrimEnd().IgnoreCaseEquals(RomInfo.ScriptCommandNamesDict[0x001B])
- || ScriptDatabase.endCodes.Contains(id);
- } //Return
-
- bool scriptEndCondition(List<(int linenum, string text)> source, int x, ushort? id) {
- return source[x].text.TrimEnd().IgnoreCaseEquals(RomInfo.ScriptCommandNamesDict[0x0002]) //End
- || source[x].text.IndexOf(RomInfo.ScriptCommandNamesDict[0x0016] + ' ' + ContainerTypes.Function.ToString()) >= 0 //Jump Function_#
- || ScriptDatabase.endCodes.Contains(id);
- }
-
- allScripts = ReadCommandsFromLines(scriptLines.ToList(), ContainerTypes.Script, scriptEndCondition); //Jump + whitespace
- if (allScripts is null) {
- return;
- }
-
- if (allScripts.Count <= 0) {
- this.fileID = int.MaxValue;
- return;
- }
-
- if (functionLines != null) {
- allFunctions = ReadCommandsFromLines(functionLines.ToList(), ContainerTypes.Function, functionEndCondition); //Jump + whitespace
- if (allFunctions is null) {
- return;
- }
- }
-
- if (actionLines != null) {
- allActions = ReadActionsFromLines(actionLines.ToList());
- if (allActions is null) {
- return;
- }
- }
-
+ public ScriptFile(IEnumerable lines, int fileID = -1) {
+ CommandSequence = new List();
+ OffsetToLabelMap = new Dictionary();
this.fileID = fileID;
+
+ int currentOffset = 0;
+ string currentLabel = null;
+ int entryPointIndex = 0;
+ bool isCurrentLabelEntryPoint = false; // Track this instead
+
+ // Parse each line
+ foreach (var line in lines) {
+ string trimmedLine = line.Trim();
+
+ // Skip empty lines
+ if (string.IsNullOrWhiteSpace(trimmedLine)) {
+ continue;
+ }
+
+ // Check if this is a label
+ if (trimmedLine.EndsWith(":")) {
+ currentLabel = trimmedLine.Substring(0, trimmedLine.Length - 1);
+
+ // Track if it's an entry point
+ isCurrentLabelEntryPoint = currentLabel.StartsWith("script_");
+ if (isCurrentLabelEntryPoint) {
+ if (int.TryParse(currentLabel.Substring("script_".Length), out int index)) {
+ entryPointIndex = index;
+ }
+ }
+
+ continue;
+ }
+
+ // Parse the command
+ ScriptCommand cmd = new ScriptCommand(trimmedLine);
+ if (cmd.id == null) {
+ continue; // Skip invalid commands
+ }
+
+ // Calculate the size of this command for offset tracking
+ int cmdSize = 2; // Command ID (2 bytes)
+ foreach (var param in cmd.Parameters) {
+ cmdSize += param.RawData.Length;
+ }
+
+ // Use the tracked entry point flag
+ int epIndex = isCurrentLabelEntryPoint ? entryPointIndex : -1;
+
+ CommandSequence.Add(new ScriptCommandPosition(
+ cmd, currentOffset, currentLabel, isCurrentLabelEntryPoint, epIndex));
+
+ // Map the offset to the label for jump targets
+ if (currentLabel != null) {
+ OffsetToLabelMap[currentOffset] = currentLabel;
+ currentLabel = null; // Reset label
+ isCurrentLabelEntryPoint = false; // Reset entry point flag
+ }
+
+ // Update offset for next command
+ currentOffset += cmdSize;
+ }
}
- private ScriptCommand ReadCommand(BinaryReader dataReader, ref List functionOffsets, ref List actionOffsets) {
- ushort id = dataReader.ReadUInt16();
- List parameterList = new List();
+ private ScriptCommand ReadCommand(BinaryReader br) {
+ // Check if we've reached the end of the file
+ if (br.BaseStream.Position >= br.BaseStream.Length) {
+ return null;
+ }
- /* How to read parameters for different commands for DPPt*/
- switch (RomInfo.gameFamily) {
- case GameFamilies.DP:
- case GameFamilies.Plat:
- switch (id) {
- case 0x16: //Jump
- case 0x1A: //Call
- ProcessRelativeJump(dataReader, ref parameterList, ref functionOffsets);
- break;
- case 0x17: //JumpIfObjID
- case 0x18: //JumpIfBgID
- case 0x19: //JumpIfPlayerDir
- case 0x1C: //JumpIf
- case 0x1D: //CallIf
- //in the case of JumpIf and CallIf, the first param is a comparisonOperator
- //for JumpIfPlayerDir it's a directionID
- //for JumpIfObjID, it's an EventID
- parameterList.Add(new byte[] { dataReader.ReadByte() });
- ProcessRelativeJump(dataReader, ref parameterList, ref functionOffsets);
- break;
- case 0x5E: // Movement
- parameterList.Add(BitConverter.GetBytes(dataReader.ReadUInt16()));
- ProcessRelativeJump(dataReader, ref parameterList, ref actionOffsets);
- break;
- case 0x1CF:
- case 0x1D0:
- case 0x1D1: {
- byte parameter1 = dataReader.ReadByte();
- parameterList.Add(new byte[] { parameter1 });
- if (parameter1 == 0x2) {
- parameterList.Add(dataReader.ReadBytes(2)); //Read additional u16 if first param read is 2
- }
- }
- break;
- case 0x21D: {
- ushort parameter1 = dataReader.ReadUInt16();
- parameterList.Add(BitConverter.GetBytes(parameter1));
+ try {
+ ushort id = br.ReadUInt16();
+ List parameters = new List();
- switch (parameter1) {
- case 0:
- case 1:
- case 2:
- case 3:
- parameterList.Add(dataReader.ReadBytes(2));
- parameterList.Add(dataReader.ReadBytes(2));
- break;
- case 4:
- case 5:
- parameterList.Add(dataReader.ReadBytes(2));
- break;
- case 6:
- break;
- }
- }
- break;
- case 0x235: {
- short parameter1 = dataReader.ReadInt16();
- parameterList.Add(BitConverter.GetBytes(parameter1));
+ // Track the original position for jump calculations
+ long commandStartPos = br.BaseStream.Position - 2;
- switch (parameter1) {
- case 0x1:
- case 0x3:
- parameterList.Add(dataReader.ReadBytes(2));
- parameterList.Add(dataReader.ReadBytes(2));
- parameterList.Add(dataReader.ReadBytes(2));
- break;
- case 0x4:
- parameterList.Add(dataReader.ReadBytes(2));
- parameterList.Add(dataReader.ReadBytes(2));
- break;
- case 0x0:
- case 0x6:
- parameterList.Add(dataReader.ReadBytes(2));
- break;
- default:
- break;
- }
- }
- break;
- case 0x23E: {
- short parameter1 = dataReader.ReadInt16();
- parameterList.Add(BitConverter.GetBytes(parameter1));
+ switch (gameFamily) {
+ case GameFamilies.Plat:
+ switch (id) {
+ case 0x16: // Jump
+ case 0x1A: // Call
+ ProcessRelativeJumpLinear(br, parameters);
+ break;
- switch (parameter1) {
- case 0x1:
- case 0x3:
- parameterList.Add(dataReader.ReadBytes(2));
- break;
- case 0x5:
- case 0x6:
- parameterList.Add(dataReader.ReadBytes(2));
- parameterList.Add(dataReader.ReadBytes(2));
- break;
- default:
- break;
+ case 0x17: // JumpIfObjID
+ case 0x18: // JumpIfEventID
+ case 0x19: // JumpIfPlayerDir
+ case 0x1C: // JumpIf
+ case 0x1D: // CallIf
+ // First parameter (condition)
+ parameters.Add(new ScriptParameter(new byte[] { br.ReadByte() }));
+ // Then jump target
+ ProcessRelativeJumpLinear(br, parameters);
+ break;
+
+ case 0x5E: // Movement
+ parameters.Add(new ScriptParameter(BitConverter.GetBytes(br.ReadUInt16())));
+ ProcessRelativeJumpLinear(br, parameters);
+ break;
+
+ case 0x1CF:
+ case 0x1D0:
+ case 0x1D1: {
+ byte parameter1 = br.ReadByte();
+ parameters.Add(new ScriptParameter(new byte[] { parameter1 }));
+ if (parameter1 == 0x2) {
+ parameters.Add(new ScriptParameter(br.ReadBytes(2))); //Read additional u16 if first param read is 2
+ }
}
- }
- break;
- case 0x2C4: {
- byte parameter1 = dataReader.ReadByte();
- parameterList.Add(new byte[] { parameter1 });
- if (parameter1 == 0 || parameter1 == 1) {
- parameterList.Add(dataReader.ReadBytes(2));
+ break;
+ case 0x21D: {
+ ushort parameter1 = br.ReadUInt16();
+ parameters.Add(new ScriptParameter(BitConverter.GetBytes(parameter1)));
+
+ switch (parameter1) {
+ case 0:
+ case 1:
+ case 2:
+ case 3:
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ break;
+ case 4:
+ case 5:
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ break;
+ case 6:
+ break;
+ }
}
- }
- break;
- case 0x2C5: {
+ break;
+ case 0x235: {
+ short parameter1 = br.ReadInt16();
+ parameters.Add(new ScriptParameter(BitConverter.GetBytes(parameter1)));
+
+ switch (parameter1) {
+ case 0x1:
+ case 0x3:
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ break;
+ case 0x4:
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ break;
+ case 0x0:
+ case 0x6:
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ case 0x23E: {
+ short parameter1 = br.ReadInt16();
+ parameters.Add(new ScriptParameter(BitConverter.GetBytes(parameter1)));
+
+ switch (parameter1) {
+ case 0x1:
+ case 0x3:
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ break;
+ case 0x5:
+ case 0x6:
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ case 0x2C4: {
+ byte parameter1 = br.ReadByte();
+ parameters.Add(new ScriptParameter(new byte[] { parameter1 }));
+ if (parameter1 == 0 || parameter1 == 1) {
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ }
+ }
+ break;
+ case 0x2C5: {
+ if (RomInfo.gameVersion == GameVersions.Platinum) {
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ } else {
+ goto default;
+ }
+ }
+ break;
+ case 0x2C6:
+ case 0x2C9:
+ case 0x2CA:
+ case 0x2CD:
if (RomInfo.gameVersion == GameVersions.Platinum) {
- parameterList.Add(dataReader.ReadBytes(2));
- parameterList.Add(dataReader.ReadBytes(2));
+ break;
} else {
goto default;
}
- }
- break;
- case 0x2C6:
- case 0x2C9:
- case 0x2CA:
- case 0x2CD:
- if (RomInfo.gameVersion == GameVersions.Platinum) {
+ case 0x2CF:
+ if (RomInfo.gameVersion == GameVersions.Platinum) {
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ } else {
+ goto default;
+ }
+
break;
- } else {
- goto default;
- }
- case 0x2CF:
- if (RomInfo.gameVersion == GameVersions.Platinum) {
- parameterList.Add(dataReader.ReadBytes(2));
- parameterList.Add(dataReader.ReadBytes(2));
- } else {
- goto default;
- }
+ default:
+ // Standard command handling
+ if (RomInfo.ScriptCommandParametersDict.TryGetValue(id, out byte[] paramSizes)) {
+ foreach (int size in paramSizes) {
+ parameters.Add(new ScriptParameter(br.ReadBytes(size)));
+ }
+ }
+ break;
+ }
+ break;
+ case GameFamilies.HGSS:
+ switch (id) {
+ case 0x16: //Jump
+ case 0x1A: //Call
+ ProcessRelativeJumpLinear(br, parameters);
+ break;
+
+ case 0x17: //JumpIfObjID
+ case 0x18: //JumpIfBgID
+ case 0x19: //JumpIfPlayerDir
+ case 0x1C: //JumpIf
+ case 0x1D: //CallIf
+ parameters.Add(new ScriptParameter(new byte[] { br.ReadByte() })); //in the case of JumpIf and CallIf, the first param is a comparisonOperator
+ ProcessRelativeJumpLinear(br, parameters);
+ break;
+
+ case 0x5E: // Movement
+ parameters.Add(new ScriptParameter(BitConverter.GetBytes(br.ReadUInt16()))); //in the case of Movement, the first param is an overworld ID
+ ProcessRelativeJumpLinear(br, parameters);
+ break;
+
+ case 0x190:
+ case 0x191:
+ case 0x192: {
+ byte parameter1 = br.ReadByte();
+ parameters.Add(new ScriptParameter(new byte[] { parameter1 }));
+ if (parameter1 == 0x2) {
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ }
+ }
+ break;
+
+ case 0x1D1: // Number of parameters differ depending on the first parameter value
+ {
+ short parameter1 = br.ReadInt16();
+ parameters.Add(new ScriptParameter(BitConverter.GetBytes(parameter1)));
+ switch (parameter1) {
+ case 0x0:
+ case 0x1:
+ case 0x2:
+ case 0x3:
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ break;
+ case 0x4:
+ case 0x5:
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ break;
+ case 0x6:
+ break;
+ case 0x7:
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+
+ case 0x1E9: // Number of parameters differ depending on the first parameter value
+ {
+ short parameter1 = br.ReadInt16();
+ parameters.Add(new ScriptParameter(BitConverter.GetBytes(parameter1)));
+ switch (parameter1) {
+ case 0x0:
+ break;
+ case 0x1:
+ case 0x2:
+ case 0x3:
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ break;
+ case 0x4:
+ break;
+ case 0x5:
+ case 0x6:
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ parameters.Add(new ScriptParameter(br.ReadBytes(2)));
+ break;
+ case 0x7:
+ case 0x8:
+ break;
+ default:
+ break;
+ }
+ }
break;
- default:
- addParametersToList(ref parameterList, id, dataReader);
- break;
- }
+
+ default:
+ // For standard commands, read parameters based on definition
+ if (RomInfo.ScriptCommandParametersDict.TryGetValue(id, out byte[] paramSizes)) {
+ foreach (int size in paramSizes) {
+ parameters.Add(new ScriptParameter(br.ReadBytes(size)));
+ }
+ }
+ break;
+ }
break;
- case GameFamilies.HGSS:
- switch (id) {
- case 0x16: //Jump
- case 0x1A: //Call
- ProcessRelativeJump(dataReader, ref parameterList, ref functionOffsets);
- break;
- case 0x17: //JumpIfObjID
- case 0x18: //JumpIfBgID
- case 0x19: //JumpIfPlayerDir
- case 0x1C: //JumpIf
- case 0x1D: //CallIf
- parameterList.Add(new byte[] { dataReader.ReadByte() }); //in the case of JumpIf and CallIf, the first param is a comparisonOperator
- ProcessRelativeJump(dataReader, ref parameterList, ref functionOffsets);
- break;
- case 0x5E: // Movement
- parameterList.Add(BitConverter.GetBytes(dataReader.ReadUInt16())); //in the case of Movement, the first param is an overworld ID
- ProcessRelativeJump(dataReader, ref parameterList, ref actionOffsets);
- break;
- case 0x190:
- case 0x191:
- case 0x192: {
- byte parameter1 = dataReader.ReadByte();
- parameterList.Add(new byte[] { parameter1 });
- if (parameter1 == 0x2) {
- parameterList.Add(dataReader.ReadBytes(2));
- }
- }
- break;
- case 0x1D1: // Number of parameters differ depending on the first parameter value
- {
- short parameter1 = dataReader.ReadInt16();
- parameterList.Add(BitConverter.GetBytes(parameter1));
- switch (parameter1) {
- case 0x0:
- case 0x1:
- case 0x2:
- case 0x3:
- parameterList.Add(dataReader.ReadBytes(2));
- parameterList.Add(dataReader.ReadBytes(2));
- break;
- case 0x4:
- case 0x5:
- parameterList.Add(dataReader.ReadBytes(2));
- break;
- case 0x6:
- break;
- case 0x7:
- parameterList.Add(dataReader.ReadBytes(2));
- break;
- default:
- break;
- }
- }
- break;
- case 0x1E9: // Number of parameters differ depending on the first parameter value
- {
- short parameter1 = dataReader.ReadInt16();
- parameterList.Add(BitConverter.GetBytes(parameter1));
- switch (parameter1) {
- case 0x0:
- break;
- case 0x1:
- case 0x2:
- case 0x3:
- parameterList.Add(dataReader.ReadBytes(2));
- break;
- case 0x4:
- break;
- case 0x5:
- case 0x6:
- parameterList.Add(dataReader.ReadBytes(2));
- parameterList.Add(dataReader.ReadBytes(2));
- break;
- case 0x7:
- case 0x8:
- break;
- default:
- break;
- }
- }
- break;
- default:
- addParametersToList(ref parameterList, id, dataReader);
- break;
- }
-
- break;
- }
-
- return new ScriptCommand(id, parameterList);
- }
-
- private void ProcessRelativeJump(BinaryReader dataReader, ref List parameterList, ref List offsetsList) {
- int relativeOffset = dataReader.ReadInt32();
- int offsetFromScriptFileStart = (int)(relativeOffset + dataReader.BaseStream.Position);
-
- if (!offsetsList.Contains(offsetFromScriptFileStart)) {
- offsetsList.Add(offsetFromScriptFileStart);
- }
-
- int functionNumber = offsetsList.IndexOf(offsetFromScriptFileStart);
- if (functionNumber < 0) {
- throw new InvalidOperationException();
- }
-
- parameterList.Add(BitConverter.GetBytes(functionNumber + 1));
- }
-
- private void addParametersToList(ref List parameterList, ushort id, BinaryReader dataReader) {
- Console.WriteLine("Loaded command id: " + id.ToString("X4"));
- try {
- foreach (int bytesToRead in RomInfo.ScriptCommandParametersDict[id]) {
- parameterList.Add(dataReader.ReadBytes(bytesToRead));
}
- } catch (NullReferenceException) {
- MessageBox.Show("Script command " + id + "can't be handled for now." +
- Environment.NewLine + "Reference offset 0x" + dataReader.BaseStream.Position.ToString("X"), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
- parameterList = null;
- return;
- } catch {
- MessageBox.Show("Error: ID Read - " + id +
- Environment.NewLine + "Reference offset 0x" + dataReader.BaseStream.Position.ToString("X"), "Unrecognized script command", MessageBoxButtons.OK, MessageBoxIcon.Error);
- parameterList = null;
- return;
- }
- }
- private void AddReference(ref List references, ushort commandID, List parameterList, int pos, ScriptCommandContainer cont) {
- if (ScriptDatabase.commandsWithRelativeJump.TryGetValue(commandID, out int parameterWithRelativeJump)) {
- uint invokedID = BitConverter.ToUInt32(parameterList[parameterWithRelativeJump], 0); // Jump, Call
-
- if (commandID == 0x005E)
- references.Add(new ScriptReference(cont.containerType, cont.manualUserID, ContainerTypes.Action, invokedID, pos - 4));
- else {
- references.Add(new ScriptReference(cont.containerType, cont.manualUserID, ContainerTypes.Function, invokedID, pos - 4));
- }
- }
- }
-
- private List ReadCommandsFromLines(List linelist, ContainerTypes containerType, Func, int, ushort?, bool> endConditions) {
- List<(int linenum, string text)> lineSource = new List<(int linenum, string text)>();
-
- for (int l = 0; l < linelist.Count; l++) {
- string cur = linelist[l];
- if (!string.IsNullOrWhiteSpace(cur)) {
- lineSource.Add((l, cur));
- }
- }
-
- List ls = new List();
- int i = 0;
-
- try {
- uint scriptNumber = 0;
-
- while (i < lineSource.Count) {
- if (scriptNumber == 0) {
- int positionOfScriptNumber;
- int positionOfScriptKeyword = lineSource[i].text.IndexOf(containerType.ToString(), StringComparison.InvariantCultureIgnoreCase);
-
- if (positionOfScriptKeyword > 0) {
- MessageBox.Show("Unrecognized container keyword: \"" + lineSource[i] + '"', "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
- return null;
- } else if (positionOfScriptKeyword < 0) {
- i++;
- continue;
- } else {
- if ((positionOfScriptNumber = lineSource[i].text.IndexOfFirstNumber()) < positionOfScriptKeyword) {
- MessageBox.Show("Unspecified Script/Function label.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
- return null;
- }
- }
-
- scriptNumber = uint.Parse(lineSource[i++].text.Substring(positionOfScriptNumber).Split()[0].Replace(":", ""));
- }
-
- if (lineSource[i].text.IndexOf("UseScript", StringComparison.InvariantCultureIgnoreCase) >= 0) {
- int useScriptNumber = short.Parse(lineSource[i].text.Substring(1 + lineSource[i].text.IndexOf('#')));
- ls.Add(new ScriptCommandContainer(scriptNumber, containerType, useScriptNumber));
- i++;
- } else {
- /* Read script commands */
- List cmdList = new List();
- ScriptCommand lastRead;
-
- do {
- lastRead = new ScriptCommand(lineSource[i].text, lineSource[i].linenum + 1);
- if (lastRead.id is null) {
- return null;
- }
-
- cmdList.Add(lastRead);
- }
- while (!endConditions(lineSource, i++, lastRead.id));
-
- ls.Add(new ScriptCommandContainer(scriptNumber, containerType, commandList: cmdList));
- }
-
- scriptNumber = 0;
- }
- } catch (ArgumentOutOfRangeException) {
- MessageBox.Show($"Unexpectedly reached end of lines.\n\n" +
- $"Last line index: {lineSource[i].linenum}.\n" +
- $"Managed to parse {ls.Count} Command Containers.", "Fatal Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+ return new ScriptCommand(id, parameters);
+ } catch (Exception ex) {
+ Console.WriteLine($"Error reading command at offset {br.BaseStream.Position}: {ex.Message}");
return null;
}
-
- return ls;
}
- private List ReadActionsFromLines(List linelist) {
- List<(int linenum, string text)> lineSource = new List<(int linenum, string text)>();
+ private void ProcessRelativeJumpLinear(BinaryReader br, List parameters) {
+ // Read the relative offset
+ int relativeOffset = br.ReadInt32();
- for (int l = 0; l < linelist.Count; l++) {
- string cur = linelist[l];
- if (!string.IsNullOrWhiteSpace(cur)) {
- lineSource.Add((l, cur));
- }
+ // Calculate absolute target
+ int targetOffset = (int)(relativeOffset + br.BaseStream.Position);
+
+ // Add to label map if not already there
+ if (!OffsetToLabelMap.ContainsKey(targetOffset)) {
+ string labelName = $"label_0x{targetOffset:X}";
+ OffsetToLabelMap[targetOffset] = labelName;
}
- List ls = new List();
- int i = 0;
+ // Create jump parameter
+ string targetLabel = OffsetToLabelMap[targetOffset];
+ ScriptParameter jumpParam = new ScriptParameter(relativeOffset, targetLabel) {
+ Type = ScriptParameter.ParameterType.RelativeJump
+ };
+ parameters.Add(jumpParam);
+ }
- try {
- uint actionNumber = 0;
+ // Convert to text - outputs commands in the order they appear in the binary
+ public string ToText() {
+ StringBuilder sb = new StringBuilder();
- while (i < lineSource.Count) {
- if (actionNumber == 0) {
- int positionOfActionNumber;
- int positionOfActionKeyword = lineSource[i].text.IndexOf(ContainerTypes.Action.ToString(), StringComparison.InvariantCultureIgnoreCase);
-
- if (positionOfActionKeyword > 0) {
- MessageBox.Show("Unrecognized container keyword: \"" + lineSource[i] + '"', "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
- return null;
- } else if (positionOfActionKeyword < 0) {
- i++;
- continue;
- } else {
- if ((positionOfActionNumber = lineSource[i].text.IndexOfFirstNumber()) < positionOfActionKeyword) {
- MessageBox.Show("Unspecified Action label.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
- return null;
- }
- }
-
- actionNumber = uint.Parse(lineSource[i].text.Substring(positionOfActionNumber).Split()[0].Replace(":", ""));
- i++;
- }
-
- List cmdList = new List();
- /* Read script actions */
- do {
- ScriptAction toAdd = new ScriptAction(lineSource[i].text, lineSource[i].linenum + 1);
- if (toAdd.id is null) {
- return null;
- }
-
- cmdList.Add(toAdd);
- }
- while (!lineSource[i++].text.IgnoreCaseEquals(RomInfo.ScriptActionNamesDict[0x00FE]));
-
- ls.Add(new ScriptActionContainer(actionNumber, commands: cmdList));
- actionNumber = 0;
+ foreach (var cmdPos in CommandSequence) {
+ // If this command needs a label, output it
+ if (!string.IsNullOrEmpty(cmdPos.Label)) {
+ sb.AppendLine($"\n{cmdPos.Label}:");
}
- } catch (ArgumentOutOfRangeException) {
- MessageBox.Show($"Unexpectedly reached end of lines.\n\n" +
- $"Last line index: {i}.\n" +
- $"Managed to parse {ls.Count} Command Containers.", "Fatal Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
- return null;
+
+ // Output the command (indented if not an entry point)
+ string indent = "\t";
+ sb.AppendLine($"{indent}{cmdPos.Command.name}");
}
- return ls;
+ return sb.ToString();
}
public override byte[] ToByteArray() {
MemoryStream newData = new MemoryStream();
using (BinaryWriter writer = new BinaryWriter(newData)) {
- List scriptOffsets = new List(); //uint OFFSET, int Function/Script/Action ID
- List functionOffsets = new List();
- List actionOffsets = new List();
+ // First, find all entry points and their positions in the command sequence
+ var entryPoints = CommandSequence
+ .Where(c => c.IsEntryPoint)
+ .OrderBy(c => c.EntryPointIndex)
+ .ToList();
- List refList = new List();
+ // Allocate space for header
+ long headerStart = writer.BaseStream.Position;
+ writer.BaseStream.Position += entryPoints.Count * 4;
+ writer.Write((ushort)0xFD13); // End of header marker
- /* Allocate enough space for script pointers, which we do not know yet */
- try {
- writer.BaseStream.Position += allScripts.Count * 0x4;
- writer.Write((ushort)0xFD13); // Signal the end of header section
- List useScriptCallers = new List();
+ // Keep track of command offsets in the new file
+ Dictionary oldOffsetToNewOffset = new Dictionary();
- /* Write scripts */
- foreach (ScriptCommandContainer currentScript in allScripts) {
- if (currentScript.usedScriptID == -1) {
- scriptOffsets.Add(new ContainerReference() {
- ID = currentScript.manualUserID,
- offsetInFile = (uint)writer.BaseStream.Position
- }
- );
+ // Write all commands sequentially
+ foreach (var cmdPos in CommandSequence) {
+ // Record the position of this command
+ oldOffsetToNewOffset[cmdPos.Offset] = writer.BaseStream.Position;
- foreach (ScriptCommand currentCmd in currentScript.commands) {
- writer.Write((ushort)currentCmd.id);
- //System.Diagnostics.Debug.Write(BitConverter.ToString(BitConverter.GetBytes(commandID)) + " ");
+ // Write the command
+ writer.Write((ushort)cmdPos.Command.id);
- List parameterList = currentCmd.cmdParams;
- foreach (byte[] b in parameterList) {
- writer.Write(b);
- //System.Diagnostics.Debug.WriteLine(BitConverter.ToString(parameterList[k]) + " ");
+ // Write parameters, handling jumps specially
+ foreach (var param in cmdPos.Command.Parameters) {
+ if (param.Type == ScriptParameter.ParameterType.RelativeJump) {
+ // For jump targets, we need to recalculate the relative offset
+ // based on the new positions of commands
+
+ // Find the target offset in the original file
+ int targetOffset = -1;
+ foreach (var kvp in OffsetToLabelMap) {
+ if (kvp.Value == param.TargetLabel) {
+ targetOffset = kvp.Key;
+ break;
}
-
- /* If command calls a function/movement, store reference position */
- AddReference(ref refList, (ushort)currentCmd.id, parameterList, (int)writer.BaseStream.Position, currentScript);
- }
- } else {
- useScriptCallers.Add(currentScript);
- }
- }
-
- int scriptsCount = scriptOffsets.Count;
- foreach (ScriptCommandContainer caller in useScriptCallers) {
- for (int i = 0; i < scriptsCount; i++) {
- ContainerReference scriptReference = scriptOffsets[i];
-
- if (scriptReference.ID == caller.usedScriptID) {
- scriptOffsets.Add(new ContainerReference() {
- ID = caller.manualUserID,
- offsetInFile = scriptReference.offsetInFile
- }); // If script has UseScript, copy offset
- }
- }
- }
-
- /* Write functions */
- foreach (ScriptCommandContainer currentFunction in allFunctions) {
- if (currentFunction.usedScriptID == -1) {
- functionOffsets.Add(new ContainerReference() {
- ID = currentFunction.manualUserID,
- offsetInFile = (uint)writer.BaseStream.Position
- }
- );
-
- foreach (ScriptCommand currentCmd in currentFunction.commands) {
- writer.Write((ushort)currentCmd.id);
- //System.Diagnostics.Debug.Write(BitConverter.ToString(BitConverter.GetBytes(commandID)) + " ");
-
- List parameterList = currentCmd.cmdParams;
- foreach (byte[] b in parameterList) {
- writer.Write(b);
- //System.Diagnostics.Debug.Write(BitConverter.ToString(parameterList[k]) + " ");
- }
-
- /* If command calls a function/movement, store reference position */
-
- AddReference(ref refList, (ushort)currentCmd.id, parameterList, (int)writer.BaseStream.Position, currentFunction);
- }
- } else {
- int functionUsescript = currentFunction.usedScriptID - 1;
- if (functionUsescript >= scriptOffsets.Count) {
- MessageBox.Show($"Function #{currentFunction.manualUserID} refers to Script {currentFunction.usedScriptID}, which does not exist.\n" +
- $"This Script File can't be saved.", "Can't resolve UseScript reference", MessageBoxButtons.OK, MessageBoxIcon.Error);
- return null;
}
- functionOffsets.Add(new ContainerReference() {
- ID = currentFunction.manualUserID,
- offsetInFile = scriptOffsets[currentFunction.usedScriptID - 1].offsetInFile
- });
- }
- }
-
- // Movements must be halfword-aligned
- if (writer.BaseStream.Position % 2 == 1) { //Check if the writer's head is on an odd byte
- writer.Write((byte)0x00); //Add padding
- }
-
- /* Write movements */
- foreach (ScriptActionContainer currentAction in allActions) {
- actionOffsets.Add(new ContainerReference() {
- ID = currentAction.manualUserID,
- offsetInFile = (uint)writer.BaseStream.Position
- });
-
- foreach (ScriptAction currentCmd in currentAction.commands) {
- writer.Write((ushort)currentCmd.id);
- writer.Write((ushort)currentCmd.repetitionCount);
- }
- }
-
- /* Write script offsets to header */
- writer.BaseStream.Position = 0x0;
-
- scriptOffsets = scriptOffsets.OrderBy(x => x.ID).ToList(); //Write script offsets to header in the correct order
- for (int i = 0; i < scriptOffsets.Count; i++) {
- writer.Write(scriptOffsets[i].offsetInFile - (uint)writer.BaseStream.Position - 0x4);
- }
-
- SortedSet undeclaredFuncs = new SortedSet();
- SortedSet undeclaredActions = new SortedSet();
-
- SortedSet uninvokedFuncs = new SortedSet(allFunctions.Select(x => x.manualUserID).ToArray());
- SortedSet unreferencedActions = new SortedSet(allActions.Select(x => x.manualUserID).ToArray());
-
- //refList = refList.OrderBy(x => x.invokedID).ToList(); //Sorting is not necessary, after all...
-
- for (int i = 0; i < refList.Count; i++) {
- writer.BaseStream.Position = refList[i].invokedAt; //place seek head on parameter that is supposed to store the jump address
- ContainerReference result;
-
- if (refList[i].typeOfInvoked is ContainerTypes.Action) { //isApplyMovement
- result = actionOffsets.Find(entry => entry.ID == refList[i].invokedID);
-
- if (result.Equals(default(ContainerReference))) {
- undeclaredActions.Add(refList[i].invokedID);
- } else {
- int relativeOffset = (int)(result.offsetInFile - refList[i].invokedAt - 4);
+ if (targetOffset != -1 && oldOffsetToNewOffset.TryGetValue(targetOffset, out long newTargetOffset)) {
+ // Calculate new relative offset
+ int relativeOffset = (int)(newTargetOffset - (writer.BaseStream.Position + 4));
writer.Write(relativeOffset);
- unreferencedActions.Remove(refList[i].invokedID);
+ } else {
+ // Fallback - write original offset
+ writer.Write(param.TargetOffset);
}
} else {
- result = functionOffsets.Find(entry => entry.ID == refList[i].invokedID);
-
- if (result.Equals(default(ContainerReference))) {
- undeclaredFuncs.Add(refList[i].invokedID);
- } else {
- int relativeOffset = (int)(result.offsetInFile - refList[i].invokedAt - 4);
- writer.Write(relativeOffset);
-
- if (FunctionIsInvoked(refList, uninvokedFuncs, refList[i].invokedID, 0)) {
- uninvokedFuncs.Remove(refList[i].invokedID);
- }
-
- //if (refList[i].callerType != containerTypes.Function ||
- // (refList[i].callerType == refList[i].invokedType && refList[i].callerID == refList[i].invokedID) ||
- // !uninvokedFuncs.Contains(refList[i].callerID)) { //remove reference if caller is a script, or if caller calls itself, or if caller is a function that's been invoked already
- // uninvokedFuncs.Remove(refList[i].invokedID);
- //}
- }
+ // Regular parameter
+ writer.Write(param.RawData);
}
}
+ }
- //Error check
- string errorMsg = "";
- if (undeclaredFuncs.Count > 0) {
- string[] errorFunctionsUndeclared = undeclaredFuncs.ToArray().Select(x => x.ToString()).ToArray();
- errorMsg += "These Functions have been invoked but not declared: " + Environment.NewLine + string.Join(separator: ",", errorFunctionsUndeclared);
- errorMsg += Environment.NewLine;
+ // Update header with entry point offsets
+ writer.BaseStream.Position = headerStart;
+ foreach (var entryPoint in entryPoints) {
+ if (oldOffsetToNewOffset.TryGetValue(entryPoint.Offset, out long newOffset)) {
+ uint relativeOffset = (uint)(newOffset - (headerStart + 4));
+ writer.Write(relativeOffset);
}
-
- if (undeclaredActions.Count > 0) {
- string[] errorActionsUndeclared = undeclaredActions.ToArray().Select(x => x.ToString()).ToArray();
- errorMsg += "These Actions have been referenced but not declared: " + Environment.NewLine + string.Join(separator: ",", errorActionsUndeclared);
- errorMsg += Environment.NewLine;
- }
-
- if (!string.IsNullOrEmpty(errorMsg)) {
- MessageBox.Show(errorMsg + Environment.NewLine + "This Script File has not been overwritten since it can not be saved.", "Error!", MessageBoxButtons.OK, MessageBoxIcon.Error);
- errorMsg = "";
- return null;
- }
-
- if (uninvokedFuncs.Count > 0) {
- string[] orphanedFunctions = uninvokedFuncs.ToArray().Select(x => x.ToString()).ToArray();
- errorMsg += "Unused Function IDs detected: " + Environment.NewLine + string.Join(", ", orphanedFunctions);
- errorMsg += Environment.NewLine;
- errorMsg += "\nIn order for a Function to be saved, it must be invoked by a Script or by another used Function.";
- errorMsg += Environment.NewLine;
- errorMsg += Environment.NewLine;
- }
-
- if (unreferencedActions.Count > 0) {
- string[] orphanedActions = unreferencedActions.ToArray().Select(x => x.ToString()).ToArray();
- errorMsg += "Unused Action IDs detected: " + Environment.NewLine + string.Join(", ", orphanedActions);
- errorMsg += Environment.NewLine;
- errorMsg += "\nIn order for an Action to be saved, it must be called by a Script or by a used Function.";
- errorMsg += Environment.NewLine;
- errorMsg += Environment.NewLine;
- }
-
- if (!string.IsNullOrEmpty(errorMsg)) {
- MessageBox.Show(errorMsg + Environment.NewLine + "Remember that every unused Function or Action is always lost upon reloading the Script File.", "Warning!", MessageBoxButtons.OK, MessageBoxIcon.Information);
- errorMsg = "";
- }
- } catch (NullReferenceException nre) {
- Console.WriteLine(nre);
- return null;
}
}
return newData.ToArray();
}
- private bool FunctionIsInvoked(List refList, SortedSet uninvokedFuncsSet, uint funcID, int callCount = 0, uint? excludedCaller = null) {
- if (callCount >= 30) {
- MessageBox.Show("Something went very wrong saving this Script File!" +
- "\nIt is recommended that you backup its code somewhere, to avoid losing progress.",
- "Fatal error", MessageBoxButtons.OK, MessageBoxIcon.Error);
- return false;
- }
-
- Console.WriteLine("Checking calls of function " + funcID + (excludedCaller == null ? "" : " excluding Function " + excludedCaller + " as the caller."));
-
- if (!uninvokedFuncsSet.Contains(funcID)) {
- Console.WriteLine("Function " + funcID + " has already been invoked before. Nothing to check.");
- return true; //Abort
- }
-
- if (refList is null || refList.Count <= 0) {
- return false;
- }
-
- //Find the first instance of funcID being called, excluding calls coming from an excludedCaller
- //if excludedCaller is null, there's nothing to exclude: a normal search is performed.
- ScriptReference sr = refList.Find(x => x.invokedID == funcID && (excludedCaller == null || x.callerID != excludedCaller));
-
- if (sr is null) {
- Console.WriteLine("No reference found!!!");
- return false;
- }
-
- if (sr.typeOfCaller is ContainerTypes.Script) {
- Console.WriteLine("Function " + funcID + " is directly called by Script " + sr.callerID);
- return true;
- }
-
- if (sr.typeOfCaller is ContainerTypes.Function) {
- if (FunctionIsInvoked(refList, uninvokedFuncsSet, sr.callerID, ++callCount, excludedCaller: sr.invokedID)) { //check if caller function is invoked as well
- Console.WriteLine("Function " + funcID + " is called by Function " + sr.callerID);
- return true;
- }
- }
-
- Console.WriteLine("Function " + funcID + " is unused");
- return false;
- }
-
public bool SaveToFileDefaultDir(int IDtoReplace, bool showSuccessMessage = true) {
return SaveToFileDefaultDir(RomInfo.DirNames.scripts, IDtoReplace, showSuccessMessage);
}
diff --git a/DS_Map/Resources/ScriptDatabase.cs b/DS_Map/Resources/ScriptDatabase.cs
index 8b2fb8f..94e179b 100644
--- a/DS_Map/Resources/ScriptDatabase.cs
+++ b/DS_Map/Resources/ScriptDatabase.cs
@@ -505,7 +505,7 @@ namespace DSPRE.Resources {
[0x0182] = "SetBerryMulch",
[0x0183] = "SetBerrySpecies",
[0x0184] = "WateringAnimation",
- [0x0185] = "TakeBerries",
+ [0x0185] = "HarvestBerries",
[0x0186] = "SetOWDefaultPosition",
[0x0187] = "SetOWPosition",
[0x0188] = "SetOWDefaultMovement",
@@ -636,6 +636,7 @@ namespace DSPRE.Resources {
[0x0246] = "CheckVersion",
[0x0247] = "FirstPokemonInParty",
+ [0x0248] = "GetPartyPokemonTypes",
[0x024E] = "GetLottoNumber",
[0x024F] = "CheckWinLotto",
@@ -1681,11 +1682,11 @@ namespace DSPRE.Resources {
[0x0336] = new byte[] { 2 },
//International release exclusive
- [0x0337] = new byte[1] { 0 },
+ [0x0337] = new byte[] { 2, 2 },
[0x0338] = new byte[1] { 0 },
[0x0339] = new byte[1] { 0 },
[0x033A] = new byte[] { 1 },
- [0x033B] = new byte[1] { 0 },
+ [0x033B] = new byte[] { 1 },
[0x033C] = new byte[] { 1, 2 },
[0x033D] = new byte[] { 1, 2 },
[0x033E] = new byte[] { 1, 2 },
@@ -2068,6 +2069,7 @@ namespace DSPRE.Resources {
[0x01EF] = "CheckVersion",
[0x01F0] = "FirstPokemonInParty",
+ [0x01F1] = "GetPartyPokemonTypes",
[0x01F7] = "GetLottoNumber",
[0x01F8] = "CheckWinLotto",
@@ -2129,6 +2131,10 @@ namespace DSPRE.Resources {
[0x026A] = "CheckAlbumPhoto",
[0x026E] = "GetOWDirection",
+ [0x026F] = "HarvestApricorn",
+ [0x0270] = "GetApricornColor",
+ [0x0271] = "GiveApricorn",
+ [0x0272] = "TextApricorn",
[0x0289] = "ScratchOffScreen",
[0x028A] = "ReleaseScriptApp",
diff --git a/DS_Map/RomInfo.cs b/DS_Map/RomInfo.cs
index 68d0ff7..e843810 100644
--- a/DS_Map/RomInfo.cs
+++ b/DS_Map/RomInfo.cs
@@ -905,6 +905,7 @@ namespace DSPRE
{
case GameLanguages.English:
case GameLanguages.Italian:
+ case GameLanguages.French:
monIconPalTableAddress = BitConverter.ToUInt32(ARM9.ReadBytes(0x74408, 4), 0);
break;
@@ -919,7 +920,6 @@ namespace DSPRE
}
break;
- case GameLanguages.French:
case GameLanguages.Spanish:
if (gameVersion == GameVersions.HeartGold)
{
diff --git a/DS_Map/ROMFiles/LevelScriptTrigger.cs b/DS_Map/Script/LevelScriptTrigger.cs
similarity index 100%
rename from DS_Map/ROMFiles/LevelScriptTrigger.cs
rename to DS_Map/Script/LevelScriptTrigger.cs
diff --git a/DS_Map/ROMFiles/MapScreenLoadTrigger.cs b/DS_Map/Script/MapScreenLoadTrigger.cs
similarity index 100%
rename from DS_Map/ROMFiles/MapScreenLoadTrigger.cs
rename to DS_Map/Script/MapScreenLoadTrigger.cs
diff --git a/DS_Map/ROMFiles/ScriptAction.cs b/DS_Map/Script/ScriptAction.cs
similarity index 100%
rename from DS_Map/ROMFiles/ScriptAction.cs
rename to DS_Map/Script/ScriptAction.cs
diff --git a/DS_Map/ROMFiles/ScriptCommand.cs b/DS_Map/Script/ScriptCommand.cs
similarity index 77%
rename from DS_Map/ROMFiles/ScriptCommand.cs
rename to DS_Map/Script/ScriptCommand.cs
index 57d5394..a21a23f 100644
--- a/DS_Map/ROMFiles/ScriptCommand.cs
+++ b/DS_Map/Script/ScriptCommand.cs
@@ -3,6 +3,7 @@ using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
+using System.Text;
using System.Windows.Forms;
namespace DSPRE.ROMFiles {
@@ -16,15 +17,17 @@ namespace DSPRE.ROMFiles {
OW_DIRECTION,
FUNCTION_ID,
ACTION_ID,
- CMD_NUMBER
+ CMD_NUMBER,
+ LABEL_REF
};
public ushort? id;
- public List cmdParams;
+ public List Parameters { get; set; } = new List();
public string name;
- public ScriptCommand(ushort id, List parametersList) {
- if (parametersList is null) {
+ // CHANGE: Update the constructor to use ScriptParameter
+ public ScriptCommand(ushort id, List parameters) {
+ if (parameters is null) {
this.id = null;
return;
}
@@ -36,47 +39,48 @@ namespace DSPRE.ROMFiles {
switch (id) {
case 0x0016: // Jump
case 0x001A: // Call
- name += $" {FormatNumber(parametersList[0], ParamTypeEnum.FUNCTION_ID)}";
+ name += $" {FormatParameter(parameters[0], ParamTypeEnum.FUNCTION_ID)}";
break;
case 0x0017: // JumpIfObjID
case 0x0018: // JumpIfEventID
- name += $" {FormatNumber(parametersList[0], ParamTypeEnum.OW_ID)} {FormatNumber(parametersList[1])}";
+ name += $" {FormatParameter(parameters[0], ParamTypeEnum.OW_ID)} {FormatParameter(parameters[1])}";
break;
case 0x0019: // JumpIfPlayerDir
- name += $" {FormatNumber(parametersList[0], ParamTypeEnum.OW_DIRECTION)} {FormatNumber(parametersList[1], ParamTypeEnum.FUNCTION_ID)}";
+ name += $" {FormatParameter(parameters[0], ParamTypeEnum.OW_DIRECTION)} {FormatParameter(parameters[1], ParamTypeEnum.FUNCTION_ID)}";
break;
case 0x001C: // JumpIf
case 0x001D: // CallIf
{
- string number = FormatNumber(parametersList[1], ParamTypeEnum.FUNCTION_ID);
+ string number = FormatParameter(parameters[1], ParamTypeEnum.FUNCTION_ID);
- if (RomInfo.ScriptComparisonOperatorsDict.TryGetValue(parametersList[0][0], out string v)) {
+ // Access the byte value from the parameter's raw data
+ if (RomInfo.ScriptComparisonOperatorsDict.TryGetValue(parameters[0].RawData[0], out string v)) {
name += $" {v} {number}";
} else {
- name += $" {parametersList[0][0]} {number}";
+ name += $" {parameters[0].RawData[0]} {number}";
}
break;
}
case 0x005E: // Movement
- name += $" {FormatNumber(parametersList[0], ParamTypeEnum.OW_ID)} {FormatNumber(parametersList[1], ParamTypeEnum.ACTION_ID)}";
+ name += $" {FormatParameter(parameters[0], ParamTypeEnum.OW_ID)} {FormatParameter(parameters[1], ParamTypeEnum.ACTION_ID)}";
break;
case 0x006A: // GetOverworldPosition
- name += FormatCmd_Overworld_TwoParams(parametersList);
+ name += FormatCmd_Overworld_TwoParams(parameters);
break;
case 0x0062: // Lock
case 0x0063: // Release
case 0x0064: // AddOW
case 0x0065: // RemoveOW
- name += $" {FormatNumber(parametersList[0], ParamTypeEnum.OW_ID)}";
+ name += $" {FormatParameter(parameters[0], ParamTypeEnum.OW_ID)}";
break;
case 0x006D: // SetOverworldMovement
- name += FormatCmd_Overworld_Move(parametersList);
+ name += FormatCmd_Overworld_Move(parameters);
break;
case 0x00B0: // Warp [HGSS]
if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.HGSS)) {
- name += FormatCmd_Warp(parametersList);
+ name += FormatCmd_Warp(parameters);
} else {
goto default;
}
@@ -84,7 +88,7 @@ namespace DSPRE.ROMFiles {
break;
case 0x0152: // SetOverworldDefaultPosition [HGSS]
if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.HGSS)) {
- name += FormatCmd_Overworld_TwoParams(parametersList);
+ name += FormatCmd_Overworld_TwoParams(parameters);
} else {
goto default;
}
@@ -92,7 +96,7 @@ namespace DSPRE.ROMFiles {
break;
case 0x0153: // SetOverworldPosition [HGSS]
if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.HGSS)) {
- name += FormatCmd_Overworld_3Coords_Dir(parametersList);
+ name += FormatCmd_Overworld_3Coords_Dir(parameters);
} else {
goto default;
}
@@ -100,7 +104,7 @@ namespace DSPRE.ROMFiles {
break;
case 0x0154: // SetOverworldDefaultMovement [HGSS]
if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.HGSS)) {
- name += FormatCmd_Overworld_Move(parametersList);
+ name += FormatCmd_Overworld_Move(parameters);
} else {
goto default;
}
@@ -108,7 +112,7 @@ namespace DSPRE.ROMFiles {
break;
case 0x0155: // SetOverworldDefaultDirection [DPPt]
if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.HGSS)) {
- name += FormatCmd_Overworld_Dir(parametersList);
+ name += FormatCmd_Overworld_Dir(parameters);
} else {
goto default;
}
@@ -116,7 +120,7 @@ namespace DSPRE.ROMFiles {
break;
case 0x0158: // SetOverworldDirection [DPPt]
if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.HGSS)) {
- name += FormatCmd_Overworld_Dir(parametersList);
+ name += FormatCmd_Overworld_Dir(parameters);
} else {
goto default;
}
@@ -125,7 +129,7 @@ namespace DSPRE.ROMFiles {
case 0x00BE: // Warp [DPPt]
if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.DP) || RomInfo.gameFamily.Equals(RomInfo.GameFamilies.Plat)) {
- name += FormatCmd_Warp(parametersList);
+ name += FormatCmd_Warp(parameters);
} else {
goto default;
}
@@ -133,7 +137,7 @@ namespace DSPRE.ROMFiles {
break;
case 0x0186: // SetOverworldDefaultPosition [DPPt]
if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.DP) || RomInfo.gameFamily.Equals(RomInfo.GameFamilies.Plat)) {
- name += FormatCmd_Overworld_TwoParams(parametersList);
+ name += FormatCmd_Overworld_TwoParams(parameters);
} else {
goto default;
}
@@ -141,7 +145,7 @@ namespace DSPRE.ROMFiles {
break;
case 0x0187: // SetOverworldPosition [DPPt]
if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.DP) || RomInfo.gameFamily.Equals(RomInfo.GameFamilies.Plat)) {
- name += FormatCmd_Overworld_3Coords_Dir(parametersList);
+ name += FormatCmd_Overworld_3Coords_Dir(parameters);
} else {
goto default;
}
@@ -149,7 +153,7 @@ namespace DSPRE.ROMFiles {
break;
case 0x0188: // SetOverworldDefaultMovement [DPPt]
if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.DP) || RomInfo.gameFamily.Equals(RomInfo.GameFamilies.Plat)) {
- name += FormatCmd_Overworld_Move(parametersList);
+ name += FormatCmd_Overworld_Move(parameters);
} else {
goto default;
}
@@ -157,7 +161,7 @@ namespace DSPRE.ROMFiles {
break;
case 0x0189: // SetOverworldDefaultDirection [DPPt]
if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.DP) || RomInfo.gameFamily.Equals(RomInfo.GameFamilies.Plat)) {
- name += FormatCmd_Overworld_Dir(parametersList);
+ name += FormatCmd_Overworld_Dir(parameters);
} else {
goto default;
}
@@ -165,47 +169,47 @@ namespace DSPRE.ROMFiles {
break;
case 0x018C: // SetOverworldDirection [DPPt]
if (RomInfo.gameFamily.Equals(RomInfo.GameFamilies.DP) || RomInfo.gameFamily.Equals(RomInfo.GameFamilies.Plat)) {
- name += FormatCmd_Overworld_Dir(parametersList);
+ name += FormatCmd_Overworld_Dir(parameters);
} else {
goto default;
}
break;
+
default:
- for (int i = 0; i < parametersList.Count; i++) {
- name += $" {FormatNumber(parametersList[i])}";
+ for (int i = 0; i < parameters.Count; i++) {
+ name += $" {FormatParameter(parameters[i])}";
}
break;
}
this.id = id;
- this.cmdParams = parametersList;
+ this.Parameters = parameters;
}
- private string FormatCmd_Warp(List parametersList) {
- return $" {FormatNumber(parametersList[0])} {FormatNumber(parametersList[1])} {FormatNumber(parametersList[2])} {FormatNumber(parametersList[3])} {FormatNumber(parametersList[4], ParamTypeEnum.OW_DIRECTION)}";
+ private string FormatCmd_Warp(List parameters) {
+ return $" {FormatParameter(parameters[0])} {FormatParameter(parameters[1])} {FormatParameter(parameters[2])} {FormatParameter(parameters[3])} {FormatParameter(parameters[4], ParamTypeEnum.OW_DIRECTION)}";
}
- private string FormatCmd_Overworld_TwoParams(List parametersList) {
- return $" {FormatNumber(parametersList[0], ParamTypeEnum.OW_ID)} {FormatNumber(parametersList[1])} {FormatNumber(parametersList[2])}";
+ private string FormatCmd_Overworld_TwoParams(List parameters) {
+ return $" {FormatParameter(parameters[0], ParamTypeEnum.OW_ID)} {FormatParameter(parameters[1])} {FormatParameter(parameters[2])}";
}
- private string FormatCmd_Overworld_Move(List parametersList) {
- return $" {FormatNumber(parametersList[0], ParamTypeEnum.OW_ID)} {FormatNumber(parametersList[1], ParamTypeEnum.OW_MOVEMENT_TYPE)}";
+ private string FormatCmd_Overworld_Move(List parameters) {
+ return $" {FormatParameter(parameters[0], ParamTypeEnum.OW_ID)} {FormatParameter(parameters[1], ParamTypeEnum.OW_MOVEMENT_TYPE)}";
}
- private string FormatCmd_Overworld_3Coords_Dir(List parametersList) {
- return $" {FormatNumber(parametersList[0], ParamTypeEnum.OW_ID)} {FormatNumber(parametersList[1])} {FormatNumber(parametersList[2])} {FormatNumber(parametersList[3])} {FormatNumber(parametersList[4], ParamTypeEnum.OW_DIRECTION)}";
+ private string FormatCmd_Overworld_3Coords_Dir(List parameters) {
+ return $" {FormatParameter(parameters[0], ParamTypeEnum.OW_ID)} {FormatParameter(parameters[1])} {FormatParameter(parameters[2])} {FormatParameter(parameters[3])} {FormatParameter(parameters[4], ParamTypeEnum.OW_DIRECTION)}";
}
- private string FormatCmd_Overworld_Dir(List parametersList) {
- return $" {FormatNumber(parametersList[0], ParamTypeEnum.OW_ID)} {FormatNumber(parametersList[1], ParamTypeEnum.OW_DIRECTION)}";
+ private string FormatCmd_Overworld_Dir(List parameters) {
+ return $" {FormatParameter(parameters[0], ParamTypeEnum.OW_ID)} {FormatParameter(parameters[1], ParamTypeEnum.OW_DIRECTION)}";
}
-
public ScriptCommand(string wholeLine, int lineNumber = 0) {
name = wholeLine;
- cmdParams = new List();
+ Parameters = new List();
string[] nameParts = wholeLine.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // Separate command code from parameters
/* Get command id, which is always first in the description */
@@ -229,9 +233,8 @@ namespace DSPRE.ROMFiles {
return;
}
}
- /* Read parameters from remainder of the description */
- //Console.WriteLine("ID = " + ((ushort)id).ToString("X4"));
+ /* Read parameters from remainder of the description */
byte[] parametersSizeArr = RomInfo.ScriptCommandParametersDict[(ushort)id];
int paramLength = 0;
@@ -241,7 +244,7 @@ namespace DSPRE.ROMFiles {
int firstParamValue = int.Parse(nameParts[1].PurgeSpecial(ScriptFile.specialChars), nameParts[1].GetNumberStyle());
byte firstParamSize = parametersSizeArr[1];
- cmdParams.Add(firstParamValue.ToByteArrayChooseSize(firstParamSize));
+ Parameters.Add(new ScriptParameter(firstParamValue.ToByteArrayChooseSize(firstParamSize)));
paramsProcessed++;
int i = 2;
@@ -303,7 +306,8 @@ namespace DSPRE.ROMFiles {
Console.WriteLine($"Parameter #{i}: {nameParts[i + 1]}");
if (RomInfo.ScriptComparisonOperatorsReverseDict.TryGetValue(nameParts[i + 1].ToLower(), out cmdID)) { //Check succeeds when command is like "asdfg LESS" or "asdfg DIFFERENT"
- cmdParams.Add(new byte[] { (byte)cmdID });
+ // Create parameter with byte array
+ Parameters.Add(new ScriptParameter(new byte[] { (byte)cmdID }));
} else { //Not a comparison
/* Convert strings of parameters to the correct datatypes */
NumberStyles numStyle = nameParts[i + 1].GetNumberStyle();
@@ -312,6 +316,16 @@ namespace DSPRE.ROMFiles {
int result = 0;
try {
+ // Check if this is a label reference
+ if (nameParts[i + 1].StartsWith("label") || nameParts[i + 1].StartsWith("script")) {
+ // This is a label reference
+ ScriptParameter labelParam = new ScriptParameter(0, nameParts[i + 1]) {
+ Type = ScriptParameter.ParameterType.RelativeJump
+ };
+ Parameters.Add(labelParam);
+ continue;
+ }
+
result = int.Parse(nameParts[i + 1], numStyle);
} catch {
if (string.IsNullOrWhiteSpace(nameParts[i + 1])) {
@@ -338,7 +352,8 @@ namespace DSPRE.ROMFiles {
}
try {
- cmdParams.Add(result.ToByteArrayChooseSize(parametersSizeArr[i]));
+ byte[] paramData = result.ToByteArrayChooseSize(parametersSizeArr[i]);
+ Parameters.Add(new ScriptParameter(paramData));
} catch (OverflowException) {
MessageBox.Show($"Argument {nameParts[i + 1]} at line {lineNumber} is not in the range [0, {Math.Pow(2, 8 * parametersSizeArr[i]) - 1}].", "Argument error", MessageBoxButtons.OK, MessageBoxIcon.Error);
id = null;
@@ -354,6 +369,10 @@ namespace DSPRE.ROMFiles {
}
private string FormatNumber(byte[] par, ParamTypeEnum paramType = ParamTypeEnum.INTEGER) {
+ if (paramType == ParamTypeEnum.LABEL_REF && par.Length > 0) {
+ return FormatLabelReference(Encoding.ASCII.GetString(par));
+ }
+
//number acquisition
uint num;
if (par.Length == 0) {
@@ -390,9 +409,6 @@ namespace DSPRE.ROMFiles {
case ParamTypeEnum.CMD_NUMBER:
return "CMD_" + prefix + num.ToString(formatOverride + '3');
- case ParamTypeEnum.FUNCTION_ID:
- return ScriptFile.ContainerTypes.Function.ToString() + "#" + num;
-
case ParamTypeEnum.ACTION_ID:
return ScriptFile.ContainerTypes.Action.ToString() + "#" + num;
@@ -440,8 +456,21 @@ namespace DSPRE.ROMFiles {
return outp;
}
+ private string FormatParameter(ScriptParameter param, ParamTypeEnum paramType = ParamTypeEnum.INTEGER) {
+ // For jump-to-label parameters, return the label name
+ if (param.Type == ScriptParameter.ParameterType.RelativeJump && !string.IsNullOrEmpty(param.TargetLabel)) {
+ return param.TargetLabel;
+ }
+
+ // Otherwise handle the numeric value
+ return FormatNumber(param.RawData, paramType);
+ }
public override string ToString() {
return name + " (" + ((ushort)id).ToString("X") + ")";
}
+
+ private string FormatLabelReference(string labelName) {
+ return labelName;
+ }
}
}
diff --git a/DS_Map/Script/ScriptCommandPosition.cs b/DS_Map/Script/ScriptCommandPosition.cs
new file mode 100644
index 0000000..953a310
--- /dev/null
+++ b/DS_Map/Script/ScriptCommandPosition.cs
@@ -0,0 +1,20 @@
+// ScriptCommandPosition.cs
+using System;
+
+namespace DSPRE.ROMFiles {
+ public class ScriptCommandPosition {
+ public ScriptCommand Command { get; set; }
+ public int Offset { get; set; }
+ public string Label { get; set; } // null if no label needed
+ public bool IsEntryPoint { get; set; }
+ public int EntryPointIndex { get; set; } // -1 if not an entry point
+
+ public ScriptCommandPosition(ScriptCommand cmd, int offset, string label = null, bool isEntryPoint = false, int entryPointIndex = -1) {
+ Command = cmd;
+ Offset = offset;
+ Label = label;
+ IsEntryPoint = isEntryPoint;
+ EntryPointIndex = entryPointIndex;
+ }
+ }
+}
\ No newline at end of file
diff --git a/DS_Map/Script/ScriptLabeledSection.cs b/DS_Map/Script/ScriptLabeledSection.cs
new file mode 100644
index 0000000..3336f3b
--- /dev/null
+++ b/DS_Map/Script/ScriptLabeledSection.cs
@@ -0,0 +1,21 @@
+// Create this as a new file: ScriptLabeledSection.cs
+using System;
+using System.Collections.Generic;
+
+namespace DSPRE.ROMFiles {
+ public class ScriptLabeledSection {
+ public string LabelName { get; set; }
+ public List Commands { get; set; }
+ public uint OffsetInFile { get; set; }
+ public bool IsReferenced { get; set; } = false;
+
+ public ScriptLabeledSection(string labelName, List commands = null) {
+ LabelName = labelName;
+ Commands = commands ?? new List();
+ }
+
+ public override string ToString() {
+ return LabelName;
+ }
+ }
+}
\ No newline at end of file
diff --git a/DS_Map/Script/ScriptParameter.cs b/DS_Map/Script/ScriptParameter.cs
new file mode 100644
index 0000000..d6dd6ee
--- /dev/null
+++ b/DS_Map/Script/ScriptParameter.cs
@@ -0,0 +1,45 @@
+using System;
+
+public class ScriptParameter {
+ public enum ParameterType {
+ Integer,
+ RelativeJump,
+ Byte,
+ Variable
+ }
+
+ public ParameterType Type { get; set; } = ParameterType.Integer;
+ public byte[] RawData { get; set; }
+ public string TargetLabel { get; set; } // For RelativeJump type
+ public int TargetOffset { get; set; } // For RelativeJump type
+
+ // Constructor for regular parameters
+ public ScriptParameter(byte[] data) {
+ Type = ParameterType.Integer;
+ RawData = data;
+ }
+
+ // Constructor for relative jumps
+ public ScriptParameter(int targetOffset, string targetLabel) {
+ Type = ParameterType.RelativeJump;
+ TargetOffset = targetOffset;
+ TargetLabel = targetLabel;
+ // Store raw bytes only for display purposes
+ RawData = BitConverter.GetBytes(targetOffset);
+ }
+
+ // Get display representation
+ public string GetFormattedValue() {
+ if (Type == ParameterType.RelativeJump && !string.IsNullOrEmpty(TargetLabel)) {
+ return TargetLabel;
+ }
+
+ // Default formatting for other types
+ if (RawData.Length == 0) return "";
+ if (RawData.Length == 1) return RawData[0].ToString("X2");
+ if (RawData.Length == 2) return BitConverter.ToUInt16(RawData, 0).ToString("X4");
+ if (RawData.Length == 4) return BitConverter.ToUInt32(RawData, 0).ToString("X8");
+
+ return BitConverter.ToString(RawData);
+ }
+}
\ No newline at end of file
diff --git a/DS_Map/ROMFiles/ScriptReference.cs b/DS_Map/Script/ScriptReference.cs
similarity index 100%
rename from DS_Map/ROMFiles/ScriptReference.cs
rename to DS_Map/Script/ScriptReference.cs
diff --git a/DS_Map/ROMFiles/VariableValueTrigger.cs b/DS_Map/Script/VariableValueTrigger.cs
similarity index 100%
rename from DS_Map/ROMFiles/VariableValueTrigger.cs
rename to DS_Map/Script/VariableValueTrigger.cs
diff --git a/README.md b/README.md
index f23e712..b53548d 100644
--- a/README.md
+++ b/README.md
@@ -147,4 +147,4 @@ Edit base stats, Learnable TMs, EVs yield, and more.
Edit the moves that a given Pokemon can learn by leveling up.
### New Evolutions Editor:
-Edit evolution methods and levels for all Pokemon.
+Edit evolution methods and levels for all Pokemon.
\ No newline at end of file