From 2a9e3186b6313c1abb6a10f002801e5e65724bfb Mon Sep 17 00:00:00 2001
From: admin <971874978@qq.com>
Date: Wed, 26 Nov 2025 13:53:00 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=A1=B9=E7=9B=AE=E6=96=87?=
=?UTF-8?q?=E4=BB=B6=E3=80=82?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
MainForm.Designer.cs | 235 ++++++++++++++++
MainForm.cs | 43 +++
MainForm.resx | 549 +++++++++++++++++++++++++++++++++++++
ModelPlugin.cs | 163 +++++++++++
Properties/AssemblyInfo.cs | 35 +++
TeklaModelPlugin1.csproj | 97 +++++++
TeklaModelPlugin1.slnx | 3 +
7 files changed, 1125 insertions(+)
create mode 100644 MainForm.Designer.cs
create mode 100644 MainForm.cs
create mode 100644 MainForm.resx
create mode 100644 ModelPlugin.cs
create mode 100644 Properties/AssemblyInfo.cs
create mode 100644 TeklaModelPlugin1.csproj
create mode 100644 TeklaModelPlugin1.slnx
diff --git a/MainForm.Designer.cs b/MainForm.Designer.cs
new file mode 100644
index 0000000..c44ee0b
--- /dev/null
+++ b/MainForm.Designer.cs
@@ -0,0 +1,235 @@
+namespace TeklaModelPlugin1
+{
+ partial class MainForm
+ {
+ ///
+ /// Required designer variable.
+ ///
+ private System.ComponentModel.IContainer components = null;
+
+ ///
+ /// Clean up any resources being used.
+ ///
+ /// true if managed resources should be disposed; otherwise, false.
+ protected override void Dispose(bool disposing)
+ {
+ if (disposing && (components != null))
+ {
+ components.Dispose();
+ }
+ base.Dispose(disposing);
+ }
+
+ #region Windows Form Designer generated code
+
+ ///
+ /// Required method for Designer support - do not modify
+ /// the contents of this method with the code editor.
+ ///
+ private void InitializeComponent()
+ {
+ System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+ this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
+ this.saveLoad1 = new Tekla.Structures.Dialog.UIControls.SaveLoad();
+ this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
+ this.saveLoad2 = new Tekla.Structures.Dialog.UIControls.SaveLoad();
+ this.tabControl2 = new System.Windows.Forms.TabControl();
+ this.tabPage3 = new System.Windows.Forms.TabPage();
+ this.tabPage4 = new System.Windows.Forms.TabPage();
+ this.tabControl1 = new System.Windows.Forms.TabControl();
+ this.ParametersTabPage = new System.Windows.Forms.TabPage();
+ this.OkApplyModifyGetOnOffCancel = new Tekla.Structures.Dialog.UIControls.OkApplyModifyGetOnOffCancel();
+ this.tableLayoutPanel1.SuspendLayout();
+ this.tableLayoutPanel2.SuspendLayout();
+ this.tabControl2.SuspendLayout();
+ this.tabControl1.SuspendLayout();
+ this.SuspendLayout();
+ //
+ // tableLayoutPanel1
+ //
+ this.structuresExtender.SetAttributeName(this.tableLayoutPanel1, null);
+ this.structuresExtender.SetAttributeTypeName(this.tableLayoutPanel1, null);
+ this.structuresExtender.SetBindPropertyName(this.tableLayoutPanel1, null);
+ this.tableLayoutPanel1.ColumnCount = 1;
+ this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tableLayoutPanel1.Controls.Add(this.OkApplyModifyGetOnOffCancel, 0, 2);
+ this.tableLayoutPanel1.Controls.Add(this.tabControl1, 0, 1);
+ this.tableLayoutPanel1.Controls.Add(this.saveLoad1, 0, 0);
+ this.tableLayoutPanel1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tableLayoutPanel1.Location = new System.Drawing.Point(0, 0);
+ this.tableLayoutPanel1.Name = "tableLayoutPanel1";
+ this.tableLayoutPanel1.RowCount = 3;
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 100F));
+ this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle());
+ this.tableLayoutPanel1.Size = new System.Drawing.Size(534, 414);
+ this.tableLayoutPanel1.TabIndex = 0;
+ //
+ // saveLoad1
+ //
+ this.structuresExtender.SetAttributeName(this.saveLoad1, null);
+ this.structuresExtender.SetAttributeTypeName(this.saveLoad1, null);
+ this.saveLoad1.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.structuresExtender.SetBindPropertyName(this.saveLoad1, null);
+ this.saveLoad1.Dock = System.Windows.Forms.DockStyle.Top;
+ this.saveLoad1.Location = new System.Drawing.Point(3, 3);
+ this.saveLoad1.Name = "saveLoad1";
+ this.saveLoad1.SaveAsText = "";
+ this.saveLoad1.Size = new System.Drawing.Size(528, 43);
+ this.saveLoad1.TabIndex = 0;
+ //
+ // tableLayoutPanel2
+ //
+ this.structuresExtender.SetAttributeName(this.tableLayoutPanel2, null);
+ this.structuresExtender.SetAttributeTypeName(this.tableLayoutPanel2, null);
+ this.structuresExtender.SetBindPropertyName(this.tableLayoutPanel2, null);
+ this.tableLayoutPanel2.ColumnCount = 4;
+ this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F));
+ this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+ this.tableLayoutPanel2.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+ this.tableLayoutPanel2.Controls.Add(this.saveLoad2, 0, 0);
+ this.tableLayoutPanel2.Location = new System.Drawing.Point(0, 0);
+ this.tableLayoutPanel2.Name = "tableLayoutPanel2";
+ this.tableLayoutPanel2.RowCount = 8;
+ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+ this.tableLayoutPanel2.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 20F));
+ this.tableLayoutPanel2.Size = new System.Drawing.Size(200, 100);
+ this.tableLayoutPanel2.TabIndex = 0;
+ //
+ // saveLoad2
+ //
+ this.structuresExtender.SetAttributeName(this.saveLoad2, null);
+ this.structuresExtender.SetAttributeTypeName(this.saveLoad2, null);
+ this.saveLoad2.AutoSizeMode = System.Windows.Forms.AutoSizeMode.GrowAndShrink;
+ this.structuresExtender.SetBindPropertyName(this.saveLoad2, null);
+ this.tableLayoutPanel2.SetColumnSpan(this.saveLoad2, 4);
+ this.saveLoad2.Dock = System.Windows.Forms.DockStyle.Top;
+ this.saveLoad2.Location = new System.Drawing.Point(3, 3);
+ this.saveLoad2.Name = "saveLoad2";
+ this.saveLoad2.SaveAsText = "";
+ this.saveLoad2.Size = new System.Drawing.Size(194, 14);
+ this.saveLoad2.TabIndex = 0;
+ //
+ // tabControl2
+ //
+ this.structuresExtender.SetAttributeName(this.tabControl2, null);
+ this.structuresExtender.SetAttributeTypeName(this.tabControl2, null);
+ this.structuresExtender.SetBindPropertyName(this.tabControl2, null);
+ this.tabControl2.Controls.Add(this.tabPage3);
+ this.tabControl2.Controls.Add(this.tabPage4);
+ this.tabControl2.Location = new System.Drawing.Point(3, -6);
+ this.tabControl2.Name = "tabControl2";
+ this.tabControl2.SelectedIndex = 0;
+ this.tabControl2.Size = new System.Drawing.Size(90, 1);
+ this.tabControl2.TabIndex = 2;
+ //
+ // tabPage3
+ //
+ this.structuresExtender.SetAttributeName(this.tabPage3, null);
+ this.structuresExtender.SetAttributeTypeName(this.tabPage3, null);
+ this.structuresExtender.SetBindPropertyName(this.tabPage3, null);
+ this.tabPage3.Location = new System.Drawing.Point(4, 22);
+ this.tabPage3.Name = "tabPage3";
+ this.tabPage3.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage3.Size = new System.Drawing.Size(82, 0);
+ this.tabPage3.TabIndex = 0;
+ this.tabPage3.Text = "tabPage3";
+ this.tabPage3.UseVisualStyleBackColor = true;
+ //
+ // tabPage4
+ //
+ this.structuresExtender.SetAttributeName(this.tabPage4, null);
+ this.structuresExtender.SetAttributeTypeName(this.tabPage4, null);
+ this.structuresExtender.SetBindPropertyName(this.tabPage4, null);
+ this.tabPage4.Location = new System.Drawing.Point(4, 22);
+ this.tabPage4.Name = "tabPage4";
+ this.tabPage4.Padding = new System.Windows.Forms.Padding(3);
+ this.tabPage4.Size = new System.Drawing.Size(82, 0);
+ this.tabPage4.TabIndex = 1;
+ this.tabPage4.Text = "tabPage4";
+ this.tabPage4.UseVisualStyleBackColor = true;
+ //
+ // tabControl1
+ //
+ this.structuresExtender.SetAttributeName(this.tabControl1, null);
+ this.structuresExtender.SetAttributeTypeName(this.tabControl1, null);
+ this.structuresExtender.SetBindPropertyName(this.tabControl1, null);
+ this.tabControl1.Controls.Add(this.ParametersTabPage);
+ this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+ this.tabControl1.Location = new System.Drawing.Point(3, 52);
+ this.tabControl1.Name = "tabControl1";
+ this.tabControl1.SelectedIndex = 0;
+ this.tabControl1.Size = new System.Drawing.Size(528, 324);
+ this.tabControl1.TabIndex = 18;
+ //
+ // ParametersTabPage
+ //
+ this.structuresExtender.SetAttributeName(this.ParametersTabPage, null);
+ this.structuresExtender.SetAttributeTypeName(this.ParametersTabPage, null);
+ this.structuresExtender.SetBindPropertyName(this.ParametersTabPage, null);
+ this.ParametersTabPage.Location = new System.Drawing.Point(4, 22);
+ this.ParametersTabPage.Name = "ParametersTabPage";
+ this.ParametersTabPage.Padding = new System.Windows.Forms.Padding(3);
+ this.ParametersTabPage.Size = new System.Drawing.Size(520, 298);
+ this.ParametersTabPage.TabIndex = 2;
+ this.ParametersTabPage.Text = "albl_Parameters";
+ this.ParametersTabPage.UseVisualStyleBackColor = true;
+ //
+ // OkApplyModifyGetOnOffCancel
+ //
+ this.structuresExtender.SetAttributeName(this.OkApplyModifyGetOnOffCancel, null);
+ this.structuresExtender.SetAttributeTypeName(this.OkApplyModifyGetOnOffCancel, null);
+ this.structuresExtender.SetBindPropertyName(this.OkApplyModifyGetOnOffCancel, null);
+ this.OkApplyModifyGetOnOffCancel.Dock = System.Windows.Forms.DockStyle.Bottom;
+ this.OkApplyModifyGetOnOffCancel.Location = new System.Drawing.Point(3, 382);
+ this.OkApplyModifyGetOnOffCancel.Name = "OkApplyModifyGetOnOffCancel";
+ this.OkApplyModifyGetOnOffCancel.Size = new System.Drawing.Size(528, 29);
+ this.OkApplyModifyGetOnOffCancel.TabIndex = 19;
+ this.OkApplyModifyGetOnOffCancel.OkClicked += new System.EventHandler(this.OkApplyModifyGetOnOffCancel_OkClicked);
+ this.OkApplyModifyGetOnOffCancel.ModifyClicked += new System.EventHandler(this.OkApplyModifyGetOnOffCancel_ModifyClicked);
+ this.OkApplyModifyGetOnOffCancel.CancelClicked += new System.EventHandler(this.OkApplyModifyGetOnOffCancel_CancelClicked);
+ this.OkApplyModifyGetOnOffCancel.OnOffClicked += new System.EventHandler(this.OkApplyModifyGetOnOffCancel_OnOffClicked);
+ this.OkApplyModifyGetOnOffCancel.GetClicked += new System.EventHandler(this.OkApplyModifyGetOnOffCancel_GetClicked);
+ this.OkApplyModifyGetOnOffCancel.ApplyClicked += new System.EventHandler(this.OkApplyModifyGetOnOffCancel_ApplyClicked);
+ //
+ // MainForm
+ //
+ this.structuresExtender.SetAttributeName(this, null);
+ this.structuresExtender.SetAttributeTypeName(this, null);
+ this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
+ this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+ this.structuresExtender.SetBindPropertyName(this, null);
+ this.ClientSize = new System.Drawing.Size(534, 414);
+ this.Controls.Add(this.tableLayoutPanel1);
+ this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+ this.Name = "MainForm";
+ this.Text = "Model Plug-in";
+ this.tableLayoutPanel1.ResumeLayout(false);
+ this.tableLayoutPanel2.ResumeLayout(false);
+ this.tabControl2.ResumeLayout(false);
+ this.tabControl1.ResumeLayout(false);
+ this.ResumeLayout(false);
+
+ }
+
+ #endregion
+
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
+ private Tekla.Structures.Dialog.UIControls.SaveLoad saveLoad1;
+ private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
+ private Tekla.Structures.Dialog.UIControls.SaveLoad saveLoad2;
+ private System.Windows.Forms.TabControl tabControl2;
+ private System.Windows.Forms.TabPage tabPage3;
+ private System.Windows.Forms.TabPage tabPage4;
+ private Tekla.Structures.Dialog.UIControls.OkApplyModifyGetOnOffCancel OkApplyModifyGetOnOffCancel;
+ private System.Windows.Forms.TabControl tabControl1;
+ private System.Windows.Forms.TabPage ParametersTabPage;
+ }
+}
\ No newline at end of file
diff --git a/MainForm.cs b/MainForm.cs
new file mode 100644
index 0000000..6b811e7
--- /dev/null
+++ b/MainForm.cs
@@ -0,0 +1,43 @@
+using System;
+
+namespace TeklaModelPlugin1
+{
+ public partial class MainForm : Tekla.Structures.Dialog.PluginFormBase
+ {
+ public MainForm()
+ {
+ InitializeComponent();
+ }
+
+ private void OkApplyModifyGetOnOffCancel_OkClicked(object sender, EventArgs e)
+ {
+ this.Apply();
+ this.Close();
+ }
+
+ private void OkApplyModifyGetOnOffCancel_ApplyClicked(object sender, EventArgs e)
+ {
+ this.Apply();
+ }
+
+ private void OkApplyModifyGetOnOffCancel_ModifyClicked(object sender, EventArgs e)
+ {
+ this.Modify();
+ }
+
+ private void OkApplyModifyGetOnOffCancel_GetClicked(object sender, EventArgs e)
+ {
+ this.Get();
+ }
+
+ private void OkApplyModifyGetOnOffCancel_OnOffClicked(object sender, EventArgs e)
+ {
+ this.ToggleSelection();
+ }
+
+ private void OkApplyModifyGetOnOffCancel_CancelClicked(object sender, EventArgs e)
+ {
+ this.Close();
+ }
+ }
+}
\ No newline at end of file
diff --git a/MainForm.resx b/MainForm.resx
new file mode 100644
index 0000000..9b38ede
--- /dev/null
+++ b/MainForm.resx
@@ -0,0 +1,549 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ text/microsoft-resx
+
+
+ 2.0
+
+
+ System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
+
+
+ 17, 17
+
+
+
+
+ AAABAAkAMDAQAAEABABoBgAAlgAAACAgEAABAAQA6AIAAP4GAAAQEBAAAQAEACgBAADmCQAAMDAAAAEA
+ CACoDgAADgsAACAgAAABAAgAqAgAALYZAAAQEAAAAQAIAGgFAABeIgAAMDAAAAEAIACoJQAAxicAACAg
+ AAABACAAqBAAAG5NAAAQEAAAAQAgAGgEAAAWXgAAKAAAADAAAABgAAAAAQAEAAAAAAAABgAAAAAAAAAA
+ AAAQAAAAAAAAAAAAAAAAAIAAAIAAAACAgACAAAAAgACAAICAAACAgIAAwMDAAAAA/wAA/wAAAP//AP8A
+ AAD/AP8A//8AAP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ +IAAAAAAAAAAAAAAAAAACP//////////dPAAAAAAAAAAAAAAAAAIhwcHdHd3d3d3dIAAAAAAAAAAAAAA
+ AAAIAAAEBEREREd3d3gAAAAAAAAAAAAAAACHAAAARERERER3d3gAAAAAAAAAAAAAAACHAAAEAEREREdH
+ d3gAAAAAAAAAAAAAAACHAAAARERERER3d08AAAAAAAAAAAAAAACHAAAEQEREREd3d3gAAAAAAAAAAAAA
+ AACHAAAABERERERHd3eAAAAAAAAAAAAAAAAIEAAAQERERER3d3eAAAAAAAAAAAAAAAAPBwAABERERERH
+ d3eAAAAAAAAAAAAAAAAIAXd3d3d3d3d3d3eP//////+IAAAAAAAIUBEBAREVFRFVVVVVVVVVUVWIgAAA
+ AAAIcBEREREREVEVVVVZmZmZmZlViAAAAAAAgRERERERFRFVVVWZmZmZmZmVWIAAAAAAgBERERERURVV
+ VZmZmZmZmZmZWIAAAAAA8BEREREREVFVV4iJmZmZmZmZV/AAAAAAgREREREVEVFVj///iZmZmZmZlfAA
+ AAAAhxERERERFRVX////iZmZmZmZlfAAAAAACAERERERUVVV////iXmZmZmZlYgAAAAACBERERFRV4hV
+ eIiId3iHmZmZlYgAAAAADwFREREV///4V1d3f///iZmZlX8AAAAACHEVERUY////dXV5j///93mZmV8A
+ AAAACHFVUREX////h1d4////h5mZmV8AAAAACIAViIiFWIj//4iP/4iIl4iIeViAAAAAAIEX///4V1VY
+ ////95eZj///iViAAAAAAPAY////VVVX////h3d3j///+VjwAAAAAIEViP/4VYiP///4d3d5eP/4eZXw
+ AAAAAIcRVVFVj///+Hd3f///eXmZmZXwAAAAAIcRVVVV////h3d3j///iZmZmZWIAAAAAAgRmVVVj//4
+ d3d3j//4d5mZmZWIAAAAAA8BmVVVWXd3eP+Id4d3eXmZmZmIAAAAAAgRWZVVWVlZj///d5d3l5eXmZVf
+ AAAAAAhxWZVVVVlZj///d5mZmZmZmZlfAAAAAAiBWZVVVVWVmXh5mZmZmZmZmZdYgAAAAACAFZVRVVlZ
+ lZmZmZmZmZmZmZlYgAAAAACBEVlVVVVZWZmZmZmZmZmZmZlYgAAAAAAPERERERFRVVVVlZWZWZWZWVVV
+ 8AAAAAAAiHERERERERERERERERERERER8AAAAAAACIj///////////////////hxiAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAACIeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ jwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP///////wAA////////AAD///n///8AAP//
+ 8f///wAA4AAB////AACAAAH///8AAIAAAP///wAAAAAA////AAAAAAD///8AAAAAAP///wAAAAAA////
+ AAAAAAB///8AAIAAAH///wAAgAAAf///AACAAAAAA/8AAIAAAAAB/wAAgAAAAAD/AADAAAAAAH8AAMAA
+ AAAAfwAAwAAAAAB/AADAAAAAAH8AAMAAAAAAfwAA4AAAAAA/AADgAAAAAD8AAOAAAAAAPwAA4AAAAAA/
+ AADgAAAAAD8AAOAAAAAAHwAA8AAAAAAfAADwAAAAAB8AAPAAAAAAHwAA8AAAAAAfAADwAAAAAA8AAPgA
+ AAAADwAA+AAAAAAPAAD4AAAAAA8AAPgAAAAADwAA+AAAAAAHAAD8AAAAAAcAAPwAAAAABwAA/gAAAAAH
+ AAD/AAAAAAcAAP+AAAAAAwAA///////DAAD///////MAAP//////8wAA////////AAAoAAAAIAAAAEAA
+ AAABAAQAAAAAAIACAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAgAAAgAAAAICAAIAAAACAAIAAgIAAAICA
+ gADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAPAAAAAAAAAAAAAAAAAAAI/wAAAAAAAAAAAP///////3iAAAAAAAAAAA9ABERERE
+ d38AAAAAAAAAAPAAQERER3d/AAAAAAAAAADwBERERER3fwAAAAAAAAAA8AQEREREd38AAAAAAAAAAPEA
+ RERERHd4gAAAAAAAAADxQURER0d3d/////8AAAAAhwERERERFVd3d3d3/wAAAIcRERERFRVVmZmZmVfw
+ AAAPERERERFVWZmZmZmV8AAADxERERFRV/+HmZmZlfAAAA8REREREV///5mZmZn4AAAIcREREVVY//eX
+ mZmZfwAACIERER//9XWX//iZmX8AAACBERF///hZf///mZlfAAAA8ReId4/////4h4iHXwAAAPEf//dV
+ f///eZj//5+AAAD3GP+Hd4//93d3//eY8AAAhxERX///d5j/+JmZl/AAAAgVVVf/95d4//d5mZXwAAAP
+ EVVVWZj/95eZmZmZ8AAADxFVVVWY//eZmZmZlYgAAA9xVVFVWZeZmZmZmZmPAAAAgREVUVVVmZmZmZmV
+ fwAAAIgRERERERERERERER8AAAAA//////////////gfAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAA
+ AAAAAA/w/////////////f////H//4AA//8AAP//AAD//wAA//8AAP//AAB//wAAAP8AAAA/AAAAH4AA
+ AB+AAAAfgAAAD4AAAA+AAAAPwAAAD8AAAA/AAAAHwAAAB8AAAAfgAAAH4AAAB+AAAAPgAAAD8AAAA/AA
+ AAP8AAAD////8/////koAAAAEAAAACAAAAABAAQAAAAAAMAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAA
+ gAAAgAAAAICAAIAAAACAAIAAgIAAAICAgADAwMAAAAD/AAD/AAAA//8A/wAAAP8A/wD//wAA////AAZm
+ Z3d3AAAAZmZ2d3cAAABWZmd3dwAAAFkRFREZmZUAWRERWIeZmZVZERGP+JmZmVkXiFiFiImZWZ//gRj/
+ +ZmIhYj/j4h4iP/1FY/4mX//V5j/h1f/iXlZF4h3d4iJmVkREY/4mZmZCRERF3mZmZkAVVVVVVVVWQAA
+ AAAAAAAAgD8AAAA/AAAAPwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAA
+ AADAAAAA//8AACgAAAAwAAAAYAAAAAEACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AGA8
+ 6AAAAAAARSDKAEMfwgBRJu0AUiftAFEn6gBNJeEAQB+5AFIo7QBSKOsAPh6yAEgkzQBUKu0AUinlAEYj
+ wwA8HqoAVCrpAEwm0wBWLO0AVSzsAFYt7gBRKt4AQiK0AFcu7gBEJLsAWC/uAFgv7QBXL+wAUCvZAEAi
+ rQBZMO4AWTDtAFMt3gBaMe4AUi3aAFEs1QBaMewAWjHpAEkowABcM+4AWzPuAFAszwBNK8kAXDTuAFsz
+ 7AAtGXQAXDTtAFYx3ABdNuwAXDXpAFs05ABUMdUARSiwAF437gBfOO4AYDnuAEwtugBiOu8AYTrvAGA5
+ 6wBQMMIAYzzvAGQ+7wBcOdwASy+zAGZA7wBJLqsATTGzAGhD7wBDK5sASC+kAEEqkgBrRvAAVDa4AE4z
+ rABtSOoAcE3wAFU8qgB1VeUAfFzxAIhq8wB9YtwAim3rAI5y8wBLPIAAk3n0AJuC7gC2o/YA1sz6ADQX
+ iQA3GZMALRR2ADQZiQA7HZ0APSOKADchfQBaNssAQSmLAGtF5gBSNasAKxxXAE82nwBaP6wAVT2jAHRT
+ 2QBRPI4AknjiAIZvzgCnkusAi3y3AMa48wDb0vYA7Oj5APXz+wA0FoEAMRV9AC8VeQA7HZEANBp7AC0X
+ bABXLsgASi6WAGtG0gBIL4kAaUbGADkmbABXP5kAYEanAHdXzABlTaMAe2a3AJ2OxgCpmtMAe3GWADsa
+ igA4GYQARiCfAEIelQBMJKoAMxl0AFMquQBIJJwATSelADwfgwBEI5AASCaWAFEsrQBUM6AAZ0W2AHJS
+ vQA/MGUAYUuYAG5WqQBOK50ARSx6AFpHgwDZ0eoAVEJ3AMS33AC2qcsAUCeJAJyVpQDp3fUAZDuGAGNO
+ cgBtIZwAbiKeAGwhmQDbyOcAah+UAGQaiQB/HKUAbSeKANXH2gB/MJkAfBKSALITwgCdFKUA6wPvANIG
+ 2AD/AP8AvwC/AI8AjwB5AHkA/wL/AAAAAAD0OPQA7FrrAPuR+wD/rv8A6qzqAPS29ABPP08AxITDANyc
+ 2wDzCOAA6RHHAJUgXAA6MTEAYmFhAKCfnwBuLiAAg358AKqEcgCROAAAjDUAAIUzAACAMQAAey8AAHUs
+ AABtKgAAYiYAAFYhAABKHAAAPhcAADASAAAjDQAAlz0FAI46BwCfRg4AplAbALBZIwBrNxgAilg5AEUv
+ IgCMbFgAFgoCAMRxOwC2aTcAzHpFAM+FVABxSjEA2JBgAOWaaADtpHIApXJRAMWnkwBKR0QAj4+OAPj4
+ +ADx8fEA5ubmANXV1QDKysoAwsLCALy8vACzs7MAra2tAKWlpQCampoAlJSUAIiIiABxcXEAAwMDAwMD
+ AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD
+ AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD
+ AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDc8ADAwMDAwMDAwMDAwMDAwMDAwMD
+ AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwN0+/MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDwgEB
+ AQEBAQEBAQEBAQEBAfPv4fIDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwP18fDq6urq4uLi4uLi4uLu
+ 7u7u4vYDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA/XJ5drZ2NfW1tXU09LR0d3f5+nr7u8DAwMDAwMD
+ AwMDAwMDAwMDAwMDAwMDAwMDwP7l29rY2NfW1dTT0dDQz9zg5uvs7s7BAwMDAwMDAwMDAwMDAwMDAwMD
+ AwMDAwMDpcPl29rZ2NfW1dTT0dDQz8/f5unt6eKlAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDpcoA29rZ
+ 2NfW1dTT0tDQz8/f5+nt6+LyAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDwv8A29rZ2NfW1tTT0tHQz8/e
+ 5+js7OL1AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA8vl5drZ2NjW1dXT0tHQz8/e4Ojs7ef4AwMDAwMD
+ AwMDAwMDAwMDAwMDAwMDAwMDA/bJ5dvZ2NfX1tXU0tHQz8/c4Ojs7e7OAwMDAwMDAwMDAwMDAwMDAwMD
+ AwMDAwMDA3TJw+Pa2djX1tXT0tLR3c/c4Obr7ejkqwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA6XJZ8r+
+ zeTk5OTk5O7u7u7uzs7v7+/O9AEBAQEBAQEBAQHywgMDAwMDAwMDAwMDA8HKZ2dnZ2dnmaCgoKCgoKCe
+ np6ampqahIJJSUlJSUlJSWqbhp+lAwMDAwMDAwMDAwPNZ3owenp6jo6OeXmKkpKJk5CNlY+PjyYmJiYm
+ JiYmJiwtO2ikcwMDAwMDAwMDAwP4Z3p2d153dnV1iomJeIyMi42Vj3t7ex0WDwwMCAgICAgQHz9J9QMD
+ AwMDAwMDAwP0Z2d2dl53dnV1iomJeIyMi42Pe2NjYzUhFw8LBwcGBgYGCB87h6UDAwMDAwMDAwPzZ2dc
+ dV5ednZ1iomJeIyMi5VMg29vWWUuJBcPCwsHBwYGBhAshQEDAwMDAwMDAwOroGd2XF5ed3Z1iomJjIyQ
+ nJWhAQEBAXRYLiQaFQ8PCwcHBggmUAEDAwMDAwMDAwMD/Wd3XHZed3Z1iomTk5ScnIUBAQEBAQFbPTgu
+ JBwXDwsLBwYYQ3QDAwMDAwMDAwMD92cwXHVed3mKkmGTlHyWlpd0AQEBAQFaREE5OC4rHA8PCwcYO6UD
+ AwMDAwMDAwMD9WeAeFx3d3mKkmSBcIeGm2mXoXJyq29LS1ZaWlI5KxwVDwsQP6HCAwMDAwMDAwMDAWeA
+ fHh5eWKSZIR0AQEBAaGXl39/fX1VcwEBAQFbOi4hFw8TLHB0AwMDAwMDAwMDq6eAbGpkeWJkfocBAQEB
+ AQGFl399fX1xAQEBAQEBUz04KyEeNlABAwMDAwMDAwMDA/5nfmqBbH5+fpt0AQEBAQGfmH9/fW10AQEB
+ AQFbR0FAOi4rMk10AwMDAwMDAwMDA/pnfmpwop+whoGahoeicwEBAZ9ycwEBAXJaWllLUlpbW29ENUb0
+ AwMDAwMDAwMDA/VnnYUBAQEBAfSBgYGCgocBAQEBAQFzUk9LS0tZAQEBAQGlNT+hwgMDAwMDAwMDAwFn
+ gIYBAQEBAQGEhISEgoUBAQEBAQFaZU9LS0taAQEBAQF0NGOGcwMDAwMDAwMDA5/DgHyHcwEBc4aahHBw
+ onMBAQEBdHFrTlJWUktPcXQBAVtSLzaCAQMDAwMDAwMDAwP/Z2RmaGxsbIGGdAEBAQF0h26Dg2tVcwEB
+ AXNSQUFAPTgrHTZNdAMDAwMDAwMDAwP8Z5JFTEloaFABAQEBAQGHg4NrUVJyAQEBAQFaPTk4LiQcFSNG
+ nwMDAwMDAwMDAwP2Z2IjMj9DRkyHAQEBAaVUUVFRUVJvAQEBAXNTRzocGhUPCxA7osADAwMDAwMDAwMB
+ Z18UEC03N0NMf25uVH1UcXQBpVpPUlhYU09LS0dEORoLBxAthnMDAwMDAwMDAwOlmXYOEA4ZIBk7Oz9j
+ Y0JyAQEBAQFYS0tHR0dEQUBAQEA8GggshAEDAwMDAwMDAwPB/zAKCRQKEiAZGyk/e2NvAQEBAXNSREFA
+ PT06OTk5Ojk6PTMmSfIDAwMDAwMDAwMDpGcSCQkFEhINGRspKS02a21vVQI+OC4uLiorKi4qLi44ODlC
+ Rp8DAwMDAwMDAwMDn2d2EQkEDRISDQoFES0sLDYyNTUoIh0aHRocHBwhJCQrKjFCTPcDAwMDAwMDAwMD
+ q6dnXxEEDRISDQ0KEREOFB8lIxATDw8PDw8PFRUXFxodIjVCTIalAwMDAwMDAwMDA3SZZ2JgXVxdYGBg
+ YCAgNzcbKSkRLQ4ODg4ODi0tLCwsLC07SZoBAwMDAwMDAwMDAwOl+aeZZ2dnZ2d6enp6eo6OYo5iYmJi
+ YmJiYmJiYmJiYmKAgIDzAwMDAwMDAwMDAwMDA8KlAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGw
+ iGf3AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDwbCkAwMDAwMDAwMD
+ AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwP3pQMDAwMDAwMDAwMDAwMDAwMDAwMD
+ AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOl8gMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMD
+ AwMDAwMDAwMDAwMDAwMDAwMD////////AAD///////8AAP///////wAA///5////AAD///H///8AAOAA
+ Af///wAAwAAB////AACAAAH///8AAAAAAP///wAAAAAA////AAAAAAD///8AAAAAAP///wAAgAAA////
+ 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
+ 3ACyotsAwrLrANHD9wDUxvkAzsPsAM3C6gDMwugA5+H3AObh9ABTG+EAWTayAFs4tABmP8kAflTpAHpa
+ ywCGadAAn3/uAKmN8AChid4Ayrj3ANPF9gDSxfMA0cTxANDE7gDMwecA2tHvAOfh9QBCE6MAahnpAPbw
+ /gBaGKkAdwvpAMyk9wB0D9UAeBHdAH4U6QB7E+MAgBbsAGUGuACCCuoAawq/AG4LxgBxDc4AXhqaAFch
+ hwBoB7oAZge3AIYH2ACVEu8AtA30ANEE9wDdA/kA9AL9AAAAAAB8KjgAijQhAJM5BgCbQhAApk0aALBY
+ JgC7ZDIAxm49AM53RgDUfkwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhYmNkZWZnaGgAAAAAAABfYWJjZGVmZ2hoAAAAAAAAVGBiY2Rl
+ ZmdoaAAAAAAAAEcHBAMFVUQICQoLDDJFWQBHBwQDBQYcLUAaCwwyDQ1ORwcEAwUGLgEBPwsMMg0NDUgH
+ BCFBKBYgOxUlPToNDQ1IBw4BAQEnCAkmAQEBEQ0NSSsqGSIoAUMwASUfNjwsI0YBATMFNDEBASYLDBQB
+ AQJIFxIpAQFCNzUaAQEkExgNSAcEHkEvHDcbGj49OQ0NDVAHBAMFBicBASYLDDINDQ1bBwQDBQYPOB0Q
+ CwwyDQ0NAFxYT1dWUVJTSktNTE5ODQAAAAAAAAAAAAAAAAAAAFqAP+n1AD/j4QA/3OsAAfrXAAAAAAAA
+ AAAAAAAAAAAAAAAA6fUAAOThAADc6wAA/NsAAAAAAAAAAIAAAAD//gAAKAAAADAAAABgAAAAAQAgAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAQAAAAJAAAABwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAABAAAABwAAAAzAAAAIgAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ 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
+ ef82HoH/Mhp4/ywXa/8tF2v/Lxdu/zEYcf8zGXT/NRp3/zcbev85G33/OxyA/z0dg/8/Hob/QR+K/0Qh
+ kf9IJJv/TSel/1Aqr/9SK7X/VCy3/1Msvv9TLtb/Ui3V/1Et1f9RLNX/UCvV/1Ar1f9QK9X/UCvV/1As
+ 0/9QLND/Ti3I/0wuuf9ON6L/g3qe/2ZlZNwAAAB8AAAAKwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAOSxm9zYhfP85Ho7/NBmJ/y4Vef8tFHX/LxV4/zEWfP80Fn//NheC/zcYhv86GIn/PBqM/z0a
+ kP9AHJP/QhyW/0Ufn/9LIqr/UCa1/1Qqv/9YLMj/WS3K/1ktyv9XL+z/VSzr/1Qq6/9SKev/Uijr/1En
+ 6/9RJ+v/USfq/1En6v9RKOj/USjk/1Ar2P9OLsL/SC+h/5GOmv4AAACXAAAARQAAAAsAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAATkNz3jUhev86HpT/NhmR/zAVgP8tFHX/LxR4/zEVfP8zFn//NRaC/zcY
+ hv85GIn/OxmM/z4akP9AHJT/Qh2X/0chn/9NJqr/Uyq2/1kwwf9eM8r/XzXO/14zzv9cM+j/WTDu/1Yt
+ 7v9UKu3/Uijt/1In7f9SJ+3/USbt/1Em7f9RJu3/USbt/1En6v9QKtr/TS67/4p9tv9/fn7MAAAAWgAA
+ ABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUEdwsjknef86H5P/OBqX/zIWhf8tFHb/LhR3/zAV
+ e/8yFX7/NRaB/zgYhf86GYj/PRqM/z8bkP9BHpT/RB+X/0kjn/9QKqr/VzG2/3xbzf+nkOH/sZ3n/52E
+ 4f9rReb/XTXu/1ox7v9WLe7/VCrt/1Mp7f9SKO3/Uift/1In7f9RJu3/USbt/1Em7f9RKOX/Ty3L/3Vj
+ t//CwsLlAAAAagAAAB0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASD9ncUw9gf86H5D/ORub/zQX
+ iv8uFHn/LhR2/zAVev8yFX3/NReA/zgZhf86G4j/PRyM/0Eekf9DIJT/RySa/00on/9TL6r/wbPj////
+ ///////////////////18/3/k3j0/1017v9aMe7/Vy7u/1Ys7f9UKu3/VCnt/1Io7f9SJ+3/Uift/1Em
+ 7f9RJ+r/UCvV/1Q8rf/j4+P0AAAAegAAACUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFdK
+ gv9AKJD/Ohye/zUYkP8vFX3/LRR1/y8Uef8yFn3/NRiA/zgbhf89HYn/QSCO/0Qjkv9IJpb/TCmb/1Et
+ oP+BZr//////////////////////////////////2M77/2E67/9fN+7/XDTu/1ox7v9YL+7/Vi3u/1Qq
+ 7f9TKe3/Uijt/1In7f9RJ+z/USrc/0svsf/T0N/7AAAAiwAAADEAAAACAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAFNHffdUQJf/PR+f/zcYlf8xFoL/LhV2/zAVef8zGH3/NxqB/zsdhv9AIYr/RSaQ/0oq
+ lf9OLpn/UjGe/1Y0ov9mRrD/9fP6////////////////////////////va34/2ZA7/9kPu//YTrv/184
+ 7v9dNe7/WzLu/1gv7v9VK+3/VCnt/1Io7f9SJ+3/Uirh/00uu//Bu9r/AAAAmAAAAEIAAAAJAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAExAdehXRZP/Vjyp/zwdm/80F4j/LxZ4/zAXef80Gn3/OByC/z8i
+ h/9DJoz/Vzqa/4ZxuP+pmc3/oI/K/29Tr/9ePqv/bEy4/7ys4v/a0fH/29Hz/9HF8f+ki+P/bEfs/2pF
+ 8P+Oc/P/s6D3/7Kf9/9/YPL/Xzju/1sz7v9YL+7/Vizt/1Qp7f9TKe3/Uirl/08uxP+fk8n/b29vwQAA
+ AFQAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEc8bsNSQor/WUGn/1Q5q/85HI//Mxp9/zMa
+ ev84Hn7/PCGE/0Imif9rVKT/9PL4///////////////////////Et9//ZEGz/2VCu/9pRMT/a0XN/21G
+ 0/9tRtP/iWvr/+3o/f//////////////////////1877/2A57/9cNO7/WTDu/1Yt7v9VK+3/VCro/1Ev
+ zf90YrT/ra2s3gAAAGUAAAAbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEU7Z3JOP4H/VkCj/1o+
+ r/9UO6P/QCeJ/zggfP89JIH/QSeG/0ctjP+lmMj/////////////////////////////////gmfA/2ZE
+ uv9pRcP/a0XM/25H0v9uSNP/wLDy/////////////////////////////////4pt8/9hOu//Xjbu/1sz
+ 7v9ZMO7/Vy/r/1Qw1f9VPaj/0NDQ8QICAnoAAAAlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4w
+ cSFJPHj/VD6d/1k9r/9ZQKn/WEKc/045i/9FLob/SC+J/0wxjv9xXKf/9PL4////////////////////
+ ////////2dHr/3JSvf9rR8L/bUjK/3BK0v+UeN7/9vT9////////////////////////////2dD7/2hC
+ 7/9lP+//Yzzv/2A57/9dNe7/WzPt/1Yy2/9ONK//y8fV+wICAosAAAAxAAAAAgAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAP///wFDN3D7UDyW/1g+rf9bQa3/g3K4/7eu0f/X0uX/zMXe/56Qwf9dRZn/YEee/6KS
+ x/+uoM//ua3X/+vo9P/////////////////a0e//29Ly/+3o+f/////////////////c0/v/t6X4/7ak
+ 9/+agfX/a0bw/31c8v+0off/2c/7/9jO+/+mkPb/aEPv/1o04f9SNbj/xb/Z/wMDA5gAAABAAAAACAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wFANWroTjuP/1Y9qv+Db8T/////////////////////////
+ ///i3u3/XEOa/1k9mv9aPp3/X0Ki/2NGpv+pmc//////////////////////////////////7en6/4Fi
+ 8f9uS/D/bUnw/2xH8P9rRvD/mYD0////////////////////////////4dr8/1s15v9TNcL/mo/D/2xs
+ bMADAwNQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wE8MWLESTiG/1M6pP+Xhs7/////////
+ ////////////////////////Zk+g/2hQo/9mTKT/Zkul/2VIpv95YLT/////////////////////////
+ ////////t6Tp/25K6f9sSPD/a0bw/2pF8P9qRfD/taL3////////////////////////////9fL+/1w1
+ 6f9VNMr/fGy2/5OTk9YDAwNiAAAAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wE5LWCLRDR8/082
+ n/9WOq//q53U/+rn8v///////////+ro8v+bjcD/Ykuc/2VNof+PfLz/k4C//7Ci0f/u6/X/////////
+ //////////////b0/P/Ju+7/d1PW/21I6P9/X/L/kHTz/31c8v9qRfD/clDw/8a4+f/18/7/////////
+ ///Owvr/fVzy/1sz6/9VM9H/X0ms/7q6uuwCAgJ3AAAAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+ /wE7MGY/PS1w/0kxl/9PM6v/UjWr/1I4nf9QOY//UTyN/1U+kf9ZQJX/movA//Xz+f//////////////
+ ////////9vT6/6qY0/+Jbsf/eFnH/3ZTzf91UNX/jG7s/+3o/f/////////////////t6P3/g2Xy/2VA
+ 7/9kPu//Yz3v/2E67/9fN+7/WzPu/1gv7f9UMNj/TDGs/8nIzvsAAACIAAAALgAAAAEAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAD///8BNypo/kMsj/9JLab/Ti+y/1I0t/9ONKf/TTWc/1E4of9WPKf/////////
+ ////////////////////////r6Df/3RXy/90VtD/dlbW/3dX4P95We7/3tb8////////////////////
+ ////////sZ73/2E67/9fOO7/Xjbu/1w07v9aMe7/WC/u/1Ys7f9TLd7/TTG2/7Ktxf8AAACUAAAAPQAA
+ AAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8BMSRe8D0nhv9KKrn/WjHs/1Ux3P9PL8P/Si6w/00y
+ tP9TNrr/oZHb///////////////////////k3/j/eV3e/3JT4P9zVOP/dFXn/3VU6v92Ve//qpX2////
+ ///////////////////t6f3/im3z/2dC7/9gOe//WS/u/1cu7v9WLO3/VCrt/1Mp7f9SK+L/Ty+//46D
+ s/9ISEe1AAAATgAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKx9Wwz0miv9TLtr/VSzs/1Mq
+ 4v9LKMj/RCew/0cqr/9LL7X/UjS7/2JGxf+Eb9X/iHHY/4Fo2f9nSdX/fWLe/8i98//29P3//////+Te
+ +/+5qPb/c1Dw/3ta8f+Ve/T/lHr0/4tu8/9uSvD/bEfw/2lF8P9oQ/D/Z0Hv/2A47v9YLu7/Uijt/1In
+ 7f9SKeb/Ty3J/3xtr/+GhoXWAAAAYAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKB1Pij8p
+ kf9RLNP/Uijq/1An5/9IJM7/QSK1/0Ejq/9EJrL/SSq3/04vvP9SM8P/VzjH/1s7zP9gQNL/2ND1////
+ ////////////////////////kXbz/2xI8P9rRu//akTv/2lD7/9oQu//ZUDv/2Q+7v9iPO7/Yzzv/2M9
+ 7/9jPO//Yjrv/1gu7v9RJ+n/UCzQ/2FNqf+qqansAAAAcQAAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAJx1LPUArjf9PLcn/USjm/1Am6/9KI9b/QR+7/zweqf8/IK7/QiOz/0Ynuf9JKr7/Ti7D/1Iy
+ yf9YNs7/o5Dn///////////////////////s5/z/eVnw/2ZA7/9kPu//Yzzv/2E77/9hOu//YTnu/2A4
+ 7v9fOO7/Xzju/2A57v9gOO7/YDnu/2E67/9dNuz/Ui7W/0kvpf+9vLz4AAAAggAAACsAAAABAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAADspfv5NLrz/USre/1En7P9MJN3/Qx/C/zsdq/88Haz/Ph+x/0Eh
+ tf9EI7v/RybA/0opxf9PLcv/VTPR/25Q2/+PeOb/pZHt/4ht6/9gPOj/YDnr/1837/9dNe//XDTu/1w0
+ 7v9cM+7/WzPu/1wz7v9cNO7/XDPu/1w07v9dNe7/Xjbu/1437v9fOO3/Xjvd/00yr/+fmbL+AAAAkQAA
+ ADcAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD0re+dJL6j/UCzP/1Eo5f9OJeT/RSDK/zwc
+ sP87HKn/PB2u/z8ftP9BILn/QyK+/0Ykwv9LKMj/TyvN/1Iv0/9VMtj/VzPc/1k04P9aM+X/WTDp/1kw
+ 7f9YL+3/Vy7t/1cv7f9YLu7/WC/u/1gv7v9ZL+7/WTDu/1ox7v9aMu7/WzPu/1wz7v9cNO3/XTne/1g9
+ uv+NhKz/IyMjqAAAAEkAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADorcXFCLov/Sy+z/1As
+ 0P9QKd3/SCPO/z8etv86G6j/Oxys/z0dsf9AHrb/QR+7/0Qiwf9HI8b/SSXL/00o0P9PK9X/USza/1Is
+ 3v9TK+P/Uyvn/1Qq6/9TKu3/VCrt/1Uq7f9UKu3/VSvt/1Ys7f9WLe3/Vy3t/1cu7v9YL+7/WS/t/1kw
+ 7f9aMuj/Wjba/1Y6uv94bKP/aGdnzQAAAF4AAAAXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAA7LHawQi6M/0ovrf9OLsL/SSi+/0Eirf85Hpz/Oh6g/zwfpf89IKn/QCGu/0Iis/9DJLj/Ria9/0kn
+ wf9LKcb/TSnK/04qz/9PKtP/TyrX/1Ar2/9RKt7/UCne/1Eq3v9RKt7/USve/1Ir3v9TLN7/Uy3e/1Qu
+ 3v9ULt//VTDe/1Yx3P9WMtb/VTXK/1I4s/9fUJj/l5aW7AAAAHEAAAAhAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAOCpuiT4sfftELpD/RCyY/z4njv83IoD/NiJ//zgig/85I4f/OySL/zwl
+ j/8/J5P/QCiW/0Ipmv9DK5//RSyi/0Ytpv9ILan/SS6s/0ousP9LL7P/Sy+z/0svs/9LL7P/Sy+z/0sv
+ s/9LL7P/TDCz/0wws/9NMbP/TTGz/04ysf9OM67/TjSq/0w0n/9GM4j/p6em9wAAAH8AAAApAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4KW1ZNyhtoDMlZsQtIFvFKx5Wxiwf
+ WcYuIFzGLyJfxjAiYcYyI2TGMyRmxjMlacY1J2zGNyhuxjcocMY4KXLGOSp1xjsrd8Y8K3rGPCx6xjws
+ esY8LHrGPCx6xjwsesY8LHrGPCx6xjwrecY8K3nGPCt5xj0secY+LXrGPy588T8uff8/Lnv/lZGf/QAA
+ AHkAAAAyAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADcq
+ bT05Km/wf3mS/wAAAFsAAAA6AAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAcmuK94SDg4sAAAAsAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh4SRiZqambMAAAAOAAAABQAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//
+ /////wAA///4f///AAD///B///8AAOAAAH///wAAgAAAf///AACAAAB///8AAAAAAD///wAAAAAAP///
+ AAAAAAA///8AAAAAAD///wAAAAAAP///AAAAAAAf//8AAIAAAB///wAAgAAAAAH/AACAAAAAAH8AAIAA
+ AAAAPwAAgAAAAAA/AADAAAAAAB8AAMAAAAAAHwAAwAAAAAAfAADAAAAAAB8AAMAAAAAAHwAA4AAAAAAP
+ AADgAAAAAA8AAOAAAAAADwAA4AAAAAAPAADgAAAAAA8AAOAAAAAABwAA4AAAAAAHAADgAAAAAAcAAOAA
+ AAAABwAA4AAAAAAHAADgAAAAAAMAAPAAAAAAAwAA8AAAAAADAAD4AAAAAAMAAPgAAAAAAwAA+AAAAAAB
+ AAD8AAAAAAEAAPwAAAAAAQAA/AAAAAABAAD+AAAAAAEAAP8AAAAAAQAA/8AAAAAAAAD//////8AAAP//
+ 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
+ 7f9TKe3/Uift/1Em7f9RJu3/USbs/1Ep4P9LLrX/wsDI9QAAAH0AAAAnAAAAAAAAAAAAAAAAAAAAAFZN
+ eMM9Joj/OBqY/zAVf/8uFHf/MRV8/zUXgf84GYb/PBuM/0Eekv9GIZj/Timl/41yzf/XzfH/2M7z/8S1
+ 8P9yUPD/WTDu/1Ys7f9UKe3/Uijt/1In7f9RJu3/USfr/08ty//Audn9AAAAjgAAADQAAAADAAAAAAAA
+ AAAAAAAAUEdvck07jP86HJz/MhaH/y0Udv8xFnv/NRiA/zochv9BII7/RSST/0wpm/9UMKT/////////
+ /////////////8/D+v9fOO7/WzPu/1kv7v9WLO3/VCnt/1Io7f9RJu3/UCvY/6KV0P8AAACaAAAARgAA
+ AAsAAAAAAAAAAAAAAABLQ2kgVUaH/0crov82GI//LxV4/zIYe/84G4H/PyKJ/0gpkf9lSaX/X0Kl/1o5
+ p/+6q97////////////29Pz/mX/w/2dB7/+BYvL/akXw/1w07v9YL+7/VCrt/1Io7f9SKuD/gW7F/4mJ
+ icsAAABYAAAAFAAAAAAAAAAAAAAAAAAAAABMP3z+WUGn/0Upnf8zGn//Nhx8/zwhg/9dRJr/6OXx////
+ ////////18/p/21NuP9nQ8D/a0bN/21G0/+bge3/9vT+////////////xLX5/1017v9ZL+7/Vizt/1Qr
+ 5v9iSL3/vLu75QAAAGcAAAAcAAAAAAAAAAAAAAAAAAAAAEg7c/BVPqD/WT6s/043lP9AKIL/RCuH/21Y
+ pP//////////////////////qJbT/2hGvv9sRsv/b0nT/+Te+f/////////////////18/7/ZD7v/2A5
+ 7/9cNO7/WTDq/1Ayvv+/vcXxAAAAeQAAACUAAAAAAAAAAAAAAAAAAAAAQjdqw1E9l/9aP6//mInE/8G6
+ 1/+2rND/iXi1/4Bssf+tn87/zcTi//Xz+f//////493y/9vS8v/t6fn//////+Te/P/Iu/n/tqT3/4Zo
+ 8/+qlfb/z8P6/7qp+P97XPD/VjXM/66nx/sCAgKLAAAAMQAAAAIAAAAAAAAAAAAAAAA5Ll6LSzmL/3dh
+ vf//////////////////////gW2x/2BGn/9hRaL/blOt///////////////////////SxvL/bkvw/2xH
+ 8P9qRfD/taL3/////////////////9fN+/9YNdb/pZrK/wICApgAAABCAAAACQAAAAAAAAAAAAAAADoz
+ XD9EM33/Ujip/7Wp2f/18/n//////8zF3/9sVaP/jXu6/5yKxP/Ty+b/////////////////0sbw/4lq
+ 3P+Ia/P/kHTz/4Zo8v+FZ/L/4tv8///////i2vz/kHTz/1gy3v+GdcH/Z2dnwQAAAFQAAAASAAAAAAAA
+ AAAAAAAA////ATorbv5KMKD/UDOq/000lv9NN4r/UzyR/9XP5f/////////////////Tyub/fWG+/3dX
+ xf96WNr/xLX3/////////////////6iT9v9jPO//YTrv/1017v9ZMO7/VS3l/2hRu/+bm5veAAAAZQAA
+ ABsAAAAAAAAAAAAAAAAAAAAAMiRj8UUpof9YMeP/UzDQ/0wvsv9RNbf/q53f////////////9fT8/4py
+ 4v9zVOL/jnTs/3VV7f+7qvj////////////29P7/moH1/2M+7/9bMu7/Vi3u/1Qq7f9TKuj/TS+4/7q5
+ ufEAAAB5AAAAJQAAAAAAAAAAAAAAAAAAAAAtIFvRSiu3/1Mq6/9NKNj/RCS0/0YpsP9OMLr/VTjC/1w+
+ yf9iQ9H/tKTs////////////9vT+/5R68/9vS/D/bkrw/2xH7/9oQ+//ZkDw/2Q/7/9hOu//WTDu/1Io
+ 6/9OLcf/m5Wz+wAAAIsAAAAwAAAAAQAAAAAAAAAAAAAAACsfVqBLLrT/USjm/04l4v9BILz/PSCq/0Ij
+ s/9JKrz/Ty/E/1U0y/+3qOz////////////28/7/jHDy/2U/7/9jPO//Yjrv/2E57v9gN+7/Xzju/184
+ 7v9gOe7/Xzfu/1Iv0f+Sh7b/AAAAlgAAAD0AAAAHAAAAAAAAAAAAAAAAJh1LWUUtmv9QK9n/UCbo/0Qg
+ xv87HKr/Ph6w/0Eht/9FI7//SinG/1Evz/9iQtn/hGnm/1w35P9cNer/WzPu/1ox7v9aMO7/WjLu/1sy
+ 7v9bMu7/WzPu/1w07v9eNe7/XTva/3tssP9BQUG1AAAATgAAAA8AAAAAAAAAAAAAAAAAAAAAPyyB8Esu
+ tf9QKtn/SCPN/zscrP87HKv/Ph6z/0Egu/9FI8L/SifK/04r0v9RLNn/Uyvg/1Mr5/9UK+v/VCns/1Qq
+ 7P9VK+z/Vizs/1Yt7f9XLu3/WTDs/1kx6v9ZN9b/bVuu/3h3d9UAAABhAAAAGQAAAAAAAAAAAAAAAAAA
+ AAA5Km4gPyyC9kguo/9HK67/PCKY/zkgkv87IZj/PSKf/0Elpf9DJ63/Rymz/0kruf9LLL//TSzF/08t
+ y/9PLMz/TyzM/08szP9PLcz/UC7M/1EvzP9SMMv/UjLH/1I1uv9MNpr/mpqZ4wAAAGsAAAAiAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAOSpxiTopd8M0JGzFLyBixjEhZ8YzI2vGNCRvxjYlc8Y5KHnGOyl9xjwq
+ gMY+K4XGQC2JxkEti8ZBLYvGQS2LxkEti8ZBLYvGQS2KxkEuisZCL4nGQC6D90Auf/+Pipv0AAAAWwAA
+ ACcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOCptcX95
+ kfsAAAAzAAAAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAkY6WwYeGhUYAAAAJ//x////4f/+AAH//AAA//wAAP/8AAD//AAA//wAAP/8AAAA/AAAADwAA
+ AAcAAAAHgAAAB4AAAAeAAAADgAAAA4AAAAPAAAADwAAAA8AAAAHAAAABwAAAAcAAAAHgAAAB4AAAAOAA
+ AADgAAAA8AAAAPAAAAD8AAAA////8P////goAAAAEAAAACAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAJM5Bv+bQhD/pk0a/7BYJv+7ZDL/xm49/853Rv/Ufkz/1H5M/wAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAHwqOP+TOQb/m0IQ/6ZNGv+wWCb/u2Qy/8ZuPf/Od0b/1H5M/9R+TP8AAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAABeGpr/ijQh/5tCEP+mTRr/sFgm/7tkMv/Gbj3/zndG/9R+TP/Ufkz/AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAWhip/0kP4f89C8D/Mgig/zMJn/9XIYf/QhOj/z0Ps/9CEr3/RhTH/0sX
+ 0f9PGdr/Uxvh/1Ud5t9VHeafVR3mEFoYqf9JD+H/PQvA/zIIoP8zCZ//NQqj/3dZxf/Ow+z/0MTu/4Be
+ 2f9LF9H/Txna/1Mb4f9VHeb/VR3m/1Ud5r9aGKn/SQ/h/z0LwP8yCKD/Mwmf/zUKo//Nwur/////////
+ ///RxPH/SxfR/08Z2v9TG+H/VR3m/1Ud5v9VHeb/SQ/hv0kP4f89C8D/mYTQ/8zB5/+zo9z/Xju6/56H
+ 2f+hid7/aUDS/7uo7v/Txfb/qY3w/1Ud5v9VHeb/VR3m/0kP4b9JD+H/SRrE/////////////////7Sk
+ 3/89D7P/QhK9/7mn6v////////////////9gK+j/VR3m/1Ud5v/Htfbn0cP3/8Ky6/9lRrj/mYTP/7Oj
+ 3P//////5+H1/+fh9///////u6ju/6eM7f9+VOn/yrj3/9TG+f+/qvb/9vT++///////////WTay/zMJ
+ n/9bOLT/5uH0////////////uafq/0sX0f9PGdr/c0bn////////////9PH9/0kP4b93S+n/VSrI/7Ki
+ 2////////////9rR7/96Wsv/Zj/J/4Be2f///////////76p9P9qOen/gFbs/1Ud5v9JD+G/SQ/h/z0L
+ wP+MdMr/zMHn/8zC6P93WcX/elrL/31c0v+AXtn/0sXz/9PF9v+ff+7/VR3m/1Ud5v9VHeb/SQ/hr0kP
+ 4f89C8D/Mgig/zMJn/81CqP/tKTf////////////uafq/0sX0f9PGdr/Uxvh/1Ud5v9VHeb/VR3m/0kP
+ 4UBJD+H/PQvA/zIIoP8zCZ//NQqj/0Ucr/+GadD/iWvW/1Ijy/9LF9H/Txna/1Mb4f9VHeb/VR3m/1Ud
+ 5v8AAAAASQ/hMD0LwJ8yCKC/MwmfvzUKo785Daq/PQ+zv0ISvb9GFMe/SxfRv08Z2r9TG+G/VR3mv1Ud
+ 5r9VHeb/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAVR3mcIA/st4APwz/AD8A/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAP/wAA
+ Ov8AAGf/gABW///+E/g=
+
+
+
\ No newline at end of file
diff --git a/ModelPlugin.cs b/ModelPlugin.cs
new file mode 100644
index 0000000..2f01819
--- /dev/null
+++ b/ModelPlugin.cs
@@ -0,0 +1,163 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.Windows.Forms;
+
+using Tekla.Structures.Geometry3d;
+using Tekla.Structures.Model;
+using Tekla.Structures.Model.UI;
+using Tekla.Structures.Plugins;
+
+namespace TeklaModelPlugin1
+{
+ public class PluginData
+ {
+ #region Fields
+ //
+ // Define the fields specified on the Form.
+ //
+ /* Some examples:
+ [StructuresField("RebarName")]
+ public string RebarName;
+
+ [StructuresField("RebarSize")]
+ public string RebarSize;
+
+ [StructuresField("RebarGrade")]
+ public string RebarGrade;
+
+ [StructuresField("RebarBendingRadius")]
+ public string RebarBendingRadius;
+
+ [StructuresField("RebarClass")]
+ public int RebarClass;
+
+ [StructuresField("RebarSpacing")]
+ public double RebarSpacing;
+ */
+ #endregion
+ }
+
+ [Plugin("TeklaModelPlugin1")]
+ [PluginUserInterface("TeklaModelPlugin1.MainForm")]
+ public class TeklaModelPlugin1 : PluginBase
+ {
+ #region Fields
+ private Model _Model;
+ private PluginData _Data;
+ //
+ // Define variables for the field values.
+ //
+ /* Some examples:
+ private string _RebarName = string.Empty;
+ private string _RebarSize = string.Empty;
+ private string _RebarGrade = string.Empty;
+ private ArrayList _RebarBendingRadius = new ArrayList();
+ private int _RebarClass = new int();
+ private double _RebarSpacing;
+ */
+ #endregion
+
+ #region Properties
+ private Model Model
+ {
+ get { return this._Model; }
+ set { this._Model = value; }
+ }
+
+ private PluginData Data
+ {
+ get { return this._Data; }
+ set { this._Data = value; }
+ }
+ #endregion
+
+ #region Constructor
+ public TeklaModelPlugin1(PluginData data)
+ {
+ Model = new Model();
+ Data = data;
+ }
+ #endregion
+
+ #region Overrides
+ public override List DefineInput()
+ {
+ //
+ // This is an example for selecting two points; change this to suit your needs.
+ //
+ List PointList = new List();
+ Picker Picker = new Picker();
+ ArrayList PickedPoints = Picker.PickPoints(Picker.PickPointEnum.PICK_TWO_POINTS);
+
+ PointList.Add(new InputDefinition(PickedPoints));
+
+ return PointList;
+ }
+
+ public override bool Run(List Input)
+ {
+ try
+ {
+ GetValuesFromDialog();
+
+ //
+ // This is an example for selecting two points; change this to suit your needs.
+ //
+ ArrayList Points = (ArrayList)Input[0].GetInput();
+ Point StartPoint = Points[0] as Point;
+ Point EndPoint = Points[1] as Point;
+
+ //
+ // Write your code here; better yet, create private methods and call them from here.
+ //
+ }
+ catch (Exception Exc)
+ {
+ MessageBox.Show(Exc.ToString());
+ }
+
+ return true;
+ }
+ #endregion
+
+ #region Private methods
+ ///
+ /// Gets the values from the dialog and sets the default values if needed
+ ///
+ private void GetValuesFromDialog()
+ {
+ /* Some examples:
+ _RebarName = Data.RebarName;
+ _RebarSize = Data.RebarSize;
+ _RebarGrade = Data.RebarGrade;
+
+ char[] Parameters = { ' ' };
+ string[] Radiuses = Data.RebarBendingRadius.Split(Parameters, StringSplitOptions.RemoveEmptyEntries);
+
+ foreach (string Item in Radiuses)
+ _RebarBendingRadius.Add(Convert.ToDouble(Item));
+
+ _RebarClass = Data.RebarClass;
+ _RebarSpacing = Data.RebarSpacing;
+
+ if (IsDefaultValue(_RebarName))
+ _RebarName = "REBAR";
+ if (IsDefaultValue(_RebarSize))
+ _RebarSize = "12";
+ if (IsDefaultValue(_RebarGrade))
+ _RebarGrade = "Undefined";
+ if (_RebarBendingRadius.Count < 1)
+ _RebarBendingRadius.Add(30.00);
+ if (IsDefaultValue(_RebarClass) || _RebarClass <= 0)
+ _RebarClass = 99;
+ if (IsDefaultValue(_RebarSpacing) || _RebarSpacing <= 0)
+ _RebarSpacing = 200.0;
+ */
+ }
+
+ // Write your private methods here.
+
+ #endregion
+ }
+}
diff --git a/Properties/AssemblyInfo.cs b/Properties/AssemblyInfo.cs
new file mode 100644
index 0000000..4a8ef50
--- /dev/null
+++ b/Properties/AssemblyInfo.cs
@@ -0,0 +1,35 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// General Information about an assembly is controlled through the following
+// set of attributes. Change these attribute values to modify the information
+// associated with an assembly.
+[assembly: AssemblyTitle("TeklaModelPlugin1")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("Tekla")]
+[assembly: AssemblyProduct("Tekla Structures")]
+[assembly: AssemblyCopyright("Copyright © Tekla 2012")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// Setting ComVisible to false makes the types in this assembly not visible
+// to COM components. If you need to access a type in this assembly from
+// COM, set the ComVisible attribute to true on that type.
+[assembly: ComVisible(false)]
+
+// The following GUID is for the ID of the typelib if this project is exposed to COM
+[assembly: Guid("581baed8-6c93-4723-915b-715a6d9ce3fb")]
+
+// Version information for an assembly consists of the following four values:
+//
+// Major Version
+// Minor Version
+// Build Number
+// Revision
+//
+// You can specify all the values or you can default the Revision and Build Numbers
+// by using the '*' as shown below:
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/TeklaModelPlugin1.csproj b/TeklaModelPlugin1.csproj
new file mode 100644
index 0000000..2238945
--- /dev/null
+++ b/TeklaModelPlugin1.csproj
@@ -0,0 +1,97 @@
+
+
+
+ 21.0
+ Debug
+ AnyCPU
+ 8.0.50727
+ 2.0
+ {446EEA05-2797-4180-9AEE-AD34E311DC76}
+ Library
+ Properties
+ TeklaModelPlugin1
+ TeklaModelPlugin1
+
+
+ v4.0
+
+
+
+
+ 2.0
+
+ publish\
+ true
+ Disk
+ false
+ Foreground
+ 7
+ Days
+ false
+ false
+ true
+ 0
+ 1.0.0.%2a
+ false
+ false
+ true
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ..\..\..\..\..\..\..\..\..\Program Files\Tekla Structures\$(TSVersionNumber)\nt\bin\plugins\Tekla.Structures.Plugins.dll
+
+
+
+
+
+ Form
+
+
+ MainForm.cs
+
+
+
+
+
+ Designer
+ MainForm.cs
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TeklaModelPlugin1.slnx b/TeklaModelPlugin1.slnx
new file mode 100644
index 0000000..5b9df8c
--- /dev/null
+++ b/TeklaModelPlugin1.slnx
@@ -0,0 +1,3 @@
+
+
+