diff --git a/.github/workflows/dotnet-desktop.yml b/.github/workflows/dotnet-desktop.yml new file mode 100644 index 0000000..41bd407 --- /dev/null +++ b/.github/workflows/dotnet-desktop.yml @@ -0,0 +1,62 @@ +name: .NET Core Desktop + +on: + push: + tags: + - '*' + +jobs: + build: + + strategy: + matrix: + configuration: [Debug] + + runs-on: windows-latest # For a list of available runner types, refer to + # https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on + + steps: + - name: Checkout code. + uses: actions/checkout@v2 + + - name: Setup .NET + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 5.0.x + + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v1.0.2 + + - name: Setup Nuget + uses: Nuget/setup-nuget@v1.0.5 + + - name: Restore nuget packages + run: nuget restore src/MonsterMonitor.sln + + - name: Build + run: msbuild src/MonsterMonitor.sln /p:Configuration=${{ matrix.configuration }} /p:OutputPath=/app + + - name: Pack + run: cd /app && 7z a ./MonsterMonitor.zip /app/* + + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: ${{ github.ref }} + draft: false + prerelease: false + + - name: Upload Release Asset + id: upload-release-asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps + asset_path: /app/MonsterMonitor.zip + asset_name: MonsterMonitor.zip + asset_content_type: application/zip diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e664014 --- /dev/null +++ b/.gitignore @@ -0,0 +1,294 @@ +# Huge kudos to all contributors to https://github.com/github/gitignore which is where +# this file came from. + +syntax: glob +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. + +# User-specific files +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +#settings +myentunnel.ini + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +bld/ +[Bb]in/ +[Oo]bj/ +[Ll]og/ + +# Visual Studio 2015 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUNIT +*.VisualState.xml +TestResult.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# DNX +project.lock.json +artifacts/ + +*_i.c +*_p.c +*_i.h +*.ilk +*.meta +*.obj +*.pch +*.pdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# JustCode is a .NET coding add-in +.JustCode + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# TODO: Comment the next line if you want to checkin your web deploy settings +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# The packages folder can be ignored because of Package Restore +**/packages/* +# except build/, which is used as an MSBuild target. +!**/packages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/packages/repositories.config +# NuGet v3's project.json files produces more ignoreable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +#*.pfx +*.publishsettings +node_modules/ +orleans.codegen.cs + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm + +# SQL Server files +*.mdf +*.ldf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# JetBrains Rider +.idea/ +*.sln.iml + +# Visual Studio design time assembly cache +*.cache + +#Aeroclub lib catalog +[Ll]ib/ +src/Aeroclub.WCF.CommonGateway/!Web.config +src/Aeroclub.WCF.CommonGateway/Web.config +src/Aeroclub.WCF.CommonGateway/!NLog.config +src/Aeroclub.WCF.CommonGateway/NLog.config + +*.ncrunchproject + +# WSCommon logs +src/Aeroclub.WCF.CommonGateway/logs/ +build/nuget/*.exe +*.orig + +tools/Confluence.dll* +.sonarqube/* +paket.lock +test/* +.paket/Paket/tools/paket.exe +coverage/* +src/WscommonDoc/Help/*.json +src/WscommonDoc/Help/*.json +src/WscommonDoc/Help/* +src/WscommonDoc/icons/Help.png +src/WscommonDoc/Doc/Working/* +src/WscommonDoc/Doc/* +.paket/* +*.env +.teamcity/target/* +docfx_project/_site/* +docfx_project/api/*.yml diff --git a/.semver.txt b/.semver.txt new file mode 100644 index 0000000..afaf360 --- /dev/null +++ b/.semver.txt @@ -0,0 +1 @@ +1.0.0 \ No newline at end of file diff --git a/MonsterMonitor.sln b/MonsterMonitor.sln new file mode 100644 index 0000000..0755dd3 --- /dev/null +++ b/MonsterMonitor.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 16 +VisualStudioVersion = 16.0.32929.386 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MonsterMonitor", "src\MonsterMonitor.csproj", "{7D6104C6-6AEF-4D31-8463-FCEABDF1577A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {7D6104C6-6AEF-4D31-8463-FCEABDF1577A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7D6104C6-6AEF-4D31-8463-FCEABDF1577A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7D6104C6-6AEF-4D31-8463-FCEABDF1577A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7D6104C6-6AEF-4D31-8463-FCEABDF1577A}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/release.cmd b/release.cmd new file mode 100644 index 0000000..cfc1f90 --- /dev/null +++ b/release.cmd @@ -0,0 +1,33 @@ +@echo off +IF %1.==. GOTO NoCommitMessage +echo %~1 +pause + +for /f "tokens=1 delims=." %%G IN (.semver.txt) DO set MAJOR=%%G +for /f "tokens=2 delims=." %%G IN (.semver.txt) DO set MINOR=%%G +for /f "tokens=3 delims=." %%G IN (.semver.txt) DO set PATCH=%%G +set VERSION_CURRENT=%MAJOR:~0,1%.%MINOR:~0,1%.%PATCH% +echo Current: %VERSION_CURRENT% + +SET /a PATCH1 = %PATCH%+1 +set VERSION=%MAJOR:~0,1%.%MINOR:~0,1%.%PATCH1% +echo %VERSION%>.semver.txt +echo Updating to %VERSION% + +call tools\SetVersion.cmd %VERSION% + +git add . +git commit -m "%~1" + +git tag -m "Version v%VERSION%: %~1" -a v%VERSION% +git push origin v%VERSION% + +git push --tags +GOTO End +pause + +:NoCommitMessage +echo Please specify commit message: %0 "commit message" +GOTO End + +:End \ No newline at end of file diff --git a/src/App.config b/src/App.config new file mode 100644 index 0000000..81ca9c6 --- /dev/null +++ b/src/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/src/App_Data/ss/ss.cfg b/src/App_Data/ss/ss.cfg new file mode 100644 index 0000000..1e1e458 --- /dev/null +++ b/src/App_Data/ss/ss.cfg @@ -0,0 +1,2 @@ +auth none +socks -i127.0.0.1 -p7683 \ No newline at end of file diff --git a/src/App_Data/ss/ss.exe b/src/App_Data/ss/ss.exe new file mode 100644 index 0000000..5904ad2 Binary files /dev/null and b/src/App_Data/ss/ss.exe differ diff --git a/src/FodyWeavers.xml b/src/FodyWeavers.xml new file mode 100644 index 0000000..a5dcf04 --- /dev/null +++ b/src/FodyWeavers.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/FodyWeavers.xsd b/src/FodyWeavers.xsd new file mode 100644 index 0000000..f2dbece --- /dev/null +++ b/src/FodyWeavers.xsd @@ -0,0 +1,176 @@ + + + + + + + + + + + + A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks + + + + + A list of assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks. + + + + + A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with line breaks + + + + + A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with line breaks. + + + + + Obsolete, use UnmanagedWinX86Assemblies instead + + + + + A list of unmanaged X86 (32 bit) assembly names to include, delimited with line breaks. + + + + + Obsolete, use UnmanagedWinX64Assemblies instead. + + + + + A list of unmanaged X64 (64 bit) assembly names to include, delimited with line breaks. + + + + + A list of unmanaged Arm64 (64 bit) assembly names to include, delimited with line breaks. + + + + + The order of preloaded assemblies, delimited with line breaks. + + + + + + This will copy embedded files to disk before loading them into memory. This is helpful for some scenarios that expected an assembly to be loaded from a physical file. + + + + + Controls if .pdbs for reference assemblies are also embedded. + + + + + Controls if runtime assemblies are also embedded. + + + + + Controls whether the runtime assemblies are embedded with their full path or only with their assembly name. + + + + + Embedded assemblies are compressed by default, and uncompressed when they are loaded. You can turn compression off with this option. + + + + + As part of Costura, embedded assemblies are no longer included as part of the build. This cleanup can be turned off. + + + + + The attach method no longer subscribes to the `AppDomain.AssemblyResolve` (.NET 4.x) and `AssemblyLoadContext.Resolving` (.NET 6.0+) events. + + + + + Costura by default will load as part of the module initialization. This flag disables that behavior. Make sure you call CosturaUtility.Initialize() somewhere in your code. + + + + + Costura will by default use assemblies with a name like 'resources.dll' as a satellite resource and prepend the output path. This flag disables that behavior. + + + + + A list of assembly names to exclude from the default action of "embed all Copy Local references", delimited with | + + + + + A list of assembly names to include from the default action of "embed all Copy Local references", delimited with |. + + + + + A list of runtime assembly names to exclude from the default action of "embed all Copy Local references", delimited with | + + + + + A list of runtime assembly names to include from the default action of "embed all Copy Local references", delimited with |. + + + + + Obsolete, use UnmanagedWinX86Assemblies instead + + + + + A list of unmanaged X86 (32 bit) assembly names to include, delimited with |. + + + + + Obsolete, use UnmanagedWinX64Assemblies instead + + + + + A list of unmanaged X64 (64 bit) assembly names to include, delimited with |. + + + + + A list of unmanaged Arm64 (64 bit) assembly names to include, delimited with |. + + + + + The order of preloaded assemblies, delimited with |. + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/src/Models/AppSettings.cs b/src/Models/AppSettings.cs new file mode 100644 index 0000000..3d9b724 --- /dev/null +++ b/src/Models/AppSettings.cs @@ -0,0 +1,225 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Security.Cryptography; +using System.Text; + +namespace SshTunnelMonitor.Models +{ + public sealed class AppSettings + { + private const string ProtectedPrefix = "dpapi:"; + + public string SshHost { get; set; } = "127.0.0.1"; + public int SshPort { get; set; } = 22; + public string SshUsername { get; set; } = "user"; + public string SshPasswordProtected { get; set; } = string.Empty; + public string SystemPasswordProtected { get; set; } = string.Empty; + public string ThreeProxyPasswordProtected { get; set; } = string.Empty; + public bool SavePassword { get; set; } = false; + public int RemotePort { get; set; } = 3328; + public int LocalPort { get; set; } = 7829; + public int MaxPingFailures { get; set; } = 3; + public int ReconnectTimeoutSec { get; set; } = 45; + public string SsProcessPath { get; set; } = Path.Combine("App_Data", "ss", "ss.exe"); + public string SsArguments { get; set; } = string.Empty; + + public string GetPassword() + { + if (string.IsNullOrWhiteSpace(SshPasswordProtected)) + { + return string.Empty; + } + + if (!SshPasswordProtected.StartsWith(ProtectedPrefix, StringComparison.Ordinal)) + { + return SshPasswordProtected; + } + + var protectedData = Convert.FromBase64String(SshPasswordProtected.Substring(ProtectedPrefix.Length)); + var unprotected = ProtectedData.Unprotect(protectedData, null, DataProtectionScope.CurrentUser); + return Encoding.UTF8.GetString(unprotected); + } + + public void SetPassword(string password) + { + if (!SavePassword || string.IsNullOrEmpty(password)) + { + SshPasswordProtected = string.Empty; + return; + } + + var bytes = Encoding.UTF8.GetBytes(password); + var protectedData = ProtectedData.Protect(bytes, null, DataProtectionScope.CurrentUser); + SshPasswordProtected = ProtectedPrefix + Convert.ToBase64String(protectedData); + } + + public string GetSystemPassword() + { + if (string.IsNullOrWhiteSpace(SystemPasswordProtected)) + { + return "STerra"; + } + + if (!SystemPasswordProtected.StartsWith(ProtectedPrefix, StringComparison.Ordinal)) + { + return SystemPasswordProtected; + } + + var protectedData = Convert.FromBase64String(SystemPasswordProtected.Substring(ProtectedPrefix.Length)); + var unprotected = ProtectedData.Unprotect(protectedData, null, DataProtectionScope.CurrentUser); + return Encoding.UTF8.GetString(unprotected); + } + + public void SetSystemPassword(string password) + { + if (string.IsNullOrEmpty(password)) + { + SystemPasswordProtected = string.Empty; + return; + } + + var bytes = Encoding.UTF8.GetBytes(password); + var protectedData = ProtectedData.Protect(bytes, null, DataProtectionScope.CurrentUser); + SystemPasswordProtected = ProtectedPrefix + Convert.ToBase64String(protectedData); + } + + public string GetThreeProxyPassword() + { + if (string.IsNullOrWhiteSpace(ThreeProxyPasswordProtected)) + { + return string.Empty; + } + + if (!ThreeProxyPasswordProtected.StartsWith(ProtectedPrefix, StringComparison.Ordinal)) + { + return ThreeProxyPasswordProtected; + } + + var protectedData = Convert.FromBase64String(ThreeProxyPasswordProtected.Substring(ProtectedPrefix.Length)); + var unprotected = ProtectedData.Unprotect(protectedData, null, DataProtectionScope.CurrentUser); + return Encoding.UTF8.GetString(unprotected); + } + + public void SetThreeProxyPassword(string password) + { + if (string.IsNullOrEmpty(password)) + { + ThreeProxyPasswordProtected = string.Empty; + return; + } + + var bytes = Encoding.UTF8.GetBytes(password); + var protectedData = ProtectedData.Protect(bytes, null, DataProtectionScope.CurrentUser); + ThreeProxyPasswordProtected = ProtectedPrefix + Convert.ToBase64String(protectedData); + } + + public static string GetSettingsPath() + { + var directory = Path.Combine( + Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), + "MonsterMonitor"); + Directory.CreateDirectory(directory); + return Path.Combine(directory, "settings.ini"); + } + + public static AppSettings Load() + { + var path = GetSettingsPath(); + if (!File.Exists(path)) + { + return new AppSettings(); + } + + var result = new AppSettings(); + var map = new Dictionary(StringComparer.OrdinalIgnoreCase); + + foreach (var line in File.ReadAllLines(path)) + { + if (string.IsNullOrWhiteSpace(line) || line.TrimStart().StartsWith("#", StringComparison.Ordinal)) + { + continue; + } + + var separator = line.IndexOf('='); + if (separator <= 0) + { + continue; + } + + var key = line.Substring(0, separator).Trim(); + var value = line.Substring(separator + 1).Trim(); + map[key] = value; + } + + result.SshHost = Get(map, nameof(SshHost), result.SshHost); + result.SshPort = GetInt(map, nameof(SshPort), result.SshPort); + result.SshUsername = Get(map, nameof(SshUsername), result.SshUsername); + result.SshPasswordProtected = Get(map, nameof(SshPasswordProtected), result.SshPasswordProtected); + result.SystemPasswordProtected = Get(map, nameof(SystemPasswordProtected), result.SystemPasswordProtected); + result.ThreeProxyPasswordProtected = Get(map, nameof(ThreeProxyPasswordProtected), result.ThreeProxyPasswordProtected); + result.SavePassword = GetBool(map, nameof(SavePassword), result.SavePassword); + result.RemotePort = GetInt(map, nameof(RemotePort), result.RemotePort); + result.LocalPort = GetInt(map, nameof(LocalPort), result.LocalPort); + result.MaxPingFailures = GetInt(map, nameof(MaxPingFailures), result.MaxPingFailures); + result.ReconnectTimeoutSec = GetInt(map, nameof(ReconnectTimeoutSec), result.ReconnectTimeoutSec); + result.SsProcessPath = Get(map, nameof(SsProcessPath), result.SsProcessPath); + result.SsArguments = Get(map, nameof(SsArguments), result.SsArguments); + + if (string.IsNullOrWhiteSpace(result.SystemPasswordProtected)) + { + result.SetSystemPassword("STerra"); + result.Save(); + } + + return result; + } + + public void Save() + { + var path = GetSettingsPath(); + var lines = new[] + { + $"{nameof(SshHost)}={SshHost}", + $"{nameof(SshPort)}={SshPort}", + $"{nameof(SshUsername)}={SshUsername}", + $"{nameof(SshPasswordProtected)}={SshPasswordProtected}", + $"{nameof(SystemPasswordProtected)}={SystemPasswordProtected}", + $"{nameof(ThreeProxyPasswordProtected)}={ThreeProxyPasswordProtected}", + $"{nameof(SavePassword)}={SavePassword}", + $"{nameof(RemotePort)}={RemotePort}", + $"{nameof(LocalPort)}={LocalPort}", + $"{nameof(MaxPingFailures)}={MaxPingFailures}", + $"{nameof(ReconnectTimeoutSec)}={ReconnectTimeoutSec}", + $"{nameof(SsProcessPath)}={SsProcessPath}", + $"{nameof(SsArguments)}={SsArguments}" + }; + File.WriteAllLines(path, lines); + } + + private static string Get(IDictionary map, string key, string defaultValue) + { + return map.TryGetValue(key, out var value) ? value : defaultValue; + } + + private static int GetInt(IDictionary map, string key, int defaultValue) + { + if (map.TryGetValue(key, out var value) && int.TryParse(value, out var parsed)) + { + return parsed; + } + + return defaultValue; + } + + private static bool GetBool(IDictionary map, string key, bool defaultValue) + { + if (map.TryGetValue(key, out var value) && bool.TryParse(value, out var parsed)) + { + return parsed; + } + + return defaultValue; + } + } +} diff --git a/src/MonsterMonitor.csproj b/src/MonsterMonitor.csproj new file mode 100644 index 0000000..e8e8bbd --- /dev/null +++ b/src/MonsterMonitor.csproj @@ -0,0 +1,31 @@ + + + WinExe + net472 + true + 7.3 + SshTunnelMonitor + MonsterMonitor + + + + all + + + all + + + + + + + Always + + + Always + + + Never + + + diff --git a/src/Program.cs b/src/Program.cs new file mode 100644 index 0000000..714881f --- /dev/null +++ b/src/Program.cs @@ -0,0 +1,35 @@ +using System; +using System.Windows.Forms; +using SshTunnelMonitor.UI; + +namespace SshTunnelMonitor +{ + internal static class Program + { + [STAThread] + private static void Main() + { + Application.ThreadException += (sender, args) => + { + MessageBox.Show( + args.Exception.ToString(), + "Необработанное исключение UI-потока", + MessageBoxButtons.OK, + MessageBoxIcon.Error); + }; + + AppDomain.CurrentDomain.UnhandledException += (sender, args) => + { + MessageBox.Show( + args.ExceptionObject.ToString(), + "Критическое исключение", + MessageBoxButtons.OK, + MessageBoxIcon.Error); + }; + + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new MainForm()); + } + } +} diff --git a/src/Services/AppController.cs b/src/Services/AppController.cs new file mode 100644 index 0000000..10ca9f6 --- /dev/null +++ b/src/Services/AppController.cs @@ -0,0 +1,52 @@ +using System; +using SshTunnelMonitor.Models; + +namespace SshTunnelMonitor.Services +{ + public sealed class AppController : IDisposable + { + private readonly LogService _log; + private readonly PowerManagementService _power; + private readonly SsConfigService _ssConfig; + private ProcessMonitorService _processMonitor; + private SshTunnelService _sshTunnel; + + public AppController(LogService log, PowerManagementService power) + { + _log = log; + _power = power; + _ssConfig = new SsConfigService(_log); + } + + public void Start(AppSettings settings) + { + Stop(); + + _power.PreventSleep(); + _processMonitor = new ProcessMonitorService(_log); + _sshTunnel = new SshTunnelService(_log); + + _ssConfig.EnsureConfig(settings); + _processMonitor.Start(settings.SsProcessPath, settings.SsArguments); + _sshTunnel.Start(settings); + + _log.Info("Сервисы приложения запущены."); + } + + public void Stop() + { + _sshTunnel?.Dispose(); + _sshTunnel = null; + + _processMonitor?.Dispose(); + _processMonitor = null; + + _power.RestoreDefault(); + } + + public void Dispose() + { + Stop(); + } + } +} diff --git a/src/Services/AuthMonitor.cs b/src/Services/AuthMonitor.cs new file mode 100644 index 0000000..7051dd8 --- /dev/null +++ b/src/Services/AuthMonitor.cs @@ -0,0 +1,78 @@ +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; +using System.Text; +using System.Threading.Tasks; +using System.Windows.Forms; +using SshTunnelMonitor.Models; + +namespace SshTunnelMonitor.Services +{ + public class AuthMonitor: IAuthMonitor + { + [DllImport("user32.dll")] + static extern IntPtr GetForegroundWindow(); + + [DllImport("user32.dll")] + private static extern bool SetForegroundWindow(IntPtr hWnd); + + [DllImport("user32.dll")] + static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count); + + private readonly AppSettings _settings; + + public AuthMonitor(AppSettings settings) + { + _settings = settings; + } + + private string GetActiveWindowTitle() + { + const int nChars = 256; + var buff = new StringBuilder(nChars); + var handle = GetForegroundWindow(); + return GetWindowText(handle, buff, nChars) > 0 ? buff.ToString() : null; + } + + public async Task StartMonitor() + { + _ = Task.Run(async () => await CheckProcess()); + } + + private async Task CheckProcess() + { + while (true) + { + try + { + Process[] processlist = Process.GetProcesses(); + foreach (Process process in processlist) + { + if (!string.IsNullOrEmpty(process.MainWindowTitle) && process.MainWindowTitle.Contains("XAuth request")) + { + SetForegroundWindow(process.MainWindowHandle); + } + } + + var activeWindowTitle = GetActiveWindowTitle(); + if (activeWindowTitle?.Contains("XAuth request") == true) + { + SendKeys.SendWait(_settings.GetSystemPassword()); + SendKeys.SendWait("{ENTER}"); + } + } + catch (Exception ex) + { + MessageBox.Show(ex.Message + ex.StackTrace); + } + + await Task.Delay(TimeSpan.FromSeconds(3)); + } + } + } + + public interface IAuthMonitor + { + Task StartMonitor(); + } +} diff --git a/src/Services/LogService.cs b/src/Services/LogService.cs new file mode 100644 index 0000000..c8a8232 --- /dev/null +++ b/src/Services/LogService.cs @@ -0,0 +1,39 @@ +using System; + +namespace SshTunnelMonitor.Services +{ + public enum LogLevel + { + Debug, + Info, + Warn, + Error + } + + public sealed class LogEntry + { + public DateTime Timestamp { get; set; } + public LogLevel Level { get; set; } + public string Message { get; set; } + } + + public sealed class LogService + { + public event Action LogReceived; + + public void Log(LogLevel level, string message) + { + LogReceived?.Invoke(new LogEntry + { + Timestamp = DateTime.Now, + Level = level, + Message = message ?? string.Empty + }); + } + + public void Info(string message) => Log(LogLevel.Info, message); + public void Warn(string message) => Log(LogLevel.Warn, message); + public void Error(string message) => Log(LogLevel.Error, message); + public void Debug(string message) => Log(LogLevel.Debug, message); + } +} diff --git a/src/Services/PowerManagementService.cs b/src/Services/PowerManagementService.cs new file mode 100644 index 0000000..33e520e --- /dev/null +++ b/src/Services/PowerManagementService.cs @@ -0,0 +1,32 @@ +using System; +using System.Runtime.InteropServices; + +namespace SshTunnelMonitor.Services +{ + public sealed class PowerManagementService + { + [Flags] + private enum ExecutionState : uint + { + ES_SYSTEM_REQUIRED = 0x00000001, + ES_DISPLAY_REQUIRED = 0x00000002, + ES_CONTINUOUS = 0x80000000 + } + + [DllImport("kernel32.dll", SetLastError = true)] + private static extern ExecutionState SetThreadExecutionState(ExecutionState flags); + + public void PreventSleep() + { + SetThreadExecutionState( + ExecutionState.ES_CONTINUOUS | + ExecutionState.ES_SYSTEM_REQUIRED | + ExecutionState.ES_DISPLAY_REQUIRED); + } + + public void RestoreDefault() + { + SetThreadExecutionState(ExecutionState.ES_CONTINUOUS); + } + } +} diff --git a/src/Services/ProcessMonitorService.cs b/src/Services/ProcessMonitorService.cs new file mode 100644 index 0000000..c556fb9 --- /dev/null +++ b/src/Services/ProcessMonitorService.cs @@ -0,0 +1,152 @@ +using System; +using System.Diagnostics; +using System.Threading; + +namespace SshTunnelMonitor.Services +{ + public sealed class ProcessMonitorService : IDisposable + { + private readonly LogService _log; + private readonly object _sync = new object(); + private readonly Timer _watchdogTimer; + private Process _process; + private string _path; + private string _arguments; + private bool _stopping; + + public ProcessMonitorService(LogService log) + { + _log = log; + _watchdogTimer = new Timer(WatchdogTick, null, Timeout.InfiniteTimeSpan, Timeout.InfiniteTimeSpan); + } + + public void Start(string path, string arguments) + { + lock (_sync) + { + _path = path; + _arguments = arguments ?? string.Empty; + _stopping = false; + EnsureStarted(); + _watchdogTimer.Change(TimeSpan.FromSeconds(10), TimeSpan.FromSeconds(10)); + } + } + + private void EnsureStarted() + { + if (IsProcessRunning(_process)) + { + return; + } + + try + { + if (_process != null) + { + _process.Exited -= ProcessOnExited; + _process.Dispose(); + } + _process = new Process + { + StartInfo = new ProcessStartInfo + { + FileName = _path, + Arguments = _arguments, + UseShellExecute = false, + CreateNoWindow = true + }, + EnableRaisingEvents = true + }; + //_process.Exited += ProcessOnExited; + _process.Start(); + _log.Info("Процесс ss запущен."); + } + catch (Exception ex) + { + _log.Error("Ошибка запуска ss: " + ex.Message); + } + } + + private void ProcessOnExited(object sender, EventArgs e) + { + lock (_sync) + { + if (_stopping) + { + return; + } + + _log.Warn("Процесс ss завершился, запускаю заново."); + EnsureStarted(); + } + } + + private void WatchdogTick(object state) + { + lock (_sync) + { + if (_stopping) + { + return; + } + + EnsureStarted(); + } + } + + public void Stop() + { + lock (_sync) + { + _stopping = true; + _watchdogTimer.Change(Timeout.InfiniteTimeSpan, Timeout.InfiniteTimeSpan); + + try + { + if (IsProcessRunning(_process)) + { + _process.Kill(); + _process.WaitForExit(5000); + _log.Info("Процесс ss остановлен."); + } + } + catch (Exception ex) + { + _log.Warn("Не удалось корректно завершить ss: " + ex.Message); + } + finally + { + if (_process != null) + { + _process.Exited -= ProcessOnExited; + _process.Dispose(); + } + _process = null; + } + } + } + + private static bool IsProcessRunning(Process process) + { + if (process == null) + { + return false; + } + + try + { + return !process.HasExited; + } + catch (InvalidOperationException) + { + return false; + } + } + + public void Dispose() + { + Stop(); + _watchdogTimer.Dispose(); + } + } +} diff --git a/src/Services/SsConfigService.cs b/src/Services/SsConfigService.cs new file mode 100644 index 0000000..14ef8b0 --- /dev/null +++ b/src/Services/SsConfigService.cs @@ -0,0 +1,68 @@ +using System; +using System.IO; +using System.Security.Cryptography; +using SshTunnelMonitor.Models; + +namespace SshTunnelMonitor.Services +{ + public sealed class SsConfigService + { + private readonly LogService _log; + + public SsConfigService(LogService log) + { + _log = log; + } + + public void EnsureConfig(AppSettings settings) + { + var password = settings.GetThreeProxyPassword(); + if (string.IsNullOrWhiteSpace(password)) + { + password = GeneratePassword(); + settings.SetThreeProxyPassword(password); + settings.Save(); + _log.Info("Сгенерирован пароль прокси и сохранен в настройках."); + } + var port = settings.LocalPort; + + var config = "users admin:CL:" + password + "\r\n" + + "auth strong\r\n" + + $"socks -i127.0.0.1 -p{port}"; + + var configPath = GetConfigPath(); + var directory = Path.GetDirectoryName(configPath); + if (!string.IsNullOrEmpty(directory)) + { + Directory.CreateDirectory(directory); + } + + File.WriteAllText(configPath, config); + _log.Info("Сконфигурирован ss.cfg: " + configPath); + } + + private static string GetConfigPath() + { + return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "App_Data", "ss", "ss.cfg"); + } + + private static string GeneratePassword() + { + const string alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + const int length = 20; + var bytes = new byte[length]; + using (var rng = RandomNumberGenerator.Create()) + { + rng.GetBytes(bytes); + } + + var chars = new char[length]; + for (var i = 0; i < length; i++) + { + chars[i] = alphabet[bytes[i] % alphabet.Length]; + } + + return new string(chars); + } + } +} diff --git a/src/Services/SshTunnelService.cs b/src/Services/SshTunnelService.cs new file mode 100644 index 0000000..3c79e11 --- /dev/null +++ b/src/Services/SshTunnelService.cs @@ -0,0 +1,326 @@ +using System; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using Renci.SshNet; +using Renci.SshNet.Common; +using SshTunnelMonitor.Models; + +namespace SshTunnelMonitor.Services +{ + public sealed class SshTunnelService : IDisposable + { + private readonly LogService _log; + private readonly object _sync = new object(); + private SshClient _client; + private ForwardedPortRemote _forwardedPort; + private SshCommand _heartbeatCommand; + private CancellationTokenSource _heartbeatReadTokenSource; + private Task _heartbeatReadTask; + private CancellationTokenSource _monitorTokenSource; + private AppSettings _settings; + private bool _disposed; + private bool _reconnectInProgress; + private DateTime _lastHeartbeatUtc = DateTime.MinValue; + private bool _remoteIsWindows; + + public SshTunnelService(LogService log) + { + _log = log; + } + + public void Start(AppSettings settings) + { + _settings = settings; + Connect(); + StartMonitor(); + } + + private void Connect() + { + lock (_sync) + { + DisconnectCore(); + + var password = _settings.GetPassword(); + var authMethod = new PasswordAuthenticationMethod(_settings.SshUsername, password); + var connectionInfo = new ConnectionInfo(_settings.SshHost, _settings.SshPort, _settings.SshUsername, authMethod); + + _client = new SshClient(connectionInfo); + _client.ErrorOccurred += ClientOnErrorOccurred; + _client.Connect(); + + _forwardedPort = new ForwardedPortRemote((uint)_settings.RemotePort, "127.0.0.1", (uint)_settings.LocalPort); + _forwardedPort.Exception += ForwardedPortOnException; + _client.AddForwardedPort(_forwardedPort); + _forwardedPort.Start(); + StartRemoteHeartbeatNoLock(); + + _log.Info( + $"SSH подключен. Туннель remote:{_settings.RemotePort} -> local:{_settings.LocalPort}"); + } + } + + private void ClientOnErrorOccurred(object sender, ExceptionEventArgs e) + { + _log.Warn("Ошибка SSH: " + e.Exception.Message); + ReconnectSoon(); + } + + private void ForwardedPortOnException(object sender, ExceptionEventArgs e) + { + _log.Warn("Ошибка перенаправления порта: " + e.Exception.Message); + ReconnectSoon(); + } + + private void StartMonitor() + { + _monitorTokenSource = new CancellationTokenSource(); + Task.Run(() => MonitorLoop(_monitorTokenSource.Token)); + } + + private async Task MonitorLoop(CancellationToken token) + { + while (!token.IsCancellationRequested) + { + try + { + var silenceThresholdSec = Math.Max( + 5, + _settings.MaxPingFailures); + + var lastHeartbeat = _lastHeartbeatUtc; + var isHeartbeatAlive = lastHeartbeat != DateTime.MinValue && + (DateTime.UtcNow - lastHeartbeat).TotalSeconds <= silenceThresholdSec; + + if (!IsConnected() || !isHeartbeatAlive) + { + _log.Warn("Нет живого вывода heartbeat-команды на удаленном сервере. Переподключаю SSH."); + await Reconnect().ConfigureAwait(false); + } + } + catch (Exception ex) + { + _log.Warn("Исключение мониторинга heartbeat: " + ex.Message); + } + + try + { + await Task.Delay(TimeSpan.FromSeconds(2), token).ConfigureAwait(false); + } + catch (TaskCanceledException) + { + break; + } + } + } + + private bool IsConnected() + { + lock (_sync) + { + return _client != null && _client.IsConnected; + } + } + + private void ReconnectSoon() + { + Task.Run(async () => + { + await Task.Delay(1000).ConfigureAwait(false); + await Reconnect().ConfigureAwait(false); + }); + } + + private async Task Reconnect() + { + if (_reconnectInProgress || _disposed) + { + return; + } + + _reconnectInProgress = true; + try + { + var timeout = Math.Min(60, Math.Max(5, _settings.ReconnectTimeoutSec)); + _log.Warn("Перезапуск SSH-соединения..."); + + var reconnectTask = Task.Run(() => + { + DisconnectCore(); + Connect(); + }); + + var completed = await Task.WhenAny(reconnectTask, Task.Delay(TimeSpan.FromSeconds(timeout))).ConfigureAwait(false); + if (completed != reconnectTask) + { + _log.Error("Переподключение превысило таймаут " + timeout + "с."); + } + else + { + _log.Info("SSH-соединение восстановлено."); + } + } + catch (Exception ex) + { + _log.Error("Ошибка переподключения SSH: " + ex.Message); + } + finally + { + _reconnectInProgress = false; + } + } + + private void DisconnectCore() + { + StopRemoteHeartbeatNoLock(); + + try + { + if (_forwardedPort != null) + { + if (_forwardedPort.IsStarted) + { + _forwardedPort.Stop(); + } + _forwardedPort.Dispose(); + _forwardedPort = null; + } + } + catch + { + // Ignore errors on shutdown. + } + + try + { + if (_client != null) + { + if (_client.IsConnected) + { + _client.Disconnect(); + } + _client.Dispose(); + _client = null; + } + } + catch + { + // Ignore errors on shutdown. + } + } + + private void StartRemoteHeartbeatNoLock() + { + if (_client == null || !_client.IsConnected) + { + return; + } + + StopRemoteHeartbeatNoLock(); + _remoteIsWindows = DetectRemoteWindowsNoLock(); + + var heartbeatCommand = _remoteIsWindows + ? "ping ya.ru -t" + : "while :; do echo 'some type of ping response '$C; C=$((C+1)); sleep 1; done"; + + _heartbeatCommand = _client.CreateCommand(heartbeatCommand); + _heartbeatReadTokenSource = new CancellationTokenSource(); + _lastHeartbeatUtc = DateTime.UtcNow; + _heartbeatCommand.BeginExecute(); + + _heartbeatReadTask = Task.Run(() => + ReadHeartbeatOutputLoop(_heartbeatCommand, _heartbeatReadTokenSource.Token)); + _log.Info("Запущен удаленный heartbeat через SSH (" + (_remoteIsWindows ? "Windows" : "Linux/Unix") + ")."); + } + + private void StopRemoteHeartbeatNoLock() + { + try + { + _heartbeatReadTokenSource?.Cancel(); + _heartbeatReadTask?.Wait(1000); + } + catch + { + // Ignore errors on shutdown. + } + finally + { + _heartbeatReadTokenSource?.Dispose(); + _heartbeatReadTokenSource = null; + _heartbeatReadTask = null; + } + + try + { + _heartbeatCommand?.Dispose(); + _heartbeatCommand = null; + } + catch + { + // Ignore errors on shutdown. + } + } + + private void ReadHeartbeatOutputLoop(SshCommand command, CancellationToken token) + { + try + { + using (var reader = new StreamReader(command.OutputStream)) + { + while (!token.IsCancellationRequested) + { + var line = reader.ReadLine(); + if (line == null) + { + Thread.Sleep(200); + continue; + } + + _lastHeartbeatUtc = DateTime.UtcNow; + _log.Debug("HB: " + line); + } + } + } + catch (Exception ex) + { + if (!token.IsCancellationRequested) + { + _log.Warn("Ошибка чтения heartbeat-вывода: " + ex.Message); + } + } + } + + private bool DetectRemoteWindowsNoLock() + { + try + { + var command = _client.CreateCommand("cmd /c ver"); + var output = command.Execute() ?? string.Empty; + return output.IndexOf("windows", StringComparison.OrdinalIgnoreCase) >= 0; + } + catch + { + return false; + } + } + + public void Stop() + { + _monitorTokenSource?.Cancel(); + _monitorTokenSource?.Dispose(); + _monitorTokenSource = null; + lock (_sync) + { + DisconnectCore(); + } + } + + public void Dispose() + { + _disposed = true; + Stop(); + } + } +} diff --git a/src/UI/MainForm.cs b/src/UI/MainForm.cs new file mode 100644 index 0000000..312a5d1 --- /dev/null +++ b/src/UI/MainForm.cs @@ -0,0 +1,202 @@ +using SshTunnelMonitor.Models; +using SshTunnelMonitor.Services; +using System; +using System.Drawing; +using System.Windows.Forms; + +namespace SshTunnelMonitor.UI +{ + public sealed class MainForm : Form + { + private readonly RichTextBox _console = new RichTextBox(); + private readonly Button _btnSettings = new Button(); + private readonly Button _btnExit = new Button(); + private readonly NotifyIcon _notifyIcon = new NotifyIcon(); + private readonly Icon _trayIcon; + private readonly LogService _log = new LogService(); + private readonly PowerManagementService _power = new PowerManagementService(); + private AppController _controller; + private AppSettings _settings; + private bool _allowClose; + + public MainForm() + { + Text = "Monster Monitor"; + Width = 980; + Height = 620; + StartPosition = FormStartPosition.CenterScreen; + _trayIcon = LoadTrayIcon(); + + BuildUi(); + BindEvents(); + } + + protected override void OnLoad(EventArgs e) + { + base.OnLoad(e); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + + _settings = AppSettings.Load(); + _controller = new AppController(_log, _power); + RestartServices(); + } + + private void BuildUi() + { + var topPanel = new Panel { Dock = DockStyle.Top, Height = 42 }; + _btnSettings.Text = "Настройки"; + _btnSettings.Width = 110; + _btnSettings.Location = new Point(10, 8); + + _btnExit.Text = "Выход"; + _btnExit.Width = 110; + _btnExit.Location = new Point(130, 8); + + topPanel.Controls.Add(_btnSettings); + topPanel.Controls.Add(_btnExit); + + _console.Dock = DockStyle.Fill; + _console.ReadOnly = true; + _console.BackColor = Color.Black; + _console.ForeColor = Color.White; + _console.Font = new Font("Consolas", 10f); + + Controls.Add(_console); + Controls.Add(topPanel); + + _notifyIcon.Text = "Monster Monitor"; + _notifyIcon.Icon = _trayIcon; + _notifyIcon.Visible = true; + var trayMenu = new ContextMenuStrip(); + trayMenu.Items.Add("Открыть", null, (_, __) => RestoreFromTray()); + trayMenu.Items.Add("Выход", null, (_, __) => ExitApplication()); + _notifyIcon.ContextMenuStrip = trayMenu; + } + + private void BindEvents() + { + Resize += MainFormOnResize; + FormClosing += MainFormOnFormClosing; + _notifyIcon.DoubleClick += (_, __) => RestoreFromTray(); + _btnSettings.Click += (_, __) => OpenSettings(); + _btnExit.Click += (_, __) => ExitApplication(); + _log.LogReceived += AppendLog; + } + + private void OpenSettings() + { + using (var form = new SettingsForm(_settings)) + { + if (form.ShowDialog(this) == DialogResult.OK) + { + _log.Info("Настройки обновлены. Перезапускаю сервисы."); + RestartServices(); + } + } + } + + private void RestartServices() + { + try + { + _controller.Start(_settings); + } + catch (Exception ex) + { + _log.Error("Ошибка запуска сервисов: " + ex.Message); + } + } + + private void MainFormOnResize(object sender, EventArgs e) + { + if (WindowState != FormWindowState.Minimized) + { + return; + } + + Hide(); + _notifyIcon.BalloonTipTitle = "Monster Monitor"; + _notifyIcon.BalloonTipText = "Приложение свернуто в трей."; + _notifyIcon.ShowBalloonTip(1000); + } + + private void RestoreFromTray() + { + Show(); + WindowState = FormWindowState.Normal; + Activate(); + } + + private void ExitApplication() + { + _allowClose = true; + Close(); + } + + private void MainFormOnFormClosing(object sender, FormClosingEventArgs e) + { + if (!_allowClose && e.CloseReason == CloseReason.UserClosing) + { + e.Cancel = true; + WindowState = FormWindowState.Minimized; + return; + } + + _notifyIcon.Visible = false; + _controller?.Dispose(); + _trayIcon?.Dispose(); + } + + private void AppendLog(LogEntry entry) + { + if (InvokeRequired) + { + BeginInvoke(new Action(AppendLog), entry); + return; + } + + _console.SelectionStart = _console.TextLength; + _console.SelectionLength = 0; + _console.SelectionColor = GetColor(entry.Level); + _console.AppendText($"[{entry.Timestamp:HH:mm:ss}] [{entry.Level}] {entry.Message}{Environment.NewLine}"); + _console.SelectionColor = _console.ForeColor; + _console.ScrollToCaret(); + } + + private static Color GetColor(LogLevel level) + { + switch (level) + { + case LogLevel.Debug: + return Color.Silver; + case LogLevel.Warn: + return Color.Orange; + case LogLevel.Error: + return Color.Red; + default: + return Color.White; + } + } + + private static Icon LoadTrayIcon() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); + return ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + } + + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm)); + this.SuspendLayout(); + // + // MainForm + // + this.ClientSize = new System.Drawing.Size(284, 261); + this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); + this.Name = "MainForm"; + this.ResumeLayout(false); + + } + } +} diff --git a/src/UI/MainForm.resx b/src/UI/MainForm.resx new file mode 100644 index 0000000..9004282 --- /dev/null +++ b/src/UI/MainForm.resx @@ -0,0 +1,1253 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + + + + + AAABAAEAgIAAAAEAIAAoCAEAFgAAACgAAACAAAAAAAEAAAEAIAAAAAAAAAABAJdLAACXSwAAAAAAAAAA + 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/wAAAP0AAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAA + APwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAA + APwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAA + APwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAA + APwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAA + APwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAA + APwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAA + APwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAD8AAAA/AAA + APwAAAD8AAAA/AAAAPwAAAD8AAAA/QAAAP8AAAD/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/QAAAP8AAAB4AAAAOwAAAEgAAABGAAAARgAAAEYAAABGAAAARgAA + AEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAA + AEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAA + AEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAA + AEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAA + AEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAA + AEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAA + AEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAAAEYAAABGAAAARgAA + AEYAAABGAAAARgAAAEYAAABIAAAAOwAAAHgAAAD/AAAA/QAAAP8AAAD/AAAA/wAAAP8AAAD9AAAA/wAA + AEIAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAQgAA + AP8AAAD9AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAASAAAAAAAAAAGAAAAAwAAAAMAAAADAAAAAwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA + AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA + AAMAAAADAAAAAwAAAAMAAAADAAAABgAAAAAAAABIAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAA + AP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAA + AEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAA + APwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA + AAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAA + AP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAGAAAABAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAEAAAADAAAABgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAA + AP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAACAAAAAAAAAD8AAACFAAAAAAAA + AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAIMAAAA/AAAAAAAAAAIAAAAAAAAAAAAA + AAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAA + AAAAAAAAAAAAAAAAAAMAAAAAAAAANgAAAP8AAAB+AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA + AAAAAAB9AAAA/wAAADYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAA + AP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA3AAAA/wAA + AP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAfQAAAP8AAAD/AAAANwAAAAAAAAADAAAAAAAA + AAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAA + AAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA+gAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAA + AH4AAAD/AAAA+gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAA + AP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAA + AP8AAAD9AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAB+AAAA/wAAAPsAAAD9AAAA/wAAADgAAAAAAAAAAwAA + AAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAA + AAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD+AAAA+wAAAP8AAAB/AAAAAAAA + AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAfgAA + AP8AAAD7AAAA/gAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAA + APwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAA + ADgAAAD/AAAA/gAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAH4AAAD/AAAA+wAAAP4AAAD/AAAA/gAAAP8AAAA4AAAAAAAA + AAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAA + AEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAAAP8AAAD+AAAA+wAA + AP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAB+AAAA/wAA + APsAAAD+AAAA/wAAAP8AAAD+AAAA/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAA + AP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAA + AAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAQAAAAAAAAAfgAAAP8AAAD7AAAA/gAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAA + AAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAA + AP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAA + AP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAH4AAAD/AAAA+wAA + AP4AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAA + AEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAA + AAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAA + AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAABAAAAAAAAAB+AAAA/wAAAPsAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA + ADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAA + APwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAfgAAAP8AAAD7AAAA/gAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAA + AAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAA + AAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAA + AP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAAEAAAAAAAAAH4AAAD/AAAA+wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA + AP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAA + AP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAB+AAAA/wAAAPsAAAD+AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAA + AAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAA + AAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAQAAAAAAAAAfgAAAP8AAAD7AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAA + AP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAA + AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAH4AAAD/AAAA+wAAAP4AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAA + AAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAA + AAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA + AAAAAAB+AAAA/wAAAPsAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD+AAAA/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAA + AP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAA + AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAA + AP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAfgAAAP8AAAD7AAAA/gAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAA + AAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAA + AAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAA + AH4AAAD/AAAA+wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAA + AP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAA + AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAB+AAAA/wAAAPsAAAD+AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAADgAAAAAAAAAAwAA + AAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAA + AAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAA + AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAfgAA + AP8AAAD7AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAA + APwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAA + ADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAH4AAAD/AAAA+wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAA + AAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAA + AEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAA + AP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAB+AAAA/wAA + APsAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAA + AP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAA + AAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAQAAAAAAAAAfgAAAP8AAAD7AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAA + AAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAA + AP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAH4AAAD/AAAA+wAA + AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAA + AEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAA + AAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAA + AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAABAAAAAAAAAB+AAAA/wAAAPsAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAA + ADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAA + APwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAfgAAAP8AAAD7AAAA/gAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAA + AAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAA + AAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAA + AP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAAEAAAAAAAAAH4AAAD/AAAA+wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA + AP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAA + AP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAB+AAAA/wAAAPsAAAD+AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAA + AAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAA + AAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAQAAAAAAAAAfgAAAP8AAAD7AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAA + AP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAA + AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAAAH4AAAD/AAAA+wAAAP4AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAA + AAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAA + AAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA + AAAAAAB+AAAA/wAAAPsAAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD+AAAA/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAA + AP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAA + AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAA + AP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAfgAAAP8AAAD7AAAA/gAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAA + AAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAA + AAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAAAAAA + AH4AAAD/AAAA+wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAA + AP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAA + AP8AAAD+AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAB+AAAA/wAAAPsAAAD+AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA/wAAADgAAAAAAAAAAwAA + AAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAA + AAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAA + AAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAAfgAA + AP8AAAD7AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAA + APwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAA + ADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD+AAAA+wAAAP8AAAB/AAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAH4AAAD/AAAA+wAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAA4AAAAAAAA + AAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAA + AEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+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 + AP8AAACAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAB+AAAA/wAA + APsAAAD+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/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAA + AP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAA + AAAAAAA4AAAA/wAAAP4AAAD/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/QAAAP8AAAAyAAAAAAAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAAAAAAMgAAAP8AAAD9AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAAOAAA + AAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAA + AP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD9AAAA/wAAADkAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA5AAAA/wAA + AP0AAAD/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/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAA + AEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAA + AAMAAAAAAAAAOAAAAP8AAAD+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/wAAAP4AAAD/AAAANwAAAAAAAAADAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAADcAAAD/AAAA/gAAAP8AAAD/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 + ADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAA + APwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/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/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAA + 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/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAA + AAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAA + AAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/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/wAAADgAAAAAAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/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/gAA + AP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAA + AP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+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/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAA + ADgAAAD/AAAA/gAAAP8AAAD/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/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAA + AAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAA + AAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/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/gAAAP8AAAA4AAAAAAAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+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 + AP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAA + AP8AAAD/AAAA/AAAAP8AAABGAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAA + 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/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA + AAAAAAA4AAAA/wAAAP4AAAD/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/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAA + AAAAAAADAAAAAAAAAEYAAAD/AAAA/AAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAA + AAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+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/wAAAP4AAAD/AAAAOAAA + AAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/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/wAAADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAA + AP8AAAD/AAAA/wAAAPwAAAD/AAAARgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAA + AP4AAAD/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/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMAAAAAAAAAOAAAAP8AAAD+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/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAA + AAAAAAAAAAAAAwAAAAAAAABGAAAA/wAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP8AAABGAAAAAAAA + AAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/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 + ADgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/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/gAAAP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEYAAAD/AAAA/AAA + AP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAA + 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/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAADAAAAAAAAADgAAAD/AAAA/gAAAP8AAAD/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/wAAADgAAAAAAAAAAwAA + AAAAAAAAAAAAAAAAAAMAAAAAAAAARgAAAP8AAAD8AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD/AAAARQAA + AAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA4AAAA/wAAAP4AAAD/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/gAA + AP8AAAA4AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAOAAAAP8AAAD+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/wAAAP4AAAD/AAAAOAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABFAAAA/wAA + APwAAAD/AAAA/wAAAP4AAAD/AAAA/AAAAP8AAABHAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAAAA + ADUAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD9AAAA/wAAAD0AAAAAAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAAAAAAAA9AAAA/wAAAP0AAAD/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/gAAAP8AAAA1AAAAAAAA + AAMAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEcAAAD/AAAA/AAAAP8AAAD+AAAA+wAAAP8AAAD8AAAA/wAA + AEoAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAMAAAAP8AAAD/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 + APwAAAD/AAAATQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAE0AAAD/AAAA/AAA + 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/wAAADAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAMAAAAAAAAASwAA + AP8AAAD8AAAA/wAAAPoAAAD0AAAA/wAAAPwAAAD/AAAAUwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAgAA + AAAAAAArAAAA/gAAAP8AAAD+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+wAAAP8AAAB0AAAAAAAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAQAAAAAAAAAdQAAAP8AAAD7AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP8AAAD9AAAAKwAA + AAAAAAACAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABUAAAA/wAAAPwAAAD/AAAA9AAAAOsAAAD/AAAA+wAA + AP8AAABfAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAACAAAAAAAAAB4AAAD2AAAA/wAAAP4AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD8AAAA/wAAAK8AAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAACwAAAA/wAA + APwAAAD/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/wAAAPYAAAAeAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAEAAAAAAAA + AGAAAAD/AAAA+wAAAP8AAADrAAAA3gAAAP8AAAD6AAAA/wAAAHAAAAAAAAAABAAAAAAAAAAAAAAAAAAA + AAEAAAAAAAAAEAAAAO0AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA7gAAABoAAAAAAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAAAAAAGwAAAO4AAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP4AAAD/AAAA7QAA + ABAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAcQAAAP8AAAD6AAAA/wAAAN4AAADOAAAA/wAA + APkAAAD/AAAAhAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAGAAAA3AAAAP8AAAD9AAAA/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/wAAAPwAAAD/AAAAdQAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAB2AAAA/wAA + APwAAAD/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/QAAAP8AAADbAAAABQAAAAAAAAABAAAAAAAAAAAAAAAAAAAABAAA + AAAAAACFAAAA/wAAAPkAAAD/AAAAzQAAALcAAAD/AAAA+QAAAP8AAACdAAAAAAAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAAAAADDAAAA/wAAAPwAAAD/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/gAAAP8AAADmAAAAFgAA + AAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAAAAAAFgAAAOYAAAD/AAAA/gAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD8AAAA/wAA + AMIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAJ4AAAD/AAAA+QAAAP8AAAC2AAAAmAAA + AP8AAAD5AAAA/wAAALkAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAKUAAAD/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/AAAAP8AAACgAAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAACgAAAA/wAA + APwAAAD/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/wAAAPsAAAD/AAAApAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAA + AAIAAAAAAAAAugAAAP8AAAD5AAAA/wAAAJcAAAB5AAAA/wAAAPoAAAD/AAAA1QAAAAIAAAAAAAAAAQAA + AAAAAAAAAAAAAAAAAAQAAAAAAAAAfQAAAP8AAAD7AAAA/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/AAA + AP8AAAB2AAAAAAAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAUAAAAAAAAAdQAAAP8AAAD8AAAA/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 + AP8AAAB8AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAMAAADWAAAA/wAAAPoAAAD/AAAAeAAA + AFMAAAD/AAAA/AAAAP8AAADwAAAAFgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABQAAAA/wAA + APwAAAD/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/QAAAP8AAAB1AAAAAAAAAAIAAAAEAAAAAgAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAACAAAAAAAAAHUAAAD/AAAA/QAA + 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/wAAAP8AAAD8AAAA/wAAAE8AAAAAAAAAAwAAAAAAAAAAAAAAAAAA + AAEAAAAAAAAAFgAAAPEAAAD/AAAA/AAAAP8AAABSAAAAMAAAAPoAAAD/AAAA/gAAAP8AAAA2AAAAAAAA + AAMAAAAAAAAAAAAAAAAAAAACAAAAAAAAACgAAAD7AAAA/wAAAP4AAAD/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/AAAAP8AAACjAAAAEwAAAAAAAAABAAAAAwAAAAQAAAADAAAAAwAAAAMAAAADAAAABAAA + AAMAAAABAAAAAAAAABIAAACjAAAA/wAAAPwAAAD+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/gAA + AP8AAAD7AAAAJwAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAA3AAAA/wAAAP4AAAD/AAAA+gAA + AC8AAAAPAAAA5AAAAP8AAAD6AAAA/wAAAGIAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAABQAA + ANgAAAD/AAAA/QAAAP8AAAD/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/AAAAP8AAADoAAAAdgAA + ABUAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAABUAAABzAAAA5wAAAP8AAAD8AAAA/gAA + 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/wAAAP8AAAD9AAAA/wAAANgAAAAEAAAAAAAAAAEAAAAAAAAAAAAA + AAAAAAAEAAAAAAAAAGMAAAD/AAAA+gAAAP8AAADjAAAADgAAAAAAAADAAAAA/wAAAPgAAAD/AAAAlwAA + AAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAApgAAAP8AAAD8AAAA/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/AAAAP4AAAD/AAAA8AAAALAAAAB0AAAATQAAADsAAAA7AAAATQAA + AHMAAACuAAAA8AAAAP8AAAD+AAAA/AAAAP8AAAD/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 + APwAAAD/AAAApQAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAlgAAAP8AAAD4AAAA/wAA + AL8AAAAAAAAAAAAAAJAAAAD/AAAA+QAAAP8AAADNAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAA + AAAAAABkAAAA/wAAAPwAAAD/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/QAA + APwAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/AAAAP0AAAD/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/AAAAP8AAABjAAAAAAAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAADKAAAA/wAAAPkAAAD/AAAAjwAAAAAAAAAAAAAAWgAAAP8AAAD7AAAA/wAA + APUAAAAdAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAACAAAAAAAAACcAAAD6AAAA/wAAAP4AAAD/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/wAAAP4AAAD8AAAA+wAAAPwAAAD9AAAA/QAA + APwAAAD7AAAA/AAAAP4AAAD/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 + AP4AAAD/AAAA+gAAACYAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAHQAAAPQAAAD/AAAA+wAA + AP8AAABZAAAAAAAAAAAAAAAmAAAA/AAAAP8AAAD8AAAA/wAAAFQAAAAAAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAMgAAAD/AAAA/QAAAP8AAAD/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/QAAAP8AAADHAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAAAAAAABVAAAA/wAAAPsAAAD/AAAA+wAAACYAAAAAAAAAAAAAAAEAAADTAAAA/wAA + APkAAAD/AAAAmgAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAeAAAAP8AAAD7AAAA/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 + AP8AAAD7AAAA/wAAAHcAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAJoAAAD/AAAA+QAA + AP8AAADTAAAAAQAAAAAAAAAEAAAAAAAAAJUAAAD/AAAA+QAAAP8AAADXAAAABAAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAgAAAAAAAAAqAAAA+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/gAAAP8AAAD7AAAAKQAAAAAAAAACAAAAAAAA + AAAAAAAAAAAAAQAAAAAAAAAEAAAA2AAAAP8AAAD5AAAA/wAAAJQAAAAAAAAABAAAAAMAAAAAAAAATQAA + AP8AAAD8AAAA/gAAAP8AAAA7AAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAC5AAAA/wAA + APwAAAD/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 + AP8AAAD8AAAA/wAAALgAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAADwAAAD/AAAA/gAA + APwAAAD/AAAATAAAAAAAAAADAAAAAQAAAAAAAAARAAAA5gAAAP8AAAD6AAAA/wAAAIwAAAAAAAAABAAA + AAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAFkAAAD/AAAA/AAAAP8AAAD/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/wAAAPwAAAD/AAAAWgAAAAAAAAADAAAAAAAA + AAAAAAAAAAAAAAAAAAQAAAAAAAAAjQAAAP8AAAD6AAAA/wAAAOUAAAAQAAAAAAAAAAEAAAAAAAAAAwAA + AAAAAACjAAAA/wAAAPoAAAD/AAAA2QAAAAYAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAACwAA + ANwAAAD/AAAA/QAAAP8AAAD/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 + AP8AAAD9AAAA/wAAAN0AAAALAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAcAAADZAAAA/wAA + APoAAAD/AAAAogAAAAAAAAADAAAAAAAAAAAAAAADAAAAAAAAAE8AAAD/AAAA/AAAAP0AAAD/AAAATAAA + AAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAeAAAAP8AAAD7AAAA/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/wAAAPsAAAD/AAAAeAAAAAAAAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAMAAAAAAAAATAAAAP8AAAD9AAAA/QAAAP8AAABOAAAAAAAAAAMAAAAAAAAAAAAA + AAEAAAAAAAAADAAAAN4AAAD/AAAA+gAAAP8AAACqAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAAAAAAXAAAA6AAAAP8AAAD+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/wAAAOgAAAAWAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAACrAAAA/wAA + APoAAAD/AAAA3gAAAAsAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAiwAAAP8AAAD7AAAA/wAA + APUAAAAkAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAB9AAAA/wAAAPsAAAD/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/wAAAPsAAAD/AAAAfQAAAAAAAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAAAAAAJQAAAPUAAAD/AAAA+wAAAP8AAACLAAAAAAAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAAAAAAuAAAA/AAAAP8AAAD7AAAA/wAAAIkAAAAAAAAABAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAAAAAAABMAAADiAAAA/wAAAP4AAAD/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/wAAAOEAAAASAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAACJAAAA/wAA + APsAAAD/AAAA/AAAAC4AAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAACzAAAA/wAA + APsAAAD/AAAA5wAAABUAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAGYAAAD/AAAA/AAA + 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/wAAAPwAAAD/AAAAZgAAAAAAAAADAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAAAAAAFgAAAOgAAAD/AAAA+wAAAP8AAACxAAAAAAAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAEoAAAD/AAAA/QAAAPsAAAD/AAAAfAAAAAAAAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAMYAAAD/AAAA/AAAAP8AAAD/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 + AP8AAAD8AAAA/wAAAMUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAB8AAAA/wAA + APsAAAD9AAAA/wAAAEYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AMUAAAD/AAAA+wAAAP8AAADoAAAAFgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAOAAA + APsAAAD+AAAA/gAAAP8AAAD/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/gAAAP4AAAD7AAAAOAAAAAAAAAACAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAAAAAAFgAAAOgAAAD/AAAA+wAAAP8AAADEAAAAAAAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAVAAAAP8AAAD8AAAA+wAAAP8AAACEAAAAAAAA + AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAhwAAAP8AAAD7AAAA/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 + AP8AAAD7AAAA/wAAAIgAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAACEAAAA/wAA + APsAAAD9AAAA/wAAAFMAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAxgAAAP8AAAD8AAAA/wAAAPMAAAAnAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAAAAAAGAAAAyQAAAP8AAAD8AAAA/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/AAAAP8AAADKAAAABwAAAAAAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAIAAAAAAAAAJwAAAPMAAAD/AAAA/AAAAP8AAADFAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAABLAAAA/wAAAP0AAAD8AAAA/wAA + AKYAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAuAAAA9AAAAP8AAAD+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 + AP4AAAD/AAAA9AAAAC8AAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAACmAAAA/wAA + APwAAAD9AAAA/wAAAEsAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAAAAAC0AAAA/wAAAPwAAAD9AAAA/wAAAE0AAAAAAAAAAwAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABAAAAAAAAABdAAAA/wAAAPwAAAD/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/AAAAP8AAABeAAAAAAAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAMAAAAAAAAATQAAAP8AAAD9AAAA/AAAAP8AAAC0AAAAAAAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAADEAAAD5AAAA/wAA + AP0AAAD/AAAA2AAAAA4AAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAACLAAAA/wAA + APsAAAD/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 + APsAAAD/AAAAjAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAA4AAADYAAAA/wAA + AP0AAAD/AAAA+QAAADEAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAIkAAAD/AAAA+wAAAPsAAAD/AAAAkQAAAAAAAAAEAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAAAgAAAAAAAACrAAAA/wAAAPoAAAD/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/wAAAP8AAAD6AAAA/wAAAKwAAAAAAAAAAgAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAQAAAAAAAAAkQAAAP8AAAD7AAAA+wAAAP8AAACIAAAAAAAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAADAAA + ANQAAAD/AAAA/QAAAP0AAAD/AAAATwAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA + AAkAAADBAAAA/wAAAPsAAAD/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 + AP8AAADCAAAACgAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAE4AAAD/AAAA/QAA + AP0AAAD/AAAA1AAAAAwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAARwAAAP8AAAD9AAAA/QAAAP8AAADjAAAAGgAA + AAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAABAAAADKAAAA/wAAAPsAAAD/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/wAAAPsAAAD/AAAAywAAABEAAAAAAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAAAAAAbAAAA4wAAAP8AAAD9AAAA/QAAAP8AAABHAAAAAAAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMAAAAAAAAAjgAAAP8AAAD7AAAA/AAAAP8AAAC4AAAAAQAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACAAAAAAAAABQAAADKAAAA/wAAAPsAAAD/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/wAAAP8AAAD7AAAA/wAA + AMwAAAAVAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAgAAALkAAAD/AAAA/AAA + APsAAAD/AAAAjwAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAIAAAAzAAAAP8AAAD8AAAA+wAA + AP8AAACKAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAABAAAADCAAAA/wAA + APoAAAD/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+gAAAP8AAADDAAAAEQAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAABAAAAAAAAACLAAAA/wAAAPsAAAD8AAAA/wAAAMwAAAAIAAAAAAAAAAEAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAAAAAAvAAAA8wAAAP8AAAD+AAAA/AAAAP8AAABlAAAAAAAAAAQAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAkAAACsAAAA/wAAAPsAAAD+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/gAAAPsAAAD/AAAArgAA + AAoAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAZQAAAP8AAAD8AAAA/gAA + AP8AAAD0AAAALwAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAABbAAAA/wAA + APwAAAD+AAAA/gAAAPwAAABJAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAA + AAAAAACMAAAA/wAAAP0AAAD8AAAA/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/wAAAPwAAAD9AAAA/wAAAI0AAAAAAAAAAgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAEAAAAAAAAAEkAAAD8AAAA/gAAAP4AAAD8AAAA/wAAAFwAAAAAAAAABAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAACLAAAA/wAAAPsAAAD9AAAA/wAAAPEAAAA4AAAAAAAA + AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAABaAAAA9QAAAP8AAAD7AAAA/gAA + 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/wAAAP4AAAD7AAAA/wAAAPUAAABdAAAAAAAA + AAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAA4AAAA8QAAAP8AAAD9AAAA+wAA + AP8AAACLAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAgAA + AAAAAACsAAAA/wAAAPsAAAD9AAAA/wAAAOsAAAAwAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAABAAAAAAAAAAqAAAAzAAAAP8AAAD8AAAA/AAAAP8AAAD/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 + AP8AAAD8AAAA/AAAAP8AAADOAAAAKwAAAAAAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAQAAAAAAAAALwAAAOsAAAD/AAAA/QAAAPsAAAD/AAAArQAAAAAAAAACAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAoAAADFAAAA/wAAAPsAAAD9AAAA/wAA + AOcAAAAvAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAGAAAAhgAA + APsAAAD/AAAA/AAAAP0AAAD/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/wAAAP8AAAD9AAAA/AAAAP8AAAD8AAAAiAAAAAcAAAAAAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAC8AAADnAAAA/wAAAP0AAAD7AAAA/wAA + AMYAAAAKAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAACAAAAAAAAABcAAADUAAAA/wAAAPwAAAD9AAAA/wAAAOsAAAA3AAAAAAAAAAUAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAMAAAAAAAAAMwAAAMkAAAD/AAAA/gAAAPwAAAD9AAAA/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/AAA + AP4AAAD/AAAAygAAADUAAAAAAAAAAwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAA + AAAAAAA2AAAA6wAAAP8AAAD9AAAA/AAAAP8AAADVAAAAGAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAB0AAADbAAAA/wAA + APwAAAD9AAAA/wAAAPEAAABIAAAAAAAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAMAAAAAAAAAAwAAAGIAAADlAAAA/wAAAP4AAAD7AAAA/QAAAP8AAAD/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/wAAAP8AAAD9AAAA+wAAAP4AAAD/AAAA5gAAAGUAAAADAAAAAAAAAAMAAAABAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAAAAAARgAAAPEAAAD/AAAA/QAAAPwAAAD/AAAA3AAA + AB0AAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAACIAAADdAAAA/wAAAPsAAAD9AAAA/gAAAP0AAABkAAAAAAAA + AAQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAADAAAAAAAAABAAAAB6AAAA6gAA + AP8AAAD+AAAA/AAAAPwAAAD+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/wAAAP4AAAD8AAAA/AAAAP4AAAD/AAAA7AAA + AH0AAAAQAAAAAAAAAAIAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAEAAAAAAAA + AGMAAAD8AAAA/gAAAP0AAAD7AAAA/wAAAN0AAAAjAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAA + AB8AAADXAAAA/wAAAPsAAAD9AAAA/AAAAP8AAACLAAAAAQAAAAEAAAADAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAADAAAAAgAAAAAAAAAUAAAAdgAAAN8AAAD/AAAA/gAAAP4AAAD7AAAA/AAA + AP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAA + APwAAAD7AAAA/gAAAP4AAAD/AAAA4QAAAHkAAAAUAAAAAAAAAAEAAAADAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAADAAAAAQAAAAEAAACLAAAA/wAAAPwAAAD9AAAA+wAAAP8AAADVAAAAHQAA + AAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAABYAAADIAAAA/wAAAPsAAAD+AAAA+wAA + AP8AAAC8AAAAGAAAAAAAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA + AAEAAAAAAAAACgAAAFcAAAC6AAAA+gAAAP8AAAD/AAAA/wAAAPwAAAD7AAAA/QAAAP4AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP4AAAD9AAAA+wAAAPsAAAD/AAAA/wAAAP8AAAD7AAAAvQAAAFkAAAALAAAAAAAA + AAEAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAAAXAAAAuwAA + AP8AAAD7AAAA/gAAAPsAAAD/AAAAyAAAABcAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAADAAAAAAAAAAkAAACtAAAA/wAAAPsAAAD9AAAA+wAAAP8AAADnAAAATAAAAAAAAAACAAAAAwAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAABAAAAAAAAAAAAAAAmAAAAdgAA + AMkAAAD6AAAA/wAAAP8AAAD/AAAA/wAAAPwAAAD7AAAA+wAAAPwAAAD9AAAA/gAAAP4AAAD+AAAA/wAA + AP8AAAD/AAAA/wAAAP4AAAD+AAAA/gAAAP0AAAD8AAAA+wAAAPsAAAD8AAAA/wAAAP8AAAD/AAAA/wAA + APoAAADKAAAAegAAACcAAAAAAAAAAAAAAAEAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAwAAAAIAAAAAAAAASgAAAOYAAAD/AAAA+wAAAP0AAAD7AAAA/wAAAK8AAAAKAAAAAAAA + AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAgAAAAAAAACLAAAA/wAA + AP0AAAD8AAAA/AAAAP4AAAD/AAAAkwAAAAwAAAAAAAAAAwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAEAAAAEAAAAAgAAAAAAAAAAAAAAAQAAACIAAABjAAAApwAAANgAAAD7AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/gAAAP4AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD7AAAA2wAAAKcAAABmAAAAJQAAAAEAAAAAAAAAAAAAAAIAAAAEAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAMAAAAAAAAACwAAAJIAAAD/AAAA/gAA + APwAAAD8AAAA/QAAAP8AAACMAAAAAAAAAAIAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAAAAABZAAAA9AAAAP8AAAD7AAAA/QAAAPwAAAD/AAAA3gAA + AEkAAAAAAAAAAQAAAAMAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA + AAQAAAABAAAAAAAAAAAAAAAAAAAABAAAACYAAABOAAAAewAAAKUAAADDAAAA2wAAAO0AAAD2AAAA/gAA + AP8AAAD/AAAA/wAAAP8AAAD+AAAA9gAAAO0AAADbAAAAwwAAAKUAAAB+AAAAUgAAACYAAAAFAAAAAAAA + AAAAAAAAAAAAAQAAAAQAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA + AAMAAAABAAAAAAAAAEgAAADdAAAA/wAAAPwAAAD9AAAA+wAAAP8AAAD1AAAAWwAAAAAAAAAEAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAA + AAAAAAAsAAAAzwAAAP8AAAD8AAAA/AAAAPwAAAD+AAAA/wAAAKoAAAAiAAAAAAAAAAEAAAAEAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABAAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAFAAAAEAAAAB4AAAArAAAAMAAAADYAAAA2AAAAMAAAACsAAAAeAAAAEAAA + AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAACAAAAAAAAACEAAACqAAAA/wAAAP4AAAD8AAAA/AAA + APwAAAD/AAAA0QAAACwAAAAAAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAHAAAAjwAAAP8AAAD+AAAA/AAA + APwAAAD8AAAA/wAAAPUAAACGAAAAEwAAAAAAAAABAAAAAwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAwAAAAQAAAADAAAAAgAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAADAAAABAAAAAMAAAACAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAQAAAABAAAAAAAA + ABMAAACEAAAA9AAAAP8AAAD8AAAA/AAAAPwAAAD+AAAA/wAAAJAAAAAIAAAAAAAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAgAAAAMAAAAAAAAAQgAAANkAAAD/AAAA/AAAAPwAAAD8AAAA/QAAAP8AAADrAAAAfQAA + ABIAAAAAAAAAAQAAAAMAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAACAAAAAgAAAAIAAAADAAAAAwAAAAIAAAACAAAAAgAA + AAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAABAAAAAwAAAAMAAAABAAAAAAAAABIAAAB7AAAA6wAAAP8AAAD9AAAA/AAAAPwAAAD8AAAA/wAA + ANoAAABEAAAAAAAAAAMAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAAAAAAACgAA + AIgAAAD5AAAA/wAAAPwAAAD7AAAA/AAAAP4AAAD/AAAA7AAAAIwAAAAiAAAAAAAAAAEAAAABAAAABAAA + AAMAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAADAAAABAAAAAEAAAABAAAAAAAAACEAAACKAAAA6gAA + AP8AAAD+AAAA/AAAAPsAAAD8AAAA/wAAAPkAAACJAAAACgAAAAAAAAADAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAACAAAAAAAAACwAAAC3AAAA/wAAAP8AAAD8AAAA+wAA + APsAAAD+AAAA/wAAAPYAAACtAAAASgAAAAcAAAAAAAAAAAAAAAAAAAAEAAAABAAAAAIAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAQAAAAEAAAAAAAA + AAAAAAAAAAAABgAAAEkAAACsAAAA9gAAAP8AAAD+AAAA+wAAAPsAAAD8AAAA/wAAAP8AAAC1AAAAKgAA + AAAAAAACAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAADAAAAAQAAAAAAAABHAAAAygAAAP8AAAD+AAAA/QAAAPoAAAD7AAAA/gAAAP8AAAD/AAAA3AAA + AIwAAAA6AAAABQAAAAAAAAAAAAAAAAAAAAEAAAAEAAAABAAAAAMAAAABAAAAAQAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAQAA + AAMAAAAEAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAFAAAANwAAAIwAAADcAAAA/wAAAP8AAAD+AAAA+wAA + APoAAAD9AAAA/gAAAP8AAADMAAAARwAAAAAAAAABAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAwAAAAAAAAACAAAAUAAA + AMoAAAD/AAAA/wAAAP4AAAD6AAAA+gAAAP0AAAD/AAAA/wAAAP8AAADbAAAAmwAAAFIAAAAaAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAMAAAAEAAAABAAAAAQAAAADAAAAAwAAAAMAAAADAAAAAwAA + AAMAAAAEAAAABAAAAAQAAAADAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABoAAABSAAAAmAAA + ANoAAAD+AAAA/wAAAP8AAAD9AAAA+gAAAPoAAAD+AAAA/wAAAP8AAADLAAAAUgAAAAMAAAAAAAAAAwAA + AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAIAAAAAAAAAAQAAAEYAAAC2AAAA+wAAAP8AAAD/AAAA/QAA + APkAAAD6AAAA/QAAAP8AAAD/AAAA/wAAAPUAAADOAAAAlgAAAGEAAAA2AAAAFgAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAA + ABYAAAA2AAAAYQAAAJcAAADLAAAA9AAAAP8AAAD/AAAA/wAAAP4AAAD6AAAA+QAAAPwAAAD/AAAA/wAA + APsAAAC2AAAARwAAAAIAAAAAAAAAAgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAMAAAACAAAAAAAAAAAAAAAqAAAAiwAAAOIAAAD/AAAA/gAAAP8AAAD8AAAA+QAAAPkAAAD8AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAADxAAAA1gAAALoAAACeAAAAhQAAAHAAAABgAAAAUwAAAEsAAABHAAAARwAA + AEsAAABTAAAAYAAAAHAAAACFAAAAngAAALoAAADWAAAA8QAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/AAA + APkAAAD5AAAA/AAAAP8AAAD+AAAA/wAAAOMAAACMAAAAKgAAAAAAAAAAAAAAAgAAAAMAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAgAAAAAAAAAAAAAACgAA + AEwAAACkAAAA6QAAAP8AAAD+AAAA/wAAAP8AAAD7AAAA+QAAAPgAAAD6AAAA/gAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/gAAAPoAAAD4AAAA+AAAAPsAAAD/AAAA/wAAAP4AAAD/AAAA6gAAAKUAAABOAAAACgAA + AAAAAAAAAAAAAgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAQAAAAAAAAAAAAAAAAAAAAOAAAASgAAAJMAAADUAAAA+gAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/AAAAPoAAAD5AAAA+QAAAPkAAAD6AAAA+wAAAPwAAAD8AAAA/AAA + APwAAAD8AAAA/AAAAPsAAAD6AAAA+QAAAPkAAAD5AAAA+gAAAPwAAAD/AAAA/wAAAP8AAAD/AAAA/wAA + APsAAADUAAAAlAAAAEwAAAAPAAAAAAAAAAAAAAAAAAAABAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAEAAAADAAAAAwAAAAAAAAAAAAAAAAAAAAIAAAAiAAAAWQAAAI8AAAC/AAAA4wAAAPkAAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA + AP8AAAD/AAAA/wAAAPsAAADmAAAAwQAAAI8AAABZAAAAJQAAAAMAAAAAAAAAAAAAAAAAAAADAAAAAwAA + AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAQAAAAEAAAAAQAA + AAAAAAAAAAAAAAAAAAAAAAANAAAALQAAAFMAAAB4AAAAmQAAALYAAADOAAAA3gAAAOsAAAD0AAAA+wAA + AP4AAAD+AAAA+wAAAPQAAADrAAAA3gAAAM4AAAC2AAAAmQAAAHgAAABTAAAAMAAAAA8AAAAAAAAAAAAA + AAAAAAAAAAAAAQAAAAQAAAAEAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA + AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAF//////////////////+gBAAAAAAA + AAAAAAAAAAAAIAX//////////////////6AF//////////////////+gBf//////////////////oAXS + ////////////////S6AF6X///////////////pegBdC///////////////0LoAXSX//////////////6 + S6AF0S//////////////9IugBdCX/////////////+kLoAXQS//////////////SC6AF0CX///////// + ////pAugBdAS/////////////0gLoAXQCX////////////6QC6AF0AS////////////9IAugBdACX/// + ////////+kALoAXQAS////////////SAC6AF0ACX///////////pAAugBdAAS///////////0gALoAXQ + ACX//////////6QAC6AF0AAS//////////9IAAugBdAACX/////////+kAALoAXQAAS//////////SAA + C6AF0AACX/////////pAAAugBdAAAS/////////0gAALoAXQAACX////////6QAAC6AF0AAAS/////// + /9IAAAugBdAAACX///////+kAAALoAXQAAAS////////SAAAC6AF0AAACX///////pAAAAugBdAAAAS/ + //////0gAAALoAXQAAACX//////6QAAAC6AF0AAAAS//////9IAAAAugBdAAAACX/////+kAAAALoAXQ + AAAAS//////SAAAAC6AF0AAAACX/////pAAAAAugBdAAAAAS/////0gAAAALoAXQAAAACX////6QAAAA + C6AF0AAAAAS////9IAAAAAugBdAAAAACX///+kAAAAALoAXQAAAAAS////SAAAAAC6AF0AAAAACX///p + AAAAAAugBdAAAAAAS///0gAAAAALoAXQAAAAACf//+QAAAAAC6AF0AAAAAAT///IAAAAAAugBdAAAAAA + C///0AAAAAALoAXQAAAAAAv//9AAAAAAC6AF0AAAAAAL///QAAAAAAugBdAAAAAAC///0AAAAAALoAXQ + AAAAAAv//9AAAAAAC6AF0AAAAAAL///QAAAAAAugBdAAAAAAC///0AAAAAALoAXQAAAAAAv//9AAAAAA + C6AF0AAAAAAL///QAAAAAAugBdAAAAAAC///0AAAAAALoAXQAAAAAAv//9AAAAAAC6AF0AAAAAAL///Q + AAAAAAugBdAAAAAAC///0AAAAAALoAXQAAAAAAv//9AAAAAAC6AF0AAAAAAJ//+QAAAAAAugBdAAAAAA + Cf//kAAAAAALoAXQAAAAAAn//5AAAAAAC6AF0AAAAAAE//8gAAAAAAugBNAAAAAABX/+oAAAAAALIATI + AAAAAAK//UAAAAAAEyAEyAAAAAACX/pAAAAAABMgAsgAAAAAAS/0gAAAAAATQALoAAAAAACBgQAAAAAA + F0AC6AAAAAAAIAQAAAAAABdAAmgAAAAAAAmQAAAAAAAWQIJkAAAAAAAAAAAAAAAAJkGCZAAAAAAAAAAA + AAAAACZBgXQAAAAAAAAAAAAAAAAugYEyAAAAAAAAAAAAAAAATIGBMgAAAAAAAAAAAAAAAEyBQLIAAAAA + AAAAAAAAAABNAkCZAAAAAAAAAAAAAAAAmQJAmQAAAAAAAAAAAAAAAJkCIEkAAAAAAAAAAAAAAACSBCBM + gAAAAAAAAAAAAAABMgQgRIAAAAAAAAAAAAAAASIEkCZAAAAAAAAAAAAAAAJkCZAiQAAAAAAAAAAAAAAC + RAmIEqAAAAAAAAAAAAAABUgRyBUAAAAAAAAAAAAAAACoE8QJ0AAAAAAAAAAAAAALkCPkCqgAAAAAAAAA + AAAAFVAn4ATIAAAAAAAAAAAAABMgR/IEVAAAAAAAAAAAAAAqIE/xAqoAAAAAAAAAAAAAVUCP+QExAAAA + AAAAAAAAAIyAn/qBVIAAAAAAAAAAAAEqgV/8gKqAAAAAAAAAAAABVQE//UBVQAAAAAAAAAAAAqoCv/6g + CqAAAAAAAAAAAAVQBX//ICFQAAAAAAAAAAAKhAT//1AVqAAAAAAAAAAAFagK//+oCtIAAAAAAAAAAEtQ + Ff//1AVpAAAAAAAAAACWoCP//9IClIAAAAAAAAABKUBL///qAUpAAAAAAAAAAlKAV///9QCUkAAAAAAA + AAkpAK////qAS0gAAAAAAAAS0gFf///9QCWSAAAAAAAASaQCv////qABaIAAAAAAARaABX////9QBLog + AAAAAARdIAr/////qAIshAAAAAAhNEAV/////9IAk6IAAAAARckAS//////pAEToUAAAChciAJf///// + 9IARPQRAAiC8iAEv//////pABA/AJ+QD8CACX//////8kAEL/gAAf9CACT///////0gAQH////wCABL/ + //////+yAAgH///gEABF////////6IABQB/4AoABF/////////JAABIAAEAAAk/////////9EAAAv/0A + AAi//////////0IAAAAAAABC///////////QgAAAAAABC///////////9BAAAAAACC////////////yK + AAAAAFE/////////////gJAAAAkB//////8= + + + \ No newline at end of file diff --git a/src/UI/SettingsForm.cs b/src/UI/SettingsForm.cs new file mode 100644 index 0000000..82ac816 --- /dev/null +++ b/src/UI/SettingsForm.cs @@ -0,0 +1,259 @@ +using System; +using System.Drawing; +using System.Security.Cryptography; +using System.Windows.Forms; +using SshTunnelMonitor.Models; + +namespace SshTunnelMonitor.UI +{ + public sealed class SettingsForm : Form + { + private readonly AppSettings _settings; + private readonly TextBox _txtHost = new TextBox(); + private readonly NumericUpDown _numSshPort = new NumericUpDown(); + private readonly TextBox _txtUser = new TextBox(); + private readonly TextBox _txtPassword = new TextBox(); + private readonly CheckBox _chkSavePassword = new CheckBox(); + private readonly NumericUpDown _numRemotePort = new NumericUpDown(); + private readonly NumericUpDown _numLocalPort = new NumericUpDown(); + private readonly NumericUpDown _numMaxFailures = new NumericUpDown(); + private readonly NumericUpDown _numReconnectTimeout = new NumericUpDown(); + private readonly TextBox _txtSsPath = new TextBox(); + private readonly TextBox _txtSsArgs = new TextBox(); + private readonly TextBox _txtSystemPassword = new TextBox(); + private readonly CheckBox _chkShowSystemPassword = new CheckBox(); + private readonly TextBox _txtThreeProxyPassword = new TextBox(); + private readonly CheckBox _chkShowThreeProxyPassword = new CheckBox(); + private readonly Button _btnGenerateThreeProxyPassword = new Button(); + + public SettingsForm(AppSettings settings) + { + _settings = settings; + Text = "Настройки"; + Width = 560; + Height = 520; + FormBorderStyle = FormBorderStyle.FixedDialog; + MaximizeBox = false; + MinimizeBox = false; + StartPosition = FormStartPosition.CenterParent; + + BuildLayout(); + LoadValues(); + } + + private void BuildLayout() + { + var panel = new TableLayoutPanel + { + Dock = DockStyle.Fill, + Padding = new Padding(10), + ColumnCount = 2, + RowCount = 14 + }; + panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 44f)); + panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 56f)); + + Controls.Add(panel); + + AddRow(panel, "Сервер:", _txtHost, 0); + AddRow(panel, "Порт:", _numSshPort, 1); + AddRow(panel, "Логин:", _txtUser, 2); + _txtPassword.PasswordChar = '*'; + AddRow(panel, "Пароль:", _txtPassword, 3); + _chkSavePassword.Text = "Сохранить пароль"; + AddRow(panel, string.Empty, _chkSavePassword, 4); + AddRow(panel, "Удаленный порт:", _numRemotePort, 5); + AddRow(panel, "Локальный порт:", _numLocalPort, 6); + AddRow(panel, "Макс. потерь:", _numMaxFailures, 7); + AddRow(panel, "Таймаут reconnect (сек):", _numReconnectTimeout, 8); + AddRow(panel, "Путь к ss:", _txtSsPath, 9); + AddRow(panel, "Аргументы ss:", _txtSsArgs, 10); + BuildSystemPasswordRow(panel, 11); + BuildThreeProxyPasswordRow(panel, 12); + + foreach (var num in new[] { _numSshPort, _numRemotePort, _numLocalPort }) + { + num.Minimum = 1; + num.Maximum = 65535; + } + + _numMaxFailures.Minimum = 1; + _numMaxFailures.Maximum = 10; + _numReconnectTimeout.Minimum = 5; + _numReconnectTimeout.Maximum = 60; + + var buttonsPanel = new FlowLayoutPanel + { + Dock = DockStyle.Fill, + FlowDirection = FlowDirection.RightToLeft + }; + var btnSave = new Button { Text = "Сохранить", Width = 120, Height = 30 }; + var btnCancel = new Button { Text = "Отмена", Width = 120, Height = 30 }; + btnSave.Click += (_, __) => SaveAndClose(); + btnCancel.Click += (_, __) => DialogResult = DialogResult.Cancel; + + buttonsPanel.Controls.Add(btnSave); + buttonsPanel.Controls.Add(btnCancel); + panel.Controls.Add(buttonsPanel, 0, 13); + panel.SetColumnSpan(buttonsPanel, 2); + } + + private void BuildSystemPasswordRow(TableLayoutPanel panel, int row) + { + panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 34f)); + panel.Controls.Add(new Label + { + Text = "Пароль Sterra:", + TextAlign = ContentAlignment.MiddleLeft, + Dock = DockStyle.Fill + }, 0, row); + + var passPanel = new FlowLayoutPanel + { + Dock = DockStyle.Fill, + FlowDirection = FlowDirection.LeftToRight, + WrapContents = false, + AutoSize = false + }; + + _txtSystemPassword.Width = 170; + _txtSystemPassword.PasswordChar = '*'; + + _chkShowSystemPassword.Text = "Показать"; + _chkShowSystemPassword.AutoSize = true; + _chkShowSystemPassword.CheckedChanged += (_, __) => + { + _txtSystemPassword.PasswordChar = _chkShowSystemPassword.Checked ? '\0' : '*'; + }; + + passPanel.Controls.Add(_txtSystemPassword); + passPanel.Controls.Add(_chkShowSystemPassword); + panel.Controls.Add(passPanel, 1, row); + } + + private void BuildThreeProxyPasswordRow(TableLayoutPanel panel, int row) + { + panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 34f)); + panel.Controls.Add(new Label + { + Text = "Пароль прокси:", + TextAlign = ContentAlignment.MiddleLeft, + Dock = DockStyle.Fill + }, 0, row); + + var passPanel = new FlowLayoutPanel + { + Dock = DockStyle.Fill, + FlowDirection = FlowDirection.LeftToRight, + WrapContents = false, + AutoSize = false + }; + + _txtThreeProxyPassword.Width = 170; + _txtThreeProxyPassword.PasswordChar = '*'; + + _chkShowThreeProxyPassword.Text = "Показать"; + _chkShowThreeProxyPassword.AutoSize = true; + _chkShowThreeProxyPassword.CheckedChanged += (_, __) => + { + _txtThreeProxyPassword.PasswordChar = _chkShowThreeProxyPassword.Checked ? '\0' : '*'; + }; + + _btnGenerateThreeProxyPassword.Text = "Сгенерировать"; + _btnGenerateThreeProxyPassword.AutoSize = true; + _btnGenerateThreeProxyPassword.Click += (_, __) => + { + _txtThreeProxyPassword.Text = GeneratePassword(); + }; + + passPanel.Controls.Add(_txtThreeProxyPassword); + passPanel.Controls.Add(_chkShowThreeProxyPassword); + passPanel.Controls.Add(_btnGenerateThreeProxyPassword); + panel.Controls.Add(passPanel, 1, row); + } + + private static void AddRow(TableLayoutPanel panel, string label, Control control, int row) + { + panel.RowStyles.Add(new RowStyle(SizeType.Absolute, 34f)); + + if (!string.IsNullOrEmpty(label)) + { + panel.Controls.Add(new Label + { + Text = label, + TextAlign = ContentAlignment.MiddleLeft, + Dock = DockStyle.Fill + }, 0, row); + } + + control.Dock = DockStyle.Fill; + panel.Controls.Add(control, 1, row); + } + + private void LoadValues() + { + _txtHost.Text = _settings.SshHost; + _numSshPort.Value = _settings.SshPort; + _txtUser.Text = _settings.SshUsername; + _txtPassword.Text = _settings.GetPassword(); + _chkSavePassword.Checked = _settings.SavePassword; + _numRemotePort.Value = _settings.RemotePort; + _numLocalPort.Value = _settings.LocalPort; + _numMaxFailures.Value = _settings.MaxPingFailures; + _numReconnectTimeout.Value = _settings.ReconnectTimeoutSec; + _txtSsPath.Text = _settings.SsProcessPath; + _txtSsArgs.Text = _settings.SsArguments; + _txtSystemPassword.Text = _settings.GetSystemPassword(); + _txtThreeProxyPassword.Text = _settings.GetThreeProxyPassword(); + } + + private void SaveAndClose() + { + if (string.IsNullOrWhiteSpace(_txtHost.Text)) + { + MessageBox.Show(this, "Поле сервера обязательно.", "Валидация", MessageBoxButtons.OK, MessageBoxIcon.Warning); + return; + } + + _settings.SshHost = _txtHost.Text.Trim(); + _settings.SshPort = (int)_numSshPort.Value; + _settings.SshUsername = _txtUser.Text.Trim(); + _settings.SavePassword = _chkSavePassword.Checked; + _settings.SetPassword(_txtPassword.Text); + _settings.RemotePort = (int)_numRemotePort.Value; + _settings.LocalPort = (int)_numLocalPort.Value; + _settings.MaxPingFailures = (int)_numMaxFailures.Value; + _settings.ReconnectTimeoutSec = (int)_numReconnectTimeout.Value; + _settings.SsProcessPath = string.IsNullOrWhiteSpace(_txtSsPath.Text) + ? System.IO.Path.Combine("App_Data", "ss", "ss.exe") + : _txtSsPath.Text.Trim(); + _settings.SsArguments = string.IsNullOrWhiteSpace(_txtSsArgs.Text) + ? System.IO.Path.Combine("App_Data", "ss", "ss.cfg") + : _txtSsArgs.Text.Trim(); + _settings.SetSystemPassword(_txtSystemPassword.Text.Trim()); + _settings.SetThreeProxyPassword(_txtThreeProxyPassword.Text.Trim()); + _settings.Save(); + + DialogResult = DialogResult.OK; + } + + private static string GeneratePassword() + { + const string alphabet = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + const int length = 20; + var bytes = new byte[length]; + using (var rng = RandomNumberGenerator.Create()) + { + rng.GetBytes(bytes); + } + + var chars = new char[length]; + for (var i = 0; i < length; i++) + { + chars[i] = alphabet[bytes[i] % alphabet.Length]; + } + + return new string(chars); + } + } +} diff --git a/src/logistics_tunnel_icon_148216.ico b/src/logistics_tunnel_icon_148216.ico new file mode 100644 index 0000000..292f916 Binary files /dev/null and b/src/logistics_tunnel_icon_148216.ico differ diff --git a/tools/SetVersion.cmd b/tools/SetVersion.cmd new file mode 100644 index 0000000..a9d47ec --- /dev/null +++ b/tools/SetVersion.cmd @@ -0,0 +1,47 @@ +@echo off +setlocal enabledelayedexpansion + +if [%1] == [] GOTO :USAGE +set version=%1 +set fileversion=%1 +set informationalversion=%1 + +if [%2] NEQ [] SET fileversion=%2 +if [%3] NEQ [] SET informationalversion=%3 + +echo Setting assembly version information + +for /F "delims=" %%f in ('dir /s /b Assemblyinfo.cs') do ( + echo ^> %%f + + pushd %%~dpf + + for /F "usebackq delims=" %%g in ("AssemblyInfo.cs") do ( + set ln=%%g + set skip=0 + + if "!ln:AssemblyVersion=!" NEQ "!ln!" set skip=1 + if "!ln:AssemblyFileVersion=!" NEQ "!ln!" set skip=1 + if "!ln:AssemblyInformationalVersion=!" NEQ "!ln!" set skip=1 + + if !skip!==0 echo !ln! >> AssemblyInfo.cs.versioned + ) + + echo [assembly: AssemblyVersion^("%version%"^)] >> AssemblyInfo.cs.versioned + echo [assembly: AssemblyFileVersion^("%fileversion%"^)] >> AssemblyInfo.cs.versioned + echo [assembly: AssemblyInformationalVersion^("%informationalversion%"^)] >> AssemblyInfo.cs.versioned + + copy /y AssemblyInfo.cs AssemblyInfo.cs.orig + move /y AssemblyInfo.cs.versioned AssemblyInfo.cs + + popd +) +echo Done^^! + +GOTO:EOF + +:USAGE +echo Usage: +echo. +echo SetVersion.bat Version [FileVersion] [InformationalVersion] +echo. \ No newline at end of file