浏览代码

添加项目文件。

ruanzl 3 周之前
父节点
当前提交
55717bacb6

+ 22 - 0
CameraModel.sln

@@ -0,0 +1,22 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.12.35527.113 d17.12
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CameraModel", "CameraModel\CameraModel.csproj", "{664A4BFA-18F7-485A-BF19-3351CC917B99}"
+EndProject
+Global
+	GlobalSection(SolutionConfigurationPlatforms) = preSolution
+		Debug|Any CPU = Debug|Any CPU
+		Release|Any CPU = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(ProjectConfigurationPlatforms) = postSolution
+		{664A4BFA-18F7-485A-BF19-3351CC917B99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{664A4BFA-18F7-485A-BF19-3351CC917B99}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{664A4BFA-18F7-485A-BF19-3351CC917B99}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{664A4BFA-18F7-485A-BF19-3351CC917B99}.Release|Any CPU.Build.0 = Release|Any CPU
+	EndGlobalSection
+	GlobalSection(SolutionProperties) = preSolution
+		HideSolutionNode = FALSE
+	EndGlobalSection
+EndGlobal

+ 6 - 0
CameraModel/App.config

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
+    </startup>
+</configuration>

+ 121 - 0
CameraModel/CameraModel.csproj

@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{664A4BFA-18F7-485A-BF19-3351CC917B99}</ProjectGuid>
+    <OutputType>WinExe</OutputType>
+    <RootNamespace>CameraModel</RootNamespace>
+    <AssemblyName>CameraModel</AssemblyName>
+    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+    <Prefer32Bit>false</Prefer32Bit>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <ApplicationIcon>微信图片_20250508145009.ico</ApplicationIcon>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="AntdUI, Version=1.9.12.0, Culture=neutral, processorArchitecture=MSIL">
+      <HintPath>..\packages\AntdUI.1.9.12\lib\net48\AntdUI.dll</HintPath>
+    </Reference>
+    <Reference Include="log4net, Version=3.0.4.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
+      <HintPath>..\packages\log4net.3.0.4\lib\net462\log4net.dll</HintPath>
+    </Reference>
+    <Reference Include="MvCameraControl.Net, Version=3.4.0.1, Culture=neutral, PublicKeyToken=52fddfb3f94be800, processorArchitecture=MSIL">
+      <SpecificVersion>False</SpecificVersion>
+      <HintPath>..\..\..\..\软件\MVS\Development\DotNet\win64\MvCameraControl.Net.dll</HintPath>
+    </Reference>
+    <Reference Include="System" />
+    <Reference Include="System.Configuration" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Design" />
+    <Reference Include="System.Web" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="Form1.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="Form1.Designer.cs">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </Compile>
+    <Compile Include="LogHelper.cs" />
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="Form1.resx">
+      <DependentUpon>Form1.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+      <DesignTime>True</DesignTime>
+    </Compile>
+    <None Include="log4net.config">
+      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+    </None>
+    <None Include="packages.config" />
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\电力_红灯.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\绿灯.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\微信图片_20250508145009.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\PixPin_2025-05-08_14-52-11.png" />
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="微信图片_20250508145009.ico" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>

+ 311 - 0
CameraModel/Form1.Designer.cs

@@ -0,0 +1,311 @@
+namespace CameraModel
+{
+    partial class Form1
+    {
+        /// <summary>
+        /// 必需的设计器变量。
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// 清理所有正在使用的资源。
+        /// </summary>
+        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows 窗体设计器生成的代码
+
+        /// <summary>
+        /// 设计器支持所需的方法 - 不要修改
+        /// 使用代码编辑器修改此方法的内容。
+        /// </summary>
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(Form1));
+            this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
+            this.groupBox5 = new System.Windows.Forms.GroupBox();
+            this.listBox1 = new System.Windows.Forms.ListBox();
+            this.groupBox4 = new System.Windows.Forms.GroupBox();
+            this.button_auto = new AntdUI.Button();
+            this.button_clear = new AntdUI.Button();
+            this.button_update = new AntdUI.Button();
+            this.groupBox1 = new System.Windows.Forms.GroupBox();
+            this.pictureBox2 = new System.Windows.Forms.PictureBox();
+            this.pictureBox1 = new System.Windows.Forms.PictureBox();
+            this.button_connect = new AntdUI.Button();
+            this.button_enum = new AntdUI.Button();
+            this.groupBox2 = new System.Windows.Forms.GroupBox();
+            this.cbDeviceList = new AntdUI.Select();
+            this.groupBox3 = new System.Windows.Forms.GroupBox();
+            this.input1 = new AntdUI.Input();
+            this.pictureBox3 = new System.Windows.Forms.PictureBox();
+            this.tableLayoutPanel1.SuspendLayout();
+            this.groupBox5.SuspendLayout();
+            this.groupBox4.SuspendLayout();
+            this.groupBox1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
+            this.groupBox2.SuspendLayout();
+            this.groupBox3.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).BeginInit();
+            this.SuspendLayout();
+            // 
+            // tableLayoutPanel1
+            // 
+            this.tableLayoutPanel1.ColumnCount = 1;
+            this.tableLayoutPanel1.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F));
+            this.tableLayoutPanel1.Controls.Add(this.groupBox5, 0, 5);
+            this.tableLayoutPanel1.Controls.Add(this.groupBox4, 0, 4);
+            this.tableLayoutPanel1.Controls.Add(this.groupBox1, 0, 1);
+            this.tableLayoutPanel1.Controls.Add(this.groupBox2, 0, 2);
+            this.tableLayoutPanel1.Controls.Add(this.groupBox3, 0, 3);
+            this.tableLayoutPanel1.Controls.Add(this.pictureBox3, 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 = 6;
+            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 70F));
+            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 13.25088F));
+            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 18.19788F));
+            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 18.37456F));
+            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 12.08981F));
+            this.tableLayoutPanel1.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 37.71626F));
+            this.tableLayoutPanel1.Size = new System.Drawing.Size(455, 628);
+            this.tableLayoutPanel1.TabIndex = 0;
+            // 
+            // groupBox5
+            // 
+            this.groupBox5.Controls.Add(this.listBox1);
+            this.groupBox5.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.groupBox5.Location = new System.Drawing.Point(4, 418);
+            this.groupBox5.Margin = new System.Windows.Forms.Padding(4);
+            this.groupBox5.Name = "groupBox5";
+            this.groupBox5.Padding = new System.Windows.Forms.Padding(4);
+            this.groupBox5.Size = new System.Drawing.Size(447, 206);
+            this.groupBox5.TabIndex = 11;
+            this.groupBox5.TabStop = false;
+            this.groupBox5.Text = "日志";
+            // 
+            // listBox1
+            // 
+            this.listBox1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.listBox1.FormattingEnabled = true;
+            this.listBox1.HorizontalScrollbar = true;
+            this.listBox1.ItemHeight = 15;
+            this.listBox1.Location = new System.Drawing.Point(4, 22);
+            this.listBox1.Name = "listBox1";
+            this.listBox1.Size = new System.Drawing.Size(439, 180);
+            this.listBox1.TabIndex = 0;
+            // 
+            // groupBox4
+            // 
+            this.groupBox4.Controls.Add(this.button_auto);
+            this.groupBox4.Controls.Add(this.button_clear);
+            this.groupBox4.Controls.Add(this.button_update);
+            this.groupBox4.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.groupBox4.Location = new System.Drawing.Point(4, 351);
+            this.groupBox4.Margin = new System.Windows.Forms.Padding(4);
+            this.groupBox4.Name = "groupBox4";
+            this.groupBox4.Padding = new System.Windows.Forms.Padding(4);
+            this.groupBox4.Size = new System.Drawing.Size(447, 59);
+            this.groupBox4.TabIndex = 10;
+            this.groupBox4.TabStop = false;
+            this.groupBox4.Text = "手动操作";
+            // 
+            // button_auto
+            // 
+            this.button_auto.DefaultBack = System.Drawing.Color.FromArgb(((int)(((byte)(3)))), ((int)(((byte)(169)))), ((int)(((byte)(244)))));
+            this.button_auto.Location = new System.Drawing.Point(35, 12);
+            this.button_auto.Name = "button_auto";
+            this.button_auto.Size = new System.Drawing.Size(96, 48);
+            this.button_auto.TabIndex = 2;
+            this.button_auto.Text = "开启手动";
+            this.button_auto.Click += new System.EventHandler(this.button_auto_Click);
+            // 
+            // button_clear
+            // 
+            this.button_clear.DefaultBack = System.Drawing.Color.FromArgb(((int)(((byte)(244)))), ((int)(((byte)(67)))), ((int)(((byte)(54)))));
+            this.button_clear.Enabled = false;
+            this.button_clear.Location = new System.Drawing.Point(300, 12);
+            this.button_clear.Name = "button_clear";
+            this.button_clear.Size = new System.Drawing.Size(96, 48);
+            this.button_clear.TabIndex = 1;
+            this.button_clear.Text = "清空";
+            this.button_clear.Click += new System.EventHandler(this.button_clear_Click);
+            // 
+            // button_update
+            // 
+            this.button_update.DefaultBack = System.Drawing.Color.FromArgb(((int)(((byte)(76)))), ((int)(((byte)(175)))), ((int)(((byte)(80)))));
+            this.button_update.Enabled = false;
+            this.button_update.Location = new System.Drawing.Point(167, 12);
+            this.button_update.Name = "button_update";
+            this.button_update.Size = new System.Drawing.Size(96, 48);
+            this.button_update.TabIndex = 0;
+            this.button_update.Text = "修改";
+            this.button_update.Click += new System.EventHandler(this.button_update_Click);
+            // 
+            // groupBox1
+            // 
+            this.groupBox1.Controls.Add(this.pictureBox2);
+            this.groupBox1.Controls.Add(this.pictureBox1);
+            this.groupBox1.Controls.Add(this.button_connect);
+            this.groupBox1.Controls.Add(this.button_enum);
+            this.groupBox1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.groupBox1.Location = new System.Drawing.Point(4, 74);
+            this.groupBox1.Margin = new System.Windows.Forms.Padding(4);
+            this.groupBox1.Name = "groupBox1";
+            this.groupBox1.Padding = new System.Windows.Forms.Padding(4);
+            this.groupBox1.Size = new System.Drawing.Size(447, 66);
+            this.groupBox1.TabIndex = 9;
+            this.groupBox1.TabStop = false;
+            this.groupBox1.Text = "初始化";
+            // 
+            // pictureBox2
+            // 
+            this.pictureBox2.Image = global::CameraModel.Properties.Resources.电力_红灯;
+            this.pictureBox2.Location = new System.Drawing.Point(370, 14);
+            this.pictureBox2.Name = "pictureBox2";
+            this.pictureBox2.Size = new System.Drawing.Size(49, 45);
+            this.pictureBox2.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
+            this.pictureBox2.TabIndex = 3;
+            this.pictureBox2.TabStop = false;
+            // 
+            // pictureBox1
+            // 
+            this.pictureBox1.Image = global::CameraModel.Properties.Resources.电力_红灯;
+            this.pictureBox1.Location = new System.Drawing.Point(167, 14);
+            this.pictureBox1.Name = "pictureBox1";
+            this.pictureBox1.Size = new System.Drawing.Size(49, 45);
+            this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
+            this.pictureBox1.TabIndex = 2;
+            this.pictureBox1.TabStop = false;
+            // 
+            // button_connect
+            // 
+            this.button_connect.Enabled = false;
+            this.button_connect.Location = new System.Drawing.Point(268, 14);
+            this.button_connect.Name = "button_connect";
+            this.button_connect.Size = new System.Drawing.Size(96, 50);
+            this.button_connect.TabIndex = 1;
+            this.button_connect.Text = "连接";
+            this.button_connect.Click += new System.EventHandler(this.button_connect_Click);
+            // 
+            // button_enum
+            // 
+            this.button_enum.Location = new System.Drawing.Point(64, 14);
+            this.button_enum.Name = "button_enum";
+            this.button_enum.Size = new System.Drawing.Size(96, 50);
+            this.button_enum.TabIndex = 0;
+            this.button_enum.Text = "枚举";
+            this.button_enum.Click += new System.EventHandler(this.button_enum_Click);
+            // 
+            // groupBox2
+            // 
+            this.groupBox2.Controls.Add(this.cbDeviceList);
+            this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.groupBox2.Location = new System.Drawing.Point(4, 148);
+            this.groupBox2.Margin = new System.Windows.Forms.Padding(4);
+            this.groupBox2.Name = "groupBox2";
+            this.groupBox2.Padding = new System.Windows.Forms.Padding(4);
+            this.groupBox2.Size = new System.Drawing.Size(447, 93);
+            this.groupBox2.TabIndex = 8;
+            this.groupBox2.TabStop = false;
+            this.groupBox2.Text = "设备序列号";
+            // 
+            // cbDeviceList
+            // 
+            this.cbDeviceList.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.cbDeviceList.Location = new System.Drawing.Point(4, 22);
+            this.cbDeviceList.MaxCount = 10;
+            this.cbDeviceList.Name = "cbDeviceList";
+            this.cbDeviceList.Size = new System.Drawing.Size(439, 67);
+            this.cbDeviceList.TabIndex = 6;
+            // 
+            // groupBox3
+            // 
+            this.groupBox3.Controls.Add(this.input1);
+            this.groupBox3.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.groupBox3.Location = new System.Drawing.Point(4, 249);
+            this.groupBox3.Margin = new System.Windows.Forms.Padding(4);
+            this.groupBox3.Name = "groupBox3";
+            this.groupBox3.Padding = new System.Windows.Forms.Padding(4);
+            this.groupBox3.Size = new System.Drawing.Size(447, 94);
+            this.groupBox3.TabIndex = 7;
+            this.groupBox3.TabStop = false;
+            this.groupBox3.Text = "型号";
+            // 
+            // input1
+            // 
+            this.input1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.input1.Location = new System.Drawing.Point(4, 22);
+            this.input1.MaxLength = 15;
+            this.input1.Name = "input1";
+            this.input1.Size = new System.Drawing.Size(439, 68);
+            this.input1.TabIndex = 0;
+            // 
+            // pictureBox3
+            // 
+            this.pictureBox3.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.pictureBox3.Image = global::CameraModel.Properties.Resources.PixPin_2025_05_08_14_52_11;
+            this.pictureBox3.Location = new System.Drawing.Point(3, 3);
+            this.pictureBox3.Name = "pictureBox3";
+            this.pictureBox3.Size = new System.Drawing.Size(449, 64);
+            this.pictureBox3.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
+            this.pictureBox3.TabIndex = 12;
+            this.pictureBox3.TabStop = false;
+            // 
+            // Form1
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(455, 628);
+            this.Controls.Add(this.tableLayoutPanel1);
+            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+            this.MaximizeBox = false;
+            this.MaximumSize = new System.Drawing.Size(473, 675);
+            this.MinimumSize = new System.Drawing.Size(473, 675);
+            this.Name = "Form1";
+            this.Text = "相机型号";
+            this.Load += new System.EventHandler(this.Form1_Load);
+            this.tableLayoutPanel1.ResumeLayout(false);
+            this.groupBox5.ResumeLayout(false);
+            this.groupBox4.ResumeLayout(false);
+            this.groupBox1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox2)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit();
+            this.groupBox2.ResumeLayout(false);
+            this.groupBox3.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.pictureBox3)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
+        private System.Windows.Forms.GroupBox groupBox1;
+        private System.Windows.Forms.GroupBox groupBox2;
+        private AntdUI.Select cbDeviceList;
+        private System.Windows.Forms.GroupBox groupBox3;
+        private AntdUI.Input input1;
+        private System.Windows.Forms.GroupBox groupBox5;
+        private System.Windows.Forms.GroupBox groupBox4;
+        private AntdUI.Button button_update;
+        private AntdUI.Button button_clear;
+        private AntdUI.Button button_connect;
+        private AntdUI.Button button_enum;
+        private System.Windows.Forms.ListBox listBox1;
+        private System.Windows.Forms.PictureBox pictureBox2;
+        private System.Windows.Forms.PictureBox pictureBox1;
+        private System.Windows.Forms.PictureBox pictureBox3;
+        private AntdUI.Button button_auto;
+    }
+}
+

+ 488 - 0
CameraModel/Form1.cs

@@ -0,0 +1,488 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Runtime.InteropServices;
+using System.Runtime.Remoting.Contexts;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Threading;
+using System.Threading.Tasks;
+using System.Timers;
+using System.Web.UI.WebControls;
+using System.Windows.Forms;
+using MvCamCtrl.NET;
+using MvCameraControl;
+using Vanara.PInvoke;
+using static AntdUI.Math3D;
+using static CameraModel.Form1;
+using static MvCamCtrl.NET.MyCamera;
+
+namespace CameraModel
+{
+    public partial class Form1 : Form
+    {
+        const DeviceTLayerType devLayerType = DeviceTLayerType.MvGigEDevice | DeviceTLayerType.MvUsbDevice | DeviceTLayerType.MvGenTLCameraLinkDevice
+        | DeviceTLayerType.MvGenTLCXPDevice | DeviceTLayerType.MvGenTLXoFDevice;
+
+        private IDevice _device = null;
+        private List<IDeviceInfo> devInfoList =  new List<IDeviceInfo>();
+        private volatile bool isConnected = false;
+        private volatile bool isSuccess = false;
+        public delegate void ChangeConnectStatus(bool flag);
+        public ChangeConnectStatus changeConnectStatus;
+        public delegate void UpdateDevice();
+        public UpdateDevice updateDevice;
+        private System.Timers.Timer timer;
+        private System.Timers.Timer ConnentedTimer;
+        private Dictionary<string,string> devices = new Dictionary<string,string>();
+        public Form1()
+        {
+            InitializeComponent();
+        }
+        public bool IsConnected
+        {
+            set { if (value != isConnected) { isConnected = !isConnected;} changeConnectStatus?.Invoke(isConnected); }
+            get { return isConnected; }
+        }
+
+        public bool IsSuccess
+        {
+            set { if (value) { updateDevice.Invoke(); } isSuccess = value; }
+            get { return isSuccess; }
+        }
+        private void Form1_Load(object sender, EventArgs e)
+        {
+            changeConnectStatus = (flag) => { ConnectStatusChange(flag); };
+            updateDevice = () => { updateDeviceSuccess(); };
+            // ch: 初始化 SDK | en: Initialize SDK
+            MyCamera.MV_CC_Initialize_NET();
+
+            //// ch: 枚举设备 | en: Enum Device List
+            //DeviceListAcq();
+
+            // 初始化定时器
+            InitTimer();
+            StartTimer();
+
+            
+        }
+
+        private void updateDeviceSuccess()
+        {
+            //MVCC_STRINGVALUE pstValue = new MVCC_STRINGVALUE();
+            //m_MyCamera.MV_CC_GetDeviceUserID_NET(ref pstValue);
+            string UserDefinedName = _device.DeviceInfo.UserDefinedName;
+            AntdUI.Message.success(this, "成功修改型号为:" + UserDefinedName, Font, 5);
+            // 修改完后,相机释放
+            ReleaseCamera();
+            pictureBox1.Image = global::CameraModel.Properties.Resources.电力_红灯;
+            pictureBox2.Image = global::CameraModel.Properties.Resources.电力_红灯;
+            cbDeviceList.Items.Clear();
+            cbDeviceList.Text = null;
+            button_enum.Enabled = true;
+            button_connect.Enabled = true;
+            button_update.Enabled = false;
+            button_clear.Enabled = false;
+            IsSuccess = false;
+            IsConnected = false;
+      
+            
+
+        }
+
+
+        private void StartTimer()
+        {
+            if(timer == null)
+            {
+                InitTimer();
+            }
+            LogListBox("开始检测设备");
+            timer.Start();
+            
+        }
+        private void StopTimer()
+        {
+            if (timer != null)
+            {
+                LogListBox("停止检测设备");
+                timer.Stop();
+            }
+        }
+
+        private void ConnectStatusChange(bool flag)
+        {
+            if (flag) // 连接
+            {
+                // 定时开启检测相机是否还在连接
+                ConnentedTimer.Start();
+                LogListBox("设备已连接");
+                StopTimer();
+                button_enum.Enabled = false;
+                button_connect.Enabled = false;
+                button_update.Enabled = true;
+                button_clear.Enabled = true;
+
+                //MV_CC_DEVICE_INFO pstDevInfo = new MV_CC_DEVICE_INFO();
+                //m_MyCamera.MV_CC_GetDeviceInfo_NET(ref pstDevInfo);
+                string ModelName = _device.DeviceInfo.ModelName;
+                //MyCamera.MV_GIGE_DEVICE_INFO_EX gigeInfo = (MyCamera.MV_GIGE_DEVICE_INFO_EX)MyCamera.ByteToStruct(pstDevInfo.SpecialInfo.stGigEInfo, typeof(MyCamera.MV_GIGE_DEVICE_INFO_EX));
+                // 查找型号
+                input1.Text = GetDeviceId(ModelName);
+
+                if(!string.IsNullOrEmpty(input1.Text) && input1.Text.Length <= 15)
+                {
+                    // 修改型号
+                    //m_MyCamera.MV_CC_SetDeviceUserID_NET(input1.Text);
+                    //DeviceUserID
+                    _device.Parameters.SetStringValue("DeviceUserID",input1.Text);
+                    IsUpdateSuccess();
+                    ConnentedTimer.Stop();
+                    LogListBox("型号修改成功," + cbDeviceList.SelectedValue + "=====>" + input1.Text);
+                    IsSuccess = true;
+                    if (!devices.ContainsKey(ModelName))
+                    {
+                        devices.Add(ModelName, input1.Text);
+                    }
+                }
+
+                
+            }
+            else //断开
+            {
+                //m_MyCamera = new MyCamera();
+                pictureBox1.Image = global::CameraModel.Properties.Resources.电力_红灯;
+                pictureBox2.Image = global::CameraModel.Properties.Resources.电力_红灯;
+                LogListBox("设备已断开!!!");
+                StartTimer();
+                cbDeviceList.Items.Clear();
+                cbDeviceList.Text = null;
+                button_enum.Enabled = true;
+                button_connect.Enabled = true;
+                button_update.Enabled = false;
+                button_clear.Enabled = false;
+                
+            }
+        }
+        private void ReleaseCamera()
+        {
+            LogListBox("设备资源释放成功");
+            LogListBox("===========================================\n");
+
+            //m_MyCamera.MV_CC_CloseDevice_NET();
+            //m_MyCamera.MV_CC_DestroyDevice_NET();
+            if (_device != null)
+            {
+                _device.StreamGrabber.StopGrabbing();
+                _device.Close();
+                _device.Dispose();
+                _device = null;
+            }
+
+        }
+        private void IsUpdateSuccess()
+        {
+            //MVCC_STRINGVALUE pstValue = new MVCC_STRINGVALUE();
+            //m_MyCamera.MV_CC_GetDeviceUserID_NET(ref pstValue);
+            string UserDefinedName = _device.DeviceInfo.UserDefinedName;
+            if (!UserDefinedName.Equals(input1.Text))
+            {
+                MessageBox.Show("更改失败");
+                return;
+            }
+        }
+        private string GetDeviceId(string ModelName)
+        {
+
+            if (!devices.TryGetValue(ModelName, out string value) && string.IsNullOrEmpty(input1.Text))
+            {
+                AntdUI.Input input = new AntdUI.Input() { Size = new Size(300, 80), MaxLength = 15 };
+                if (AntdUI.Modal.open(new AntdUI.Modal.Config(ParentForm, "输入型号", input) { CancelText = null,MaskClosable = false }) == DialogResult.No)
+                {
+                    return "";
+                }
+                return input.Text;
+
+            }
+            if (!string.IsNullOrEmpty(input1.Text))
+            {
+                return input1.Text;
+            }
+            return value;
+        }
+        private void InitTimer()
+        {
+            if(timer == null)
+            {
+                timer = new System.Timers.Timer(3000);
+            }
+            timer.AutoReset = true;
+            timer.Elapsed += OnTimerElapsed;
+
+            if (ConnentedTimer == null)
+            {
+                ConnentedTimer = new System.Timers.Timer(500);
+            }
+            ConnentedTimer.AutoReset = true;
+            ConnentedTimer.Elapsed += OnConnectedTimerElapsed;
+        }
+        private void OnTimerElapsed(object sender, ElapsedEventArgs e)
+        {
+            //  检测是否连接
+            if (_device != null && _device.IsConnected)
+            {
+                return;
+            }
+            if (!IsConnected) // 未连接
+            {
+                Reconnect();
+            }     
+        }
+        private void OnConnectedTimerElapsed(object sender, ElapsedEventArgs e)
+        {
+            //  检测是否连接
+            if (!_device.IsConnected)
+            {
+                IsConnected = false;
+            }
+
+        }
+        private void Reconnect()
+        {
+            if (!IsConnected) // 未连接
+            {
+                //  检测连接
+                if (DeviceListAcq()) // 枚举相机
+                {
+                    if (OpenDevice()) // 打开相机
+                    {
+                        IsConnected = true;
+                        
+                    }
+                }
+                
+            }
+        }
+        private bool DeviceListAcq()
+        {
+            button_update.Enabled = false;
+            button_clear.Enabled = false;
+            button_connect.Enabled = false;
+            devInfoList.Clear();
+            // ch:枚举设备 | en:Enum device
+            int ret = DeviceEnumerator.EnumDevices(devLayerType, out devInfoList);
+            if (ret != MvError.MV_OK)
+            {
+                Console.WriteLine("Enum device failed:{0:x8}", ret);
+               
+            }
+            foreach (IDeviceInfo devInfo in devInfoList) 
+            {
+                cbDeviceList.Items.Add(devInfo.ModelName + ":" + devInfo.UserDefinedName);
+            }
+
+            // ch:选择第一项 | en:Select the first item
+            if (devInfoList.Count != 0)
+            {
+                cbDeviceList.SelectedIndex = 0;
+                cbDeviceList.Text = cbDeviceList.Items[cbDeviceList.SelectedIndex] + "";
+                pictureBox1.Image = global::CameraModel.Properties.Resources.绿灯;
+                button_connect.Enabled = true;
+                return true;
+            }
+            else
+            {
+                LogListBox("没有检测到相机");
+                return false;
+            }
+
+        }
+        private string DeleteTail(string strUserDefinedName)
+        {
+            strUserDefinedName = Regex.Unescape(strUserDefinedName);
+            int nIndex = strUserDefinedName.IndexOf("\0");
+            if (nIndex >= 0)
+            {
+                strUserDefinedName = strUserDefinedName.Remove(nIndex);
+            }
+
+            return strUserDefinedName;
+        }
+        private bool OpenDevice()
+        {
+            button_update.Enabled = false;
+            button_clear.Enabled = false;
+            pictureBox2.Image = global::CameraModel.Properties.Resources.电力_红灯;
+            if (devInfoList.Count == 0 || cbDeviceList.SelectedIndex == -1)
+            {
+                MessageBox.Show("没有检测或选择设备!");
+                return false;
+            }
+
+            // ch:创建设备 | en:Create device
+            _device = DeviceFactory.CreateDevice(devInfoList[cbDeviceList.SelectedIndex]);
+
+            //IGigEDevice _IGigEDevice = _device as IGigEDevice;
+            //int nRet = _IGigEDevice.SetIpConfig(IpConfigType.Static);
+            //if(nRet != MvError.MV_OK)
+            //{
+            //    Console.WriteLine("设置静态");
+            //    return false;
+            //}
+            //nRet = _IGigEDevice.Parameters.SetStringValue("IP", "192.168.1.12");
+            //if (nRet != MvError.MV_OK)
+            //{
+            //    Console.WriteLine("设置IP");
+            //    return false;
+            //}
+            ////192.168.1.
+            //_device = DeviceFactory.CreateDeviceByIp("192.168.1.12", "192.168.1.13");
+
+            int nRet = _device.Open();
+
+            if (MvError.MV_OK != nRet)
+            {
+                //m_MyCamera.MV_CC_DestroyDevice_NET();
+                LogHelper.LoggerMsg(LogLevel.Error, "Device open fail! 打开相机状态码:" + nRet);
+                LogListBox("Device open fail!");
+                return false;
+            }
+
+
+            pictureBox2.Image = global::CameraModel.Properties.Resources.绿灯;
+            button_update.Enabled = true;
+            button_clear.Enabled = true;
+            return true;
+        }
+        private void LogListBox(string content)
+        {
+            DateTime dt = DateTime.Now;
+            if (listBox1.InvokeRequired)
+            {
+                listBox1.Invoke(new Action(() => { listBox1.Items.Insert(0, dt.ToString("HH:mm:ss") + " " + content); listBox1.TopIndex = 0; }));
+                
+            }
+            else
+            {
+                listBox1.Items.Insert(0, dt.ToString("HH:mm:ss") + " " + content);
+                listBox1.TopIndex = 0;
+            }
+            
+        }
+
+        private void button_enum_Click(object sender, EventArgs e)
+        {
+            DeviceListAcq();
+        }
+
+        private void button_connect_Click(object sender, EventArgs e)
+        {
+            OpenDevice();
+        }
+
+        private void button_update_Click(object sender, EventArgs e)
+        {
+            //MV_CC_DEVICE_INFO pstDevInfo = new MV_CC_DEVICE_INFO();
+            //m_MyCamera.MV_CC_GetDeviceInfo_NET(ref pstDevInfo);
+
+
+            //MyCamera.MV_GIGE_DEVICE_INFO_EX gigeInfo = (MyCamera.MV_GIGE_DEVICE_INFO_EX)MyCamera.ByteToStruct(pstDevInfo.SpecialInfo.stGigEInfo, typeof(MyCamera.MV_GIGE_DEVICE_INFO_EX));
+            // 查找型号
+            string UserDefinedName = _device.DeviceInfo.UserDefinedName;
+            input1.Text = GetDeviceId(UserDefinedName);
+            //m_MyCamera.MV_CC_SetDeviceUserID_NET(input1.Text);
+            _device.Parameters.SetStringValue("DeviceUserID", input1.Text);
+            IsUpdateSuccess();
+            LogListBox("型号修改成功," + cbDeviceList.SelectedValue + "=====>" + input1.Text);
+            string ModelName = _device.DeviceInfo.ModelName;
+            if (!devices.ContainsKey(ModelName))
+            {
+                devices.Add(ModelName, input1.Text);
+            }
+            pictureBox1.Image = global::CameraModel.Properties.Resources.电力_红灯;
+            pictureBox2.Image = global::CameraModel.Properties.Resources.电力_红灯;
+            if (!DeviceListAcq()) // 枚举相机
+            {
+                return;
+            }
+            pictureBox1.Image = global::CameraModel.Properties.Resources.绿灯;
+            if (!OpenDevice()) // 打开相机
+            {
+                return;
+            }
+            pictureBox2.Image = global::CameraModel.Properties.Resources.绿灯;
+        }
+
+        private void button_clear_Click(object sender, EventArgs e)
+        {
+            //m_MyCamera.MV_CC_SetDeviceUserID_NET("");
+            _device.Parameters.SetStringValue("DeviceUserID", "");
+            LogListBox("型号清空成功," + cbDeviceList.SelectedValue);
+            pictureBox1.Image = global::CameraModel.Properties.Resources.电力_红灯;
+            pictureBox2.Image = global::CameraModel.Properties.Resources.电力_红灯;
+            if (!DeviceListAcq()) // 枚举相机
+            {
+                return;
+            }
+            pictureBox1.Image = global::CameraModel.Properties.Resources.绿灯;
+            if (!OpenDevice()) // 打开相机
+            {
+                return;
+            }
+            pictureBox2.Image = global::CameraModel.Properties.Resources.绿灯;
+        }
+        private bool isManual = false;
+        private void button_auto_Click(object sender, EventArgs e)
+        {
+            try
+            {
+                button_update.Enabled = false;
+                button_clear.Enabled = false;
+
+                pictureBox1.Image = global::CameraModel.Properties.Resources.电力_红灯;
+                pictureBox2.Image = global::CameraModel.Properties.Resources.电力_红灯;
+                if (!isManual)
+                {
+
+                    if (timer != null && timer.Enabled)
+                    {
+                        timer.Stop();
+                    }
+                    if (ConnentedTimer != null && ConnentedTimer.Enabled)
+                    {
+                        ConnentedTimer.Stop();
+                    }
+                    LogListBox("开启手动模式");
+                 
+                    button_auto.Text = "开启自动";
+ 
+                    button_auto.DefaultBack = System.Drawing.Color.FromArgb(((int)(((byte)(255)))), ((int)(((byte)(152)))), ((int)(((byte)(0)))));
+
+
+                }
+                else
+                {
+                    ReleaseCamera();
+                    if (timer != null && !timer.Enabled)
+                    {
+                        timer.Start();
+                    }
+                    LogListBox("开启自动模式");
+       
+                    button_auto.Text = "开启手动";
+                    button_auto.DefaultBack = System.Drawing.Color.FromArgb(((int)(((byte)(3)))), ((int)(((byte)(169)))), ((int)(((byte)(244)))));
+
+                }
+            }
+            finally
+            {
+                isManual = !isManual;
+            }
+            
+        }
+    }
+}

+ 408 - 0
CameraModel/Form1.resx

@@ -0,0 +1,408 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAEAAAMMOAADDDgAAAAAAAAAA
+        AAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/JGuZ/yyCuv8sgrr/LIK6/yyCuv8sgrr/LIK6/yyC
+        uv8sgrr/LIK6/xpPcP8AAAD/AAAA/wAAAP9JIwj/dzgN/3c4Df93OA3/dzgN/3c4Df93OA3/dzgN/3c4
+        Df93OA3/aDEM/wAAAP8AAAD/AAAA/wAAAP9UKAr/dzgN/3c4Df93OA3/dzgN/3c4Df93OA3/czcN/18t
+        C/83Ggb/BgMB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xEzSf86r/v/O7D7/zuw
+        +/87sPv/O7D7/zuw+/87sPv/O7D7/zuw+/84qO//BQ8W/wAAAP8AAAD/Yy8L/6BMEv+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv+gTBL/oEwS/4xCEP8AAAD/AAAA/wAAAP8AAAD/cTUM/6BMEv+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv+gTBL/oEwS/5VHEf9GIQj/AQEA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/J3Wm/zuw+/87sPv/O7D7/zuw+/87sPv/O7D7/zuw+/87sPv/O7D7/yFlkP8AAAD/AAAA/2Mv
+        C/+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+MQhD/AAAA/wAAAP8AAAD/AAAA/3E1
+        DP+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/3Q3Df8IBAH/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wUPFv82ouf/O7D7/zuw+/87sPv/O7D7/zuw+/87sPv/O7D7/zuw
+        +/86rPX/CBkj/wAAAP9jLwv/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/jEIQ/wAA
+        AP8AAAD/AAAA/wAAAP9xNQz/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BM
+        Ev+gTBL/dDcN/wMBAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/FDtV/zuw+/87sPv/O7D7/zuw
+        +/87sPv/O7D7/zuw+/87sPv/O7D7/yh6rv8AAAD/Yy8L/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/4xCEP8AAAD/AAAA/wAAAP8AAAD/cTUM/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv9JIwj/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8mcqL/O7D7/zuw+/87sPv/O7D7/zuw+/87sPv/O7D7/zuw+/87sPv/ETNJ/2MvC/+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+MQhD/AAAA/wAAAP8AAAD/AAAA/3E1DP+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/lkcR/wkEAf8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AwoO/zOZ2v87sPv/O7D7/zuw+/87sPv/O7D7/zuw+/87sPv/O7D7/zKZ
+        2v9lNRT/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/jEIQ/wAAAP8AAAD/AAAA/wAA
+        AP9xNQz/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BM
+        Ev88HQf/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8MJDP/Oarz/zuw+/87sPv/O7D7/zuw
+        +/87sPv/O7D7/zuw+/87sPv/ZoCP/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/4xC
+        EP8AAAD/AAAA/wAAAP8AAAD/cTUM/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv+gTBL/ZTAL/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xdF
+        Yv87sPv/O7D7/zuw+/87sPv/O7D7/zuw+/87sPv/O7D7/zyu9/+KYUP/oEwS/6BMEv+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv+MQhD/AAAA/wAAAP8AAAD/AAAA/3E1DP+gTBL/oEwS/6BMEv+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/3o6Dv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/ImeT/zuw+/87sPv/O7D7/zuw+/87sPv/O7D7/zuw+/87sPv/SqDW/5xP
+        Gv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/jEIQ/wAAAP8AAAD/AAAA/wAAAP9xNQz/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv99Ow7/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEDBP8rgLb/O7D7/zuw+/87sPv/O7D7/zuw
+        +/87sPv/O7D7/zuw+/9khpv/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/4xCEP8AAAD/AAAA/wAA
+        AP8AAAD/cTUM/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BM
+        Ev+gTBL/bjQM/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AwoO/y+N
+        yv87sPv/O7D7/zuw+/87sPv/O7D7/zuw+/87sPv/O6/6/35sXv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BM
+        Ev+MQhD/AAAA/wAAAP8AAAD/AAAA/3E1DP+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv+gTBL/oEwS/00kCf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8FDxb/MZTU/zuw+/87sPv/O7D7/zuw+/87sPv/O7D7/zuw+/9Aqu3/kFo0/6BM
+        Ev+gTBL/oEwS/6BMEv+gTBL/jEIQ/wAAAP8AAAD/AAAA/wAAAP9xNQz/oEwS/6BMEv+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/59LEf8YCwP/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wYSGv8zl9j/O7D7/zuw+/87sPv/O7D7/zuw
+        +/87sPv/O7D7/0uf1P+aUR7/oEwS/6BMEv+gTBL/oEwS/4xCEP8AAAD/AAAA/wAAAP8AAAD/cTUM/6BM
+        Ev+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv9qMgz/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BhIa/zGT
+        0v87sPv/O7D7/zuw+/87sPv/O7D7/zuw+/87sPv/V5O4/55NFf+gTBL/oEwS/6BMEv+MQhD/AAAA/wAA
+        AP8AAAD/AAAA/3E1DP+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BM
+        Ev+SRRD/EAgC/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8FDhT/LonE/zuw+/87sPv/O7D7/zuw+/87sPv/O7D7/zuw+/9jiJ7/n0wS/6BM
+        Ev+gTBL/jEIQ/wAAAP8AAAD/AAAA/wAAAP9xNQz/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv+VRxH/IhAE/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wIHCv8od6r/O7D7/zuw+/87sPv/O7D7/zuw
+        +/87sPv/O7D7/2qAjP+fTBL/oEwS/4xCEP8AAAD/AAAA/wAAAP8AAAD/cTUM/6BMEv+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv9+PA7/GAsD/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAEC/x1X
+        fP87r/n/O7D7/zuw+/87sPv/O7D7/zuw+/87r/r/bX6H/59MEv+MQhD/AAAA/wAAAP8AAAD/AAAA/3E1
+        DP+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv9zNw3/AwEA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/EDBF/zah5f87sPv/O7D7/zuw+/87sPv/O7D7/zuv+v9pgY//i0IQ/wAA
+        AP8AAAD/AAAA/wAAAP9xNQz/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/240
+        DP8EAgD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8FDxb/KXqu/zuw+/87sPv/O7D7/zuw
+        +/87sPv/O7D7/1GDov8BBAb/AAAA/wAAAP8AAAD/cTUM/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv+gTBL/ZjEM/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xdFYv8KHSn/AAAA/wAA
+        AP8UPVf/NZ/i/zuw+/87sPv/O7D7/zuw+/87sPv/LYfA/wYRGP8AAAD/AAAA/3E1DP+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv81GQb/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8kbJv/Oq33/yJkj/8FDhT/AAAA/wMKDv8gX4b/Oarz/zuw+/87sPv/O7D7/zuw+/81n+P/EDBF/wAA
+        AP9xNQz/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/h0AP/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/JGyb/zuw+/87sPv/OKbt/x5agf8EDBL/AAAA/wYTHP8iZ5P/Oarz/zuw
+        +/87sPv/O7D7/zuv+f8jaJX/c0Ac/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv8gDwT/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yRsm/87sPv/O7D7/zuw+/87sPv/OKju/yJn
+        kv8KHSn/AAAA/wUPFv8dVnr/NJvd/zuw+/87sPv/O7D7/0On5v92dXL/nU4X/6BMEv+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/RiEI/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8kbJv/O7D7/zuw
+        +/87sPv/O7D7/zuw+/87sPv/OrD6/y6Iwv8ZSWj/BREY/wABAv8PLkH/I2qX/zWf4/87sPv/O7D7/0ak
+        4P9xen3/l1Ql/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/1gqCv8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/JGyb/zuw+/87sPv/O7D7/zuw+/87sPv/O7D7/zuw+/87sPv/O7D7/zOa2/8AAAD/AAAA/wAA
+        AP8AAQL/CyAt/xlLav8mcaD/MI/O/zqn7P9WlLv/c3h5/4phRP+bUBz/oEwS/6BMEv+gTBL/oEwS/6BM
+        Ev9YKgr/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/yRsm/87sPv/O7D7/zuw+/87sPv/O7D7/zuw+/87sPv/O7D7/zuw
+        +/80mtz/AAAA/wAAAP8AAAD/AAAA/2QvC/96Og7/aTIM/1wsCv9VKQv/VzUe/19FM/9rUj//ellB/5JT
+        Jv+gTBL/oEwS/6BMEv+gTBL/RiEI/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8kbJv/O7D7/zuw+/87sPv/O7D7/zuw
+        +/87sPv/O7D7/zuw+/87sPv/NJrc/wAAAP8AAAD/AAAA/wAAAP9xNQz/oEwS/6BMEv+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/yAPBP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/JGyb/zuw
+        +/87sPv/O7D7/zuw+/87sPv/O7D7/zuw+/87sPv/O7D7/zSa3P8AAAD/AAAA/wAAAP8AAAD/cTUM/6BM
+        Ev+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/4dAD/8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/yRsm/87sPv/O7D7/zuw+/87sPv/O7D7/zuw+/87sPv/O7D7/zuw+/80mtz/AAAA/wAA
+        AP8AAAD/AAAA/3E1DP+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BM
+        Ev82Ggb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8kbJv/O7D7/zuw+/87sPv/O7D7/zuw+/87sPv/O7D7/zuw
+        +/87sPv/NJrc/wAAAP8AAAD/AAAA/wAAAP9xNQz/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv9pMQz/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/JGyb/zuw+/87sPv/O7D7/zuw
+        +/87sPv/O7D7/zuw+/87sPv/O7D7/zSa3P8AAAD/AAAA/wAAAP8AAAD/cTUM/6BMEv+gTBL/oEwS/6BM
+        Ev+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv9uNQz/BQIB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yRs
+        m/87sPv/O7D7/zuw+/87sPv/O7D7/zuw+/87sPv/O7D7/zuw+/80mtz/AAAA/wAAAP8AAAD/AAAA/3E1
+        DP+gTBL/oEwS/6BMEv+gTBL/oEwS/6BMEv+gTBL/oEwS/5hIEf9KIwj/AQEA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8hYYv/NZ/j/zWf4/81n+P/NZ/j/zWf4/81n+P/NZ/j/zWf4/81n+P/LovG/wAA
+        AP8AAAD/AAAA/wAAAP9mMQz/kUUQ/5FFEP+RRRD/kUUQ/5FFEP+JQQ//cjYN/0UhCP8LBQH/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA
+        AP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
+</value>
+  </data>
+</root>

+ 62 - 0
CameraModel/LogHelper.cs

@@ -0,0 +1,62 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Reflection;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace CameraModel
+{
+    public class LogHelper
+    {
+        /// <summary>
+        /// 日志记录类
+        /// </summary>
+
+        #region 记录日志
+        /// <summary>
+        /// 记录日志
+        /// </summary>
+        /// <param name="legLevel">日志级别</param>
+        /// <param name="msg">日志内容</param>
+        public static void LoggerMsg(LogLevel legLevel, string msg)
+        {
+            log4net.ILog log = GetLogger();
+            switch (legLevel)
+            {
+                case LogLevel.Debug: log.Debug(msg); break; //Debug
+                case LogLevel.Error: log.Error(msg); break; //Error
+                case LogLevel.Fatal: log.Fatal(msg); break; //Fatal
+                case LogLevel.Info: log.Info(msg); break; //Info
+                case LogLevel.Warn: log.Warn(msg); break; //Warn
+                default: break;
+            }
+            // 同步解析数据msg可以放置到不同的显示组件中
+            // ****
+
+        }
+        #endregion
+        #region 获得一个日志记录对象
+        /// <summary>
+        /// 获得一个日志记录对象
+        /// </summary>
+        /// <returns>日志记录对象</returns>
+        public static log4net.ILog GetLogger()
+        {
+            //MethodBase.GetCurrentMethod().DeclaringType 返回:命名空间名+类名
+            return log4net.LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+        }
+        #endregion
+    }
+    /// <summary>
+    /// 日志记录级别
+    /// </summary>
+    public enum LogLevel
+    {
+        Debug,
+        Info,
+        Warn,
+        Error,
+        Fatal,
+    }
+}

+ 29 - 0
CameraModel/Program.cs

@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace CameraModel
+{
+    internal static class Program
+    {
+        /// <summary>
+        /// 应用程序的主入口点。
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+            try
+            {
+                Application.Run(new Form1());
+            }
+            catch (Exception ex) 
+            {
+                LogHelper.LoggerMsg(LogLevel.Error, "系统报错:\t" + ex.ToString());
+            }
+        }
+    }
+}

+ 33 - 0
CameraModel/Properties/AssemblyInfo.cs

@@ -0,0 +1,33 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 有关程序集的一般信息由以下
+// 控制。更改这些特性值可修改
+// 与程序集关联的信息。
+[assembly: AssemblyTitle("CameraModel")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("CameraModel")]
+[assembly: AssemblyCopyright("Copyright ©  2025")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+[assembly: log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", ConfigFileExtension = "config", Watch = true)]
+// 将 ComVisible 设置为 false 会使此程序集中的类型
+//对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型
+//请将此类型的 ComVisible 特性设置为 true。
+[assembly: ComVisible(false)]
+
+// 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
+[assembly: Guid("664a4bfa-18f7-485a-bf19-3351cc917b99")]
+
+// 程序集的版本信息由下列四个值组成: 
+//
+//      主版本
+//      次版本
+//      生成号
+//      修订号
+//
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 93 - 0
CameraModel/Properties/Resources.Designer.cs

@@ -0,0 +1,93 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     此代码由工具生成。
+//     运行时版本:4.0.30319.42000
+//
+//     对此文件的更改可能会导致不正确的行为,并且如果
+//     重新生成代码,这些更改将会丢失。
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace CameraModel.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   一个强类型的资源类,用于查找本地化的字符串等。
+    /// </summary>
+    // 此类是由 StronglyTypedResourceBuilder
+    // 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
+    // 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
+    // (以 /str 作为命令选项),或重新生成 VS 项目。
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   返回此类使用的缓存的 ResourceManager 实例。
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("CameraModel.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   重写当前线程的 CurrentUICulture 属性,对
+        ///   使用此强类型资源类的所有资源查找执行重写。
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+        
+        /// <summary>
+        ///   查找 System.Drawing.Bitmap 类型的本地化资源。
+        /// </summary>
+        internal static System.Drawing.Bitmap PixPin_2025_05_08_14_52_11 {
+            get {
+                object obj = ResourceManager.GetObject("PixPin_2025-05-08_14-52-11", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   查找 System.Drawing.Bitmap 类型的本地化资源。
+        /// </summary>
+        internal static System.Drawing.Bitmap 电力_红灯 {
+            get {
+                object obj = ResourceManager.GetObject("电力_红灯", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   查找 System.Drawing.Bitmap 类型的本地化资源。
+        /// </summary>
+        internal static System.Drawing.Bitmap 绿灯 {
+            get {
+                object obj = ResourceManager.GetObject("绿灯", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+    }
+}

+ 130 - 0
CameraModel/Properties/Resources.resx

@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="绿灯" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\绿灯.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="电力_红灯" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\电力_红灯.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="PixPin_2025-05-08_14-52-11" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\PixPin_2025-05-08_14-52-11.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+</root>

+ 30 - 0
CameraModel/Properties/Settings.Designer.cs

@@ -0,0 +1,30 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace CameraModel.Properties
+{
+
+
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}

+ 7 - 0
CameraModel/Properties/Settings.settings

@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>

二进制
CameraModel/Resources/PixPin_2025-05-08_14-52-11.png


二进制
CameraModel/Resources/微信图片_20250508145009.png


二进制
CameraModel/Resources/电力_红灯.png


二进制
CameraModel/Resources/绿灯.png


+ 37 - 0
CameraModel/log4net.config

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+	<configSections>
+		<section name="log4net" type="System.Configuration.IgnoreSectionHandler"/>
+	</configSections>
+	<log4net>
+		<!--配置日志的目标存储形式-->
+		<root>
+			<!--输出等级-->
+			<level value="ALL" />
+			<!--控制台形式-->
+			<appender-ref ref="ConsoleAppender" />
+			<!--文件形式-->
+			<appender-ref ref = "FileAppender" />
+		</root>
+		
+		<!--控制台形式-->
+		<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
+			<layout type="log4net.Layout.PatternLayout" value="%date [%thread] %-5level %logger - %message%newline" />
+		</appender>
+		
+		<!--文件形式-->
+		<appender name="FileAppender" type="log4net.Appender.FileAppender" >
+			<!--文件路径-->
+			<file value = "Log/log-file.txt" />
+		    <!--是否追加-->
+		    <appendToFile value = "true" />
+		    <!--显示格式-->
+			<layout type = "log4net.Layout.PatternLayout" >
+			<conversionPattern value = "%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" />
+            </layout >
+		</appender>
+		
+		<appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
+		</appender>
+	</log4net>
+</configuration>

+ 5 - 0
CameraModel/packages.config

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<packages>
+  <package id="AntdUI" version="1.9.12" targetFramework="net48" />
+  <package id="log4net" version="3.0.4" targetFramework="net48" />
+</packages>

二进制
CameraModel/微信图片_20250508145009.ico