Initial project's source code check-in.

This commit is contained in:
ptsurbeleu 2011-07-13 16:07:32 -07:00
commit b03b0b373f
4573 changed files with 981205 additions and 0 deletions

View file

@ -0,0 +1,166 @@
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Globalization;
using System.Configuration;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;
namespace WebsitePanel.Import.Enterprise
{
public class ADUtils
{
public static string ADUsername
{
get
{
return ConfigurationManager.AppSettings["AD.Username"];
}
}
public static string ADPassword
{
get
{
return ConfigurationManager.AppSettings["AD.Password"];
}
}
public static string ADRootDomain
{
get { return Global.ADRootDomain; }
}
public static string PrimaryDomainController
{
get { return Global.PrimaryDomainController; }
}
public static string RootOU
{
get { return Global.RootOU; }
}
public static DirectoryEntry GetRootOU()
{
StringBuilder sb = new StringBuilder();
// append provider
AppendProtocol(sb);
AppendDomainController(sb);
AppendOUPath(sb, RootOU);
AppendDomainPath(sb, ADRootDomain);
DirectoryEntry de = GetADObject(sb.ToString());
//ExchangeLog.LogEnd("GetRootOU");
return de;
}
private static void AppendProtocol(StringBuilder sb)
{
sb.Append("LDAP://");
}
private static void AppendDomainController(StringBuilder sb)
{
string dc = PrimaryDomainController;
if (dc.IndexOf(".") != -1)
dc = dc.Substring(0, dc.IndexOf("."));
sb.Append(dc + "/");
}
private static void AppendOUPath(StringBuilder sb, string ou)
{
if (string.IsNullOrEmpty(ou))
return;
string path = ou.Replace("/", "\\");
string[] parts = path.Split('\\');
for (int i = parts.Length - 1; i != -1; i--)
sb.Append("OU=").Append(parts[i]).Append(",");
}
private static void AppendDomainPath(StringBuilder sb, string domain)
{
if (string.IsNullOrEmpty(domain))
return;
string[] parts = domain.Split('.');
for (int i = 0; i < parts.Length; i++)
{
sb.Append("DC=").Append(parts[i]);
if (i < (parts.Length - 1))
sb.Append(",");
}
}
private static DirectoryEntry GetADObject(string path)
{
DirectoryEntry de = null;
de = new DirectoryEntry(path, ADUsername, ADPassword);
de.RefreshCache();
return de;
}
public static string RemoveADPrefix(string path)
{
string dn = path;
if (dn.ToUpper().StartsWith("LDAP://"))
{
dn = dn.Substring(7);
}
int index = dn.IndexOf("/");
if (index != -1)
{
dn = dn.Substring(index + 1);
}
return dn;
}
public static string GetAddressListsContainer()
{
StringBuilder sb = new StringBuilder();
AppendProtocol(sb);
AppendDomainController(sb);
sb.Append("CN=Microsoft Exchange,CN=Services,CN=Configuration,");
AppendDomainPath(sb, ADRootDomain);
DirectoryEntry exchEntry = GetADObject(sb.ToString());
DirectoryEntry orgEntry = null;
foreach (DirectoryEntry child in exchEntry.Children)
{
orgEntry = child;
break;
}
string ret = "CN=Address Lists Container," + RemoveADPrefix(orgEntry.Path);
return ret;
}
}
}

View file

@ -0,0 +1,327 @@
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Threading;
namespace WebsitePanel.Import.Enterprise
{
/// <summary>
/// Animated Icon.
/// </summary>
[ToolboxItem(true)]
public class AnimatedIcon : System.Windows.Forms.UserControl
{
private Thread thread = null;
//private ImageList imageList = null;
private List<Image> images;
private int currentFrame = 0;
private int delayInterval = 50;
private int pause = 0;
private int loopCount = 0;
private int currentLoop = 0;
private int firstFrame = 0;
private int lastFrame = 0;
private System.ComponentModel.Container components = null;
/// <summary>Gets the <see cref="List"/> that contains
/// the <see cref="Image"/> objects used to display animation.</summary>
/// <value>The <see cref="List"/> that contains the <see cref="Image"/>
/// objects used to display animated frames.</value>
[Browsable(false)]
public List<Image> Images
{
get
{
return images;
}
}
/// <summary>Gets or sets delay in milliseconds between the frames.</summary>
/// <value>The default value is 50 milliseconds.</value>
[Category("Animated Icon")]
[DefaultValue(50), Description("Delay in milliseconds between the frames.")]
public int Delay
{
get { return delayInterval; }
set
{
if( value != delayInterval )
{
delayInterval = Math.Abs( value );
}
}
}
/// <summary>Gets or sets pause in milliseconds after every loop.</summary>
/// <value>The default value is 0 milliseconds.</value>
[Category("Animated Icon")]
[DefaultValue(0), Description("Pause in milliseconds after the loop ends.")]
public int Pause
{
get { return pause; }
set
{
if( value != pause )
{
pause = Math.Abs( value );
}
}
}
/// <summary>Gets or sets loop counter.</summary>
/// <value>The default value is 0, i.e. infinitive loop.</value>
[Category("Animated Icon")]
[DefaultValue(0), Description("Loop counter. 0 means infinitive loop.")]
public int LoopCount
{
get { return loopCount; }
set
{
if( value != loopCount )
{
loopCount = Math.Abs( value );
}
}
}
/// <summary>Gets or sets the first frame of the animation.</summary>
/// <value>The default value is 0.</value>
[Category("Animated Icon")]
[DefaultValue(0), Description("First frame of the animation.")]
public int FirstFrame
{
get { return firstFrame; }
set
{
if( value != firstFrame )
{
firstFrame = Math.Abs( value );
}
}
}
/// <summary>Gets or sets the last frame of the animation.</summary>
/// <value>The default value is 0.</value>
[Category("Animated Icon")]
[DefaultValue(0), Description("Last frame of the animation.")]
public int LastFrame
{
get { return lastFrame; }
set
{
if( value != lastFrame )
{
lastFrame = Math.Abs( value );
}
}
}
/// <summary>Initializes a new instance of the <b>AnimatedIcon</b> class.
/// </summary>
public AnimatedIcon()
{
CheckForIllegalCrossThreadCalls = false;
InitializeComponent();
images = new List<Image>();
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
}
#region Dispose
/// <summary>Clean up any resources being used.</summary>
/// <param name="disposing"><see langword="true"/> to release both managed
/// and unmanaged resources; <see langword="false"/> to release
/// only unmanaged resources.</param>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if( components != null )
components.Dispose();
if( thread != null )
thread.Abort();
}
base.Dispose( disposing );
}
#endregion
#region Component Designer generated code
/// <summary>Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
//
// AnimatedIcon
//
this.Name = "AnimatedIcon";
this.Size = new System.Drawing.Size(16, 16);
}
#endregion
/// <summary>Starts animation from the beginning.
/// </summary>
public void StartAnimation()
{
StopAnimation();
CheckRange(); // Check the first and the last frames
thread = new Thread( new ThreadStart( threadFunc ) );
thread.IsBackground = true;
thread.Start();
}
/// <summary>Stops animation not changing current frame number.
/// </summary>
public void StopAnimation()
{
if( thread != null )
{
thread.Abort();
thread = null;
}
currentLoop = 0;
}
/// <summary>Displays the specified frame.</summary>
/// <param name="frame">An index of the image stored in the <see cref="ImageList"/>.</param>
public void ShowFrame(int frame)
{
StopAnimation();
if( frame >= 0 && frame < images.Count )
currentFrame = frame;
else
currentFrame = 0;
Refresh();
}
/// <summary>Occurs when the control is redrawn.</summary>
/// <param name="e">A <see cref="PaintEventArgs"/> that contains
/// the event data.</param>
/// <remarks>The <b>OnPaint</b> method draws current image from
/// the <see cref="ImageList"/> if exists.</remarks>
protected override void OnPaint(PaintEventArgs e)
{
// Draw a crossed rectangle if there is no frame to display
if( images == null ||
currentFrame < 0 ||
currentFrame >= images.Count )
{
if( this.Size.Width == 0 || this.Size.Height == 0 )
return;
Pen pen = new Pen( SystemColors.ControlText );
e.Graphics.DrawRectangle( pen, 0, 0, this.Size.Width-1, this.Size.Height-1 );
e.Graphics.DrawLine( pen, 0, 0, this.Size.Width, this.Size.Height );
e.Graphics.DrawLine( pen, 0, this.Size.Height-1, this.Size.Width-1, 0 );
pen.Dispose();
}
else
{
// Draw the current frame
e.Graphics.DrawImage( images[currentFrame], 0, 0, this.Size.Width, this.Size.Height );
}
}
/// <summary>The method to be invoked when the thread begins executing.
/// </summary>
private void threadFunc()
{
bool wasPause = false;
currentFrame = firstFrame;
while( thread != null && thread.IsAlive )
{
Refresh(); // Redraw the current frame
wasPause = false;
if( images != null )
{
currentFrame++;
if( currentFrame > lastFrame ||
currentFrame >= images.Count )
{
if( pause > 0 ) // Sleep after every loop
{
Thread.Sleep( pause );
wasPause = true;
}
currentFrame = firstFrame;
if( loopCount != 0 ) // 0 is infinitive loop
{
currentLoop++;
}
}
if( loopCount != 0 && currentLoop >= loopCount )
{
StopAnimation(); // The loop is completed
}
}
if( !wasPause ) // That prevents summation (pause + delayInterval)
Thread.Sleep( delayInterval );
}
}
/// <summary>Check if the last frame is no less than the first one.
/// Otherwise, swap them.</summary>
private void CheckRange()
{
if( lastFrame < firstFrame )
{
int tmp = firstFrame;
firstFrame = lastFrame;
lastFrame = tmp;
}
}
}
}

View file

@ -0,0 +1,22 @@
<?xml version="1.0"?>
<configuration>
<!-- Connection strings -->
<connectionStrings>
<add name="EnterpriseServer" connectionString="Server=(local)\sqlexpress;Database=WebsitePanel;uid=WebsitePanel;pwd=password" providerName="System.Data.SqlClient"/>
</connectionStrings>
<appSettings>
<add key="AD.Username" value="DOMAIN\Administrator"/>
<add key="AD.Password" value="password"/>
<!-- Encryption util settings -->
<add key="WebsitePanel.CryptoKey" value="q26125qpakxmxmk477wb"/>
<!-- Encryption -->
<add key="WebsitePanel.EncryptionEnabled" value="true"/>
<!-- Web Applications -->
<add key="WebsitePanel.EnterpriseServer.WebApplicationsPath" value="~/WebApplications"/>
<!-- Communication settings -->
<!-- Maximum waiting time when sending request to the remote server
The value is in seconds. "-1" - infinite. -->
<add key="WebsitePanel.EnterpriseServer.ServerRequestTimeout" value="3600"/>
<add key="ClientSettingsProvider.ServiceUri" value=""/>
</appSettings>
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup></configuration>

View file

@ -0,0 +1,351 @@
namespace WebsitePanel.Import.Enterprise
{
partial class ApplicationForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ApplicationForm));
this.lblSpace = new System.Windows.Forms.Label();
this.txtSpace = new System.Windows.Forms.TextBox();
this.btnBrowseSpace = new System.Windows.Forms.Button();
this.btnBrowseOU = new System.Windows.Forms.Button();
this.txtOU = new System.Windows.Forms.TextBox();
this.lblOU = new System.Windows.Forms.Label();
this.grpOrganization = new System.Windows.Forms.GroupBox();
this.btnSelectAll = new System.Windows.Forms.Button();
this.btnDeselectAll = new System.Windows.Forms.Button();
this.rbCreateAndImport = new System.Windows.Forms.RadioButton();
this.rbImport = new System.Windows.Forms.RadioButton();
this.lvUsers = new System.Windows.Forms.ListView();
this.columnHeader1 = new System.Windows.Forms.ColumnHeader();
this.columnHeader2 = new System.Windows.Forms.ColumnHeader();
this.columnHeader3 = new System.Windows.Forms.ColumnHeader();
this.images = new System.Windows.Forms.ImageList(this.components);
this.txtOrgName = new System.Windows.Forms.TextBox();
this.lblOrgName = new System.Windows.Forms.Label();
this.txtOrgId = new System.Windows.Forms.TextBox();
this.lblOrgId = new System.Windows.Forms.Label();
this.btnStart = new System.Windows.Forms.Button();
this.progressBar = new System.Windows.Forms.ProgressBar();
this.lblMessage = new System.Windows.Forms.Label();
this.grpOrganization.SuspendLayout();
this.SuspendLayout();
//
// lblSpace
//
this.lblSpace.Location = new System.Drawing.Point(15, 15);
this.lblSpace.Name = "lblSpace";
this.lblSpace.Size = new System.Drawing.Size(125, 23);
this.lblSpace.TabIndex = 0;
this.lblSpace.Text = "Target Hosting Space:";
//
// txtSpace
//
this.txtSpace.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtSpace.Location = new System.Drawing.Point(146, 12);
this.txtSpace.Name = "txtSpace";
this.txtSpace.ReadOnly = true;
this.txtSpace.Size = new System.Drawing.Size(429, 20);
this.txtSpace.TabIndex = 1;
this.txtSpace.TextChanged += new System.EventHandler(this.OnDataChanged);
//
// btnBrowseSpace
//
this.btnBrowseSpace.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnBrowseSpace.Location = new System.Drawing.Point(581, 10);
this.btnBrowseSpace.Name = "btnBrowseSpace";
this.btnBrowseSpace.Size = new System.Drawing.Size(24, 22);
this.btnBrowseSpace.TabIndex = 2;
this.btnBrowseSpace.Text = "...";
this.btnBrowseSpace.UseVisualStyleBackColor = true;
this.btnBrowseSpace.Click += new System.EventHandler(this.OnBrowseSpace);
//
// btnBrowseOU
//
this.btnBrowseOU.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.btnBrowseOU.Location = new System.Drawing.Point(581, 36);
this.btnBrowseOU.Name = "btnBrowseOU";
this.btnBrowseOU.Size = new System.Drawing.Size(24, 22);
this.btnBrowseOU.TabIndex = 5;
this.btnBrowseOU.Text = "...";
this.btnBrowseOU.UseVisualStyleBackColor = true;
this.btnBrowseOU.Click += new System.EventHandler(this.OnBrowseOU);
//
// txtOU
//
this.txtOU.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtOU.Location = new System.Drawing.Point(146, 38);
this.txtOU.Name = "txtOU";
this.txtOU.ReadOnly = true;
this.txtOU.Size = new System.Drawing.Size(429, 20);
this.txtOU.TabIndex = 4;
this.txtOU.TextChanged += new System.EventHandler(this.OnDataChanged);
//
// lblOU
//
this.lblOU.Location = new System.Drawing.Point(15, 41);
this.lblOU.Name = "lblOU";
this.lblOU.Size = new System.Drawing.Size(125, 23);
this.lblOU.TabIndex = 3;
this.lblOU.Text = "Organizational Unit:";
//
// grpOrganization
//
this.grpOrganization.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.grpOrganization.Controls.Add(this.btnSelectAll);
this.grpOrganization.Controls.Add(this.btnDeselectAll);
this.grpOrganization.Controls.Add(this.rbCreateAndImport);
this.grpOrganization.Controls.Add(this.rbImport);
this.grpOrganization.Controls.Add(this.lvUsers);
this.grpOrganization.Controls.Add(this.txtOrgName);
this.grpOrganization.Controls.Add(this.lblOrgName);
this.grpOrganization.Controls.Add(this.txtOrgId);
this.grpOrganization.Controls.Add(this.lblOrgId);
this.grpOrganization.Location = new System.Drawing.Point(15, 67);
this.grpOrganization.Name = "grpOrganization";
this.grpOrganization.Size = new System.Drawing.Size(590, 328);
this.grpOrganization.TabIndex = 6;
this.grpOrganization.TabStop = false;
//
// btnSelectAll
//
this.btnSelectAll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnSelectAll.Location = new System.Drawing.Point(417, 282);
this.btnSelectAll.Name = "btnSelectAll";
this.btnSelectAll.Size = new System.Drawing.Size(75, 23);
this.btnSelectAll.TabIndex = 7;
this.btnSelectAll.Text = "Select All";
this.btnSelectAll.UseVisualStyleBackColor = true;
this.btnSelectAll.Click += new System.EventHandler(this.OnSelectAllClick);
//
// btnDeselectAll
//
this.btnDeselectAll.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnDeselectAll.Location = new System.Drawing.Point(498, 282);
this.btnDeselectAll.Name = "btnDeselectAll";
this.btnDeselectAll.Size = new System.Drawing.Size(75, 23);
this.btnDeselectAll.TabIndex = 8;
this.btnDeselectAll.Text = "Unselect All";
this.btnDeselectAll.UseVisualStyleBackColor = true;
this.btnDeselectAll.Click += new System.EventHandler(this.OnDeselectAllClick);
//
// rbCreateAndImport
//
this.rbCreateAndImport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.rbCreateAndImport.AutoSize = true;
this.rbCreateAndImport.Checked = true;
this.rbCreateAndImport.Enabled = false;
this.rbCreateAndImport.Location = new System.Drawing.Point(19, 282);
this.rbCreateAndImport.Name = "rbCreateAndImport";
this.rbCreateAndImport.Size = new System.Drawing.Size(261, 17);
this.rbCreateAndImport.TabIndex = 5;
this.rbCreateAndImport.TabStop = true;
this.rbCreateAndImport.Text = "Create new organization and import selected items";
this.rbCreateAndImport.UseVisualStyleBackColor = true;
this.rbCreateAndImport.CheckedChanged += new System.EventHandler(this.OnCheckedChanged);
//
// rbImport
//
this.rbImport.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)));
this.rbImport.AutoSize = true;
this.rbImport.Enabled = false;
this.rbImport.Location = new System.Drawing.Point(19, 305);
this.rbImport.Name = "rbImport";
this.rbImport.Size = new System.Drawing.Size(237, 17);
this.rbImport.TabIndex = 6;
this.rbImport.Text = "Import selected items for existing organization";
this.rbImport.UseVisualStyleBackColor = true;
//
// lvUsers
//
this.lvUsers.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lvUsers.CheckBoxes = true;
this.lvUsers.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.columnHeader1,
this.columnHeader2,
this.columnHeader3});
this.lvUsers.FullRowSelect = true;
this.lvUsers.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
this.lvUsers.Location = new System.Drawing.Point(19, 74);
this.lvUsers.MultiSelect = false;
this.lvUsers.Name = "lvUsers";
this.lvUsers.Size = new System.Drawing.Size(554, 202);
this.lvUsers.SmallImageList = this.images;
this.lvUsers.TabIndex = 4;
this.lvUsers.UseCompatibleStateImageBehavior = false;
this.lvUsers.View = System.Windows.Forms.View.Details;
//
// columnHeader1
//
this.columnHeader1.Text = "Name";
this.columnHeader1.Width = 229;
//
// columnHeader2
//
this.columnHeader2.Text = "Email";
this.columnHeader2.Width = 163;
//
// columnHeader3
//
this.columnHeader3.Text = "Type";
this.columnHeader3.Width = 152;
//
// images
//
this.images.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("images.ImageStream")));
this.images.TransparentColor = System.Drawing.Color.Transparent;
this.images.Images.SetKeyName(0, "UserSmallIcon.ico");
this.images.Images.SetKeyName(1, "contact.ico");
this.images.Images.SetKeyName(2, "DL.ico");
//
// txtOrgName
//
this.txtOrgName.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtOrgName.Location = new System.Drawing.Point(155, 45);
this.txtOrgName.Name = "txtOrgName";
this.txtOrgName.Size = new System.Drawing.Size(418, 20);
this.txtOrgName.TabIndex = 3;
//
// lblOrgName
//
this.lblOrgName.Location = new System.Drawing.Point(19, 48);
this.lblOrgName.Name = "lblOrgName";
this.lblOrgName.Size = new System.Drawing.Size(130, 23);
this.lblOrgName.TabIndex = 2;
this.lblOrgName.Text = "Organization Name:";
//
// txtOrgId
//
this.txtOrgId.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.txtOrgId.Location = new System.Drawing.Point(155, 19);
this.txtOrgId.Name = "txtOrgId";
this.txtOrgId.ReadOnly = true;
this.txtOrgId.Size = new System.Drawing.Size(418, 20);
this.txtOrgId.TabIndex = 1;
//
// lblOrgId
//
this.lblOrgId.Location = new System.Drawing.Point(19, 22);
this.lblOrgId.Name = "lblOrgId";
this.lblOrgId.Size = new System.Drawing.Size(130, 23);
this.lblOrgId.TabIndex = 0;
this.lblOrgId.Text = "Organization Id:";
//
// btnStart
//
this.btnStart.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnStart.Location = new System.Drawing.Point(527, 461);
this.btnStart.Name = "btnStart";
this.btnStart.Size = new System.Drawing.Size(75, 23);
this.btnStart.TabIndex = 9;
this.btnStart.Text = "Start";
this.btnStart.UseVisualStyleBackColor = true;
this.btnStart.Click += new System.EventHandler(this.OnImportClick);
//
// progressBar
//
this.progressBar.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.progressBar.Location = new System.Drawing.Point(15, 427);
this.progressBar.Name = "progressBar";
this.progressBar.Size = new System.Drawing.Size(587, 23);
this.progressBar.TabIndex = 8;
//
// lblMessage
//
this.lblMessage.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
this.lblMessage.Location = new System.Drawing.Point(12, 401);
this.lblMessage.Name = "lblMessage";
this.lblMessage.Size = new System.Drawing.Size(593, 23);
this.lblMessage.TabIndex = 7;
//
// ApplicationForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(617, 496);
this.Controls.Add(this.lblMessage);
this.Controls.Add(this.progressBar);
this.Controls.Add(this.btnStart);
this.Controls.Add(this.grpOrganization);
this.Controls.Add(this.btnBrowseOU);
this.Controls.Add(this.txtOU);
this.Controls.Add(this.lblOU);
this.Controls.Add(this.btnBrowseSpace);
this.Controls.Add(this.txtSpace);
this.Controls.Add(this.lblSpace);
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MinimumSize = new System.Drawing.Size(630, 500);
this.Name = "ApplicationForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
this.Text = "WebsitePanel Enterprise Import Tool";
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.OnFormClosing);
this.grpOrganization.ResumeLayout(false);
this.grpOrganization.PerformLayout();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Label lblSpace;
private System.Windows.Forms.TextBox txtSpace;
private System.Windows.Forms.Button btnBrowseSpace;
private System.Windows.Forms.Button btnBrowseOU;
private System.Windows.Forms.TextBox txtOU;
private System.Windows.Forms.Label lblOU;
private System.Windows.Forms.GroupBox grpOrganization;
private System.Windows.Forms.TextBox txtOrgId;
private System.Windows.Forms.Label lblOrgId;
private System.Windows.Forms.TextBox txtOrgName;
private System.Windows.Forms.Label lblOrgName;
private System.Windows.Forms.ListView lvUsers;
private System.Windows.Forms.ColumnHeader columnHeader1;
private System.Windows.Forms.ImageList images;
private System.Windows.Forms.ColumnHeader columnHeader2;
private System.Windows.Forms.ColumnHeader columnHeader3;
internal System.Windows.Forms.Button btnStart;
internal System.Windows.Forms.ProgressBar progressBar;
internal System.Windows.Forms.Label lblMessage;
private System.Windows.Forms.RadioButton rbCreateAndImport;
private System.Windows.Forms.RadioButton rbImport;
internal System.Windows.Forms.Button btnSelectAll;
internal System.Windows.Forms.Button btnDeselectAll;
}
}

View file

@ -0,0 +1,333 @@
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.Specialized;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Reflection;
using System.DirectoryServices;
using WebsitePanel.EnterpriseServer;
using WebsitePanel.Providers.HostedSolution;
namespace WebsitePanel.Import.Enterprise
{
public partial class ApplicationForm : BaseForm
{
private string username;
private string password;
private OrganizationImporter importer;
internal bool ImportStarted = false;
public ApplicationForm()
{
InitializeComponent();
CheckForIllegalCrossThreadCalls = false;
}
public void InitializeForm(string username, string password)
{
this.username = username;
this.password = password;
UserInfo info = UserController.GetUser(username);
SecurityContext.SetThreadPrincipal(info);
importer = new OrganizationImporter();
Assembly assembly = Assembly.GetExecutingAssembly();
this.Text += " v" + assembly.GetName().Version.ToString(3);
UpdateForm();
}
private void OnBrowseSpace(object sender, EventArgs e)
{
SelectSpace();
}
private void SelectSpace()
{
SpaceForm form = new SpaceForm();
form.InitializeForm(username, password);
if (form.ShowDialog(this) == DialogResult.OK)
{
Global.Space = form.SelectedSpace;
txtSpace.Text = Global.Space.PackageName;
LoadSpaceData(Global.Space);
}
}
private void LoadSpaceData(PackageInfo packageInfo)
{
int serviceId = PackageController.GetPackageServiceId(packageInfo.PackageId, ResourceGroups.HostedOrganizations);
ServiceInfo serviceInfo = ServerController.GetServiceInfo(serviceId);
StringDictionary serviceSettings = ServerController.GetServiceSettingsAdmin(serviceId);
Global.RootOU = serviceSettings["RootOU"];
Global.PrimaryDomainController = serviceSettings["PrimaryDomainController"];
Global.TempDomain = serviceSettings["TempDomain"];
ServerInfo serverInfo = ServerController.GetServerById(serviceInfo.ServerId);
Global.ADRootDomain = serverInfo.ADRootDomain;
}
private void OnBrowseOU(object sender, EventArgs e)
{
SelectOU();
}
private void SelectOU()
{
if (string.IsNullOrEmpty(txtSpace.Text))
{
ShowWarning("Please select hosting space first.");
return;
}
OUForm form = new OUForm();
form.InitializeForm();
if (form.ShowDialog(this) == DialogResult.OK)
{
Global.OrgDirectoryEntry = form.DirectoryEntry;
string orgId = (string)Global.OrgDirectoryEntry.Properties["name"].Value;
txtOU.Text = form.DirectoryEntry.Path;
Global.OrganizationId = orgId;
LoadOrganizationData(Global.OrgDirectoryEntry);
}
}
private void LoadOrganizationData(DirectoryEntry parent)
{
string orgId = (string)parent.Properties["name"].Value;
txtOrgId.Text = orgId;
Organization org = OrganizationController.GetOrganizationById(orgId);
if (org != null)
{
rbCreateAndImport.Checked = false;
rbImport.Checked = true;
txtOrgName.Text = org.Name;
}
else
{
rbCreateAndImport.Checked = true;
rbImport.Checked = false;
txtOrgName.Text = orgId;
}
LoadOrganizationAccounts(parent);
}
private void LoadOrganizationAccounts(DirectoryEntry ou)
{
lvUsers.Items.Clear();
ListViewItem item = null;
string email;
string type;
string name;
PropertyValueCollection typeProp;
string ouName = (string)ou.Properties["name"].Value;
foreach (DirectoryEntry child in ou.Children)
{
type = null;
email = null;
name = (string)child.Properties["name"].Value;
//account type
typeProp = child.Properties["msExchRecipientDisplayType"];
switch (child.SchemaClassName)
{
case "user":
email = (string)child.Properties["userPrincipalName"].Value;
if (typeProp == null || typeProp.Value == null)
{
type = "User";
}
else
{
int mailboxType = (int)typeProp.Value;
switch (mailboxType)
{
case 1073741824:
type = "User Mailbox";
break;
case 7:
type = "Room Mailbox";
break;
case 8:
type = "Equipment Mailbox";
break;
}
}
if (!string.IsNullOrEmpty(type))
{
item = new ListViewItem(name);
item.ImageIndex = 0;
item.Checked = true;
item.Tag = child;
item.SubItems.Add(email);
item.SubItems.Add(type);
lvUsers.Items.Add(item);
}
break;
case "contact":
if (typeProp != null && typeProp.Value != null && 6 == (int)typeProp.Value)
{
type = "Mail Contact";
if (child.Properties["targetAddress"] != null)
{
email = (string)child.Properties["targetAddress"].Value;
if (email != null && email.ToLower().StartsWith("smtp:"))
email = email.Substring(5);
}
}
if (!string.IsNullOrEmpty(type))
{
item = new ListViewItem(name);
item.ImageIndex = 1;
item.Checked = true;
item.Tag = child;
item.SubItems.Add(email);
item.SubItems.Add(type);
lvUsers.Items.Add(item);
}
break;
case "group":
if (child.Properties["mail"] != null)
email = (string)child.Properties["mail"].Value;
if ((typeProp != null) && (typeProp.Value != null) && (1073741833 == (int)typeProp.Value))
{
//Universal Security Group
type = "Mail-Enabled Universal Security Group";
//email
PropertyValueCollection proxyAddresses = child.Properties["proxyAddresses"];
if (proxyAddresses != null)
{
foreach (string address in proxyAddresses)
{
if (address != null && address.StartsWith("SMTP:"))
{
email = address.Substring(5);
break;
}
}
}
}
if (!string.IsNullOrEmpty(type) && name != ouName)
{
item = new ListViewItem(name);
item.ImageIndex = 2;
item.Checked = true;
item.Tag = child;
item.SubItems.Add(email);
item.SubItems.Add(type);
lvUsers.Items.Add(item);
}
break;
}
}
}
private void OnDataChanged(object sender, EventArgs e)
{
UpdateForm();
}
private void UpdateForm()
{
if (string.IsNullOrEmpty(txtSpace.Text) ||
string.IsNullOrEmpty(txtOU.Text))
{
btnStart.Enabled = false;
}
else
{
btnStart.Enabled = true;
}
}
private void OnImportClick(object sender, EventArgs e)
{
List<DirectoryEntry> accounts = new List<DirectoryEntry>();
foreach (ListViewItem item in lvUsers.Items)
{
if (item.Checked)
{
accounts.Add((DirectoryEntry)item.Tag);
}
}
Global.SelectedAccounts = accounts;
Global.OrganizationName = txtOrgName.Text;
Global.ImportAccountsOnly = rbImport.Checked;
Global.HasErrors = false;
importer.Initialize(this.username, this);
importer.Start();
}
private void OnFormClosing(object sender, FormClosingEventArgs e)
{
e.Cancel = ImportStarted;
}
private void OnCheckedChanged(object sender, EventArgs e)
{
txtOrgName.ReadOnly = !rbCreateAndImport.Checked;
}
private void OnSelectAllClick(object sender, EventArgs e)
{
foreach (ListViewItem item in lvUsers.Items)
{
item.Checked = true;
}
}
private void OnDeselectAllClick(object sender, EventArgs e)
{
foreach (ListViewItem item in lvUsers.Items)
{
item.Checked = false;
}
}
}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,48 @@
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Windows.Forms;
using System.Text;
namespace WebsitePanel.Import.Enterprise
{
public class BaseForm : Form
{
public DialogResult ShowError(string text, Exception ex)
{
Log.WriteError(text, ex);
return MessageBox.Show(this, text, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
}
public DialogResult ShowWarning(string text)
{
return MessageBox.Show(this, text, this.Text, MessageBoxButtons.OK, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1);
}
}
}

View file

@ -0,0 +1,170 @@
namespace WebsitePanel.Import.Enterprise
{
partial class ConnectForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
WebsitePanel.Import.Enterprise.LineBox lineBox;
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ConnectForm));
this.btnCancel = new System.Windows.Forms.Button();
this.btnConnect = new System.Windows.Forms.Button();
this.pictureBox = new System.Windows.Forms.PictureBox();
this.txtUserName = new System.Windows.Forms.TextBox();
this.lblUserName = new System.Windows.Forms.Label();
this.lblPassword = new System.Windows.Forms.Label();
this.txtPassword = new System.Windows.Forms.TextBox();
this.animatedIcon = new WebsitePanel.Import.Enterprise.AnimatedIcon();
lineBox = new WebsitePanel.Import.Enterprise.LineBox();
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
this.SuspendLayout();
//
// lineBox
//
lineBox.Location = new System.Drawing.Point(12, 147);
lineBox.Name = "lineBox";
lineBox.Size = new System.Drawing.Size(387, 2);
lineBox.TabIndex = 8;
lineBox.TabStop = false;
lineBox.Text = "lineBox1";
//
// btnCancel
//
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.btnCancel.Location = new System.Drawing.Point(323, 162);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(75, 23);
this.btnCancel.TabIndex = 10;
this.btnCancel.Text = "Cancel";
this.btnCancel.UseVisualStyleBackColor = true;
this.btnCancel.Click += new System.EventHandler(this.OnCancelClick);
//
// btnConnect
//
this.btnConnect.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.btnConnect.Location = new System.Drawing.Point(242, 162);
this.btnConnect.Name = "btnConnect";
this.btnConnect.Size = new System.Drawing.Size(75, 23);
this.btnConnect.TabIndex = 9;
this.btnConnect.Text = "&Connect";
this.btnConnect.UseVisualStyleBackColor = true;
this.btnConnect.Click += new System.EventHandler(this.OnConnectClick);
//
// pictureBox
//
this.pictureBox.Image = global::WebsitePanel.Import.Enterprise.Properties.Resources.ConnectLogo;
this.pictureBox.Location = new System.Drawing.Point(0, 0);
this.pictureBox.Name = "pictureBox";
this.pictureBox.Size = new System.Drawing.Size(410, 67);
this.pictureBox.SizeMode = System.Windows.Forms.PictureBoxSizeMode.StretchImage;
this.pictureBox.TabIndex = 3;
this.pictureBox.TabStop = false;
//
// txtUserName
//
this.txtUserName.Location = new System.Drawing.Point(146, 84);
this.txtUserName.Name = "txtUserName";
this.txtUserName.Size = new System.Drawing.Size(253, 20);
this.txtUserName.TabIndex = 4;
this.txtUserName.Text = "serveradmin";
this.txtUserName.TextChanged += new System.EventHandler(this.OnUserNameTextChanged);
//
// lblUserName
//
this.lblUserName.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.lblUserName.Location = new System.Drawing.Point(11, 84);
this.lblUserName.Name = "lblUserName";
this.lblUserName.Size = new System.Drawing.Size(100, 21);
this.lblUserName.TabIndex = 3;
this.lblUserName.Text = "&User name:";
//
// lblPassword
//
this.lblPassword.FlatStyle = System.Windows.Forms.FlatStyle.System;
this.lblPassword.Location = new System.Drawing.Point(11, 112);
this.lblPassword.Name = "lblPassword";
this.lblPassword.Size = new System.Drawing.Size(100, 21);
this.lblPassword.TabIndex = 5;
this.lblPassword.Text = "&Password:";
//
// txtPassword
//
this.txtPassword.Location = new System.Drawing.Point(146, 112);
this.txtPassword.Name = "txtPassword";
this.txtPassword.PasswordChar = '*';
this.txtPassword.Size = new System.Drawing.Size(253, 20);
this.txtPassword.TabIndex = 6;
this.txtPassword.Text = "serveradmin";
//
// animatedIcon
//
this.animatedIcon.Delay = 100;
this.animatedIcon.Location = new System.Drawing.Point(0, 67);
this.animatedIcon.Name = "animatedIcon";
this.animatedIcon.Size = new System.Drawing.Size(410, 3);
this.animatedIcon.TabIndex = 0;
this.animatedIcon.TabStop = false;
//
// ConnectForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(410, 195);
this.Controls.Add(this.animatedIcon);
this.Controls.Add(this.txtPassword);
this.Controls.Add(this.lblPassword);
this.Controls.Add(this.txtUserName);
this.Controls.Add(this.lblUserName);
this.Controls.Add(this.pictureBox);
this.Controls.Add(lineBox);
this.Controls.Add(this.btnConnect);
this.Controls.Add(this.btnCancel);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "ConnectForm";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Connect to Server";
((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.Button btnConnect;
private System.Windows.Forms.PictureBox pictureBox;
private System.Windows.Forms.TextBox txtUserName;
private System.Windows.Forms.Label lblUserName;
private System.Windows.Forms.Label lblPassword;
private System.Windows.Forms.TextBox txtPassword;
private AnimatedIcon animatedIcon;
}
}

View file

@ -0,0 +1,188 @@
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Configuration;
using System.Threading;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using WebsitePanel.EnterpriseServer;
namespace WebsitePanel.Import.Enterprise
{
public partial class ConnectForm : Form
{
private Thread connectThread;
public ConnectForm()
{
InitializeComponent();
if (DesignMode)
{
return;
}
InitializeForm();
UpdateFormState();
}
private void InitializeForm()
{
animatedIcon.Images.Add(WebsitePanel.Import.Enterprise.Properties.Resources.ProgressImage1);
animatedIcon.Images.Add(WebsitePanel.Import.Enterprise.Properties.Resources.ProgressImage2);
animatedIcon.Images.Add(WebsitePanel.Import.Enterprise.Properties.Resources.ProgressImage3);
animatedIcon.Images.Add(WebsitePanel.Import.Enterprise.Properties.Resources.ProgressImage4);
animatedIcon.Images.Add(WebsitePanel.Import.Enterprise.Properties.Resources.ProgressImage5);
animatedIcon.Images.Add(WebsitePanel.Import.Enterprise.Properties.Resources.ProgressImage6);
animatedIcon.Images.Add(WebsitePanel.Import.Enterprise.Properties.Resources.ProgressImage7);
animatedIcon.Images.Add(WebsitePanel.Import.Enterprise.Properties.Resources.ProgressImage8);
animatedIcon.LastFrame = 8;
}
private void OnConnectClick(object sender, EventArgs e)
{
DisableForm();
animatedIcon.StartAnimation();
ThreadStart threadDelegate = new ThreadStart(Connect);
connectThread = new Thread(threadDelegate);
connectThread.Start();
}
public string Username
{
get { return txtUserName.Text; }
}
public string Password
{
get { return txtPassword.Text; }
}
private void Connect()
{
int status = -1;
try
{
status = UserController.AuthenticateUser(txtUserName.Text, txtPassword.Text, string.Empty);
if (status == 0)
{
UserInfo userInfo = UserController.GetUser(txtUserName.Text);
SecurityContext.SetThreadPrincipal(userInfo);
}
}
catch (Exception ex)
{
Log.WriteError("Authentication error", ex);
status = -1;
}
finally
{
animatedIcon.StopAnimation();
}
string errorMessage = "Check configuration settings.";
if (status != 0)
{
switch (status)
{
case BusinessErrorCodes.ERROR_USER_WRONG_USERNAME:
case BusinessErrorCodes.ERROR_USER_WRONG_PASSWORD:
errorMessage = "Wrong username or password.";
break;
case BusinessErrorCodes.ERROR_USER_ACCOUNT_CANCELLED:
errorMessage = "Account cancelled.";
break;
case BusinessErrorCodes.ERROR_USER_ACCOUNT_PENDING:
errorMessage = "Account pending.";
break;
case -1:
errorMessage = "Authentication error.";
break;
}
MessageBox.Show(this,
string.Format("Cannot connect to the Enterprise Server.\n{0}", errorMessage),
Text, MessageBoxButtons.OK, MessageBoxIcon.Error);
EnableForm();
return;
}
else
{
this.DialogResult = DialogResult.OK;
this.Close();
}
}
private void DisableForm()
{
foreach(Control ctrl in Controls)
{
ctrl.Enabled = false;
}
btnCancel.Enabled = true;
}
private void EnableForm()
{
foreach (Control ctrl in Controls)
{
ctrl.Enabled = true;
}
}
private void UpdateFormState()
{
btnConnect.Enabled = (txtUserName.Text.Length > 0 );
}
private void OnCancelClick(object sender, EventArgs e)
{
if (connectThread != null)
{
connectThread.Abort();
}
this.DialogResult = DialogResult.Cancel;
this.Close();
}
private void OnServerNameTextChanged(object sender, EventArgs e)
{
UpdateFormState();
}
private void OnUserNameTextChanged(object sender, EventArgs e)
{
UpdateFormState();
}
}
}

View file

@ -0,0 +1,152 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="lineBox.GenerateMember" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>False</value>
</metadata>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAABAAEAEBAAAAEACABoBQAAFgAAACgAAAAQAAAAIAAAAAEACAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAUjgpAGM8IQBjQSkAY0UxAHNVQgB7WUIAc1lKAHthSgBzYVIAe3VrAMY0AADeUQgA51UIAPdV
AAD3YRAA/20YAP9xIQD/dSEA93UpAP99MQCMZVIAhGlSAIxpUgCEaVoAjHFjAJR5awCceWsAAJYpAEq2
awD/gjEA/4Y5AJSCawCchnMApYJjALWKawClhnMApYpzAPeCQgD/ikIA/5JKAP+WSgD/llIA95paAN6W
cwDWmnsA95pjAP+eYwDnmnsA/6JjAP+iawD3pnMA/6p7AKWShACtloQArZqMALWWhAC1lowArZqUALWe
lAC1opQAtaKcAL2mnAC1pqUAva6tAL2ypQC9sq0Avba1AMamlADWrpwA56aMAP+qhAD/roQA96aMAP+y
jAD/rpQA77acAPeylAD/spQA/7acAMaupQDGsq0AzratAMa6rQDOuq0A1rqtAMa2tQDOurUAzr61AOe6
rQD/vqUAzse9AN7DtQDWw70A/8OlAP/HpQD/x60A98e1APfLvQD3z70A/8u9AMDAwADGx8YAzsfGAM7P
zgDWy8YA1s/OANbTxgDe084A1tPWANbX1gDe294A58/GAO/TxgD308YA/9PGAPfbzgDv39YA99/WAPfj
3gD/494A3t/nAM77/wDn5+cA/+fnAP/r5wDn8+cA//PvAOf/9wDn//8A//v3AP/7/wD///8ASjAYAID2
gnywDYN8/////6cNg3wPD4N8AQAAABwUjACkFIwAAAAFAAAAAAAA3P1/KAIAAEUAAADRwwEAcBOMAIAA
EMBIFowAgPaCfOD5gnz/////AAAAAJv4gny8FIwAJcTmdwAAAAABAAAAAgAAADgWjAAYAAAAAAAAAKQU
jABCAAAAAAAAAIgUjAAAAAAAAAAAAAAAAAAAAAAADAAAAAIAAAABAYN8ANz9fxwAAAAAAAAAAgAAACQA
GgJQnAgAAgAAAAAAAABQnAgABQAAAOAUjAAGG+R3AAEAAAAAAMAAAAAAAAAAAAIAAAAAAAAAAAAAACAW
jACv1EoAoCnqAAAAAMAAAAAAFBaMAAIAAACAAAAAAAAAAHRVjADs9aYAAgAAAEM6XGNvbm5lY3QuaWNv
AACYFYwASBWMAEp+SgAEBwkAmBWMAMjEOXeYxDl3BQAAAAQHCQACAAAAJAAAAAAAAAAAAAAAeLTpAHAA
AABUIYJ8bfTmdwABAAAAAAAAAAAAAAAAAACcFYwAeLTpABYAAAAAAAAAjfTmdxYAAAA4FowAAQAAACAA
AAAWAAAAAAAAABYAAACIFYwABAcJAEgWjACYt+Z3kPTmd/////+N9OZ3RtVKAAABAAB4tOkAFgAAAOwV
jAAAAAAAAAAAABwcHBwcHBwcHBwAAAAAAAAcAAAAAAAAAAAcAAAAAAAAHAAAAAAAAAAAHAAAfTklGxcI
BQSFQQAAABwAAFd+a2ZcRDgiIwIAHBwcHBxYgIF6hHFVREUDAAAcHBwAfV1XUDw3NSQVQQAAABwAAGdz
XlpPS0YtTAYAQRgJAQpoTScpFBANCywWADp/dx0HbVovMiofEQwwGQA9g392Fm5gNEoxKB4PSRoAP4OD
fBlvYkpfSC8oEk4hAEBsU1EgeWQuMysmEw5HNQBWhH1yNnuCeHZ0cmNhczsAQ3VwWT59b25qaWdnW1R9
AGxCQD1SAAAAAAAAAAAAAAAAAAAAAPADAAD3+wAA9/sAAAA7AAAAIAAAADEAAAA7AAAAIAAAACAAAAAg
AAAAIAAAACAAAAAgAAAAIAAAACAAAP//AAA=
</value>
</data>
</root>

View file

@ -0,0 +1,63 @@
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Windows.Forms;
using System.Text;
namespace WebsitePanel.Import.Enterprise
{
public class DataNode : TreeNode
{
private bool populated;
public bool Populated
{
get
{
return populated;
}
set
{
populated = value;
}
}
private string nodeType;
public string NodeType
{
get
{
return nodeType;
}
set
{
nodeType = value;
}
}
}
}

View file

@ -0,0 +1,79 @@
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.Generic;
using System.Text;
using WebsitePanel.EnterpriseServer;
using System.DirectoryServices;
namespace WebsitePanel.Import.Enterprise
{
class Global
{
private static string rootOU;
public static string RootOU
{
get { return rootOU; }
set { rootOU = value; }
}
private static string primaryDomainController;
public static string PrimaryDomainController
{
get { return primaryDomainController; }
set { primaryDomainController = value; }
}
private static string aDRootDomain;
public static string ADRootDomain
{
get { return aDRootDomain; }
set { aDRootDomain = value; }
}
public static PackageInfo Space;
public static string TempDomain;
public static string MailboxCluster;
public static string StorageGroup;
public static string MailboxDatabase;
public static string KeepDeletedMailboxesDays;
public static string KeepDeletedItemsDays;
public static DirectoryEntry OrgDirectoryEntry;
public static List<DirectoryEntry> SelectedAccounts;
public static string OrganizationId;
public static string OrganizationName;
public static int ItemId;
public static string ErrorMessage;
public static bool ImportAccountsOnly;
public static bool HasErrors;
}
}

View file

@ -0,0 +1,101 @@
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.Generic;
using System.Text;
using System.DirectoryServices;
namespace WebsitePanel.Import.Enterprise
{
public enum ActionTypes
{
None,
ImportOrganization,
ImportOrganizationDomain,
ImportMailbox,
ImportContact,
ImportGroup
}
public class ImportAction
{
public ImportAction(ActionTypes type)
{
this.ActionType = type;
}
private ActionTypes actionType;
public ActionTypes ActionType
{
get { return actionType; }
set { actionType = value; }
}
private string name;
public string Name
{
get { return name; }
set { name = value; }
}
private string description;
public string Description
{
get { return description; }
set { description = value; }
}
private DirectoryEntry entry;
public DirectoryEntry DirectoryEntry
{
get { return entry; }
set { entry = value; }
}
private string path;
public string Path
{
get { return path; }
set { path = value; }
}
private string userName;
public string UserName
{
get { return userName; }
set { userName = value; }
}
}
}

View file

@ -0,0 +1,36 @@
namespace WebsitePanel.Import.Enterprise
{
partial class LineBox
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Component Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
components = new System.ComponentModel.Container();
}
#endregion
}
}

View file

@ -0,0 +1,96 @@
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;
namespace WebsitePanel.Import.Enterprise
{
/// <summary>
/// 3D line box.
/// </summary>
[ToolboxItem(true)]
public partial class LineBox : Control
{
/// <summary>
/// Initializes a new instance of the LineBox class.
/// </summary>
public LineBox() : base()
{
SetStyle(ControlStyles.UserPaint, true);
SetStyle(ControlStyles.FixedHeight, true);
SetStyle(ControlStyles.DoubleBuffer, true);
SetStyle(ControlStyles.ResizeRedraw, true);
SetStyle(ControlStyles.StandardClick, false);
SetStyle(ControlStyles.Selectable, false);
this.TabStop = false;
}
/// <summary>
/// Raises the Paint event.
/// </summary>
/// <param name="e">A PaintEventArgs that contains the event data.</param>
protected override void OnPaint(PaintEventArgs e)
{
Graphics graphics = e.Graphics;
Rectangle rectangle = this.ClientRectangle;
Pen lightPen = new Pen(ControlPaint.Light(this.BackColor, 1));
Pen darkPen = new Pen(ControlPaint.Dark(this.BackColor, 0));
graphics.DrawLine(darkPen, rectangle.X, rectangle.Y, rectangle.X+rectangle.Width, rectangle.Y);
graphics.DrawLine(lightPen, rectangle.X, rectangle.Y+1, rectangle.X+rectangle.Width, rectangle.Y+1);
base.OnPaint(e);
}
/// <summary>
/// Gets the default size of the control.
/// </summary>
protected override Size DefaultSize
{
get
{
return new Size(10, 2);
}
}
/// <summary>
/// Performs the work of setting the specified bounds of this control.
/// </summary>
/// <param name="x">The new Left property value of the control.</param>
/// <param name="y">The new Right property value of the control.</param>
/// <param name="width">The new Width property value of the control.</param>
/// <param name="height">The new Height property value of the control.</param>
/// <param name="specified">A bitwise combination of the BoundsSpecified values.</param>
[EditorBrowsable(EditorBrowsableState.Advanced)]
protected override void SetBoundsCore(int x, int y, int width, int height, BoundsSpecified specified)
{
base.SetBoundsCore(x, y, width, 2, specified);
}
}
}

View file

@ -0,0 +1,205 @@
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Configuration;
using System.Diagnostics;
using System.IO;
using System.Reflection;
namespace WebsitePanel.Import.Enterprise
{
/// <summary>
/// Installer Log.
/// </summary>
public sealed class Log
{
/// <summary>
/// Initializes a new instance of the class.
/// </summary>
private Log()
{
}
private static string logFile = "WebsitePanel.Import.Enterprise.log";
/// <summary>
/// Initializes trace listeners.
/// </summary>
static Log()
{
//FileStream fileLog = new FileStream(logFile, FileMode.Append);
FileStream fileLog = new FileStream(logFile, FileMode.Create);
TextWriterTraceListener fileListener = new TextWriterTraceListener(fileLog);
fileListener.TraceOutputOptions = TraceOptions.DateTime;
Trace.UseGlobalLock = true;
Trace.Listeners.Clear();
Trace.Listeners.Add(fileListener);
Trace.AutoFlush = true;
}
/// <summary>
/// Write error to the log.
/// </summary>
/// <param name="message">Error message.</param>
/// <param name="ex">Exception.</param>
internal static void WriteError(string message, Exception ex)
{
try
{
string line = string.Format("[{0:G}] ERROR: {1}", DateTime.Now, message);
Trace.WriteLine(line);
Trace.WriteLine(ex);
}
catch { }
}
/// <summary>
/// Write error to the log.
/// </summary>
/// <param name="message">Error message.</param>
internal static void WriteError(string message)
{
try
{
string line = string.Format("[{0:G}] ERROR: {1}", DateTime.Now, message);
Trace.WriteLine(line);
}
catch { }
}
/// <summary>
/// Write to log
/// </summary>
/// <param name="message"></param>
internal static void Write(string message)
{
try
{
string line = string.Format("[{0:G}] {1}", DateTime.Now, message);
Trace.Write(line);
}
catch { }
}
/// <summary>
/// Write line to log
/// </summary>
/// <param name="message"></param>
internal static void WriteLine(string message)
{
try
{
string line = string.Format("[{0:G}] {1}", DateTime.Now, message);
Trace.WriteLine(line);
}
catch { }
}
/// <summary>
/// Write info message to log
/// </summary>
/// <param name="message"></param>
internal static void WriteInfo(string message)
{
try
{
string line = string.Format("[{0:G}] INFO: {1}", DateTime.Now, message);
Trace.WriteLine(line);
}
catch { }
}
/// <summary>
/// Write start message to log
/// </summary>
/// <param name="message"></param>
internal static void WriteStart(string message)
{
try
{
string line = string.Format("[{0:G}] START: {1}", DateTime.Now, message);
Trace.WriteLine(line);
}
catch { }
}
/// <summary>
/// Write end message to log
/// </summary>
/// <param name="message"></param>
internal static void WriteEnd(string message)
{
try
{
string line = string.Format("[{0:G}] END: {1}", DateTime.Now, message);
Trace.WriteLine(line);
}
catch { }
}
internal static void WriteApplicationStart()
{
try
{
Assembly assembly = Assembly.GetExecutingAssembly();
string name = assembly.GetName().Name;
string version = assembly.GetName().Version.ToString();
string line = string.Format("[{0:G}] {1} {2} Started", DateTime.Now, name, version);
Trace.WriteLine(line);
}
catch { }
}
internal static void WriteApplicationEnd()
{
try
{
Assembly assembly = Assembly.GetExecutingAssembly();
string name = assembly.GetName().Name;
string line = string.Format("[{0:G}] {1} Ended", DateTime.Now, name);
Trace.WriteLine(line);
}
catch { }
}
/// <summary>
/// Opens notepad to view log file.
/// </summary>
public static void ShowLogFile()
{
try
{
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, logFile);
Process.Start("notepad.exe", path);
}
catch { }
}
}
}

View file

@ -0,0 +1,164 @@
namespace WebsitePanel.Import.Enterprise
{
partial class OUForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Node3", 3, 3);
System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("Node2", 2, 2, new System.Windows.Forms.TreeNode[] {
treeNode1});
System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("Node1", 1, 1, new System.Windows.Forms.TreeNode[] {
treeNode2});
System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("Node0", new System.Windows.Forms.TreeNode[] {
treeNode3});
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(OUForm));
this.ouTree = new System.Windows.Forms.TreeView();
this.images = new System.Windows.Forms.ImageList(this.components);
this.images2 = new System.Windows.Forms.ImageList(this.components);
this.pnlButtons = new System.Windows.Forms.Panel();
this.btnCancel = new System.Windows.Forms.Button();
this.btnSelect = new System.Windows.Forms.Button();
this.pnlButtons.SuspendLayout();
this.SuspendLayout();
//
// ouTree
//
this.ouTree.Dock = System.Windows.Forms.DockStyle.Fill;
this.ouTree.ImageIndex = 2;
this.ouTree.ImageList = this.images;
this.ouTree.Location = new System.Drawing.Point(10, 10);
this.ouTree.Name = "ouTree";
treeNode1.ImageIndex = 3;
treeNode1.Name = "Node3";
treeNode1.SelectedImageIndex = 3;
treeNode1.Text = "Node3";
treeNode2.ImageIndex = 2;
treeNode2.Name = "Node2";
treeNode2.SelectedImageIndex = 2;
treeNode2.Text = "Node2";
treeNode3.ImageIndex = 1;
treeNode3.Name = "Node1";
treeNode3.SelectedImageIndex = 1;
treeNode3.Text = "Node1";
treeNode4.Name = "Node0";
treeNode4.Text = "Node0";
this.ouTree.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
treeNode4});
this.ouTree.SelectedImageIndex = 2;
this.ouTree.ShowLines = false;
this.ouTree.Size = new System.Drawing.Size(399, 319);
this.ouTree.TabIndex = 0;
this.ouTree.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.OnBeforeExpand);
//
// images
//
this.images.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("images.ImageStream")));
this.images.TransparentColor = System.Drawing.Color.Transparent;
this.images.Images.SetKeyName(0, "");
this.images.Images.SetKeyName(1, "OU.ico");
this.images.Images.SetKeyName(2, "Folder.ico");
this.images.Images.SetKeyName(3, "");
this.images.Images.SetKeyName(4, "UserSmallIcon.ico");
this.images.Images.SetKeyName(5, "UsersSmallIcon.ico");
this.images.Images.SetKeyName(6, "");
this.images.Images.SetKeyName(7, "");
this.images.Images.SetKeyName(8, "contact1.ico");
//
// images2
//
this.images2.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("images2.ImageStream")));
this.images2.TransparentColor = System.Drawing.Color.Transparent;
this.images2.Images.SetKeyName(0, "UserSmallIcon.ico");
this.images2.Images.SetKeyName(1, "UsersSmallIcon.ico");
this.images2.Images.SetKeyName(2, "FolderSmallIcon.ico");
this.images2.Images.SetKeyName(3, "SpaceSmallIcon.ico");
//
// pnlButtons
//
this.pnlButtons.Controls.Add(this.btnCancel);
this.pnlButtons.Controls.Add(this.btnSelect);
this.pnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom;
this.pnlButtons.Location = new System.Drawing.Point(10, 329);
this.pnlButtons.Name = "pnlButtons";
this.pnlButtons.Size = new System.Drawing.Size(399, 32);
this.pnlButtons.TabIndex = 1;
//
// btnCancel
//
this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Location = new System.Drawing.Point(324, 9);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(75, 23);
this.btnCancel.TabIndex = 1;
this.btnCancel.Text = "Cancel";
this.btnCancel.UseVisualStyleBackColor = true;
//
// btnSelect
//
this.btnSelect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnSelect.Location = new System.Drawing.Point(243, 9);
this.btnSelect.Name = "btnSelect";
this.btnSelect.Size = new System.Drawing.Size(75, 23);
this.btnSelect.TabIndex = 0;
this.btnSelect.Text = "Select";
this.btnSelect.UseVisualStyleBackColor = true;
this.btnSelect.Click += new System.EventHandler(this.OnSelectClick);
//
// OUForm
//
this.AcceptButton = this.btnSelect;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(419, 371);
this.Controls.Add(this.ouTree);
this.Controls.Add(this.pnlButtons);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "OUForm";
this.Padding = new System.Windows.Forms.Padding(10);
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Select Organizational Unit";
this.pnlButtons.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.TreeView ouTree;
private System.Windows.Forms.Panel pnlButtons;
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.Button btnSelect;
private System.Windows.Forms.ImageList images2;
private System.Windows.Forms.ImageList images;
}
}

View file

@ -0,0 +1,196 @@
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.DirectoryServices;
namespace WebsitePanel.Import.Enterprise
{
public partial class OUForm : BaseForm
{
public const string OU = "organizationalUnit";
public const string CONTAINER = "container";
public const string COMPUTER = "computer";
public const string USER = "user";
public const string CONTACT = "contact";
public const string GROUP = "group";
public const string TMP = "Tmp";
public OUForm()
{
InitializeComponent();
}
public void InitializeForm()
{
PopulateRootNode();
}
private void PopulateRootNode()
{
ouTree.Nodes.Clear();
DirectoryEntry root = null;
try
{
root = ADUtils.GetRootOU();
}
catch (Exception ex)
{
ShowError("Unable to load root OU.", ex);
}
if (root != null)
{
DataNode rootNode = AddTreeNode(null, root);
rootNode.Expand();
}
}
private void OnBeforeExpand(object sender, TreeViewCancelEventArgs e)
{
DataNode node = e.Node as DataNode;
ExpandNode(node);
}
private void ExpandNode(DataNode node)
{
if (node == null || node.Populated)
return;
node.Nodes.Clear();
ouTree.Update();
try
{
DirectoryEntry parent = node.Tag as DirectoryEntry;
foreach (DirectoryEntry child in parent.Children)
{
AddTreeNode(node, child);
}
}
catch (Exception ex)
{
ShowError("Unable to load Active Directory data.", ex);
}
node.Populated = true;
node.Expand();
}
private DataNode AddTreeNode(DataNode parentNode, DirectoryEntry entry)
{
bool hasChildren = true;
DataNode node = new DataNode();
node.Text = (string)entry.Properties["name"].Value;
node.NodeType = entry.SchemaClassName;
int imageIndex = 2;
switch (entry.SchemaClassName)
{
case OU:
imageIndex = 1;
break;
case CONTAINER:
imageIndex = 2;
break;
case COMPUTER:
imageIndex = 3;
break;
case USER:
imageIndex = 4;
hasChildren = false;
break;
case CONTACT:
imageIndex = 8;
hasChildren = false;
break;
case GROUP:
imageIndex = 5;
hasChildren = false;
break;
default:
imageIndex = 6;
break;
}
node.SelectedImageIndex = imageIndex;
node.ImageIndex = imageIndex;
node.Tag = entry;
if (hasChildren)
{
node.Populated = false;
DataNode tmpNode = new DataNode();
tmpNode.Text = "Expanding...";
tmpNode.SelectedImageIndex = 2;
tmpNode.ImageIndex = 2;
tmpNode.NodeType = TMP;
node.Nodes.Add(tmpNode);
}
else
{
node.Populated = true;
}
if (parentNode != null)
parentNode.Nodes.Add(node);
else
ouTree.Nodes.Add(node);
return node;
}
private void OnSelectClick(object sender, EventArgs e)
{
DataNode node = ouTree.SelectedNode as DataNode;
if (node == null || node.NodeType != OU)
{
ShowWarning("Please select Organizational Unit.");
return;
}
this.directoryEntry = (DirectoryEntry)node.Tag;
this.DialogResult = DialogResult.OK;
this.Close();
}
private DirectoryEntry directoryEntry;
public DirectoryEntry DirectoryEntry
{
get { return directoryEntry; }
}
}
}

View file

@ -0,0 +1,390 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="images.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>107, 17</value>
</metadata>
<data name="images.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADQ
KQAAAk1TRnQBSQFMAgEBCQEAAQwBAAEEAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABMAMAAQEBAAEgBgABMP8A/wAUAAG9AcMBtQH/AUkBSAFJAf8BSQFIAUkB/wFJAUgBSQH/AUkBSAFJ
Af8BSQFIAUkB/wFJAUgBSQH/AUkBSAFJAf8BSQFIAUkB/wFJAUgBSQH/AUkBSAFJAf8BSQFIAUkB/wFJ
AUgBSQH/AUkBSAFJAf8BSQFIAUkB/wFJAUgBSQH/wAABvQHDAbUL/wH3A/8B9wP/AfcD/wH3A/8B9wP/
AfcD/wH3A/8B9wP/AfcD/wH3A/8B9wL/AfcB7wH/AZwBngGUAf/AAAG9AcMBtQX/AfcB7wHnAf8B9wHv
AecB/wH3Ae8B5wH/AfcB7wHnAf8B9wHvAecB/wH3Ae8B5wH/AfcB7wHnAf8B9wHvAecB/wH3Ae8B5wH/
AfcB7wHnAf8B9wHvAecB/wH3Ae8B5wH/AfcB7wHnAf8BnAGeAZQB/8AAAb0BwwG1Bf8B7wHfAdYB/wHW
Ab4BrQH/AcYBsgGlAf8BxgGyAaUB/wHOAboBpQH/AecB3wHWAf8B9wHvAecB/wH3Ae8B5wH/AfcB7wHn
Af8B9wHvAecB/wH3Ae8B5wH/AfcB7wHnAf8B9wHvAecB/wGcAZ4BlAH/wAABvQHDAbUF/wHGAa4BnBH/
AdYBvgGtAf8B9wHvAecB/wH3Ae8B5wH/AfcB7wHnAf8B9wHvAecB/wH3Ae8B5wH/AfcB7wHnAf8B9wHv
AecB/wGcAZ4BlAH/wAABvQHDAbUC/wL3Af8BxgGuAZwR/wHeAcMBvQH/AfcB7wHnAf8BxgGyAaUB/wHG
AbIBpQH/AcYBsgGlAf8BxgGyAaUB/wHGAbIBpQH/AfcB7wHnAf8BnAGeAZQB/8AAAb0BwwG1Av8C9wH/
Ac4BugGlEf8B3gHDAb0B/wH3Ae8B5wH/AdYBwwG1Af8B1gHHAb0B/wHWAccBvQH/AdYBxwG9Af8B1gHD
AbUB/wH3Ae8B5wH/AZwBngGUAf/AAAG9AcMBtQP/AfcB/wHOAcMBtRH/AdYBxwG9Af8B9wHvAecB/wHW
AcMBtQH/AdYBwwG1Af8B1gHDAbUB/wHWAccBvQH/AdYBwwG1Av8B9wHvAf8BnAGeAZQB/8AAAb0BwwG1
Bf8B7wHfAdYB/wHGAbIBpQH/AcYBsgGlAf8BxgGyAaUB/wHGAa4BnAH/Ae8B3wHWAf8B9wHvAecB/wHG
AbIBpQH/AcYBsgGlAf8BxgGyAaUB/wHGAbIBpQH/AcYBsgGlAv8B9wHvAf8BnAGWAZQB/8AAAb0BwwG1
Bf8B9wHvAecC/wHvAecB/wH3Ae8B5wL/AfcB7wH/AfcB7wHnAf8B9wHvAecH/wH3Av8C9wH/A/cB/wH3
AfMB7wH/AfcB7wHnA/8B9wH/AZwBngGUAf/AAAG9AcMBtR3/AZwBngGUAf8BvQG+AbUB/wG9Ab4BtQH/
Ab0BwwG1Af8BvQG+AbUB/wG9Ab4BtQH/Ab0BvgG1Af8BvQG+AbUB/8AAAb0BwwG1Af8BvQHDAbUB/wG9
AcMBtQH/Ab0BwwG1Af8BvQHDAbUB/wG9AcMBtQH/Ab0BwwG1Af8BvQHDAbUB/wG9AcMBtQH//wD/AP8A
fwABgwFyAWcB/wGDAXIBZwH/AYMBcgFnAf9gAAMYASEDTQGRAVwBWwFYAcEBeAFvAWgB5gGSAX4BcgH8
AXgBbwFoAeYBXAFbAVgBwQNMAZADKAE9LAADGAEhA00BkQFcAVsBWAHBAXgBbwFnAeYBlQF+AW8B/AF4
AW8BZwHmAVwBWwFYAcEDTAGQAygBPRwAAYMBcgFnAf8BwwGbAW0B/wGrAYUBWwH/AYMBcgFnAf8cAANo
Af8DaAH/OAADAwEEAWABXQFcAc0BqgGTAW8B/QHmAcsBtAH/Ad4BtwGQAf8B4wG7AZQB/wHgAboBlAH/
Ac4BqwGIAf8BuAGZAXcB/wFfAV0BXAHFGAADCAELAxQBGwMWAR4DFAEcAw4BEwFgAV0BXAHNAa8BlAFs
Af0B9AHVAboB/wHqAb4BkQH/AfABwgGVAf8B7QHBAZUB/wHYAbABiAH/Ab8BmwF1Af8BXwFdAVwBxRgA
AYMBcgFnAf8BsQGZAYEB/wHcAbcBkgH/AZ4BhQFlAf8DZQH/GAABcwFZAeoB/wEjAQAB3wH/ATkBIgGm
Af8DXwH/HAABXAFKAbIB/wEoAQEB2AH/EAADBAEFAV0BXAFaAb4BxgGlAYUB/wHmAdABvQH/AeIBvQGc
Af8B5gG/AZcB/wHoAcMBnwH/AdsBugGYAf8BwAGfAXoB/wFkAV8BXgHMEAADFwEgA0gBhAFTAWEBWQHX
AVEBawFhAeYBTwFsAV8B6AFYAWsBYQHmAVABXwFXAd8BrAGRAWwB/wHPAakBhAH/AfQB2gHEAf8B7wHE
AZ8B/wH0AccBmQH/AfYBywGiAf8B5wHBAZoB/wHIAaIBeAH/AWQBXwFcAcwQAAGHAXcBbQH/AZMBeAFj
Af8BogGMAXAB/wHGAakBiQH/AeoBxAGfAf8BvgGeAXYB/wFhAVQBRgH/A0wB/wNqAf8QAAFzAVkB6gH/
ASMBAAHfAf8BKgEEAdsB/wFNAUgBZAH/A18B/xQAAUABIwHDAf8BIwEAAd8B/wFUAUABtgH/EwABAQFV
AVQBUwGqAdkBsQGQAf8B5gHUAcEB/wHzAdIBswH/AeoBwQGYAf8B7QHMAaoB/wHgAcIBpAH/AcMBowGC
Af8BbAFoAWIB3RAAAyoBQAFnAcMBmQH/AV8BwAGRAf8BVwG4AYkB/wFPAbIBhAH/AaABwQGoAf8BVQGn
AXgB/wGvAaABbAH/AeUBtwGRAf8B9AHfAckC/wHdAbkB/wH4AckBmgH/AfwB1gGvAf8B7QHKAagB/wHL
AacBgQH/AW8BZwFhAd0IAAGrAZABbgH/AasBkAFuAf8BwQGkAYoB/wHPAa8BkgH/Ad4BvwGdAf8B8wHO
AaoC/wHnAcAB/wHkAcMBoAH/AcQBpgGFAf8BsQGQAWgB/wFpAVgBRwH/A1YB/xAAAXMBWQHqAf8BIwEA
Ad8B/wE3ARYB0gH/A1kB/xAAATQBEgHNAf8BKAEBAdgB/wFUAUABtgH/FAADAQECAwEBAgGTAYcBeQHl
AdABwwGyAf8ByAHDAbsB/wHXAbcBlwH/AesBxAGdAf8B4QG+AZsB/wHOAaYBegH/A00BkRAAAxcBIAFu
AcoBoAH/AWUBwgGWAf8BYAG/AZMB/wFnAcABkQH/AdEB4wHGAf8BYAG1AZAB/wGNAasBcgL/AdIBpQH/
AdoBywG4Af8B0QHLAcIB/wHiAb4BmQH/AfkBzAGgAf8B7gHGAZ0B/wHYAaoBeAH/A00BkQQAAasBkAFu
Af8BuQGiAYkB/wHcAcMBqQH/AfwB3AG9Av8B7wHOAf8B4wG2AZMB/wGdATQBCwH/AcgBbwFBAv8B3QG4
Av8B3gG6Af8B5AHFAaUB/wHDAaQBhgH/AYUBZwFOAf8DVwH/EAABdAFaAesB/wEjAQAB3wH/AUwBMgHD
Af8DXgH/CAABNAESAc0B/wEoAQEB2AH/AVQBQAG2Af8fAAEBAx8BLQFeAl8ByQEWAUYBdwH/AUoBZAGD
Af8BxgGmAYcB/wGZAYQBbwHuA04BmAMHAQoQAAMMARABdQG2AZcB+AFuAcoBoAH/AWQBxAGVAf8BggHD
AagB/wGyAcoBvwH/AVsBqgGFAf8BSAGoAXIB/wJpAV8B2QFsAW4BdwH1AQUBPAF1Af8BQQFfAYIB/wHP
AaoBhgH/AZwBhwFuAe4DTgGYAwcBCgQAAbgBpQGQAf8B4wHNAbcC/wHqAc0C/wHoAcsC/wH0AdcB/wHT
AakBiAH/AUMCAAH/AWoBGQEAAv8B4QG8Av8B6AHHAv8B4wG/Af8B7QHNAa8B/wHCAaUBhwH/AWgBWgFM
Af8DXwH/EAABdAFaAesB/wEjAQAB3wH/AUsBMQHDAf8BTQFKAVgB/wEtAQwBxwH/ASYBAAHXAf8BVAFA
AbYB/x8AAQEDAAEBAxABFgNQAZoBKwFQAXcB/wEiAUwBdwH/A1UBtQM/AWwEAAMCAQMUAANKAYkBbwG9
AZIB/AFiAbwBkQH/AVsBkQGyAf8BUgGAAaUB/wFAAXMBUwH9AVgBXwFcAckDTwGbATsBWQFzAfUBHQFI
AXUB/wETAUMBdQH/AlQBVQG1Az8BbAQAAwIBAwG4AaUBkAH/AdkBxwG1Av8B7AHUAv8B6wHRAv8B5gHN
Av8B6QHPAv8B7wHWAf8B3AG2AZkB/wHxAdEBtgL/Ae8B0gL/AeMBxQL/AeMBxQL/AeUBxgH/AeUBygGt
Af8BtQGZAXYB/wM+Af8UAAFzAVkB6gH/ASMBAAHfAf8BJgEAAdcB/wElAQAB1gH/AWQBXAGMAf8gAAMD
AQQDAgEDAyEBMAFYAWYBdQHjAUcBbgGbAf8BQgFnAZMB/wEwAVYBgQH/AyQBNiAAAzEBTgFgAZ0BigH5
AUoBdwGoAf8BUgF2AY4B9ANTAagDKAE9AVgBZQF1AeMBPgFqAZ0B/wE4AWIBlAH/ASMBTwGAAf8DJAE2
DAABygG4AakB/wH2AeIB0QL/AfEB3QL/AesB1gL/AeoB1QL/AesB1AL/AfsB5gH/AcsBiQFaAf8B6AG/
AZ8D/wHpAv8B5wHNAv8B5AHKAv8B6AHLAf8B+wHhAcQB/wHWAbsBoAH/AVcBVQFSAf8YAAEpAQIB2QH/
ASMBAAHfAf8BQQElAcQB/wFkAVwBjAH/IAADBAEGBAADRwGCAWIBgQGcAfYBZQGQAbYB/wFWAYEBpwH/
ATwBZAGQAf8DUgGhAwUBBxwAAUQCRQF8AToBZQF/AfkBcAGhAcwB/wFzAZsBxQH7AU8BaQGBAfADTAGP
AWIBgwGhAfYBYAGRAbwB/wFPAYABqwH/ATEBXwGRAf8DUgGhAwUBBwgAAc8BxQG5Af8B+wHsAd0C/wHz
AeMC/wHuAd4C/wHuAdwC/wHxAd8D/wH4Af8BzgGgAYIB/wGlAUABEwL/AesBzwL/AfgB5AL/AekB0wL/
AeoB0AL/AegBzgH/Ad4BxgGwAf8BhAF3AW8B/xQAATQBEgHNAf8BKAEBAdgB/wFUAUABtgH/ATABCQHg
Af8BUwE3AdYB/wFkAVwBjAH/HAADBAEGAwABAQM/AWwBfgGbAbgB+AGCAagBzgH/AWUBkQG4Af8BRwFp
AZIB/wEsATwBTAH/AyQBNRgAAwoBDgFVAW8BdwHnAVMBjAGvAf8BoQHLAfkB/wGWAcMB8QH/AWcBiAG0
AfwDQgFzAX4BnQG+AfgBgQGsAdgB/wFgAZIBvwH/AT4BZQGTAf8BHwExAUMB/wMkATUIAAHSAckBvwH/
AfwB8QHmAv8B9wHrAv8B8gHlAv8B9AHnAv8B9gHnAv8B8gHeAv8B/gHvAf8BiAEuAQkB/wGnATUBCQH/
Ae0B0gG4Av8B+AHnAv8B7QHZAv8B8AHaAf8B3QHHAbIB/wGAAXUBcAH/EAABNAESAc0B/wEjAQAB3wH/
AVQBQAG2Af8IAAE9ARkB4gH/AUQBIgHdAf8BZAFcAYwB/xgAAwEBAgMAAQEBwwHQAdoB/wGQAbABzgH5
AZsBvwHlAf8BbgGdAccB/wFGAVoBbwH/AS4BKgEnAf8DMgFQGAADDgETAVgBdgF+AekBjgG5Ad8B/wHM
AfQC/wGqAdYB/gH/AWgBdgGBAeEEAAGSAbYB1wH5AZ0BxwHyAf8BagGgAdAB/wE8AVMBbAH/ASEBHAEZ
Af8DMgFQCAAB0gHJAb8B/wH0Ae8B6QP/AfYC/wH3Ae0F/wHFAZkBeQH/AY0BFwEAAf8B6wHTAb4B/wGr
AXQBWAH/AV4CAAH/Ab0BiAFkA/8B+AL/AfkB6QH/AfoB8AHhAf8B1gHAAasB/wGEAXcBbwH/DAABMwER
AcwB/wEjAQAB3wH/AVQBQAG2Af8QAAFZAToB5wH/AS8BCAHfAf8BZAFcAYwB/xcAAQEIAAF/AYkBlwH1
AXoBkgGmAf8BZAF3AY4B/wFKAU0BUQH/ATQBMwEyAf8DJAE1GAADAQECAV0BYwFnAcoBZwGnAcIB/wG8
AeMB9AH/AaoB0gH5Af8BZQFwAYEB4wQAAX8BiQGbAfUBeAGTAaoB/wFfAXUBjgH/AUEBRQFJAf8BKAEn
ASYB/wMkATUMAAHjAeIB4AL/Af4B/AP/AfsF/wG9AZgBhQH/AVYCAAH/AeIBxQGyAf8BhQE4ARsB/wFR
AgAB/wHSAbMBnQf/Af0B/wHwAeUB2gH/AbUBpwGZAf8MAAEzAREBzAH/ASMBAAHfAf8BVAFAAbYB/xgA
AVkBOgHnAf8BIwEAAd8B/xsAAQEEAANMAZICbAFqAekBZwFlAWIB/ANZAfIDUQGcAwQBBRwAA0IBdQFy
Ab4B0QH/AVYBoAG1Af8BUwGTAbAB/wFAAXQBigH+BAADTAGSAWwCagHpAWIBYAFdAfwCVwFWAfIDUQGc
AwQBBQwAAdIByQG/Af8C6wHsDf8BxQGaAYQB/wG5AWsBRwH/AZABSAEwAf8BwgGnAZcJ/wH1AfEB7QH/
AdQBxgG4Af8MAAE7ARcB4AH/ASMBAAHfAf8BQAEjAcMB/zgAAwoBDQQAAwoBDQQAAxUBHQMoATwDHgEr
JAADCgEOA1cBqwGCAaMBqwHvAXABoAGqAfMBYQF4AX4B4QNHAYIEAAMVAR0DKAE8Ax4BKxgAAdIByQG/
Af8B7wHtAewB/wH6AfwB/hn/AfUB8AHsAf8B3QHTAckB/xAAATABCgHhAf8BRwEmAeEB/8QAAdIByQG/
Af8B7wHsAegB/wL1AfYB/wH2AfkB+gH/AfgC+QH/AfQB7wHqAf8B7QHoAeIB/wHSAckBvwH/WAABhAKA
Af8BhAKAAf8BhAKAAf8BhAKAAf8UAAGEAoAB/wGEAoAB/wGEAoAB/wGEAoAB/4wAA4UB/wNzAf8DSQH/
Az0B/wM9Af8DVgH/A4UB/yAAAYQCgAH/AbYCpQH/AbYCpQH/AXECXAH/A2oB/wGEAoAB/wwAAYQCgAH/
AbYCpQH/AbYCpQH/AXECXAH/A2oB/wGEAoAB/4QAAa4CowH/AaMClAH/AcECrQH/AcsCsgH/AcECrQH/
AbICkwH/AYcCZgH/AU4CSAH/A2gB/xgAAYQCgAH/AdIBtwG2Af8BwQGjAaEB/wHBAaMBoQH/AboBmQGY
Af8BggJoAf8BhAKAAf8IAAGEAoAB/wHSAbcBtgH/AcEBowGhAf8BwQGjAaEB/wG6AZkBmAH/AYICaAH/
AYQCgAH/BAABYAGiAb0B/wFgAaIBvQH/AWABogG9Af8BYAGiAb0B/wFgAaIBvQH/AWABogG9Af8BYAGe
AbUB/wFXAZoBtQH/AU8BkgGtAf8BTwGOAaUB/wFHAYoBpQH/AUcBggGcAf8BPwF6AZQB/wE/AXoBlAH/
CAABYAGiAb0B/wFgAaIBvQH/AWABogG9Af8BYAGiAb0B/wFgAaIBvQH/AWABogG9Af8BYAGeAbUB/wFX
AZoBtQH/AU8BkgGtAf8BTwGOAaUB/wFHAYoBpQH/AUcBggGcAf8BPwF6AZQB/wE/AXoBlAH/BAAB2gLS
Af8B3gLcAf8D4gH/Ad4C3AH/AdoC0gH/AcsCsgH/Aa0CngH/AbYCjwH/Ab8CjAH/AVkCTwH/GAABhAKA
Af8D7AH/AesC4QH/AdACvQH/AcQCmAH/AakChwH/DAABhAKAAf8D7AH/AesC4QH/AdACvQH/AcQCmAH/
AakChwH/CAABeAGyAc4B/wGMAeMC/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3
Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BVwGaAbUB/wgA
AXgBsgHOAf8BjAHjAv8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3
Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AVcBmgG1Af8EAAHLArIB/wPs
Af8D8QH/A+wB/wHeAtwB/wHWAr8B/wGlAo0B/wGoAocB/wHOAqQB/wGHAmYB/wNuAf8BgQJyAf8DVgH/
A24B/wwAAYQCgAH/AdMBqwGpAf8BzQKUAf8BuAFzAW4B/wFTAk0B/xAAAdIBowGZAf8B0wGrAakB/wHN
ApQB/wG4AXMBbgH/AVcCVgH/CAABeAGyAc4B/wGUAecC/wGEAdMB9wH/AQABWgGEAf8BAAFaAYQB/wEA
AVoBhAH/AQABWgGEAf8BAAFaAYQB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3
Af8BYAGeAb0B/wgAAXgBsgHOAf8BlAHnAv8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGE
AdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AWABngG9
Af8IAAHLArIB/wHwAuIB/wPsAf8B1QLFAf8B1AKyAf8BsgJ1Af8BvAKFAf8BzgKkAf8BkAJtAf8BqQKN
Af8BvgKqAf8BnAKQAf8BXAJSAf8DUAH/A24B/wHSAbcBtgH/Ad0BmwFuAf8B7gGhAT8B/wHnAbABZwH/
Ad0BmwFuAf8BlgFhAWAB/wFXAlYB/wFXAlYB/wFXAlYB/wFXAlYB/wHdAZsBbgH/Ae4BoQE/Af8B5wGw
AWcB/wHdAZsBbgH/AYMCUwH/A3YB/wQAAXgBsgHOAf8BnAHrAv8BhAHTAfcB/wE/AYoBpQH/AVcBogGt
Af8BNgGWAa0B/wEuAZIBpQH/AQABWgGEAf8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGE
AdMB9wH/AWABngG9Af8IAAF4AbIBzgH/AZwB6wL/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3
Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wFg
AZ4BvQH/DAAB1gKrAf8B3AK5Af8BzgKkAf8BygKMAf8BwgJnAf8ByQJ3Af8B1AKyAf8B3ALEAf8B3AK5
Af8BvQKdAf8BrQKeAf8BrgKjAf8BiwGDAXgB/wM9Af8BzgKkAf8B2QG9AZIC/wG+AUYC/wHIAVcC/wHI
AVcB/wHTAYEBYQH/AyAB/wEoAW8BtAH/ASgBbwG0Af8DIAH/AdkBvQGSAv8BvgFGAv8ByAFXAv8ByAFX
Af8B0wGBAWEB/wNqAf8EAAF4AboB1gH/AZwB6wL/AYwB2wL/AYQBzwHnAf8BnAHnAfcB/wGEAdsB7wH/
AXgB1wHvAf8BLgGiAcYB/wGMAdsC/wGEAdcC/wGEAdcC/wGEAdcC/wGEAdMB9wH/AWABngG9Af8IAAF4
AboB1gH/AZwB6wL/AYwB2wL/AYwB2wL/AYwB2wL/AYwB2wL/AYwB2wL/AYwB2wL/AYwB2wL/AYQB1wL/
AYQB1wL/AYQB1wL/AYQB0wH3Af8BYAGeAb0B/wwAAfABowE8Af8B/QG6AU0B/wHwAcABjgH/AckBkwGd
Af8ByQJnAf8BxQJuAf8B3ALEAf8B1gKrAf8BzwKdAf8BvAKTAf8BngJqAf8BpQKBAf8BngGwAZYB/wM9
Af8BzgKkAf8B2AG9AaQC/wHbAYIC/wHiAZMC/wHdAYgB/wHdAZsBbgH/A48B/wE/AbEB6AH/AT8BsQHo
Af8BhAKAAf8B2AG9AaQC/wHbAYIC/wHiAZMC/wHdAYgB/wHdAZsBbgH/A2oB/wQAAYQBvgHWAf8BpQHv
Av8BjAHfAv8BhAHPAecB/wFwAccB3gH/AcYD/wFwAccB3gH/AS4BogHGAf8BjAHfAv8BjAHfAv8BjAHf
Av8BjAHfAv8BhAHbAfcB/wFgAZ4BvQH/CAABhAG+AdYB/wGlAe8C/wGMAd8C/wGMAd8C/wGMAd8C/wGM
Ad8C/wGMAd8C/wGMAd8C/wGMAd8C/wGMAd8C/wGMAd8C/wGMAd8C/wGEAdsB9wH/AWABngG9Af8IAAHc
AsQB/wHzAaoBOgL/AdYBcwL/AdYBcwL/AdYBcwH/AfEBvAFxAf8B1wGXAYcB/wHKAowB/wHWAqsB/wHc
ArkB/wG9Ap0B/wGvAnYB/wGnAnEB/wGeAmgB/wM9Af8BzgKkAf8B2AG9AaQB/wHzAd8BoAL/Ae8BqwL/
AewBpAH/AecBsAFnAf8EAAHNAsIB/wMgAf8BzgKkAf8B2AG9AaQB/wHzAd8BoAL/Ae8BqwL/AewBpAH/
AecBsAFnAf8DlAH/BAABhAHDAd4B/wGtAfMC/wGMAeMC/wGEAc8B5wH/AYwBzwHnAf8BVwG+AdYB/wFP
AbYB1gH/AS4BogHGAf8BjAHfAv8BjAHfAv8BjAHfAv8BjAHfAv8BjAHbAfcB/wFgAZ4BvQH/CAABhAHD
Ad4B/wGtAfMC/wGMAeMC/wGMAd8C/wGMAd8C/wGMAd8C/wGMAd8C/wGMAd8C/wGMAd8C/wGMAd8C/wGM
Ad8C/wGMAd8C/wGMAdsB9wH/AWABngG9Af8IAAHUArIC/wG6ATwC/wHWAXMC/wHWAXMC/wHWAXMC/wHA
AUkC/wG9AUIB/wHzAbIBUgH/AdUBjAF3Af8B3AK5Af8BxgKTAf8BxgKTAf8BzwKdAf8BswKCAf8DPQH/
Ac4CpAH/Ac4CpAH/Ac4CpAH/Ac4CpAH/Ac4CpAH/AdYBogGDAf8EAAHJAbwBuAH/AyAB/wHOAqQB/wHO
AqQB/wHOAqQB/wHOAqQB/wHOAqQB/wHWAaIBgwH/CAABhAHDAd4B/wGtAfMC/wGMAeMC/wE/AYoBpQH/
AT8BigGlAf8BPwGKAaUB/wE/AYoBpQH/AT8BigGlAf8BjAHjAv8BjAHjAv8BjAHjAv8BjAHjAv8BjAHb
AfcB/wFgAZ4BvQH/CAABhAHDAd4B/wGtAfMC/wGMAeMC/wGMAeMC/wGMAeMC/wGMAeMC/wGMAeMC/wGM
AeMC/wGMAeMC/wGMAeMC/wGMAeMC/wGMAeMC/wGMAdsB9wH/AWABngG9Af8IAAHgAb4BqQH/Ad8BrAFZ
Av8B1gFzAv8B1gFzAv8B1gFzAf8B7wG/AWMC/wHJAVkC/wHCAU0B/wHXAZQBeAH/AdwCuQH/AcYCkwH/
Aa8CdgH/Aa8CdgH/AbICdQH/Az0B/xgAA2oB/wG8AbsBuAH/AyAB/wFJAkYB/wNqAf8DagH/FAABhAHD
Ad4B/wG1AfMC/wGUAecC/wGUAecC/wGUAecC/wGUAesC/wGUAesC/wGtAfMC/wGtAfMC/wGtAfMC/wGt
AfMC/wGtAfMC/wGtAfMC/wFgAZ4BvQH/CAABhAHDAd4B/wG1AfMC/wGUAecC/wGUAecC/wGUAecC/wGU
AesC/wGUAesC/wGtAfMC/wGtAfMC/wGtAfMC/wGtAfMC/wGtAfMC/wGtAfMC/wFgAZ4BvQH/BAAB3ALE
Af8B5gHFAaUC/wHPAWYC/wHWAXMC/wHaAYEC/wHWAXMC/wHWAXMC/wHTAW8C/wHNAWEB/wHPApcB/wHc
ArkB/wG8AoUB/wG/AowB/wGvAnYB/wGyAnUB/wM9Af8UAAHSAbcBtgH/Ad0BmwFuAf8B7gGhAT8B/wHn
AbABZwH/Ad0BmwFuAf8BgwJTAf8DdgH/FAABhAHPAecB/wG1AfMC/wGUAecC/wGUAecC/wGUAesC/wGU
AesC/wG1AfMC/wFPAZIBrQH/AWABngG9Af8BaAGqAcYB/wFoAaoBxgH/AWgBqgHGAf8BaAGqAcYB/wF4
AboB1gH/CAABhAHPAecB/wG1AfMC/wGUAecC/wGUAecC/wGUAesC/wGUAesC/wG1AfMC/wFPAZIBrQH/
AWABngG9Af8BaAGqAcYB/wFoAaoBxgH/AWgBqgHGAf8BaAGqAcYB/wF4AboB1gH/BAAB3ALEAf8B6gHK
AZoC/wHYAXgC/wHgAY4C/wHWAXMC/wHWAXMC/wHWAXMC/wHeAYkB/wH7Ac8BcwH/Ac8CnQH/AdwCuQH/
AcYChAH/AbICdQH/AbwChQH/AbgCcQH/Az0B/xQAAc4CpAH/AdkBvQGSAv8BvgFGAv8ByAFXAv8ByAFX
Af8B0wGBAWEB/wNqAf8UAAF4AcMB3gH/AYwB2wH3Af8BtQHzAv8BtQHzAv8BtQHzAv8BtQHzAv8BYAGe
Ab0B/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BhAHTAfcB/wF4AboB1gH/
CAABeAHDAd4B/wGMAdsB9wH/AbUB8wL/AbUB8wL/AbUB8wL/AbUB8wL/AWABngG9Af8BhAHTAfcB/wGE
AdMB9wH/AYQB0wH3Af8BhAHTAfcB/wGEAdMB9wH/AYQB0wH3Af8BeAG6AdYB/wQAAdwCxAH/AfcB1wGS
Av8B4AGOAv8B6gGhAv8B1gFzAv8B1gFzAv8B1gFzAv8B1gFzAf8B7gHEAYQB/wHcArkB/wHuAt0B/wHh
AsQB/wHZApwB/wHJAmcB/wHCAmcB/wNWAf8UAAHOAqQB/wHYAb0BpAL/AdsBggL/AeIBkwL/Ad0BiAH/
Ad0BmwFuAf8DagH/GAABaAGqAcYB/wFoAaoBxgH/AWgBqgHGAf8BaAGqAcYB/wFoAaoBxgH/AXABvgHe
Af8BnAHbAfcK/wGuAXgB/wHOAaIBPwH/AZwB2wH3Af8BeAG6AdYB/wwAAWgBqgHGAf8BaAGqAcYB/wFo
AaoBxgH/AWgBqgHGAf8BaAGqAcYB/wFwAb4B3gH/AZwB2wH3Cv8BrgF4Af8BzgGiAT8B/wGcAdsB9wH/
AXgBugHWAf8EAAHcAsQB/wG8AawBlgH/AdYBwAGVAf8B6AHXAaUC/wHWAXMC/wHWAXMC/wHWAXMC/wHW
AXMB/wHpAcIBigH/AeECxAH/Ae4C3QH/Ae4C3QH/Ae4C3QH/AeoC1wH/AdACmgH/GAABzgKkAf8B2AG9
AaQB/wHzAd8BoAL/Ae8BqwL/AewBpAH/AecBsAFnAf8DlAH/MAABaAG2Ad4B/wFoAbYB3gH/AWgBtgHe
Af8BaAG2Ad4B/wFoAbYB3gH/AWABtgHeAf8oAAFoAbYB3gH/AWgBtgHeAf8BaAG2Ad4B/wFoAbYB3gH/
AWgBtgHeAf8BYAG2Ad4B/wgAAdwCxAH/AdwCxAH/AdwCxAH/AdYCyQH/AcwCuAH/Ac4BuQGvAf8B1gHA
AasB/wHcAb8BmQH/AdABpQGHAf8BxAKlAf8B1AKyAf8B1AKyAf8B1AKyAf8B1AKyAf8cAAHOAqQB/wHO
AqQB/wHOAqQB/wHOAqQB/wHOAqQB/wHWAaIBgwH/oAAB3ALEAf8B3ALEAf8B3ALEAf8B3ALEAf8B3ALE
Af8BwAKZAf8cAAFCAU0BPgcAAT4DAAEoAwABQAMAATADAAEBAQABAQUAAYABARYAA/8BAAL/BgAC/18A
AX8GAAL/BgAC/wYABf8BHwL/AeABDwH+AQAB/gEfAc8B/wHAAQ8BwAEAAfwBHwGHAfMBwAEPAgAB8AEH
AYMB4wHAAQ8CAAHAAQMBwwHHAcABDwIAAYABAQHhAY8B4AEPAgABgAEAAfABHwHAAS8BgAECAgAB+AE/
AcABPwHAAQcCAAH8AT8B0AEfAcABAwIAAfgBHwHAAR8BgAEDAgAB8QGPAcABHwGBAQMCAAHjAccB2AEf
AYEBAwGAAQEBxwHnAegBHwHBAQMBgAEDAY8B/wHUAX8BwAGPAcABBwGfBf8B8AEPAv8BwwHhBP8BwAF/
AYEBwAT/AYABPwEBAoABAQGAAQEBAAE/AQMBgQGAAQEBgAEBAQABAwGDAcEBgAEBAYABAQGAAwABgAEB
AYABAQHAAwABgAEBAYABAQHAAwABgAEBAYABAQGAAQABAgEAAYABAQGAAQEBgAEAAQIBAQGAAQEBgAEB
AYABAAH8AQ8BgAEBAYABAQIAAfgBDwGAAQEBgAEBAgAB+AEPAYABAQGAAQECAAH4AQ8BwAEBAcABAQEA
AQEB+AEPAf8BAwH/AQMBAAEDAfgBHwT/AeABfws=
</value>
</data>
<metadata name="images2.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="images2.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACK
EAAAAk1TRnQBSQFMAgEBBAEAAQwBAAEEAQABEAEAARABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEYBgABGP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/ALoAA/sD7wHeAdsB2AHVAc8ByQHX
AdMBzgHlAeMB4gP2GAAB+QL4AcwBxgHBAbYBrAGhAaoBmQGKAaEBiwF6AaoBmQGKAbYBrAGhAckBxAG/
Ae8B7gHtIQAB+QL4AcwBxAG/AbcBqgGeAawBmAGGAaQBiwF3AawBmAGGAbcBqgGeAckBwwG9Ae8B7gHt
OQAB8gLxAb8BpQGMAdIBkgFKAeoBpAFSAe8BrQFaAe8BrgFYAekBqQFUAckBnQFnAdEByAG9A/0PAAP+
Aa8BoQGVAbEBlQF6AeYBywG0Ad4BtwGQAeMBuwGUAeABugGUAc4BqwGIAbgBmQF8AcABsgGkEgAD/QP4
A/cD+AP7Aa8BnwGRAbYBlgF3AfQB1QG6AeoBvgGRAfABwgGVAe0BwQGVAdgBsAGIAb8BmwF6AcEBsgGi
AwABdQGEAY8BbAF6AYUBYAFtAXcBUQFdAWYBQgFMAVQBMQE6AUEBIwEqATABFgEcASEBDgETARgBDgET
ARgBDgETARgBDgETARgBDgETARgBDgETARgBDgETARgGAAHzAe4B6gHiAZcBTQHnAZgBRAHiAZsBSQHh
AZ8BTgHjAaQBUwHkAacBUgHmAakBTwHvAbcBXQH2Ab0BZQHkAb0BkQP9DAAD/gHGAbkBqQHGAaUBhQHm
AdABvQHiAb0BnAHmAb8BlwHoAcMBnwHbAboBmAHAAZ8BfwG7AasBnQwAA/YBtAG/AboBZgGWAX8BWgGV
AXcBVAGSAXQBagGVAX8BWQGFAWwBrAGRAXEBzwGpAYQB9AHaAcQB7wHEAZ8B9AHHAZkB9gHLAaIB5wHB
AZoByAGiAX0BvQGqAZoDAAF3AYcBkgGiAd8B8AFwAc0B6gFJAbgB4gE3Aa4B2wEtAakB2QEmAaEB0gEh
AZgBxwEgAY4BvAEeAYMBrgEZAX8BqwEVAXwBqQEbAXcBnwEfAXIBlgEWARwBIQMAAfcB8wHvAdsBiAE6
AdUBfAEmAdUBfgEjAdcBggEjAdkBiAEmAdwBkAEuAeABmgE8AeMBoQFFAeMBoQE+AecBrQFRAeoBsgFX
AekBwAGRDAAD/wHPAcoBtwHZAbEBkAHmAdQBwQHzAdIBswHqAcEBmAHtAcwBqgHgAcIBpAHDAaMBggGu
AZwBjAwAA+cBbAHDAZkBZAHAAZEBXAG4AYkBVAGyAYQBoAHBAagBWgGnAX0BrwGgAXEB5QG3AZEB9AHf
AckB/wHdAbkB+AHJAZoB/AHWAa8B7QHKAagBywGnAYEBrwGbAYkDAAF6AYoBlQGqAegB9gGVAeUB/AGE
Ad8B+wF1AdYB+gFqAdAB9wFdAcYB9AFQAb4B8AFBAbQB7AE1AaoB6AErAaQB5gEgAZoB3wEWAZAB1wEb
AXcBnwEgAScBLQP/Ad4BrAF8AdABcgEeAdMBeAEgAdQBewEgAdYBfwEgAdcBgwEfAdkBhQEeAdoBiQEe
Ad0BkQEoAeABmgE0AeEBnAEzAecBrAFQAeQBpAFAAe4B4QHSCQAG/wHwAdABsAHQAcMBsgHIAcMBuwHX
AbcBlwHrAcQBnQHhAb4BmwHOAaYBfwHSAcoBwgwAA/YBcwHKAaABagHCAZYBZQG/AZMBbAHAAZEB0QHj
AcYBZQG1AZABjQGrAXcB/wHSAaUB2gHLAbgB0QHLAcIB4gG+AZkB+QHMAaAB7gHGAZ0B2AGqAX0B0gHJ
AcADAAF9AY4BmAGwAeoB9gGfAekB+wGSAeQB/AGBAd0B+wF1AdYB+gFoAc4B9wFdAcYB9AFNAbwB8AFB
AbQB7AE1AaoB6AEqAaMB5gEdAZYB3AEVAXwBqQEtATQBOwH0Ae8B6QHiAacBcwHTAXkBKwHSAXQBHgHU
AXoBIQHVAX4BIQHXAYEBIQHYAYUBIQHaAYgBIAHbAYoBHwHcAY8BIgHeAZQBKAHgAZoBMgHlAagBSgHi
Aa8BbwP+CQAD/wL1AfQBpAGnAawBGwFLAXwBTwFpAYMBxgGmAYcB1AGxAY4B0QHIAb8D/QwAA/sBgQHP
AagBcwHKAaABaQHEAZUBggHDAagBsgHKAb8BYAGqAYUBTQGoAXcBsgGuAY4BfAGCAYwBCgFBAXoBRgFk
AYIBzwGqAYYB3AG0AY0B0gHHAb0D/QMAAYABkQGcAbYB7QH4AaoB7AH7AZsB6AH7AY8B4wH8AYEB3QH7
AXEB1QH5AWgBzgH3AVsBxQH0AU0BvAHwAT0BsgHsATIBqQHoASQBngHiARABggG0ATsBQwFLAesB1wHB
AeoBvgGdAeEBpAFwAdEBcwEfAdIBdwEeAdQBfAEhAdYBfwEhAdcBggEhAdkBhQEgAdoBiAEgAdsBigEg
AdwBjQEhAdwBjgEhAeIBnwFAAd4BmAE3AfYB8wHvBgAG/wP6Aa0BugHHATABVQF8AScBUQF8AZUBmQGb
AeYB4QHcAwAD/g8AAdMB6AHeAXcBzAGhAWcBvAGRAWABkQGyAVcBgAGlAUEBfgFcAYABsQGWAaABrgGz
ATwBYQGKASIBTQF6ARgBSAF6AY8BlAGWAegB4QHbAwAD/gMAAYMBlQGfAb4B8AH5AasB8AH3AaUB7AH7
AZgB5wH7AYkB4QH8AX8B3QH7AXEB1QH5AWUBzQH3AVgBxAHzAUsBuwHwAT0BsgHsASwBpAHjAQwBigG/
AUkBUwFcAegBywGuAewBxQGpAekBvwGcAeABoQFqAdIBdgEhAdIBdgEcAdUBfAEgAdYBfwEhAdcBggEg
AdgBhQEgAdkBhwEgAdoBiQEgAdoBiQEdAd8BlgE1Ad8BlwE3AfEB6AHeBgAG/gH0AvUBcwGRAa8BTAFz
AZsBRwFsAZMBNQFbAYEC8AHxGAAB6AHxAe0BZwGyAZUBTwF8AagBYAGJAa0BrAHAAb0B8ALyAW0BjgGx
AUMBbwGdAT0BZwGUASgBVAGAAvAB8QwAAYYBmQGjAb4B8AH5AbYB7QH4AbAB7gH6AaQB6wH6AZUB5gH7
AYkB4QH8AX0B3AH8AXEB1QH5AWUBzQH3AVgBxAHzAUkBuQHvATUBqQHnAQwBjwHHAVcBYwFrAegBzgGv
Ae4BzQG2AesBwwGjAekBvwGbAeMBqwF4AdgBiAE8AdMBeAEfAdQBeQEbAdUBfgEeAdcBgQEfAdgBgwEg
AdkBhQEgAdkBhgEeAdwBkQEyAd4BlAE3AfEB6AHcBgAD/gMAAcwB0wHZAXUBmQG8AWoBkAG2AVsBgQGn
AUEBaQGQAbsBwgHJA/4VAAHFAdAB1wE5AWwBiQF1AaEBzAGDAasB2QFfAYQBpgHCAcsB1AFxAZoBwwFl
AZEBvAFUAYABqwE2AWQBkQG6AcEByQP+CQABiQGcAaYBvgHwAfkBtgHtAfgBtgHtAfgBqwHwAfcBogHs
AfoBlQHmAfsBiQHhAfwBfQHcAfwBbwHTAfoBYwHMAfcBVQHDAfMBSQG5Ae8BGQGZAc8BYwFwAXoB6wHY
AcEB8AHUAcEB7QHLAbEB6wHDAaIB6QG+AZoB5wG4AYwB4QGkAWsB3AGRAUgB2AGGATEB1wGBAScB1wGB
ASIB1wGCASEB1wGCAR4B2wGOATMB3AGRATcB9QHwAesGAAP+A/8B2wHhAeUBjwGxAdQBggGoAc4BagGR
AbgBTAFuAZIBMQFBAVED8xIAAfwC/QFlAZgBqgFYAYwBrwGhAcsB+QGWAcMB8QFvAZcBvwHWAd4B4wGP
AbYB3wGBAawB2AFlAZIBvwFDAWoBkwEkATYBSAPzCQABiwGgAagBvgHwAfkBvgHwAfkBvgHwAfkBvgHw
AfkBtAHyAfgBqgHsAfsBoAHpAfsBlQHlAfwBigHfAfwBfwHYAfsBdAHSAfgBaAHKAfQBXQHAAfEBYwFw
AXoB8QHqAeAB8QHUAb4B8QHWAcMB7gHMAbMB6wHDAaMB6QG8AZYB5wG3AYwB5gGxAYEB4wGpAXEB4AGh
AWEB3gGZAVIB3AGUAUYB2wGOATsB3QGWAUkB4QGpAWgB/AL7BgAG/wHDAdAB2gGkAccB6wGbAb8B5QFz
AZ0BxwFLAV8BdAEzAS8BLAPrEgAB+wL8AWwBoQG0AY4BuQHfAcwB9AH/AaoB1gH+AZYBtQHWAwABpwHQ
AfkBnQHHAfIBbwGgAdABQQFYAXEBJgEhAR4D6wkAAY0BoQGqAY0BoQGqAY0BoQGqAY0BoQGqAY0BoQGq
AYsBnwGoAYkBnAGmAYkBmwGmAYcBmgGkAYYBmQGjAYQBlgGgAYQBlgGgAYMBlQGgAYMBlQGgAXUBhAGP
Af0C/AHrAc0BqgH1AeEB1gHyAdgBxAHvAc4BtQHrAcUBpQHpAbwBlgHmAbUBiQHkAa4BfAHiAacBcAHg
AaEBYwHeAZoBVgHdAZYBUAHfAZwBVwHsAdoBwwkAA/8GAAGSAaQBtgF/AZIBpgFpAXwBjgFPAVIBVgE5
ATgBNwPyEgAD/wGbAcQBzwFsAacBwgG8AeMB9AGqAdIB+QGMAasBzgMAAZIBpwG8AX0BkwGqAWQBegGO
AUYBSgFOAS0BLAErA/IJAAGPAaQBrAGyAeQB7AG2Ae0B+AG2Ae0B+AGpAewB9gGSAeEB8wGNAaEBqgHw
AfEB8hgAAfIB6wHhAfMB2QHAAfYB5QHbAfMB2wHJAfAB0gG7Ae0ByQGsAeoBwQGeAegBugGSAeYBtAGH
AeUBrwF+AeQBrQF5AeIBqAF0AeUBuAGCA/wMAAP/AwAB1gHUAdMBkQGPAY0BbwFtAWoBZgFlAWQDxAP+
FQAB5AHtAe8BdwG+AdEBWwGgAbUBWAGTAbABQgF2AZMDAAHWAdUB1AGQAY0BjAFqAWgBZQFfAV4BXQPD
A/4JAAHsAe0B7gGPAaQBrAGPAaQBrAGPAaQBrAGPAaQBrAGPAaQBrAHwAfEB8h4AAe8B4wHRAfMB2wHE
AfcB6AHhAfQB4AHSAfIB2AHDAfAB0QG4Ae4BywGvAewByAGpAewBxgGoAeoBvwGcAecBuwGHAfgB9gHz
DAAD/QMAA/0DAAP5A/AD9RsAA/0B4AHyAfYBqQHhAe4BiAHLAdkBgwG/Ac0B0wHhAeUDAAP5Au8B8AP1
RQAB8wHuAeYB7gHUAbAB9AHdAcgB9QHhAdQB8wHdAc4B8gHXAcUB7wHQAbcB6wHFAZoB6wHVAbQC+gH5
pQAD/gH0AfEB6gHvAeEBzAHtAdoBvQHtAdoBvwHwAeYB1wH5AfcB9Q8AAUIBTQE+BwABPgMAASgDAAFA
AwABIAMAAQEBAAEBBgABARYAA/+BAAb/AfABHwHgAQ8B/gEAAv8B4AEHAcABDwHAAQABgAEAAcABAwHA
AQ8CAAGAAQABgAEDAcABDwIAAYACAAEBAcABDwIAAYADAAHgAQ8CAAGAAwABwAEvAYABAgGAAwABwAE/
AcABBwGAAwAB0AEfAcABAwGAAwABwAEfAYABAwGAAwABwAEfAYEBAwGAAgABAQHYAR8BgQEDAYABfwGA
AQEB6AEfAcEBAwGAAf8BwAEDAdQBfwHAAY8C/wHgAQcG/wHwAR8L
</value>
</data>
</root>

View file

@ -0,0 +1,966 @@
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.IO;
using System.Diagnostics;
using System.Collections;
using System.Collections.Specialized;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Text;
using WebsitePanel.EnterpriseServer;
using WebsitePanel.Providers.HostedSolution;
using WebsitePanel.Providers;
using System.Threading;
using System.DirectoryServices;
namespace WebsitePanel.Import.Enterprise
{
public class OrganizationImporter
{
public const int EXCHANGE_CONTAINER_ERROR = -2790;
private Label lblProcess;
private ProgressBar progressBar;
private ApplicationForm appForm;
private Button btnImport;
private Thread thread;
public OrganizationImporter()
{
}
public void Initialize(string username, ApplicationForm appForm)
{
this.appForm = appForm;
this.lblProcess = appForm.lblMessage;
this.progressBar = appForm.progressBar;
this.btnImport = appForm.btnStart;
try
{
UserInfo info = UserController.GetUser(username);
SecurityContext.SetThreadPrincipal(info);
}
catch (Exception ex)
{
ShowError("Unable to authenticate user", ex);
Cancel();
}
}
public void Start()
{
Log.WriteInfo("Import started");
btnImport.Enabled = false;
appForm.ImportStarted = true;
thread = new Thread(new ThreadStart(this.StartThread));
thread.Start();
}
public void Cancel()
{
Log.WriteInfo("Import canceled");
appForm.ImportStarted = false;
btnImport.Enabled = true;
this.lblProcess.Text = string.Empty;
this.progressBar.Value = 0;
}
public void Abort()
{
Cancel();
AbortThread();
}
private void AbortThread()
{
if (this.thread != null)
{
if (this.thread.IsAlive)
{
this.thread.Abort();
}
this.thread.Join();
}
}
public DialogResult ShowError(string text, Exception ex)
{
Log.WriteError(text, ex);
return MessageBox.Show(appForm, text, appForm.Text, MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
}
/// <summary>
/// Displays process progress.
/// </summary>
public void StartThread()
{
this.progressBar.Value = 0;
try
{
this.lblProcess.Text = "Creating import script...";
appForm.Update();
//default actions
List<ImportAction> actions = GetImportActions();
//process actions
for (int i = 0; i < actions.Count; i++)
{
ImportAction action = actions[i];
this.lblProcess.Text = action.Description;
this.progressBar.Value = i * 100 / actions.Count;
appForm.Update();
switch (action.ActionType)
{
case ActionTypes.ImportOrganization:
ImportOrganization();
break;
case ActionTypes.ImportOrganizationDomain:
ImportDomain(action.Name);
break;
case ActionTypes.ImportMailbox:
ImportMailbox(action.DirectoryEntry);
break;
case ActionTypes.ImportContact:
ImportContact(action.DirectoryEntry);
break;
case ActionTypes.ImportGroup:
ImportGroup(action.DirectoryEntry);
break;
}
}
this.progressBar.Value = 100;
}
catch (Exception ex)
{
if (Utils.IsThreadAbortException(ex))
return;
string message = Global.ErrorMessage;
if ( string.IsNullOrEmpty(message))
message = "An unexpected error has occurred during import.";
ShowError(message, ex);
Cancel();
return;
}
this.lblProcess.Text = string.Empty;
DialogResult dialogResult = DialogResult.No;
if (Global.HasErrors)
{
dialogResult = MessageBox.Show(appForm, "Import completed with errors. Would you like to see import log?", appForm.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
}
else
{
dialogResult = MessageBox.Show(appForm, "Import completed successfully. Would you like to see import log?", appForm.Text, MessageBoxButtons.YesNo, MessageBoxIcon.Information);
}
if (dialogResult == DialogResult.Yes)
{
Log.ShowLogFile();
}
btnImport.Enabled = true;
appForm.ImportStarted = false;
this.progressBar.Value = 0;
}
public static bool IsThreadAbortException(Exception ex)
{
Exception innerException = ex;
while (innerException != null)
{
if (innerException is System.Threading.ThreadAbortException)
return true;
innerException = innerException.InnerException;
}
string str = ex.ToString();
return str.Contains("System.Threading.ThreadAbortException");
}
private List<ImportAction> GetImportActions()
{
List<ImportAction> list = new List<ImportAction>();
ImportAction action = null;
if (Global.ImportAccountsOnly)
{
ServiceProviderItem item = PackageController.GetPackageItemByName(Global.Space.PackageId, ResourceGroups.HostedOrganizations, Global.OrganizationName, typeof(Organization));
if (item == null)
{
Global.ErrorMessage = string.Format("Organization {0} not found.", Global.OrganizationName);
throw new Exception(Global.ErrorMessage);
}
Global.ItemId = item.Id;
}
else
{
action = new ImportAction(ActionTypes.ImportOrganization);
action.Description = "Importing organization...";
list.Add(action);
DirectoryEntry org = Global.OrgDirectoryEntry;
PropertyValueCollection props = org.Properties["uPNSuffixes"];
if (props != null)
{
foreach (string domainName in props)
{
action = new ImportAction(ActionTypes.ImportOrganizationDomain);
action.Description = "Importing organization domains...";
action.Name = domainName;
list.Add(action);
}
}
}
if (Global.SelectedAccounts != null)
{
foreach (DirectoryEntry entry in Global.SelectedAccounts)
{
switch (entry.SchemaClassName)
{
case "user":
action = new ImportAction(ActionTypes.ImportMailbox);
action.Description = "Importing mailbox...";
action.DirectoryEntry = entry;
list.Add(action);
break;
case "contact":
action = new ImportAction(ActionTypes.ImportContact);
action.Description = "Importing contact...";
action.DirectoryEntry = entry;
list.Add(action);
break;
case "group":
action = new ImportAction(ActionTypes.ImportGroup);
action.Description = "Importing group...";
action.DirectoryEntry = entry;
list.Add(action);
break;
}
}
}
return list;
}
private void ImportOrganization()
{
PackageInfo packageInfo = Global.Space;
int serviceId = PackageController.GetPackageServiceId(packageInfo.PackageId, ResourceGroups.HostedOrganizations);
ServiceInfo serviceInfo = ServerController.GetServiceInfo(serviceId);
StringDictionary serviceSettings = ServerController.GetServiceSettingsAdmin(serviceId);
string tempDomain = serviceSettings["TempDomain"];
ServerInfo serverInfo = ServerController.GetServerById(serviceInfo.ServerId);
serviceId = PackageController.GetPackageServiceId(packageInfo.PackageId, ResourceGroups.Exchange);
serviceSettings = ServerController.GetServiceSettingsAdmin(serviceId);
Global.MailboxCluster = serviceSettings["MailboxCluster"];
Global.StorageGroup = serviceSettings["StorageGroup"];
Global.MailboxDatabase = serviceSettings["MailboxDatabase"];
Global.KeepDeletedMailboxesDays = serviceSettings["KeepDeletedMailboxesDays"];
Global.KeepDeletedItemsDays = serviceSettings["KeepDeletedItemsDays"];
int ret = CreateOrganization(Global.Space.PackageId, Global.OrganizationId, Global.OrganizationName);
if (ret > 0)
{
Global.ItemId = ret;
}
else
{
switch (ret)
{
case BusinessErrorCodes.ERROR_USER_ACCOUNT_DEMO:
Global.ErrorMessage = "You cannot import organization in demo account";
break;
case BusinessErrorCodes.ERROR_USER_ACCOUNT_PENDING:
case BusinessErrorCodes.ERROR_USER_ACCOUNT_SUSPENDED:
case BusinessErrorCodes.ERROR_USER_ACCOUNT_CANCELLED:
case BusinessErrorCodes.ERROR_USER_ACCOUNT_SHOULD_BE_ADMINISTRATOR:
Global.ErrorMessage = "User account is disabled or does not have enough permissions";
break;
case BusinessErrorCodes.ERROR_PACKAGE_NOT_FOUND:
Global.ErrorMessage = "Space not found";
break;
case BusinessErrorCodes.ERROR_PACKAGE_CANCELLED:
case BusinessErrorCodes.ERROR_PACKAGE_SUSPENDED:
Global.ErrorMessage = "Space is cancelled or suspended";
break;
case BusinessErrorCodes.ERROR_ORGS_RESOURCE_QUOTA_LIMIT:
Global.ErrorMessage = "Organizations quota limit";
break;
case BusinessErrorCodes.ERROR_DOMAIN_QUOTA_LIMIT:
case BusinessErrorCodes.ERROR_SUBDOMAIN_QUOTA_LIMIT:
Global.ErrorMessage = "Domains quota limit";
break;
case BusinessErrorCodes.ERROR_ORG_ID_EXISTS:
Global.ErrorMessage = "Organization with specified Id already exists";
break;
case BusinessErrorCodes.ERROR_ORGANIZATION_TEMP_DOMAIN_IS_NOT_SPECIFIED:
Global.ErrorMessage = "Organization temp domain name is not specified";
break;
case BusinessErrorCodes.ERROR_DOMAIN_ALREADY_EXISTS:
case BusinessErrorCodes.ERROR_ORGANIZATION_DOMAIN_IS_IN_USE:
Global.ErrorMessage = "Domain already exists or is in use";
break;
}
throw new Exception(string.Format("Unable to create organization. Error code: {0}", ret));
}
}
public static int CreateOrganization(int packageId, string organizationId, string organizationName)
{
int itemId;
int errorCode;
// place log record
Log.WriteStart(string.Format("Importing organization {0}...", organizationName));
if (!CheckQuotas(packageId, out errorCode))
return errorCode;
string addressListsContainer = null;
try
{
addressListsContainer = ADUtils.GetAddressListsContainer();
}
catch (Exception ex)
{
Log.WriteError("Cannot load Exchange 2007 Address Lists Container", ex);
return EXCHANGE_CONTAINER_ERROR;
}
Organization org = PopulateOrganization(packageId, organizationId, addressListsContainer);
// Check if organization exitsts.
if (OrganizationIdentifierExists(organizationId))
return BusinessErrorCodes.ERROR_ORG_ID_EXISTS;
int serviceId = PackageController.GetPackageServiceId(packageId, ResourceGroups.HostedOrganizations);
//create temprory domain name;
string domainName = CreateTemporyDomainName(serviceId, organizationId);
Log.WriteInfo(string.Format("Importing temp domain {0}", domainName));
if (string.IsNullOrEmpty(domainName))
return BusinessErrorCodes.ERROR_ORGANIZATION_TEMP_DOMAIN_IS_NOT_SPECIFIED;
bool domainCreated;
int domainId = CreateDomain(domainName, packageId, out domainCreated);
//create domain
if (domainId < 0)
return domainId;
//add organization to package items
itemId = AddOrganizationToPackageItems(org, serviceId, packageId, organizationName, organizationId, domainName);
// register org ID
DataProvider.AddExchangeOrganization(itemId, organizationId);
// register domain
DataProvider.AddExchangeOrganizationDomain(itemId, domainId, true);
// register organization domain service item
OrganizationDomain orgDomain = new OrganizationDomain();
orgDomain.Name = domainName;
orgDomain.PackageId = packageId;
orgDomain.ServiceId = serviceId;
PackageController.AddPackageItem(orgDomain);
Log.WriteEnd("Organization imported");
return itemId;
}
private static Organization PopulateOrganization(int packageId, string organizationId, string addressListsContainer)
{
Organization org = new Organization();
org.OrganizationId = organizationId;
org.AddressList = string.Format("CN={0} Address List,CN=All Address Lists,{1}", organizationId, addressListsContainer);
org.GlobalAddressList = string.Format("CN={0} Global Address List,CN=All Global Address Lists,{1}", organizationId, addressListsContainer);
org.OfflineAddressBook = string.Format("CN={0} Offline Address Book,CN=Offline Address Lists,{1}", organizationId, addressListsContainer);
org.Database = GetDatabaseName();
org.DistinguishedName = ADUtils.RemoveADPrefix(Global.OrgDirectoryEntry.Path);
org.SecurityGroup = string.Format("CN={0},{1}", organizationId, org.DistinguishedName);
PackageContext cntx = PackageController.GetPackageContext(packageId);
// organization limits
org.IssueWarningKB = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue;
if (org.IssueWarningKB > 0) org.IssueWarningKB *= 1024;
org.ProhibitSendKB = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue;
if (org.ProhibitSendKB > 0) org.ProhibitSendKB *= 1024;
org.ProhibitSendReceiveKB = cntx.Quotas[Quotas.EXCHANGE2007_DISKSPACE].QuotaAllocatedValue;
if (org.ProhibitSendReceiveKB > 0) org.ProhibitSendReceiveKB *= 1024;
PackageSettings settings = PackageController.GetPackageSettings(packageId, PackageSettings.EXCHANGE_SERVER);
org.KeepDeletedItemsDays = Utils.ParseInt(settings["KeepDeletedItemsDays"], 14);
return org;
}
private static string GetDatabaseName()
{
string ret;
if (String.IsNullOrEmpty(Global.MailboxCluster))
{
ret = string.Format("{0}\\{1}", Global.StorageGroup, Global.MailboxDatabase);
}
else
{
ret = string.Format("{0}\\{1}\\{2}", Global.MailboxCluster, Global.StorageGroup, Global.MailboxDatabase);
}
return ret;
}
private static bool CheckQuotas(int packageId, out int errorCode)
{
// check account
errorCode = SecurityContext.CheckAccount(DemandAccount.NotDemo | DemandAccount.IsActive);
if (errorCode < 0) return false;
// check package
errorCode = SecurityContext.CheckPackage(packageId, DemandPackage.IsActive);
if (errorCode < 0) return false;
// check organizations quota
QuotaValueInfo quota = PackageController.GetPackageQuota(packageId, Quotas.ORGANIZATIONS);
if (quota.QuotaExhausted)
{
errorCode = BusinessErrorCodes.ERROR_ORGS_RESOURCE_QUOTA_LIMIT;
return false;
}
// check sub-domains quota (for temporary domain)
quota = PackageController.GetPackageQuota(packageId, Quotas.OS_SUBDOMAINS);
if (quota.QuotaExhausted)
{
errorCode = BusinessErrorCodes.ERROR_SUBDOMAIN_QUOTA_LIMIT;
return false;
}
return true;
}
private static bool OrganizationIdentifierExists(string organizationId)
{
return DataProvider.ExchangeOrganizationExists(organizationId);
}
private static string CreateTemporyDomainName(int serviceId, string organizationId)
{
// load service settings
StringDictionary serviceSettings = ServerController.GetServiceSettingsAdmin(serviceId);
string tempDomain = serviceSettings["TempDomain"];
return String.IsNullOrEmpty(tempDomain) ? null : organizationId + "." + tempDomain;
}
private static int CreateDomain(string domainName, int packageId, out bool domainCreated)
{
// trying to locate (register) temp domain
DomainInfo domain = null;
int domainId = 0;
domainCreated = false;
// check if the domain already exists
int checkResult = ServerController.CheckDomain(domainName);
if (checkResult == BusinessErrorCodes.ERROR_DOMAIN_ALREADY_EXISTS)
{
// domain exists
// check if it belongs to the same space
domain = ServerController.GetDomain(domainName);
if (domain == null)
return checkResult;
if (domain.PackageId != packageId)
return checkResult;
if (DataProvider.ExchangeOrganizationDomainExists(domain.DomainId))
return BusinessErrorCodes.ERROR_ORGANIZATION_DOMAIN_IS_IN_USE;
domainId = domain.DomainId;
}
else if (checkResult < 0)
{
return checkResult;
}
// create domain if required
if (domain == null)
{
domain = CreateNewDomain(packageId, domainName);
// add domain
domainId = ServerController.AddDomain(domain);
if (domainId < 0)
return domainId;
domainCreated = true;
}
return domainId;
}
private static DomainInfo CreateNewDomain(int packageId, string domainName)
{
// new domain
DomainInfo domain = new DomainInfo();
domain.PackageId = packageId;
domain.DomainName = domainName;
domain.IsInstantAlias = true;
domain.IsSubDomain = true;
return domain;
}
private static int AddOrganizationToPackageItems(Organization org, int serviceId, int packageId, string organizationName, string organizationId, string domainName)
{
org.ServiceId = serviceId;
org.PackageId = packageId;
org.Name = organizationName;
org.OrganizationId = organizationId;
org.DefaultDomain = domainName;
int itemId = PackageController.AddPackageItem(org);
return itemId;
}
private void ImportDomain(string domainName)
{
int ret = -1;
try
{
ret = AddOrganizationDomain(Global.ItemId, domainName);
if (ret < 0)
{
Log.WriteError(string.Format("Unable to import domain {0}. Error code: {1}", domainName, ret));
Global.HasErrors = true;
}
}
catch (Exception ex)
{
if (Utils.IsThreadAbortException(ex))
return;
Log.WriteError(string.Format("Unable to import domain {0}. Error code: {1}", domainName, ret), ex);
Global.HasErrors = true;
}
}
private static int AddOrganizationDomain(int itemId, string domainName)
{
Log.WriteStart(string.Format("Importing domain {0}...", domainName));
// load organization
Organization org = (Organization)PackageController.GetPackageItem(itemId);
if (org == null)
return -1;
// check package
int packageCheck = SecurityContext.CheckPackage(org.PackageId, DemandPackage.IsActive);
if (packageCheck < 0) return packageCheck;
DomainInfo domain = null;
// check if the domain already exists
int checkResult = ServerController.CheckDomain(domainName);
if (checkResult == BusinessErrorCodes.ERROR_DOMAIN_ALREADY_EXISTS)
{
// domain exists
// check if it belongs to the same space
domain = ServerController.GetDomain(domainName);
if (domain == null)
return checkResult;
if (domain.PackageId != org.PackageId)
return checkResult;
if (DataProvider.ExchangeOrganizationDomainExists(domain.DomainId))
return BusinessErrorCodes.ERROR_ORGANIZATION_DOMAIN_IS_IN_USE;
}
else if (checkResult == BusinessErrorCodes.ERROR_RESTRICTED_DOMAIN)
{
return checkResult;
}
// create domain if required
if (domain == null)
{
domain = new DomainInfo();
domain.PackageId = org.PackageId;
domain.DomainName = domainName;
domain.IsInstantAlias = false;
domain.IsSubDomain = false;
// add domain
domain.DomainId = ServerController.AddDomain(domain);
}
// register domain
DataProvider.AddExchangeOrganizationDomain(itemId, domain.DomainId, false);
// register service item
OrganizationDomain exchDomain = new OrganizationDomain();
exchDomain.Name = domainName;
exchDomain.PackageId = org.PackageId;
exchDomain.ServiceId = org.ServiceId;
PackageController.AddPackageItem(exchDomain);
Log.WriteEnd("Domain imported");
return 0;
}
private static void ImportMailbox(DirectoryEntry directoryEntry)
{
int ret = -1;
string name = null;
try
{
name = (string)directoryEntry.Properties["name"].Value;
ret = AddMailbox(Global.ItemId, directoryEntry);
if (ret < 0)
{
Log.WriteError(string.Format("Unable to import mailbox {0}. Error code: {1}", name, ret));
Global.HasErrors = true;
}
}
catch (Exception ex)
{
if (Utils.IsThreadAbortException(ex))
return;
Log.WriteError(string.Format("Unable to import mailbox {0}. Error code: {1}", name, ret), ex);
Global.HasErrors = true;
}
}
private static void ImportContact(DirectoryEntry directoryEntry)
{
int ret = -1;
string name = null;
try
{
name = (string)directoryEntry.Properties["name"].Value;
ret = AddContact(Global.ItemId, directoryEntry);
if (ret < 0)
{
Log.WriteError(string.Format("Unable to import contact {0}. Error code: {1}", name, ret));
Global.HasErrors = true;
}
}
catch (Exception ex)
{
if (Utils.IsThreadAbortException(ex))
return;
Log.WriteError(string.Format("Unable to import contact {0}. Error code: {1}", name, ret), ex);
Global.HasErrors = true;
}
}
private static void ImportGroup(DirectoryEntry directoryEntry)
{
int ret = -1;
string name = null;
try
{
name = (string)directoryEntry.Properties["name"].Value;
ret = AddGroup(Global.ItemId, directoryEntry);
if (ret < 0)
{
Log.WriteError(string.Format("Unable to import group {0}. Error code: {1}", name, ret));
Global.HasErrors = true;
}
}
catch (Exception ex)
{
if (Utils.IsThreadAbortException(ex))
return;
Log.WriteError(string.Format("Unable to import group {0}. Error code: {1}", name, ret), ex);
Global.HasErrors = true;
}
}
private static int AddMailbox(int itemId, DirectoryEntry entry)
{
string accountName = (string)entry.Properties["name"].Value;
Log.WriteStart(string.Format("Importing user {0}...", accountName));
Organization org = (Organization)PackageController.GetPackageItem(itemId);
if (org == null)
return -1;
// e-mail
string email = (string)entry.Properties["userPrincipalName"].Value;
if (string.IsNullOrEmpty(email))
throw new Exception("UPN is not specified");
if (EmailAddressExists(email))
return BusinessErrorCodes.ERROR_EXCHANGE_EMAIL_EXISTS;
if (AccountExists(accountName))
throw new Exception(string.Format("Account {0} already exists", accountName));
string displayName = (string)entry.Properties["displayName"].Value;
int userId = AddOrganizationUser(itemId, accountName, displayName, email, string.Empty);
AddAccountEmailAddress(userId, email);
//account type
PropertyValueCollection type = entry.Properties["msExchRecipientDisplayType"];
if (type == null || type.Value == null)
{
Log.WriteInfo("Account type : user");
return userId;
}
int mailboxType = (int)type.Value;
ExchangeAccountType accountType = ExchangeAccountType.Undefined;
switch (mailboxType)
{
case 1073741824:
Log.WriteInfo("Account type : mailbox");
accountType = ExchangeAccountType.Mailbox;
break;
case 7:
Log.WriteInfo("Account type : room");
accountType = ExchangeAccountType.Room;
break;
case 8:
Log.WriteInfo("Account type : equipment");
accountType = ExchangeAccountType.Equipment;
break;
default:
Log.WriteInfo("Account type : unknown");
return userId;
}
UpdateExchangeAccount(userId, accountName, accountType, displayName, email, false, string.Empty, string.Empty, string.Empty);
string defaultEmail = (string)entry.Properties["extensionAttribute3"].Value;
PropertyValueCollection emails = entry.Properties["proxyAddresses"];
if (emails != null)
{
foreach (string mail in emails)
{
string emailAddress = mail;
if (emailAddress.ToLower().StartsWith("smtp:"))
emailAddress = emailAddress.Substring(5);
if (!emailAddress.Equals(defaultEmail, StringComparison.InvariantCultureIgnoreCase))
{
if (EmailAddressExists(emailAddress))
{
Log.WriteInfo(string.Format("Email address {0} already exists. Skipped", emailAddress));
continue;
}
// register email address
Log.WriteInfo(string.Format("Importing email {0}", emailAddress));
AddAccountEmailAddress(userId, emailAddress);
}
}
}
Log.WriteEnd("User imported");
return userId;
}
private static int AddContact(int itemId, DirectoryEntry entry)
{
string accountName = (string)entry.Properties["name"].Value;
Log.WriteStart(string.Format("Importing contact {0}...", accountName));
Organization org = (Organization)PackageController.GetPackageItem(itemId);
if (org == null)
return -1;
if (AccountExists(accountName))
throw new Exception(string.Format("Account {0} already exists", accountName));
string displayName = (string)entry.Properties["displayName"].Value;
string email = (string)entry.Properties["targetAddress"].Value;
if (email != null && email.ToLower().StartsWith("smtp:"))
email = email.Substring(5);
int accountId = AddAccount(itemId, ExchangeAccountType.Contact, accountName, displayName, email, false, 0, string.Empty, null);
Log.WriteEnd("Contact imported");
return accountId;
}
private static int AddGroup(int itemId, DirectoryEntry entry)
{
string accountName = (string)entry.Properties["name"].Value;
Log.WriteStart(string.Format("Importing group {0}...", accountName));
Organization org = (Organization)PackageController.GetPackageItem(itemId);
if (org == null)
return -1;
if (AccountExists(accountName))
throw new Exception(string.Format("Account {0} already exists", accountName));
string displayName = (string)entry.Properties["displayName"].Value;
string email = null;
PropertyValueCollection proxyAddresses = entry.Properties["proxyAddresses"];
if (proxyAddresses != null)
{
foreach (string address in proxyAddresses)
{
if (address != null && address.StartsWith("SMTP:"))
{
email = address.Substring(5);
break;
}
}
}
if (string.IsNullOrEmpty(email))
throw new Exception("Email is not specified");
if (EmailAddressExists(email))
return BusinessErrorCodes.ERROR_EXCHANGE_EMAIL_EXISTS;
int accountId = AddAccount(itemId, ExchangeAccountType.DistributionList, accountName, displayName, email, false, 0, string.Empty, null);
AddAccountEmailAddress(accountId, email);
string defaultEmail = (string)entry.Properties["extensionAttribute3"].Value;
PropertyValueCollection emails = entry.Properties["proxyAddresses"];
if (emails != null)
{
foreach (string mail in emails)
{
string emailAddress = mail;
if (emailAddress.ToLower().StartsWith("smtp:"))
emailAddress = emailAddress.Substring(5);
if (!emailAddress.Equals(defaultEmail, StringComparison.InvariantCultureIgnoreCase))
{
if (EmailAddressExists(emailAddress))
{
Log.WriteInfo(string.Format("Email address {0} already exists. Skipped", emailAddress));
continue;
}
// register email address
Log.WriteInfo(string.Format("Importing email {0}", emailAddress));
AddAccountEmailAddress(accountId, emailAddress);
}
}
}
Log.WriteEnd("Group imported");
return accountId;
}
private static bool EmailAddressExists(string emailAddress)
{
return DataProvider.ExchangeAccountEmailAddressExists(emailAddress);
}
private static bool AccountExists(string accountName)
{
return DataProvider.ExchangeAccountExists(accountName);
}
private static int AddAccount(int itemId, ExchangeAccountType accountType,
string accountName, string displayName, string primaryEmailAddress, bool mailEnabledPublicFolder,
MailboxManagerActions mailboxManagerActions, string samAccountName, string accountPassword)
{
return DataProvider.AddExchangeAccount(itemId, (int)accountType,
accountName, displayName, primaryEmailAddress, mailEnabledPublicFolder,
mailboxManagerActions.ToString(), samAccountName, CryptoUtils.Encrypt(accountPassword));
}
private static int AddOrganizationUser(int itemId, string accountName, string displayName, string email, string accountPassword)
{
return DataProvider.AddExchangeAccount(itemId, (int)ExchangeAccountType.User, accountName, displayName, email, false, string.Empty,
string.Empty, CryptoUtils.Encrypt(accountPassword));
}
private static void AddAccountEmailAddress(int accountId, string emailAddress)
{
DataProvider.AddExchangeAccountEmailAddress(accountId, emailAddress);
}
private static void UpdateExchangeAccount(int accountId, string accountName, ExchangeAccountType accountType,
string displayName, string primaryEmailAddress, bool mailEnabledPublicFolder,
string mailboxManagerActions, string samAccountName, string accountPassword)
{
DataProvider.UpdateExchangeAccount(accountId,
accountName,
accountType,
displayName,
primaryEmailAddress,
mailEnabledPublicFolder,
mailboxManagerActions,
samAccountName,
CryptoUtils.Encrypt(accountPassword));
}
}
}

View file

@ -0,0 +1,115 @@
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;
namespace WebsitePanel.Import.Enterprise
{
static class Program
{
private static ApplicationForm appForm;
private delegate void ExceptionDelegate(Exception ex);
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
Log.WriteApplicationStart();
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.ApplicationExit += new EventHandler(OnApplicationExit);
appForm = new ApplicationForm();
Application.ThreadException += new ThreadExceptionEventHandler(OnThreadException);
AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(OnApplicationException);
ConnectForm connectForm = new ConnectForm();
if (connectForm.ShowDialog() == DialogResult.OK)
{
appForm.InitializeForm(connectForm.Username, connectForm.Password);
Application.Run(appForm);
}
}
/// <summary>
/// Writes to log on application exit
/// </summary>
private static void OnApplicationExit(object sender, EventArgs e)
{
Log.WriteApplicationEnd();
}
/// <summary>
/// Thread exception handler
/// </summary>
private static void OnThreadException(object sender, ThreadExceptionEventArgs e)
{
Exception ex = e.Exception;
PublishOnMainThread(ex);
}
/// <summary>
/// Application domain exception handler
/// </summary>
private static void OnApplicationException(object sender, UnhandledExceptionEventArgs e)
{
Exception ex = e.ExceptionObject as Exception;
PublishOnMainThread(ex);
}
private static void PublishOnMainThread(Exception exception)
{
if (appForm.InvokeRequired)
{
appForm.Invoke(new ExceptionDelegate(HandleException), new object[] { exception });
}
else
{
HandleException(exception);
}
}
private static void HandleException(Exception exception)
{
Log.WriteError("Fatal error occured.", exception);
string message = "A fatal error has occurred. We apologize for this inconvenience.\n" +
"Please contact Technical Support at support@websitepanel.net.\n\n" +
"Make sure you include a copy of the log file from the \n" +
"application home directory.";
MessageBox.Show(message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
Application.Exit();
Environment.Exit(0);
}
}
}

View file

@ -0,0 +1,248 @@
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Windows.Forms;
using System.Threading;
namespace WebsitePanel.Import.Enterprise
{
/// <summary>
/// Animated Icon.
/// </summary>
[ToolboxItem(true)]
public class ProgressIcon : System.Windows.Forms.UserControl
{
private Thread thread = null;
private int currentFrame = 0;
private int delayInterval = 50;
private int pause = 0;
private int loopCount = 0;
private int currentLoop = 0;
private int firstFrame = 0;
private int lastFrame = 13;
private ImageList images;
private IContainer components;
/// <summary>Initializes a new instance of the <b>AnimatedIcon</b> class.
/// </summary>
public ProgressIcon()
{
CheckForIllegalCrossThreadCalls = false;
InitializeComponent();
this.SetStyle(ControlStyles.UserPaint, true);
this.SetStyle(ControlStyles.AllPaintingInWmPaint, true);
this.SetStyle(ControlStyles.DoubleBuffer, true);
this.SetStyle(ControlStyles.ResizeRedraw, true);
}
#region Dispose
/// <summary>Clean up any resources being used.</summary>
/// <param name="disposing"><see langword="true"/> to release both managed
/// and unmanaged resources; <see langword="false"/> to release
/// only unmanaged resources.</param>
protected override void Dispose( bool disposing )
{
if( disposing )
{
if( components != null )
components.Dispose();
if( thread != null )
thread.Abort();
}
base.Dispose( disposing );
}
#endregion
#region Component Designer generated code
/// <summary>Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(ProgressIcon));
this.images = new System.Windows.Forms.ImageList(this.components);
this.SuspendLayout();
//
// images
//
this.images.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("images.ImageStream")));
this.images.TransparentColor = System.Drawing.Color.Transparent;
this.images.Images.SetKeyName(0, "ProgressImage00.bmp");
this.images.Images.SetKeyName(1, "ProgressImage01.bmp");
this.images.Images.SetKeyName(2, "ProgressImage02.bmp");
this.images.Images.SetKeyName(3, "ProgressImage03.bmp");
this.images.Images.SetKeyName(4, "ProgressImage04.bmp");
this.images.Images.SetKeyName(5, "ProgressImage05.bmp");
this.images.Images.SetKeyName(6, "ProgressImage06.bmp");
this.images.Images.SetKeyName(7, "ProgressImage07.bmp");
this.images.Images.SetKeyName(8, "ProgressImage08.bmp");
this.images.Images.SetKeyName(9, "ProgressImage09.bmp");
this.images.Images.SetKeyName(10, "ProgressImage10.bmp");
this.images.Images.SetKeyName(11, "ProgressImage11.bmp");
this.images.Images.SetKeyName(12, "ProgressImage12.bmp");
//
// ProgressIcon
//
this.Name = "ProgressIcon";
this.Size = new System.Drawing.Size(30, 30);
this.ResumeLayout(false);
}
#endregion
/// <summary>Starts animation from the beginning.
/// </summary>
public void StartAnimation()
{
StopAnimation();
CheckRange(); // Check the first and the last frames
thread = new Thread( new ThreadStart( threadFunc ) );
thread.IsBackground = true;
thread.Start();
}
/// <summary>Stops animation not changing current frame number.
/// </summary>
public void StopAnimation()
{
if( thread != null )
{
thread.Abort();
thread = null;
}
currentLoop = 0;
}
/// <summary>Displays the specified frame.</summary>
/// <param name="frame">An index of the image stored in the <see cref="ImageList"/>.</param>
public void ShowFrame2(int frame)
{
StopAnimation();
if( frame >= 0 && frame < images.Images.Count )
currentFrame = frame;
else
currentFrame = 0;
Refresh();
}
/// <summary>Occurs when the control is redrawn.</summary>
/// <param name="e">A <see cref="PaintEventArgs"/> that contains
/// the event data.</param>
/// <remarks>The <b>OnPaint</b> method draws current image from
/// the <see cref="ImageList"/> if exists.</remarks>
protected override void OnPaint(PaintEventArgs e)
{
// Draw a crossed rectangle if there is no frame to display
if( images == null ||
currentFrame < 0 ||
currentFrame >= images.Images.Count )
{
if( this.Size.Width == 0 || this.Size.Height == 0 )
return;
Pen pen = new Pen( SystemColors.ControlText );
e.Graphics.DrawRectangle( pen, 0, 0, this.Size.Width-1, this.Size.Height-1 );
e.Graphics.DrawLine( pen, 0, 0, this.Size.Width, this.Size.Height );
e.Graphics.DrawLine( pen, 0, this.Size.Height-1, this.Size.Width-1, 0 );
pen.Dispose();
}
else
{
// Draw the current frame
e.Graphics.DrawImage( images.Images[currentFrame], 0, 0, this.Size.Width, this.Size.Height );
}
}
/// <summary>The method to be invoked when the thread begins executing.
/// </summary>
private void threadFunc()
{
bool wasPause = false;
currentFrame = firstFrame;
while( thread != null && thread.IsAlive )
{
Refresh(); // Redraw the current frame
wasPause = false;
if( images != null )
{
currentFrame++;
if( currentFrame > lastFrame ||
currentFrame >= images.Images.Count )
{
if( pause > 0 ) // Sleep after every loop
{
Thread.Sleep( pause );
wasPause = true;
}
currentFrame = firstFrame;
if( loopCount != 0 ) // 0 is infinitive loop
{
currentLoop++;
}
}
if( loopCount != 0 && currentLoop >= loopCount )
{
StopAnimation(); // The loop is completed
}
}
if( !wasPause ) // That prevents summation (pause + delayInterval)
Thread.Sleep( delayInterval );
}
}
/// <summary>Check if the last frame is no less than the first one.
/// Otherwise, swap them.</summary>
private void CheckRange()
{
if( lastFrame < firstFrame )
{
int tmp = firstFrame;
firstFrame = lastFrame;
lastFrame = tmp;
}
}
}
}

View file

@ -0,0 +1,855 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="images.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="images.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADc
qQAAAk1TRnQBSQFMAgEBDQEAAQ4BAAEEAQABHgEAAR4BAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAF4
AwABeAMAAQEBAAEgBgAB4RIAIP8D/gH/A/4B/wP5Af8D8QH/A+kB/wPiAf8D7AH/A/EB/wPiAf8D4gH/
A+wB/wP5Af8D/gH/A/4h//8AaQAY/wP+Af8D/gH/AfUB9AH1Af8D4gH/A9kB/wPZAf8D2QH/A9YB/wPp
Af8D7AH/A9YB/wPZAf8D2QH/A9kB/wPiAf8D8QH/A/4B/wP+Gf//AGkAFP8D/gH/AfUB9AH1Af8B9QH0
AfUB/wPsAf8D1gH/A9kB/wPZAf8D2QH/A9kB/wPpAf8D7AH/A9kB/wPZAf8D2QH/A9kB/wPWAf8D4gH/
AfUB9AH1Af8B9QH0AfUB/wP+Ff//AGkAEP8D/gH/A/EB/wPZAf8D3AH/A/kB/wPiAf8D2QH/A9kB/wPZ
Af8D2QH/A+kB/wPsAf8D2QH/A9kB/wPZAf8D2QH/A9wB/wH1AfQB9QH/A+IB/wPZAf8D7AH/A/4R//8A
aQAM/wP+Af8D7AH/A9kB/wPZAf8D2QH/A+wB/wPxAf8D2QH/A9kB/wPZAf8D1gH/A+kB/wPsAf8D1gH/
A9kB/wPZAf8D2QH/A+wB/wPxAf8D2QH/A9kB/wPZAf8D6QH/A/4N//8AaQAI/wP+Af8D8QH/A9kB/wPZ
Af8D2QH/A9kB/wPZAf8B9QH0AfUB/wPiAf8D1gH/A9wB/wPiAf8D8QH/AfUB9AH1Af8D4gH/A9wB/wPZ
Af8D3AH/A/kB/wPcAf8D2QH/A9kB/wPZAf8D2QH/A+wB/wP+Cf//AGkABP8D/gH/A/kB/wPZAf8D2QH/
A9kB/wPZAf8D2QH/A9kB/wPiAf8D+QH/A/EB/wP+Af8D/gH/A/4B/wP+Af8D/gH/A/4B/wPxAf8B9QH0
AfUB/wPpAf8D1gH/A9kB/wPZAf8D2QH/A9kB/wPZAf8B9QH0AfUB/wP+Bf//AGkABP8D/gH/A/kB/wPp
Af8D2QH/A9kB/wPZAf8D2QH/A9kB/wPsAf8D/gH/A/4Z/wP+Af8D/gH/A+wB/wPZAf8D2QH/A9kB/wPZ
Af8D2QH/A+IB/wP5Af8D/gX//wBpAAP+Af8D8QH/A+IB/wH1AfQB9QH/AfUB9AH1Af8D4gH/A9kB/wPZ
Af8D8QH/A/4p/wP+Af8D8QH/A9kB/wPZAf8D4gH/AfUB9AH1Af8B9QH0AfUB/wPiAf8D8QH/A/4B//8A
aQAD/gH/A+IB/wPWAf8D2QH/A+IB/wH1AfQB9QH/A/EB/wPsAf8D/jH/A/4B/wPsAf8D8QH/A/kB/wPp
Af8D2QH/A9YB/wPiAf8D/gH//wBpAAP5Af8D3AH/A9kB/wPZAf8D2QH/A9kB/wPsAf8D/jn/A/4B/wPx
Af8D3AH/A9kB/wPZAf8D2QH/A9kB/wP5Af//AGkAA/EB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A+wB/wP+
Of8D/gH/A+wB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A+wB//8AaQAD6QH/A9kB/wPZAf8D2QH/A9kB/wPZ
Af8D+UH/A/kB/wPcAf8D2QH/A9kB/wPZAf8D2QH/A+IB//8AaQAD4gH/A9kB/wPZAf8D2QH/A9kB/wPi
Af8D/kH/A/4B/wPiAf8D2QH/A9kB/wPZAf8D2QH/A+IB//8AaQAB9QH0AfUB/wPxAf8D8QH/A/EB/wPx
Af8B9QH0AfUB/wP+Qf8D/gH/AfUB9AH1Af8D8QH/A/EB/wPxAf8D8QH/AfUB9AH1Af//AGkAA+kB/wPi
Af8D4gH/A+IB/wPiAf8D7AH/A/5B/wP+Af8D7AH/A+IB/wPiAf8D4gH/A+IB/wPpAf//AGkAA+IB/wPW
Af8D2QH/A9kB/wPWAf8D3AH/A/5B/wP+Af8D4gH/A9YB/wPZAf8D2QH/A9YB/wPiAf//AGkAA+kB/wPZ
Af8D2QH/A9kB/wPZAf8D2QH/A/lB/wP5Af8D3AH/A9kB/wPZAf8D2QH/A9kB/wPiAf//AGkAA/EB/wPZ
Af8D2QH/A9kB/wPZAf8D1gH/A+wB/wP+Of8D/gH/A+wB/wPWAf8D2QH/A9kB/wPZAf8D2QH/A+wB//8A
aQAD+QH/A9wB/wPZAf8D2QH/A9kB/wHoAeQB6AH/AfUB9AH1Af8B+QH8Afk5/wP+Af8D+QH/A+kB/wPZ
Af8D2QH/A9kB/wPZAf8D+QH//wBpAAP+Af8D4gH/A9YB/wHhAd4B4QH/AfgB8gH3Af8B6gH4AesB/wF8
Ad4BgQH/AYUB2gGKAf8D/jH/A/4B/wPpAf8D4gH/AfUB9AH1Af8B9QH0AfUB/wPiAf8D1gH/A+IB/wP+
Af//AGkAA/4B/wH1AfQB9QH/AfAB6wHvAf8B8AH5AfEB/wG8AfsBwQH/AYkB+gGRAf8BagHoAXQB/wE1
AcUBPgH/AZsB4gGgAf8D/in/A/4B/wPxAf8D2QH/A9kB/wPZAf8D6QH/A/kB/wPxAf8B9QH0AfUB/wP+
Af//AGkABP8D/gH/AeAB+AHiAf8BkgH7AZkB/wGDAfkBjAH/AYMB+QGMAf8BiQH6AZEB/wFqAegBdAH/
ATUBxQE+Af8BjwHdAZQB/wP+Af8D/hn/A/4B/wP+Af8D7AH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/
A/EB/wP+Bf//AGkABP8D/gH/AeoB+AHrAf8BkgH7AZkB/wGDAfkBjAH/AYkB+gGRAf8BiQH6AZEB/wGJ
AfoBkQH/AWoB6AF0Af8BoQHqAaYB/wGqAdIBqwH/AYIBvQGDAf8B2wHsAdsB/wH5AfwB+QH/A/4B/wP+
Af8D/gH/A/kB/wPsAf8D7AH/A/EB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wP5Af8D/gX//wBpAAj/
A/4B/wHYAfoB2wH/AYkB+gGRAf8BiQH6AZEB/wGJAfoBkQH/AYMB+QGMAf8BmgH5AaEB/wHmAfsB6AH/
AUIBogFEAf8BDwGGAREB/wEhAYwBIwH/ATQBlQE2Af8BkgHJAZMB/wH4AfIB+AH/A9wB/wPZAf8D2QH/
A9kB/wP5Af8D4gH/A9kB/wPZAf8D2QH/A9kB/wPxAf8D/gn//wBpAAz/A/4B/wHRAfoB1AH/AYkB+gGR
Af8BgwH5AYwB/wGDAfkBjAH/AdgB+gHbAf8BmQHLAZkB/wEyAaMBNAH/ATsBqQE9Af8BMgGjATQB/wEc
AZABHgH/AXwBwgF9Af8B9AHwAfQB/wPWAf8D2QH/A9kB/wPZAf8D4gH/AfUB9AH1Af8D2QH/A9kB/wPZ
Af8D7AH/A/4N//8AaQAQ/wP+Af8B2AH6AdsB/wGSAfsBmQH/AaoB/AGxAf8B0gHqAdIB/wFDAasBRQH/
ATsBqQE9Af8BOwGpAT0B/wE7AakBPQH/ATIBowE0Af8BiQHIAYoB/wH0AfAB9AH/A9kB/wPZAf8D2QH/
A9kB/wPZAf8D8QH/A+kB/wPZAf8D8QH/A/4R//8AaQAU/wP+Af8B6gH4AesB/wHqAfgB6wH/AXwBwgF9
Af8BKQGgASwB/wE7AakBPQH/ATsBqQE9Af8BOwGpAT0B/wEuAaIBMgH/AYkByAGKAf8B9AHwAfQB/wPZ
Af8D2QH/A9kB/wPZAf8D1gH/A+IB/wP5Af8D+QH/A/4V//8AaQAY/wP+Af8D/gH/Ac4B6wHQAf8BhAHI
AYYB/wFLAbABTQH/ATgBqAE6Af8BLgGiATIB/wEnAaABKQH/AYQByAGGAf8B8QHsAfEB/wPWAf8D1gH/
A9kB/wPcAf8D4gH/AfUB9AH1Af8D/gH/A/4Z//8AaQAg/wP+Af8D/gH/AeoB+AHrAf8BuQHgAboB/wGS
AdABkwH/AW0BwAFvAf8BpAHYAaUB/wH0AfAB9AH/A+IB/wPpAf8D8QH/A/kB/wP+Af8D/iH//wBpACD/
A/4B/wP+Af8B2wHsAdsB/wGgAdEBoQH/AXIBvAF0Af8BSQGlAUwB/wGZAcsBmQH/AaoB0gGrAf8BQgGi
AUQB/wFqAbQBawH/AZkBywGZAf8B2wHsAdsB/wP+Af8D/kH/A/4B/wP+Af8B3AHwAd0B/wGgAdEBoQH/
AXIBvAF0Af8BSQGlAUwB/wGZAcsBmQH/AaoB0gGrAf8BQgGiAUQB/wFqAbQBawH/AZkBywGZAf8B2wHs
AdsB/wP+Af8D/kH/A/4B/wP+Af8B4AH4AeIB/wG0AewBuAH/AZAB5gGWAf8BbAHbAXQB/wGkAesBqQH/
AfQB8AH0Af8D4gH/A+IB/wPsAf8D+QH/A/4B/wP+Qf8D/gH/A/4B/wP5Af8D8QH/A+kB/wPiAf8D7AH/
A/EB/wPiAf8D4gH/A+wB/wP5Af8D/gH/A/45/wP+Af8D/gH/Ab8B4AHAAf8BYQGxAWIB/wEqAZoBLQH/
ARwBkAEeAf8BFwGMARkB/wEQAYgBEQH/AYUBwgGGAf8BkgHJAZMB/wEKAYMBDAH/ARMBiAEVAf8BEwGI
ARUB/wEiAZIBJAH/AVkBrAFbAf8BswHbAbQB/wP+Af8D/jH/A/4B/wP+Af8BvwHgAcAB/wFhAbEBYgH/
ASoBmgEtAf8BHAGQAR4B/wEXAYwBGQH/ARABiAERAf8BhQHCAYYB/wGSAckBkwH/AQoBgwEMAf8BEwGI
ARUB/wETAYgBFQH/ASIBkgEkAf8BWQGsAVsB/wGzAdsBtAH/A/4B/wP+Mf8D/gH/A/4B/wHNAfMB0AH/
AYMB4QGJAf8BWgHdAWMB/wFLAdkBVAH/AUkB0gFSAf8BQgHQAUsB/wGVAeoBmwH/AfEB7AHxAf8D1gH/
A9kB/wPZAf8D2QH/A+IB/wPxAf8D/gH/A/4x/wP+Af8D/gH/AfUB9AH1Af8D4gH/A9kB/wPZAf8D2QH/
A9YB/wPpAf8D7AH/A9YB/wPZAf8D2QH/A9kB/wPiAf8D8QH/A/4B/wP+Lf8D/gH/AckB4gHJAf8BuQHg
AboB/wGSAckBkwH/ARMBiAEVAf8BIgGSASQB/wEiAZIBJAH/ASIBkgEkAf8BFwGMARkB/wGJAcIBigH/
AZkBywGZAf8BEwGIARUB/wEiAZIBJAH/ASIBkgEkAf8BGgGMARwB/wEKAYMBDAH/AWoBtAFrAf8ByQHi
AckB/wHBAeIBwgH/A/4p/wP+Af8ByQHiAckB/wG/AeABwAH/AZIByQGTAf8BEwGIARUB/wEiAZIBJAH/
ASIBkgEkAf8BIgGSASQB/wEXAYwBGQH/AYkBwgGKAf8BmQHLAZkB/wETAYgBFQH/ASIBkgEkAf8BIgGS
ASQB/wEaAYwBHAH/AQoBgwEMAf8BagG0AWsB/wHWAfQB2AH/AdAB8wHTAf8D/in/A/4B/wHJAeIByQH/
AbgB3QG5Af8BrQHyAbIB/wFLAdkBVAH/AVUB2wFeAf8BVQHbAV4B/wFVAdsBXgH/AUkB0gFSAf8BmAHq
AZ0B/wHxAewB8QH/A9kB/wPZAf8D2QH/A9kB/wPWAf8D4gH/AfUB9AH1Af8B9QH0AfUB/wP+Kf8D/gH/
AfUB9AH1Af8B9QH0AfUB/wPsAf8D1gH/A9kB/wPZAf8D2QH/A9kB/wPpAf8D7AH/A9kB/wPZAf8D2QH/
A9kB/wPWAf8D4gH/AfUB9AH1Af8B9QH0AfUB/wP+Jf8D/gH/AasB2AGsAf8BLgGcATEB/wE5AaEBOwH/
AdcB6gHYAf8BTwGqAVEB/wEiAZIBJAH/AScBlgEpAf8BIgGSASQB/wEXAYwBGQH/AYkBwgGKAf8BmQHL
AZkB/wETAYgBFQH/ASIBkgEkAf8BIgGSASQB/wEaAYwBHAH/ASwBlQEuAf8B0AHnAdAB/wFJAaUBTAH/
ARoBjAEcAf8BmQHLAZkB/wP+If8D/gH/AasB2AGsAf8BLgGcATEB/wE5AaEBOwH/AdcB6gHYAf8BTwGq
AVEB/wEiAZIBJAH/AScBlgEpAf8BIgGSASQB/wEXAYwBGQH/AYkBwgGKAf8BmQHLAZkB/wETAYgBFQH/
ASIBkgEkAf8BIgGSASQB/wEaAYwBHAH/ASwBlQEuAf8B0gHqAdIB/wFsAdsBdAH/AUIBywFKAf8BrAHq
AbAB/wP+If8D/gH/AasB2AGsAf8BLgGcATEB/wE5AaEBOwH/AdwB8AHdAf8BfAHnAYMB/wFVAdsBXgH/
AVoB3QFjAf8BVQHbAV4B/wFJAdIBUgH/AZUB6gGbAf8B8QHsAfEB/wPZAf8D2QH/A9kB/wPZAf8D3AH/
AfUB9AH1Af8D4gH/A9kB/wPsAf8D/iH/A/4B/wPxAf8D2QH/A9wB/wP5Af8D4gH/A9kB/wPZAf8D2QH/
A9kB/wPpAf8D7AH/A9kB/wPZAf8D2QH/A9kB/wPcAf8B9QH0AfUB/wPiAf8D2QH/A+wB/wP+Hf8D/gH/
AZoB0gGbAf8BIwGZASYB/wEmAZgBKQH/AR8BkgEhAf8BkgHJAZMB/wG5AeABugH/ASIBkgEkAf8BJgGY
ASkB/wEmAZgBKQH/ARwBkAEeAf8BiQHIAYoB/wGaAdIBmwH/ARwBkAEeAf8BJgGYASkB/wEiAZIBJAH/
ARMBiAEVAf8BlgHJAZgB/wGqAdIBqwH/ARMBiAEVAf8BGgGMARwB/wETAYgBFQH/AYcBwgGIAf8D/hn/
A/4B/wGaAdIBmwH/ASMBmQEmAf8BJgGYASkB/wEfAZIBIQH/AZIByQGTAf8BuAHdAbkB/wEiAZIBJAH/
ASIBkgEkAf8BJgGYASkB/wEcAZABHgH/AYkByAGKAf8BmgHSAZsB/wEcAZABHgH/ASYBmAEpAf8BIgGS
ASQB/wETAYgBFQH/AZABxQGRAf8BvAHxAcAB/wFCAdABSwH/AUIBywFKAf8BPAHLAUUB/wGbAeIBoAH/
A/4Z/wP+Af8BmgHSAZsB/wEjAZkBJgH/ASYBmAEpAf8BHwGSASEB/wGJAcIBigH/Ac4B+gHRAf8BVQHb
AV4B/wFaAd0BYwH/AVoB4AFjAf8BWgHgAWMB/wGlAfIBqgH/AfEB7AHxAf8D1gH/A9kB/wPZAf8D2QH/
A+wB/wPxAf8D2QH/A9kB/wPZAf8D6QH/A/4Z/wP+Af8D7AH/A9kB/wPZAf8D2QH/A+wB/wPxAf8D2QH/
A9kB/wPZAf8D1gH/A+kB/wPsAf8D1gH/A9kB/wPZAf8D2QH/A+wB/wPxAf8D2QH/A9kB/wPZAf8D6QH/
A/4V/wP+Af8BqwHYAawB/wEmAZgBKQH/ASoBmgEtAf8BKgGaAS0B/wEqAZoBLQH/ATEBnQEzAf8B0gHq
AdIB/wFpAbsBawH/ASMBmQEmAf8BSAGtAUsB/wFiAboBYwH/AbkB4AG6Af8BwQHiAcIB/wFtAcABbwH/
AVIBsgFUAf8BMgGjATQB/wFTAakBVQH/AdsB7AHbAf8BPwGdAUEB/wEaAYwBHAH/ASIBkgEkAf8BGgGM
ARwB/wESAYQBFAH/AZIByQGTAf8D/hH/A/4B/wGrAdgBrAH/ASYBmAEpAf8BKgGaAS0B/wEuAZwBMQH/
ASoBmgEtAf8BMQGdATMB/wHSAeoB0gH/AWkBuwFrAf8BIwGZASYB/wFIAa0BSwH/AWIBugFjAf8BuQHg
AboB/wHBAeIBwgH/AW0BwAFvAf8BUgGyAVQB/wEyAaMBNAH/AU8BqgFRAf8B3AHwAd0B/wFlAdoBbQH/
AUIB0AFLAf8BSQHSAVIB/wFCAdABSwH/ATwBywFFAf8BqQHpAa0B/wP+Ef8D/gH/AasB2AGsAf8BJgGY
ASkB/wEqAZoBLQH/ASoBmgEtAf8BKgGaAS0B/wExAZ0BMwH/AdIB6gHSAf8BlAHwAZoB/wFnAewBcQH/
AYIB8QGKAf8BmgH5AaEB/wHRAfoB1AH/AfQB8AH0Af8D4gH/A9wB/wPZAf8D3AH/A/kB/wPcAf8D2QH/
A9kB/wPZAf8D2QH/A+wB/wP+Ef8D/gH/A/EB/wPZAf8D2QH/A9kB/wPZAf8D2QH/AfUB9AH1Af8D4gH/
A9YB/wPcAf8D4gH/A/EB/wH1AfQB9QH/A+IB/wPcAf8D2QH/A9wB/wP5Af8D3AH/A9kB/wPZAf8D2QH/
A9kB/wPsAf8D/g3/A/4B/wHcAfAB3QH/ATIBowE0Af8BJgGYASkB/wEuAZwBMQH/AS4BnAExAf8BLgGc
ATEB/wEfAZIBIQH/AWEBsQFiAf8B0gHqAdIB/wGrAdgBrAH/AegB9QHoAf8D/gH/A/4B/wP+Af8D/gH/
AfAB+QHxAf8BswHbAbQB/wHLAegBywH/AZIB0AGTAf8BHwGSASEB/wEfAZIBIQH/ASIBkgEkAf8BIQGM
ASMB/wEaAYwBHAH/ARoBjAEcAf8ByQHiAckB/wP+Cf8D/gH/AdwB8AHdAf8BMgGjATQB/wEmAZgBKQH/
AS4BnAExAf8BLgGcATEB/wEuAZwBMQH/AR8BkgEhAf8BYQGxAWIB/wHSAeoB0gH/AasB2AGsAf8B6gH4
AesB/wP+Af8D/gH/A/4B/wP+Af8B8AH5AfEB/wGzAdsBtAH/AcsB6AHLAf8BxQH6AckB/wFaAeABYwH/
AUkB0gFSAf8BSQHSAVIB/wFJAdIBUgH/AUIBywFKAf8BQgHLAUoB/wHWAfQB2AH/A/4J/wP+Af8B3AHw
Ad0B/wEyAaMBNAH/ASYBmAEpAf8BLgGcATEB/wEuAZwBMQH/AS4BnAExAf8BHwGSASEB/wFhAbEBYgH/
AeAB+AHiAf8BxQH6AckB/wHwAfkB8QH/A/4B/wP+Af8D/gH/A/4B/wP+Af8D8QH/AfUB9AH1Af8D6QH/
A9YB/wPZAf8D2QH/A9kB/wPZAf8D2QH/AfUB9AH1Af8D/gn/A/4B/wP5Af8D2QH/A9kB/wPZAf8D2QH/
A9kB/wPZAf8D4gH/A/kB/wPxAf8D/gH/A/4B/wP+Af8D/gH/A/4B/wP+Af8D8QH/AfUB9AH1Af8D6QH/
A9YB/wPZAf8D2QH/A9kB/wPZAf8D2QH/AfUB9AH1Af8D/gn/A/4B/wHgAfEB4QH/AZIByQGTAf8BMgGj
ATQB/wEjAZkBJgH/AS4BnAExAf8BJgGYASkB/wEmAZgBKQH/AZIByQGTAf8D/gH/A/4Z/wP+Af8D/gH/
AasB2AGsAf8BRQGwAUcB/wEqAZoBLQH/AR8BigEhAf8BFwGMARkB/wEaAYwBHAH/AWoBtAFrAf8B3AHw
Ad0B/wP+Cf8D/gH/AeAB8QHhAf8BkgHJAZMB/wEyAaMBNAH/ASMBmQEmAf8BKgGaAS0B/wEmAZgBKQH/
ASYBmAEpAf8BkgHJAZMB/wP+Af8D/hn/A/4B/wP+Af8B0QH6AdQB/wGaAfkBoQH/AWsB5QF0Af8BSAHS
AVEB/wFCAdABSwH/AUIBywFKAf8BgQHgAYYB/wHgAfgB4gH/A/4J/wP+Af8B4AHxAeEB/wGSAckBkwH/
ATIBowE0Af8BIwGZASYB/wEuAZwBMQH/ASoBmgEtAf8BJgGYASkB/wGSAckBkwH/A/4B/wP+Gf8D/gH/
A/4B/wPsAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPiAf8D+QH/A/4J/wP+Af8B8AH5AfEB/wHxAewB8QH/
AdwB2gHcAf8D2QH/A9kB/wPZAf8D2QH/A+wB/wP+Af8D/hn/A/4B/wP+Af8D7AH/A9kB/wPZAf8D2QH/
A9kB/wPZAf8D4gH/A/kB/wP+Bf8D/gH/AbkB4AG6Af8BUgGyAVQB/wHBAeIBwgH/AdIB6gHSAf8BcgG8
AXQB/wEjAZkBJgH/ARwBkAEeAf8BqgHSAasB/wP+Kf8D/gH/AcEB4gHCAf8BRQGwAUcB/wEiAZIBJAH/
AVMBqQFVAf8BwQHiAcIB/wHJAeIByQH/AVMBqQFVAf8BqgHSAasB/wP+Af8D/gH/AbkB4AG6Af8BUgGy
AVQB/wHBAeIBwgH/AdIB6gHSAf8BcgG8AXQB/wEjAZkBJgH/ARwBkAEeAf8BqgHSAasB/wP+Kf8D/gH/
Ad0B+wHgAf8BmgH5AaEB/wFaAeABYwH/AWwB2wF0Af8BxQH6AckB/wH4AfIB+AH/A+IB/wPxAf8D/gH/
A/4B/wG5AeABugH/AVIBsgFUAf8BwQHiAcIB/wHSAeoB0gH/AXIBvAF0Af8BIwGZASYB/wEcAZABHgH/
AaoB0gGrAf8D/in/A/4B/wPxAf8D2QH/A9kB/wPiAf8B9QH0AfUB/wH1AfQB9QH/A+IB/wPxAf8D/gH/
A/4B/wHRAfoB1AH/AYIB8QGKAf8BzgH6AdEB/wH4AfIB+AH/AegB5AHoAf8D2QH/A9kB/wPxAf8D/in/
A/4B/wPxAf8D2QH/A9kB/wPiAf8B9QH0AfUB/wH1AfQB9QH/A+IB/wPxAf8D/gH/A/4B/wFyAbwBdAH/
ASMBmQEmAf8BKgGaAS0B/wFwAbkBcgH/AdIB6gHSAf8BswHbAbQB/wGZAcsBmQH/A/4x/wP+Af8BswHb
AbQB/wGzAdsBtAH/AdsB7AHbAf8BeQG8AXsB/wEiAZIBJAH/AQoBgwEMAf8BUwGpAVUB/wP+Af8D/gH/
AXIBvAF0Af8BIwGZASYB/wEqAZoBLQH/AXABuQFyAf8B0gHqAdIB/wGzAdsBtAH/AZkBywGZAf8D/jH/
A/4B/wHRAfoB1AH/Ac4B+gHRAf8B8AH5AfEB/wHxAewB8QH/A9kB/wPWAf8D4gH/A/4B/wP+Af8BcgG8
AXQB/wEjAZkBJgH/ASoBmgEtAf8BcAG5AXIB/wHSAeoB0gH/AbMB2wG0Af8BmQHLAZkB/wP+Mf8D/gH/
A+wB/wPxAf8D+QH/A+kB/wPZAf8D1gH/A+IB/wP+Af8D/gH/AZ4B8wGkAf8BagHoAXQB/wFqAegBdAH/
AZQB8AGaAf8B4AH4AeIB/wH0AfAB9AH/A+wB/wP+Mf8D/gH/A+wB/wPxAf8D+QH/A+kB/wPZAf8D1gH/
A+IB/wP+Af8B4AHxAeEB/wE/AakBQQH/ATIBowE0Af8BMgGjATQB/wEqAZoBLQH/ASYBmAEpAf8BmQHL
AZkB/wP+Of8D/gH/AcEB4gHCAf8BPwGpAUEB/wETAYgBFQH/AR8BigEhAf8BGgGMARwB/wEiAZIBJAH/
AdIB6gHSAf8B4AHxAeEB/wE/AakBQQH/ATIBowE0Af8BMgGjATQB/wEqAZoBLQH/ASYBmAEpAf8BmQHL
AZkB/wP+Of8D/gH/AfQB8AH0Af8D3AH/A9kB/wPZAf8D2QH/A9kB/wP5Af8B4AHxAeEB/wE/AakBQQH/
ATIBowE0Af8BMgGjATQB/wEqAZoBLQH/ASYBmAEpAf8BmQHLAZkB/wP+Of8D/gH/A/EB/wPcAf8D2QH/
A9kB/wPZAf8D2QH/A/kB/wHqAfgB6wH/AXoB8gGBAf8BdQHxAX4B/wFxAesBegH/AWoB6AF0Af8BWgHd
AWMB/wGkAesBqQH/A/45/wP+Af8D8QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D+QH/AasB2AGsAf8BLgGi
ATIB/wE2AaQBOQH/ATYBpAE5Af8BMgGjATQB/wETAYgBFQH/AZIByQGTAf8D/jn/A/4B/wGzAdsBtAH/
ATIBowE0Af8BIgGSASQB/wEiAZIBJAH/ASIBkgEkAf8BEwGIARUB/wGSAckBkwH/AasB2AGsAf8BLgGi
ATIB/wE2AaQBOQH/ATYBpAE5Af8BMgGjATQB/wETAYgBFQH/AZIByQGTAf8D/jn/A/4B/wPsAf8D2QH/
A9kB/wPZAf8D2QH/A9kB/wPsAf8BqwHYAawB/wEuAaIBMgH/ATYBpAE5Af8BNgGkATkB/wEyAaMBNAH/
ARMBiAEVAf8BkgHJAZMB/wP+Of8D/gH/A+wB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A+wB/wHKAfkBzQH/
AXUB8QF+Af8BegHyAYEB/wF6AfIBgQH/AXEB6wF6Af8BQAHPAUoB/wGkAeYBqAH/A/45/wP+Af8D7AH/
A9kB/wPZAf8D2QH/A9kB/wPZAf8D7AH/AYQByAGGAf8BKQGgASwB/wE2AaQBOQH/ATYBpAE5Af8BKgGa
AS0B/wEhAYwBIwH/AdsB7AHbQf8B6AH1AegB/wFLAbABTQH/ASYBmAEpAf8BIgGSASQB/wEiAZIBJAH/
ARMBiAEVAf8BagG0AWsB/wGEAcgBhgH/ASkBoAEsAf8BNgGkATkB/wE2AaQBOQH/ASoBmgEtAf8BIQGM
ASMB/wHbAewB20H/A/kB/wPcAf8D2QH/A9kB/wPZAf8D2QH/A+IB/wGEAcgBhgH/ASkBoAEsAf8BNgGk
ATkB/wE2AaQBOQH/ASoBmgEtAf8BIQGMASMB/wHbAewB20H/A/kB/wPcAf8D2QH/A9kB/wPZAf8D2QH/
A+IB/wGqAfwBsQH/AXUB8QF+Af8BegHyAYEB/wF6AfIBgQH/AWgB5QFxAf8BQgHLAUoB/wHgAfEB4UH/
A/kB/wPcAf8D2QH/A9kB/wPZAf8D2QH/A+IB/wFpAbsBawH/AS4BogEyAf8BNgGkATkB/wE2AaQBOQH/
ASIBkgEkAf8BPgGbAUAB/wH5AfwB+UH/A/4B/wFtAcABbwH/ASMBmQEmAf8BHwGKASEB/wEfAZIBIQH/
ARcBjAEZAf8BSQGlAUwB/wFpAbsBawH/AS4BogEyAf8BNgGkATkB/wE2AaQBOQH/ASIBkgEkAf8BPgGb
AUAB/wH5AfwB+UH/A/4B/wPiAf8D2QH/A9kB/wPZAf8D2QH/A+IB/wFpAbsBawH/AS4BogEyAf8BNgGk
ATkB/wE2AaQBOQH/ASIBkgEkAf8BPgGbAUAB/wH5AfwB+UH/A/4B/wPiAf8D2QH/A9kB/wPZAf8D2QH/
A+IB/wGaAfkBoQH/AXoB8gGBAf8BegHyAYEB/wF6AfIBgQH/AVoB4AFjAf8BWwHQAWIB/wH5AfwB+UH/
A/4B/wPiAf8D2QH/A9kB/wPZAf8D2QH/A+IB/wHLAegBywH/AbkB4AG6Af8BuQHgAboB/wG5AeABugH/
AbMB2wG0Af8BwQHiAcIB/wP+Qf8D/gH/AdIB6gHSAf8BuAHdAbkB/wGzAdsBtAH/AbMB2wG0Af8BswHb
AbQB/wG/AeABwAH/AcsB6AHLAf8BuQHgAboB/wG5AeABugH/AbkB4AG6Af8BswHbAbQB/wHBAeIBwgH/
A/5B/wP+Af8B9QH0AfUB/wPxAf8D8QH/A/EB/wPxAf8B9QH0AfUB/wHLAegBywH/AbkB4AG6Af8BuQHg
AboB/wG5AeABugH/AbMB2wG0Af8BwQHiAcIB/wP+Qf8D/gH/AfUB9AH1Af8D8QH/A/EB/wPxAf8D8QH/
AfUB9AH1Af8B3QH7AeAB/wHRAfoB1AH/AdQB/AHYAf8B1AH8AdgB/wHFAfIByAH/Ac0B8wHQAf8D/kH/
A/4B/wH1AfQB9QH/A/EB/wPxAf8D8QH/A/EB/wH1AfQB9QH/AZIB0AGTAf8BfAHCAX0B/wF8AcIBfQH/
AXwBwgF9Af8BaQG7AWsB/wGJAcIBigH/A/5B/wP+Af8BzgH6AdEB/wGeAfMBpAH/AYwB5gGSAf8BjAHm
AZIB/wGMAeYBkgH/AZwB7AGhAf8BkgHQAZMB/wF8AcIBfQH/AXwBwgF9Af8BfAHCAX0B/wFpAbsBawH/
AYkBwgGKAf8D/kH/A/4B/wPsAf8D4gH/A+IB/wPiAf8D4gH/A+kB/wGSAdABkwH/AXwBwgF9Af8BfAHC
AX0B/wF8AcIBfQH/AWkBuwFrAf8BiQHCAYoB/wP+Qf8D/gH/A+wB/wPiAf8D4gH/A+IB/wPiAf8D6QH/
AZIByQGTAf8BdQHAAXYB/wF4AcABeQH/AXwBwgF9Af8BagG0AWsB/wGIAb8BiQH/A/5B/wP+Af8D7AH/
A+IB/wPiAf8D4gH/A+IB/wPpAf8BaQG7AWsB/wEpAaABLAH/ATIBowE0Af8BMgGjATQB/wEcAZABHgH/
ATQBlQE2Af8B+QH8AflB/wP+Af8BngHzAaQB/wFfAeIBaQH/AUkB0gFSAf8BSwHZAVQB/wFCAdABSwH/
AWwB2wF0Af8BaQG7AWsB/wEpAaABLAH/ATIBowE0Af8BMgGjATQB/wEcAZABHgH/ATQBlQE2Af8B8AH5
AfFB/wP+Af8D4gH/A9YB/wPZAf8D2QH/A9YB/wPiAf8BaQG7AWsB/wEpAaABLAH/ATIBowE0Af8BMgGj
ATQB/wEcAZABHgH/ATQBlQE2Af8B8AH5AfFB/wP+Af8D4gH/A9YB/wPZAf8D2QH/A9YB/wPiAf8BaQG7
AWsB/wEpAaABLAH/ATIBowE0Af8BMgGjATQB/wEcAZABHgH/ATQBlQE2Af8B8AH5AfFB/wP+Af8D4gH/
A9YB/wPZAf8D2QH/A9YB/wPiAf8BiQHIAYoB/wEyAaMBNAH/ATsBqQE9Af8BOwGpAT0B/wEyAaMBNAH/
AR8BigEhAf8B1wHqAdhB/wHvAfwB8AH/AYIB8QGKAf8BXwHiAWkB/wFVAdsBXgH/AVUB2wFeAf8BSQHS
AVIB/wGMAeYBkgH/AYkByAGKAf8BMgGjATQB/wE7AakBPQH/ATsBqQE9Af8BMgGjATQB/wEfAYoBIQH/
AdcB6gHYQf8D+QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D4gH/AYkByAGKAf8BMgGjATQB/wE7AakBPQH/
ATsBqQE9Af8BMgGjATQB/wEfAYoBIQH/AdcB6gHYQf8D+QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D4gH/
AYkByAGKAf8BMgGjATQB/wE7AakBPQH/ATsBqQE9Af8BMgGjATQB/wEfAYoBIQH/AdcB6gHYQf8D+QH/
A9wB/wPZAf8D2QH/A9kB/wPZAf8D4gH/AbMB2wG0Af8BMgGjATQB/wE7AakBPQH/ATsBqQE9Af8BOwGp
AT0B/wEKAYMBDAH/AYkBwgGKAf8D/jn/A/4B/wHFAfoByQH/AWcB7AFxAf8BWgHdAWMB/wFaAd0BYwH/
AVUB2wFeAf8BSwHZAVQB/wGwAewBtAH/AbMB2wG0Af8BMgGjATQB/wE7AakBPQH/ATsBqQE9Af8BOQGh
ATsB/wEKAYMBDAH/AYkBwgGKAf8D/jn/A/4B/wPsAf8D1gH/A9kB/wPZAf8D2QH/A9kB/wPsAf8BswHb
AbQB/wEyAaMBNAH/ATsBqQE9Af8BOwGpAT0B/wE5AaEBOwH/AQoBgwEMAf8BiQHCAYoB/wP+Of8D/gH/
A+wB/wPWAf8D2QH/A9kB/wPZAf8D2QH/A+wB/wGzAdsBtAH/ATIBowE0Af8BOwGpAT0B/wE7AakBPQH/
ATkBoQE7Af8BCgGDAQwB/wGJAcIBigH/A/45/wP+Af8D7AH/A9YB/wPZAf8D2QH/A9kB/wPZAf8D7AH/
AegB9QHoAf8BSwGwAU0B/wE7AakBPQH/ATIBowE0Af8BMgGjATQB/wFnAbYBaQH/AckB4gHJAf8B+QH8
Afk5/wP+Af8B6gH4AesB/wGeAfMBpAH/AVoB3QFjAf8BVQHbAV4B/wFVAdsBXgH/AVoB3QFjAf8B4AH4
AeIB/wHoAfUB6AH/AUsBsAFNAf8BOwGpAT0B/wEyAaMBNAH/ATIBowE0Af8BZwG2AWkB/wHJAeIByQH/
AfkB/AH5Of8D/gH/A/kB/wPpAf8D2QH/A9kB/wPZAf8D2QH/A/kB/wHoAfUB6AH/AUsBsAFNAf8BOwGp
AT0B/wEyAaMBNAH/ATIBowE0Af8BZwG2AWkB/wHJAeIByQH/AfkB/AH5Of8D/gH/A/kB/wPpAf8D2QH/
A9kB/wPZAf8D2QH/A/kB/wHoAfUB6AH/AUsBsAFNAf8BOwGpAT0B/wEyAaMBNAH/ATIBowE0Af8BZwG2
AWkB/wHJAeIByQH/AfkB/AH5Of8D/gH/A/kB/wPpAf8D2QH/A9kB/wPZAf8D2QH/A/kB/wP+Af8BfAHC
AX0B/wEpAaABLAH/AVsBsQFdAf8BuQHgAboB/wHgAfEB4QH/AWEBsQFiAf8BdAG1AXUB/wP+Mf8D/gH/
A+kB/wPiAf8B+AHyAfgB/wHRAfoB1AH/AXwB5wGDAf8BSwHZAVQB/wGDAeEBiQH/A/4B/wP+Af8BfAHC
AX0B/wEpAaABLAH/AVsBsQFdAf8BuQHgAboB/wHgAfEB4QH/AWEBsQFiAf8BdAG1AXUB/wP+Mf8D/gH/
A+kB/wPiAf8B9QH0AfUB/wH1AfQB9QH/A+IB/wPWAf8D4gH/A/4B/wP+Af8BfAHCAX0B/wEpAaABLAH/
AVsBsQFdAf8BuQHgAboB/wHgAfEB4QH/AWEBsQFiAf8BdAG1AXUB/wP+Mf8D/gH/A+kB/wPiAf8B9QH0
AfUB/wH1AfQB9QH/A+IB/wPWAf8D4gH/A/4B/wP+Af8BfAHCAX0B/wEpAaABLAH/AVsBsQFdAf8BuQHg
AboB/wHgAfEB4QH/AWEBsQFiAf8BdAG1AXUB/wP+Mf8D/gH/A+kB/wPiAf8B9QH0AfUB/wH1AfQB9QH/
A+IB/wPWAf8D4gH/A/4B/wP+Af8BzgHrAdAB/wGfAdUBoQH/AdwB8AHdAf8BmgHSAZsB/wFDAasBRQH/
ASYBmAEpAf8BEgGEARQB/wGQAcUBkQH/A/4p/wP+Af8D8QH/A9kB/wPZAf8D2QH/Ae0B6AHtAf8B9QH0
AfUB/wG0AfMBuAH/AdAB8wHTAf8D/gH/A/4B/wHLAegBywH/AZ8B1QGhAf8B3AHwAd0B/wGaAdIBmwH/
AUMBqwFFAf8BJgGYASkB/wESAYQBFAH/AZABxQGRAf8D/in/A/4B/wPxAf8D2QH/A9kB/wPZAf8D6QH/
A/kB/wPxAf8B9QH0AfUB/wP+Af8D/gH/AcsB6AHLAf8BnwHVAaEB/wHcAfAB3QH/AZoB0gGbAf8BQwGr
AUUB/wEmAZgBKQH/ARIBhAEUAf8BkAHFAZEB/wP+Kf8D/gH/A/EB/wPZAf8D2QH/A9kB/wPpAf8D+QH/
A/EB/wH1AfQB9QH/A/4B/wP+Af8BywHoAcsB/wGfAdUBoQH/AdwB8AHdAf8BmgHSAZsB/wFDAasBRQH/
ASYBmAEpAf8BEgGEARQB/wGQAcUBkQH/A/4p/wP+Af8D8QH/A9kB/wPZAf8D2QH/A+kB/wP5Af8D8QH/
AfUB9AH1Af8D/gX/A/4B/wHSAeoB0gH/AVIBsgFUAf8BMgGjATQB/wE7AakBPQH/AT8BqQFBAf8BLgGc
ATEB/wESAYQBFAH/AYIBvQGDAf8D/gH/A/4Z/wP+Af8D/gH/A+wB/wPZAf8D2QH/A9kB/wPZAf8D2QH/
A9wB/wH0AfAB9AH/A/4J/wP+Af8B0gHqAdIB/wFSAbIBVAH/ATIBowE0Af8BOwGpAT0B/wE/AakBQQH/
AS4BnAExAf8BEgGEARQB/wF/AbwBgQH/A/4B/wP+Gf8D/gH/A/4B/wPsAf8D2QH/A9kB/wPZAf8D2QH/
A9kB/wPZAf8D8QH/A/4J/wP+Af8B0gHqAdIB/wFSAbIBVAH/ATIBowE0Af8BOwGpAT0B/wE/AakBQQH/
AS4BnAExAf8BEgGEARQB/wF/AbwBgQH/A/4B/wP+Gf8D/gH/A/4B/wPsAf8D2QH/A9kB/wPZAf8D2QH/
A9kB/wPZAf8D8QH/A/4J/wP+Af8B0gHqAdIB/wFSAbIBVAH/ATIBowE0Af8BOwGpAT0B/wE/AakBQQH/
AS4BnAExAf8BEgGEARQB/wF/AbwBgQH/A/4B/wP+Gf8D/gH/A/4B/wPsAf8D2QH/A9kB/wPZAf8D2QH/
A9kB/wPZAf8D8QH/A/4J/wP+Af8B4AHxAeEB/wFLAbABTQH/ATgBqAE6Af8BPwGpAUEB/wE7AakBPQH/
AT8BqQFBAf8BIwGZASYB/wGJAcIBigH/AaoB0gGrAf8BggG9AYMB/wHbAewB2wH/AfkB/AH5Af8D/gH/
A/4B/wP+Af8D+QH/A+wB/wPsAf8D8QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A/kB/wP+Cf8D/gH/
AeAB8QHhAf8BSwGwAU0B/wE4AagBOgH/AT8BqQFBAf8BOwGpAT0B/wE/AakBQQH/ASMBmQEmAf8BiQHC
AYoB/wGqAdIBqwH/AYIBvQGDAf8B2wHsAdsB/wH5AfwB+QH/A/4B/wP+Af8D/gH/A/kB/wPsAf8D7AH/
A/EB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wP5Af8D/gn/A/4B/wHgAfEB4QH/AUsBsAFNAf8BOAGo
AToB/wE/AakBQQH/ATsBqQE9Af8BPwGpAUEB/wEjAZkBJgH/AYkBwgGKAf8BqgHSAasB/wGCAb0BgwH/
AdsB7AHbAf8B+QH8AfkB/wP+Af8D/gH/A/4B/wP5Af8D7AH/A+wB/wPxAf8D2QH/A9kB/wPZAf8D2QH/
A9kB/wPZAf8D+QH/A/4J/wP+Af8B4AHxAeEB/wFLAbABTQH/ATsBqQE9Af8BPwGpAUEB/wE7AakBPQH/
AT8BqQFBAf8BIwGZASYB/wGJAcIBigH/AaoB0gGrAf8BggG9AYMB/wHbAewB2wH/AfkB/AH5Af8D/gH/
A/4B/wP+Af8D+QH/A+wB/wPsAf8D8QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A/kB/wP+Df8D/gH/
AbkB4AG6Af8BOwGpAT0B/wE7AakBPQH/AT8BqQFBAf8BNgGkATkB/wFfAboBYQH/AeAB8QHhAf8BQgGi
AUQB/wEQAYgBEQH/ASEBjAEjAf8BNAGVATYB/wGSAckBkwH/AfgB8gH4Af8D3AH/A9kB/wPZAf8D2QH/
A/kB/wPiAf8D2QH/A9kB/wPZAf8D2QH/A/EB/wP+Ef8D/gH/AbkB4AG6Af8BOwGpAT0B/wE7AakBPQH/
AT8BqQFBAf8BNgGkATkB/wFfAboBYQH/AeAB8QHhAf8BQgGiAUQB/wEPAYYBEQH/ASEBjAEjAf8BNAGV
ATYB/wGSAckBkwH/AfgB8gH4Af8D3AH/A9kB/wPZAf8D2QH/A/kB/wPiAf8D2QH/A9kB/wPZAf8D2QH/
A/EB/wP+Ef8D/gH/AbkB4AG6Af8BOwGpAT0B/wE7AakBPQH/AT8BqQFBAf8BNgGkATkB/wFfAboBYQH/
AeAB8QHhAf8BQgGiAUQB/wEPAYYBEQH/ASEBjAEjAf8BNAGVATYB/wGSAckBkwH/AfgB8gH4Af8D3AH/
A9kB/wPZAf8D2QH/A/kB/wPiAf8D2QH/A9kB/wPZAf8D2QH/A/EB/wP+Ef8D/gH/AbkB4AG6Af8BOwGp
AT0B/wE7AakBPQH/AT8BqQFBAf8BNgGkATkB/wFfAboBYQH/AeAB8QHhAf8BQgGiAUQB/wEPAYYBEQH/
ASEBjAEjAf8BNAGVATYB/wGSAckBkwH/AfgB8gH4Af8D3AH/A9kB/wPZAf8D2QH/A/kB/wPiAf8D2QH/
A9kB/wPZAf8D2QH/A/EB/wP+Ff8D/gH/AbMB2wG0Af8BOwGpAT0B/wE4AagBOgH/ATYBpAE5Af8BuQHg
AboB/wGaAdIBmwH/ATIBowE0Af8BOwGpAT0B/wEyAaMBNAH/ARwBkAEeAf8BfAHCAX0B/wH0AfAB9AH/
A9YB/wPZAf8D2QH/A9kB/wPiAf8B9QH0AfUB/wPZAf8D2QH/A9kB/wPsAf8D/hn/A/4B/wGzAdsBtAH/
ATsBqQE9Af8BOAGoAToB/wE2AaQBOQH/AbkB4AG6Af8BmgHSAZsB/wEyAaMBNAH/ATsBqQE9Af8BMgGj
ATQB/wEcAZABHgH/AXwBwgF9Af8B9AHwAfQB/wPWAf8D2QH/A9kB/wPZAf8D4gH/AfUB9AH1Af8D2QH/
A9kB/wPZAf8D7AH/A/4Z/wP+Af8BswHbAbQB/wE7AakBPQH/ATgBqAE6Af8BNgGkATkB/wG5AeABugH/
AZoB0gGbAf8BMgGjATQB/wE7AakBPQH/ATIBowE0Af8BHAGQAR4B/wF8AcIBfQH/AfQB8AH0Af8D1gH/
A9kB/wPZAf8D2QH/A+IB/wH1AfQB9QH/A9kB/wPZAf8D2QH/A+wB/wP+Gf8D/gH/AbMB2wG0Af8BOwGp
AT0B/wE4AagBOgH/ATYBpAE5Af8BuQHgAboB/wGaAdIBmwH/ATIBowE0Af8BOwGpAT0B/wEyAaMBNAH/
ARwBkAEeAf8BfAHCAX0B/wH0AfAB9AH/A9YB/wPZAf8D2QH/A9kB/wPiAf8B9QH0AfUB/wPZAf8D2QH/
A9kB/wPsAf8D/h3/A/4B/wHBAeIBwgH/AUsBsAFNAf8BbQHAAW8B/wHSAeoB0gH/AUMBqwFFAf8BOwGp
AT0B/wE7AakBPQH/ATsBqQE9Af8BLgGiATIB/wGJAcgBigH/AfQB8AH0Af8D2QH/A9kB/wPZAf8D2QH/
A9kB/wPxAf8D6QH/A9kB/wPxAf8D/iH/A/4B/wHBAeIBwgH/AUsBsAFNAf8BbQHAAW8B/wHSAeoB0gH/
AUMBqwFFAf8BOwGpAT0B/wE7AakBPQH/ATsBqQE9Af8BLgGiATIB/wGJAcgBigH/AfQB8AH0Af8D2QH/
A9kB/wPZAf8D2QH/A9kB/wPxAf8D6QH/A9kB/wPxAf8D/iH/A/4B/wHBAeIBwgH/AUsBsAFNAf8BbQHA
AW8B/wHSAeoB0gH/AUMBqwFFAf8BOwGpAT0B/wE7AakBPQH/ATsBqQE9Af8BLgGiATIB/wGJAcgBigH/
AfQB8AH0Af8D2QH/A9kB/wPZAf8D2QH/A9kB/wPxAf8D6QH/A9kB/wPxAf8D/iH/A/4B/wHBAeIBwgH/
AUsBsAFNAf8BbQHAAW8B/wHSAeoB0gH/AUMBqwFFAf8BOwGpAT0B/wE7AakBPQH/ATsBqQE9Af8BMgGj
ATQB/wGJAcgBigH/AfQB8AH0Af8D2QH/A9kB/wPZAf8D2QH/A9kB/wPxAf8D6QH/A9kB/wPxAf8D/iX/
A/4B/wHgAfEB4QH/AdwB8AHdAf8BfAHCAX0B/wEpAaABLAH/ATsBqQE9Af8BOwGpAT0B/wE7AakBPQH/
AS4BogEyAf8BiQHIAYoB/wH0AfAB9AH/A9kB/wPZAf8D2QH/A9kB/wPWAf8D4gH/A/kB/wP5Af8D/in/
A/4B/wHgAfEB4QH/AdwB8AHdAf8BfAHCAX0B/wEpAaABLAH/ATsBqQE9Af8BOwGpAT0B/wE7AakBPQH/
AS4BogEyAf8BiQHIAYoB/wH0AfAB9AH/A9kB/wPZAf8D2QH/A9kB/wPWAf8D4gH/A/kB/wP5Af8D/in/
A/4B/wHgAfEB4QH/AdwB8AHdAf8BfAHCAX0B/wEpAaABLAH/ATsBqQE9Af8BOwGpAT0B/wE7AakBPQH/
AS4BogEyAf8BiQHIAYoB/wH0AfAB9AH/A9kB/wPZAf8D2QH/A9kB/wPWAf8D4gH/A/kB/wP5Af8D/in/
A/4B/wHgAfEB4QH/AdwB8AHdAf8BfAHCAX0B/wEpAaABLAH/ATsBqQE9Af8BOwGpAT0B/wE7AakBPQH/
AS4BogEyAf8BiQHIAYoB/wH0AfAB9AH/A9kB/wPZAf8D2QH/A9kB/wPWAf8D4gH/A/kB/wP5Af8D/i3/
A/4B/wP+Af8BzgHrAdAB/wGEAcgBhgH/AUsBsAFNAf8BOAGoAToB/wEuAaIBMgH/AScBoAEpAf8BhAHI
AYYB/wHxAewB8QH/A9YB/wPWAf8D2QH/A9wB/wPiAf8B9AHwAfQB/wP+Af8D/jH/A/4B/wP+Af8BzgHr
AdAB/wGEAcgBhgH/AUsBsAFNAf8BOAGoAToB/wEuAaIBMgH/AScBoAEpAf8BhAHIAYYB/wH0AfAB9AH/
A9YB/wPWAf8D2QH/A9wB/wPiAf8B9QH0AfUB/wP+Af8D/jH/A/4B/wP+Af8BzgHrAdAB/wGEAcgBhgH/
AUsBsAFNAf8BOAGoAToB/wEuAaIBMgH/AScBoAEpAf8BhAHIAYYB/wHxAewB8QH/A9YB/wPWAf8D2QH/
A9wB/wPiAf8B9QH0AfUB/wP+Af8D/jH/A/4B/wP+Af8BzgHrAdAB/wGEAcgBhgH/AUsBsAFNAf8BOAGo
AToB/wEuAaIBMgH/AScBoAEpAf8BhAHIAYYB/wHxAewB8QH/A9YB/wPWAf8D2QH/A9wB/wPiAf8B9QH0
AfUB/wP+Af8D/jn/A/4B/wP+Af8B8AH5AfEB/wG5AeABugH/AZIB0AGTAf8BbQHAAW8B/wGkAdgBpQH/
AfQB8AH0Af8D4gH/A+kB/wPxAf8D+QH/A/4B/wP+Qf8D/gH/A/4B/wHqAfgB6wH/AbkB4AG6Af8BkgHQ
AZMB/wFtAcABbwH/AaQB2AGlAf8B9AHwAfQB/wPiAf8D6QH/A/EB/wP5Af8D/gH/A/5B/wP+Af8D/gH/
AeoB+AHrAf8BuQHgAboB/wGSAdABkwH/AW0BwAFvAf8BpAHYAaUB/wH0AfAB9AH/A+IB/wPpAf8D8QH/
A/kB/wP+Af8D/kH/A/4B/wP+Af8B6gH4AesB/wG5AeABugH/AZIB0AGTAf8BbQHAAW8B/wGkAdgBpQH/
AfQB8AH0Af8D4gH/A+kB/wPxAf8D+QH/A/4B/wP+Qf8D/gH/A/4B/wHgAfgB4gH/AbQB7AG4Af8BkAHm
AZYB/wFsAdsBdAH/AbEB8QG1Af8BoAHRAaEB/wFCAaIBRAH/AWoBtAFrAf8BmQHLAZkB/wHbAewB2wH/
A/4B/wP+Qf8D/gH/A/4B/wHbAewB2wH/AaAB0QGhAf8BcgG8AXQB/wFJAaUBTAH/AZkBywGZAf8BqgHS
AasB/wFCAaIBRAH/AWoBtAFrAf8BmQHLAZkB/wHbAewB2wH/A/4B/wP+Qf8D/gH/A/4B/wHcAfAB3QH/
AaAB0QGhAf8BcgG8AXQB/wFJAaUBTAH/AZkBywGZAf8BqgHSAasB/wFCAaIBRAH/AWoBtAFrAf8BmQHL
AZkB/wHbAewB2wH/A/4B/wP+Qf8D/gH/A/4B/wHcAfAB3QH/AaAB0QGhAf8BcgG8AXQB/wFJAaUBTAH/
AZkBywGZAf8BqgHSAasB/wFCAaIBRAH/AWoBtAFrAf8BmQHLAZkB/wHbAewB2wH/A/4B/wP+Of8D/gH/
A/4B/wHNAfMB0AH/AYMB4QGJAf8BWgHdAWMB/wFLAdkBVAH/AUkB0gFSAf8BQgHQAUsB/wGhAeoBpgH/
AZIByQGTAf8BCgGDAQwB/wETAYgBFQH/ARMBiAEVAf8BIgGSASQB/wFZAawBWwH/AbMB2wG0Af8D/gH/
A/4x/wP+Af8D/gH/Ab8B4AHAAf8BYQGxAWIB/wEqAZoBLQH/ARoBjAEcAf8BFwGMARkB/wEQAYgBEQH/
AYUBwgGGAf8BkgHJAZMB/wEKAYMBDAH/ARMBiAEVAf8BEwGIARUB/wEiAZIBJAH/AVkBrAFbAf8BswHb
AbQB/wP+Af8D/jH/A/4B/wP+Af8BvwHgAcAB/wFhAbEBYgH/ASoBmgEtAf8BGgGMARwB/wEXAYwBGQH/
ARABiAERAf8BhQHCAYYB/wGSAckBkwH/AQoBgwEMAf8BEwGIARUB/wETAYgBFQH/ASIBkgEkAf8BWQGs
AVsB/wGzAdsBtAH/A/4B/wP+Mf8D/gH/A/4B/wHBAeIBwgH/AWEBsQFiAf8BKgGaAS0B/wEcAZABHgH/
ARcBjAEZAf8BEAGIAREB/wGFAcIBhgH/AZYByQGYAf8BCgGDAQwB/wETAYgBFQH/ARMBiAEVAf8BIgGS
ASQB/wFZAawBWwH/AbMB2wG0Af8D/gH/A/4t/wP+Af8B9QH0AfUB/wH4AfIB+AH/AakB6QGtAf8BSwHZ
AVQB/wFVAdsBXgH/AVUB2wFeAf8BVQHbAV4B/wFJAdIBUgH/AaQB6wGpAf8BlgHJAZgB/wETAYgBFQH/
ASIBkgEkAf8BHwGSASEB/wEaAYwBHAH/AQoBgwEMAf8BagG0AWsB/wHJAeIByQH/AcEB4gHCAf8D/in/
A/4B/wHJAeIByQH/AbkB4AG6Af8BkgHJAZMB/wETAYgBFQH/ASIBkgEkAf8BIgGSASQB/wEiAZIBJAH/
ARcBjAEZAf8BiQHCAYoB/wGZAcsBmQH/ARMBiAEVAf8BIgGSASQB/wEfAZIBIQH/ARoBjAEcAf8BCgGD
AQwB/wFqAbQBawH/AckB4gHJAf8BwQHiAcIB/wP+Kf8D/gH/AckB4gHJAf8BvwHgAcAB/wGSAckBkwH/
ARMBiAEVAf8BIgGSASQB/wEiAZIBJAH/ASIBkgEkAf8BFwGMARkB/wGJAcIBigH/AZkBywGZAf8BEwGI
ARUB/wEiAZIBJAH/ASIBkgEkAf8BGgGMARwB/wEKAYMBDAH/AWoBtAFrAf8ByQHiAckB/wHBAeIBwgH/
A/4p/wP+Af8ByQHiAckB/wG5AeABugH/AZIByQGTAf8BEwGIARUB/wEiAZIBJAH/ASIBkgEkAf8BIgGS
ASQB/wEXAYwBGQH/AYkBwgGKAf8BmQHLAZkB/wETAYgBFQH/ASIBkgEkAf8BHwGSASEB/wEaAYwBHAH/
AQoBgwEMAf8BagG0AWsB/wHJAeIByQH/AcEB4gHCAf8D/iX/A/4B/wPxAf8D2QH/A9wB/wHvAfwB8AH/
AXUB5QF9Af8BVQHbAV4B/wFaAd0BYwH/AVUB2wFeAf8BSQHSAVIB/wGkAesBqQH/AZIByQGTAf8BEwGI
ARUB/wEiAZIBJAH/ASIBkgEkAf8BGgGMARwB/wEsAZUBLgH/AdAB5wHQAf8BSQGlAUwB/wEaAYwBHAH/
AZkBywGZAf8D/iH/A/4B/wGrAdgBrAH/AS4BnAExAf8BOQGhATsB/wHXAeoB2AH/AU8BqgFRAf8BIgGS
ASQB/wEnAZYBKQH/AScBlgEpAf8BFwGMARkB/wGJAcIBigH/AZkBywGZAf8BEwGIARUB/wEiAZIBJAH/
ASIBkgEkAf8BGgGMARwB/wEsAZUBLgH/AdAB5wHQAf8BSQGlAUwB/wEaAYwBHAH/AZkBywGZAf8D/iH/
A/4B/wGrAdgBrAH/AS4BnAExAf8BOQGhATsB/wHXAeoB2AH/AU8BqgFRAf8BIgGSASQB/wEnAZYBKQH/
ASIBkgEkAf8BFwGMARkB/wGJAcIBigH/AZkBywGZAf8BEwGIARUB/wEiAZIBJAH/ASIBkgEkAf8BGgGM
ARwB/wEsAZUBLgH/AdAB5wHQAf8BSQGlAUwB/wEaAYwBHAH/AZkBywGZAf8D/iH/A/4B/wGrAdgBrAH/
AS4BnAExAf8BOQGhATsB/wHXAeoB2AH/AU8BqgFRAf8BIgGSASQB/wEnAZYBKQH/AScBlgEpAf8BFwGM
ARkB/wGJAcIBigH/AZkBywGZAf8BEwGIARUB/wEiAZIBJAH/ASIBkgEkAf8BGgGMARwB/wEsAZUBLgH/
AdAB5wHQAf8BSQGlAUwB/wEaAYwBHAH/AZkBywGZAf8D/h3/A/4B/wPsAf8D2QH/A9kB/wPZAf8B8QHs
AfEB/wHFAfIByAH/AVUB2wFeAf8BWgHdAWMB/wFaAeABYwH/AVoB4AFjAf8BsQH7AbYB/wGZAcsBmQH/
ARwBkAEeAf8BJwGWASkB/wEiAZIBJAH/ARMBiAEVAf8BlgHJAZgB/wGqAdIBqwH/ARMBiAEVAf8BGgGM
ARwB/wETAYgBFQH/AYcBwgGIAf8D/hn/A/4B/wGaAdIBmwH/ASMBmQEmAf8BJgGYASkB/wEfAZIBIQH/
AZIByQGTAf8BuAHdAbkB/wEiAZIBJAH/AScBlgEpAf8BJgGYASkB/wEcAZABHgH/AYkByAGKAf8BmgHS
AZsB/wEcAZABHgH/AScBlgEpAf8BIgGSASQB/wETAYgBFQH/AZYByQGYAf8BqgHSAasB/wETAYgBFQH/
ARoBjAEcAf8BEgGEARQB/wGHAcIBiAH/A/4Z/wP+Af8BmgHSAZsB/wEjAZkBJgH/ASYBmAEpAf8BHwGS
ASEB/wGSAckBkwH/AbgB3QG5Af8BIgGSASQB/wEnAZYBKQH/ASYBmAEpAf8BHAGQAR4B/wGJAcgBigH/
AZoB0gGbAf8BHAGQAR4B/wEnAZYBKQH/ASIBkgEkAf8BEwGIARUB/wGWAckBmAH/AaoB0gGrAf8BEwGI
ARUB/wEaAYwBHAH/ARIBhAEUAf8BhwHCAYgB/wP+Gf8D/gH/AZoB0gGbAf8BIwGZASYB/wEmAZgBKQH/
AR8BkgEhAf8BkgHJAZMB/wG4Ad0BuQH/ASIBkgEkAf8BJwGWASkB/wEmAZgBKQH/ARwBkAEeAf8BiQHI
AYoB/wGaAdIBmwH/ARwBkAEeAf8BJwGWASkB/wEiAZIBJAH/ARMBiAEVAf8BlgHJAZgB/wGqAdIBqwH/
ARMBiAEVAf8BGgGMARwB/wETAYgBFQH/AYcBwgGIAf8D/hX/A/4B/wPxAf8D2QH/A9kB/wPZAf8D2QH/
AdwB2gHcAf8B9QH0AfUB/wGKAewBkQH/AWcB7AFxAf8BggHxAYoB/wGaAfkBoQH/AdgB+gHbAf8BwQHi
AcIB/wFtAcABbwH/AVIBsgFUAf8BMgGjATQB/wFTAakBVQH/AdsB7AHbAf8BPwGdAUEB/wEaAYwBHAH/
ASIBkgEkAf8BGgGMARwB/wESAYQBFAH/AZYByQGYAf8D/hH/A/4B/wGrAdgBrAH/ASYBmAEpAf8BKgGa
AS0B/wEqAZoBLQH/ASoBmgEtAf8BMQGdATMB/wHSAeoB0gH/AWkBuwFrAf8BIwGZASYB/wFIAa0BSwH/
AWIBugFjAf8BuQHgAboB/wHBAeIBwgH/AW0BwAFvAf8BUgGyAVQB/wEyAaMBNAH/AVMBqQFVAf8B2wHs
AdsB/wE/AZ0BQQH/ARoBjAEcAf8BIgGSASQB/wEaAYwBHAH/ARIBhAEUAf8BlgHJAZgB/wP+Ef8D/gH/
AasB2AGsAf8BJgGYASkB/wEqAZoBLQH/ASoBmgEtAf8BKgGaAS0B/wExAZ0BMwH/AdIB6gHSAf8BaQG7
AWsB/wEjAZkBJgH/AUoBrAFNAf8BYgG6AWMB/wG5AeABugH/AcEB4gHCAf8BbQHAAW8B/wFSAbIBVAH/
ATIBowE0Af8BUwGpAVUB/wHbAewB2wH/AT8BnQFBAf8BGgGMARwB/wEiAZIBJAH/ARoBjAEcAf8BEgGE
ARQB/wGWAckBmAH/A/4R/wP+Af8BqwHYAawB/wEmAZgBKQH/ASoBmgEtAf8BKgGaAS0B/wEqAZoBLQH/
ATEBnQEzAf8B0gHqAdIB/wFpAbsBawH/ASMBmQEmAf8BSAGtAUsB/wFiAboBYwH/AbkB4AG6Af8BwQHi
AcIB/wFtAcABbwH/AVIBsgFUAf8BMgGjATQB/wFTAakBVQH/AdsB7AHbAf8BPwGdAUEB/wEaAYwBHAH/
ASIBkgEkAf8BGgGMARwB/wETAYgBFQH/AZYByQGYAf8D/g3/A/4B/wP5Af8D2QH/A9kB/wPZAf8D2QH/
A9kB/wPZAf8D4gH/AeAB+AHiAf8BxQH6AckB/wHwAfkB8QH/A/4B/wP+Af8D/gH/A/4B/wHwAfkB8QH/
AbMB2wG0Af8BywHoAcsB/wGSAdABkwH/AR8BkgEhAf8BHwGSASEB/wEfAZIBIQH/ASEBjAEjAf8BGgGM
ARwB/wEaAYwBHAH/AckB4gHJAf8D/gn/A/4B/wHbAewB2wH/ATIBowE0Af8BJgGYASkB/wEuAZwBMQH/
AS4BnAExAf8BLgGcATEB/wEfAZIBIQH/AWEBsQFiAf8B0gHqAdIB/wGrAdgBrAH/AegB9QHoAf8D/gH/
A/4B/wP+Af8D/gH/AfAB+QHxAf8BswHbAbQB/wHLAegBywH/AZIB0AGTAf8BHwGSASEB/wEfAZIBIQH/
AR8BkgEhAf8BHwGSASEB/wEaAYwBHAH/ARoBjAEcAf8ByQHiAckB/wP+Cf8D/gH/AdwB8AHdAf8BMgGj
ATQB/wEmAZgBKQH/AS4BnAExAf8BLgGcATEB/wEuAZwBMQH/AR8BkgEhAf8BYQGxAWIB/wHSAeoB0gH/
AasB2AGsAf8B6AH1AegB/wP+Af8D/gH/A/4B/wP+Af8B8AH5AfEB/wGzAdsBtAH/AcsB6AHLAf8BkgHQ
AZMB/wEfAZIBIQH/AR8BkgEhAf8BIgGSASQB/wEiAZIBJAH/ARoBjAEcAf8BGgGMARwB/wHJAeIByQH/
A/4J/wP+Af8B3AHwAd0B/wEyAaMBNAH/ASYBmAEpAf8BLgGcATEB/wEuAZwBMQH/AS4BnAExAf8BHwGS
ASEB/wFhAbEBYgH/AdIB6gHSAf8BqwHYAawB/wHqAfgB6wH/A/4B/wP+Af8D/gH/A/4B/wHqAfgB6wH/
AbMB2wG0Af8BywHoAcsB/wGSAdABkwH/AR8BkgEhAf8BHwGSASEB/wEiAZIBJAH/ASEBjAEjAf8BGgGM
ARwB/wEaAYwBHAH/AckB4gHJAf8D/gn/A/4B/wP5Af8D6QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D7AH/
A/4B/wP+Gf8D/gH/A/4B/wGrAdgBrAH/AUUBsAFHAf8BKgGaAS0B/wEfAZIBIQH/ARcBjAEZAf8BGgGM
ARwB/wFqAbQBawH/AdsB7AHbAf8D/gn/A/4B/wHgAfEB4QH/AYkByAGKAf8BMgGjATQB/wEjAZkBJgH/
AS4BnAExAf8BKgGaAS0B/wEnAZYBKQH/AZIByQGTAf8D/gH/A/4Z/wP+Af8D/gH/AasB2AGsAf8BRQGw
AUcB/wEqAZoBLQH/AR8BkgEhAf8BFwGMARkB/wEaAYwBHAH/AWoBtAFrAf8B2wHsAdsB/wP+Cf8D/gH/
AeAB8QHhAf8BkgHJAZMB/wEyAaMBNAH/ASMBmQEmAf8BLgGcATEB/wEqAZoBLQH/AScBlgEpAf8BkgHJ
AZMB/wP+Af8D/hn/A/4B/wP+Af8BqwHYAawB/wFFAbABRwH/ASoBmgEtAf8BHwGKASEB/wEXAYwBGQH/
ARoBjAEcAf8BagG0AWsB/wHcAfAB3QH/A/4J/wP+Af8B4AHxAeEB/wGSAckBkwH/ATIBowE0Af8BIwGZ
ASYB/wEuAZwBMQH/ASoBmgEtAf8BJwGWASkB/wGSAckBkwH/A/4B/wP+Gf8D/gH/A/4B/wGrAdgBrAH/
AUUBsAFHAf8BKgGaAS0B/wEfAYoBIQH/ARcBjAEZAf8BGgGMARwB/wFqAbQBawH/AdwB8AHdAf8D/gX/
A/4B/wPxAf8D4gH/AfUB9AH1Af8B9QH0AfUB/wPiAf8D2QH/A9kB/wPxAf8D/in/A/4B/wHBAeIBwgH/
AUUBsAFHAf8BIgGSASQB/wFTAakBVQH/AcEB4gHCAf8ByQHiAckB/wFTAakBVQH/AaoB0gGrAf8D/gH/
A/4B/wHRAfoB1AH/AYkB8wGQAf8B1AH8AdgB/wHSAeoB0gH/AXIBvAF0Af8BIgGSASQB/wEcAZABHgH/
AaoB0gGrAf8D/in/A/4B/wHBAeIBwgH/AUUBsAFHAf8BIgGSASQB/wFTAakBVQH/AcEB4gHCAf8ByQHi
AckB/wFTAakBVQH/AaoB0gGrAf8D/gH/A/4B/wG5AeABugH/AVYBsQFZAf8BwQHiAcIB/wHSAeoB0gH/
AXIBvAF0Af8BIwGZASYB/wEcAZABHgH/AaoB0gGrAf8D/in/A/4B/wHBAeIBwgH/AUUBsAFHAf8BIgGS
ASQB/wFTAakBVQH/AcEB4gHCAf8ByQHiAckB/wFTAakBVQH/AaoB0gGrAf8D/gH/A/4B/wG5AeABugH/
AVIBsgFUAf8BwQHiAcIB/wHSAeoB0gH/AXIBvAF0Af8BIwGZASYB/wEcAZABHgH/AaoB0gGrAf8D/in/
A/4B/wHBAeIBwgH/AUUBsAFHAf8BIgGSASQB/wFTAakBVQH/AcEB4gHCAf8ByQHiAckB/wFTAakBVQH/
AaoB0gGrAf8D/gH/A/4B/wPiAf8D1gH/A9kB/wPiAf8B9QH0AfUB/wPxAf8D7AH/A/4x/wP+Af8BswHb
AbQB/wGzAdsBtAH/AdsB7AHbAf8BeQG8AXsB/wEiAZIBJAH/AQoBgwEMAf8BUwGpAVUB/wP+Af8D/gH/
AZ4B8wGkAf8BagHoAXQB/wFqAegBdAH/AZ4B8wGkAf8B4AH4AeIB/wGzAdsBtAH/AZkBywGZAf8D/jH/
A/4B/wGzAdsBtAH/AbMB2wG0Af8B2wHsAdsB/wF5AbwBewH/ASIBkgEkAf8BCgGDAQwB/wFTAakBVQH/
A/4B/wP+Af8BcgG8AXQB/wEjAZkBJgH/ASoBmgEtAf8BcAG5AXIB/wHSAeoB0gH/AbMB2wG0Af8BmQHL
AZkB/wP+Mf8D/gH/AbMB2wG0Af8BswHbAbQB/wHbAewB2wH/AXkBvAF7Af8BIgGSASQB/wEKAYMBDAH/
AVMBqQFVAf8D/gH/A/4B/wFyAbwBdAH/ASMBmQEmAf8BKgGaAS0B/wFwAbkBcgH/AdIB6gHSAf8BswHb
AbQB/wGZAcsBmQH/A/4x/wP+Af8BswHbAbQB/wGzAdsBtAH/AdsB7AHbAf8BeQG8AXsB/wEiAZIBJAH/
AQoBgwEMAf8BUwGpAVUB/wP+Af8D+QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D7AH/A/45/wP+Af8BwQHi
AcIB/wFCAaIBRAH/ARMBiAEVAf8BHwGKASEB/wEaAYwBHAH/ASIBkgEkAf8B0gHqAdIB/wHqAfgB6wH/
AXoB8gGBAf8BdQHxAX4B/wFxAesBegH/AWoB6AF0Af8BWgHgAWMB/wGsAeoBsAH/A/45/wP+Af8BwQHi
AcIB/wFCAaIBRAH/ARMBiAEVAf8BHwGKASEB/wEaAYwBHAH/ASIBkgEkAf8B0gHqAdIB/wHgAfEB4QH/
AT8BqQFBAf8BMgGjATQB/wEyAaMBNAH/ASoBmgEtAf8BJgGYASkB/wGZAcsBmQH/A/45/wP+Af8BwQHi
AcIB/wE/AakBQQH/ARMBiAEVAf8BHwGKASEB/wEaAYwBHAH/ASIBkgEkAf8B0gHqAdIB/wHgAfEB4QH/
AT8BqQFBAf8BMgGjATQB/wEyAaMBNAH/ASoBmgEtAf8BJgGYASkB/wGZAcsBmQH/A/45/wP+Af8BwQHi
AcIB/wE/AakBQQH/ARMBiAEVAf8BHwGKASEB/wEaAYwBHAH/ASIBkgEkAf8B0gHqAdIB/wPxAf8D2QH/
A9kB/wPZAf8D2QH/A9kB/wPsAf8D/jn/A/4B/wGzAdsBtAH/ATIBowE0Af8BIgGSASQB/wEiAZIBJAH/
ASIBkgEkAf8BEwGIARUB/wGSAckBkwH/AcgB9AHMAf8BdQHxAX4B/wF6AfIBgQH/AXoB8gGBAf8BcQHr
AXoB/wFAAc8BSgH/AaQB5gGoAf8D/jn/A/4B/wGzAdsBtAH/ATIBowE0Af8BIgGSASQB/wEiAZIBJAH/
ASIBkgEkAf8BEwGIARUB/wGSAckBkwH/AasB2AGsAf8BLgGiATIB/wE2AaQBOQH/ATYBpAE5Af8BMgGj
ATQB/wESAYQBFAH/AZIByQGTAf8D/jn/A/4B/wGzAdsBtAH/ATIBowE0Af8BIgGSASQB/wEiAZIBJAH/
ASIBkgEkAf8BEwGIARUB/wGSAckBkwH/AasB2AGsAf8BLgGiATIB/wE2AaQBOQH/ATYBpAE5Af8BMgGj
ATQB/wETAYgBFQH/AZIByQGTAf8D/jn/A/4B/wGzAdsBtAH/ATIBowE0Af8BIgGSASQB/wEiAZIBJAH/
ASIBkgEkAf8BEwGIARUB/wGSAckBkwH/A+kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A/lB/wHoAfUB6AH/
AUsBsAFNAf8BJgGYASkB/wEfAZIBIQH/AR8BkgEhAf8BEwGIARUB/wFqAbQBawH/AaoB/AGxAf8BdQHx
AX4B/wF6AfIBgQH/AXoB8gGBAf8BaAHlAXEB/wFCAcsBSgH/AeAB8QHhQf8B6AH1AegB/wFLAbABTQH/
ASYBmAEpAf8BHwGSASEB/wEfAZIBIQH/ARMBiAEVAf8BagG0AWsB/wGEAcgBhgH/ASkBoAEsAf8BNgGk
ATkB/wE2AaQBOQH/ASoBmgEtAf8BIgGSASQB/wHbAewB20H/AegB9QHoAf8BSwGwAU0B/wEmAZgBKQH/
ASIBkgEkAf8BIgGSASQB/wETAYgBFQH/AWoBtAFrAf8BhAHIAYYB/wEpAaABLAH/ATYBpAE5Af8BNgGk
ATkB/wEqAZoBLQH/ASEBjAEjAf8B2wHsAdtB/wHoAfUB6AH/AUsBsAFNAf8BJgGYASkB/wEiAZIBJAH/
ASIBkgEkAf8BEwGIARUB/wFqAbQBawH/A+IB/wPZAf8D2QH/A9kB/wPZAf8D4gH/A/5B/wP+Af8BbQHA
AW8B/wEmAZgBKQH/AR8BigEhAf8BHwGSASEB/wEXAYwBGQH/AUkBpQFMAf8BmgH5AaEB/wF4AfIBgQH/
AXoB8gGBAf8BegHyAYEB/wFaAeABYwH/AVkBzwFhAf8B+QH8AflB/wP+Af8BbQHAAW8B/wEmAZgBKQH/
AR8BigEhAf8BHwGSASEB/wEXAYwBGQH/AUkBpQFMAf8BaQG7AWsB/wEuAaIBMgH/ATYBpAE5Af8BNgGk
ATkB/wEiAZIBJAH/AT8BnQFBAf8B+QH8AflB/wP+Af8BbQHAAW8B/wEmAZgBKQH/AR8BigEhAf8BIgGS
ASQB/wEXAYwBGQH/AUkBpQFMAf8BaQG7AWsB/wEuAaIBMgH/ATYBpAE5Af8BNgGkATkB/wEiAZIBJAH/
AT4BmwFAAf8B+QH8AflB/wP+Af8BbQHAAW8B/wEjAZkBJgH/AR8BigEhAf8BHwGSASEB/wEXAYwBGQH/
AUkBpQFMAf8B9QH0AfUB/wPxAf8D8QH/A/EB/wPxAf8B9QH0AfUB/wP+Qf8D/gH/AdIB6gHSAf8BuAHd
AbkB/wGzAdsBtAH/AbMB2wG0Af8BswHbAbQB/wHBAeIBwgH/Ad0B+wHgAf8B0QH6AdQB/wHRAfoB1AH/
AdQB/AHYAf8ByAH0AcwB/wHIAfQBzAH/A/5B/wP+Af8B0gHqAdIB/wG5AeABugH/AbMB2wG0Af8BswHb
AbQB/wGzAdsBtAH/AcEB4gHCAf8ByQHiAckB/wG5AeABugH/AbkB4AG6Af8BuQHgAboB/wGzAdsBtAH/
AcEB4gHCAf8D/kH/A/4B/wHSAeoB0gH/AbkB4AG6Af8BswHbAbQB/wGzAdsBtAH/AbMB2wG0Af8BvwHg
AcAB/wHJAeIByQH/AbkB4AG6Af8BuQHgAboB/wG5AeABugH/AbMB2wG0Af8BwQHiAcIB/wP+Qf8D/gH/
AdIB6gHSAf8BuAHdAbkB/wGzAdsBtAH/AbMB2wG0Af8BswHbAbQB/wHBAeIBwgH/A+kB/wPiAf8D4gH/
A+IB/wPiAf8D7AH/A/5B/wP+Af8BpAHYAaUB/wFwAbkBcgH/AWoBtAFrAf8BagG0AWsB/wFqAbQBawH/
AX8BvAGBAf8B7QHoAe0B/wHoAeQB6AH/AegB5AHoAf8B6AHkAegB/wHoAeQB6AH/AfEB7AHxAf8D/kH/
A/4B/wGkAdgBpQH/AXABuQFyAf8BagG0AWsB/wFqAbQBawH/AWoBtAFrAf8BfwG8AYEB/wGSAdABkwH/
AXwBwgF9Af8BfAHCAX0B/wF8AcIBfQH/AWkBuwFrAf8BiQHCAYoB/wP+Qf8D/gH/AaQB2AGlAf8BcAG5
AXIB/wFqAbQBawH/AWoBtAFrAf8BagG0AWsB/wF/AcEBgQH/AZIB0AGTAf8BfAHCAX0B/wF8AcIBfQH/
AXwBwgF9Af8BaQG7AWsB/wGJAcIBigH/A/5B/wP+Af8BpAHYAaUB/wFwAbkBcgH/AWoBtAFrAf8BagG0
AWsB/wFqAbQBawH/AX8BvAGBAf8D4gH/A9YB/wPZAf8D2QH/A9YB/wPcAf8D/kH/A/4B/wFiAboBYwH/
AR8BkgEhAf8BGgGMARwB/wEcAZABHgH/ARMBiAEVAf8BSQGlAUwB/wPiAf8D1gH/A9kB/wPZAf8D1gH/
A9wB/wP+Qf8B+QH8AfkB/wFiAboBYwH/AR8BkgEhAf8BGgGMARwB/wEcAZABHgH/ARMBiAEVAf8BSQGl
AUwB/wFpAbsBawH/ASkBoAEsAf8BMgGjATQB/wEyAaMBNAH/ARwBkAEeAf8BNAGVATYB/wH5AfwB+UH/
AfkB/AH5Af8BYgG6AWMB/wEfAZIBIQH/ARoBjAEcAf8BHAGQAR4B/wETAYgBFQH/AUkBpQFMAf8BaQG7
AWsB/wEpAaABLAH/ATIBowE0Af8BMgGjATQB/wEcAZABHgH/ATQBlQE2Af8B+QH8AflB/wH7Af4B/AH/
AWIBugFjAf8BHwGSASEB/wEaAYwBHAH/ARwBkAEeAf8BEwGIARUB/wFJAaUBTAH/A+kB/wPZAf8D2QH/
A9kB/wPZAf8D2QH/A/lB/wHgAfEB4QH/AUMBqwFFAf8BKgGaAS0B/wEiAZIBJAH/ASIBkgEkAf8BGgGM
ARwB/wFwAbkBcgH/A+kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A/lB/wHgAfEB4QH/AUMBqwFFAf8BKgGa
AS0B/wEiAZIBJAH/ASIBkgEkAf8BFwGMARkB/wFwAbkBcgH/AYkByAGKAf8BMgGjATQB/wE7AakBPQH/
ATsBqQE9Af8BMgGjATQB/wEfAYoBIQH/AdcB6gHYQf8B5wH1AegB/wFDAasBRQH/ASoBmgEtAf8BIgGS
ASQB/wEiAZIBJAH/ARcBjAEZAf8BcAG5AXIB/wGJAcgBigH/ATIBowE0Af8BOwGpAT0B/wE7AakBPQH/
ATIBowE0Af8BHwGKASEB/wHXAeoB2EH/AeAB8QHhAf8BQwGrAUUB/wEqAZoBLQH/ASIBkgEkAf8BIgGS
ASQB/wEXAYwBGQH/AXABuQFyAf8D8QH/A9kB/wPZAf8D2QH/A9kB/wPWAf8D7AH/A/45/wP+Af8BqwHY
AawB/wEjAZkBJgH/AScBlgEpAf8BJwGWASkB/wEnAZYBKQH/ARoBjAEcAf8BmQHLAZkB/wPxAf8D2QH/
A9kB/wPZAf8D2QH/A9YB/wPsAf8D/jn/A/4B/wGrAdgBrAH/ASMBmQEmAf8BJwGWASkB/wEnAZYBKQH/
AScBlgEpAf8BGgGMARwB/wGZAcsBmQH/AbMB2wG0Af8BMgGjATQB/wE7AakBPQH/ATsBqQE9Af8BOwGp
AT0B/wEKAYMBDAH/AYkBwgGKAf8D/jn/A/4B/wGrAdgBrAH/ASMBmQEmAf8BJwGWASkB/wEnAZYBKQH/
AScBlgEpAf8BGgGMARwB/wGZAcsBmQH/AbMB2wG0Af8BMgGjATQB/wE7AakBPQH/ATsBqQE9Af8BOwGp
AT0B/wEKAYMBDAH/AYkBwgGKAf8D/jn/A/4B/wGrAdgBrAH/ASMBmQEmAf8BJwGWASkB/wEnAZYBKQH/
AScBlgEpAf8BGgGMARwB/wGZAcsBmQH/A/4B/wPcAf8D2QH/A9kB/wPZAf8D4gH/AfUB9AH1Af8D/jn/
AfkB/AH5Af8B2wHsAdsB/wF/AcEBgQH/AScBlgEpAf8BHwGSASEB/wEiAZIBJAH/ASoBmgEtAf8B2wHs
AdsB/wP5Af8D3AH/A9kB/wPZAf8D2QH/A+IB/wH1AfQB9QH/A/45/wH5AfwB+QH/AdsB7AHbAf8BfwHB
AYEB/wEnAZYBKQH/AR8BkgEhAf8BIgGSASQB/wEqAZoBLQH/AdsB7AHbAf8B5wH1AegB/wFKAawBTQH/
ATsBqQE9Af8BMgGjATQB/wEyAaMBNAH/AWEBsQFiAf8ByQHiAckB/wP+Of8B+QH8AfkB/wHbAewB2wH/
AX8BwQGBAf8BJwGWASkB/wEfAZIBIQH/ASIBkgEkAf8BKgGaAS0B/wHbAewB2wH/AeAB8QHhAf8BSwGw
AU0B/wE7AakBPQH/ATIBowE0Af8BMgGjATQB/wFnAbYBaQH/AckB4gHJAf8B+QH8Afk5/wH5AfwB+QH/
AdsB7AHbAf8BfwHBAYEB/wEnAZYBKQH/AR8BkgEhAf8BIgGSASQB/wEqAZoBLQH/AdsB7AHbAf8D/gH/
A+IB/wPWAf8D4gH/A/EB/wP5Af8D4gH/A+kB/wP+Mf8D/gH/AYkByAGKAf8BWwGxAV0B/wHSAeoB0gH/
AckB4gHJAf8BWwGxAV0B/wETAYgBFQH/AWEBsQFiAf8D/gH/A/4B/wPiAf8D1gH/A+IB/wPxAf8D+QH/
A+IB/wPpAf8D/jH/A/4B/wGJAcgBigH/AVsBsQFdAf8B0gHqAdIB/wHJAeIByQH/AVsBsQFdAf8BEwGI
ARUB/wFhAbEBYgH/A/4B/wP+Af8BfAHCAX0B/wEpAaABLAH/AVsBsQFdAf8BuQHgAboB/wHqAfgB6wH/
AYMB4QGJAf8BhQHaAYoB/wP+Mf8D/gH/AYkByAGKAf8BWwGxAV0B/wHSAeoB0gH/AckB4gHJAf8BWwGx
AV0B/wETAYgBFQH/AWEBsQFiAf8D/gH/A/4B/wF8AcIBfQH/ASkBoAEsAf8BWwGxAV0B/wG5AeABugH/
AeAB8QHhAf8BYQGxAWIB/wF0AbUBdQH/A/4x/wP+Af8BiQHIAYoB/wFbAbEBXQH/AdIB6gHSAf8ByQHi
AckB/wFbAbEBXQH/ARMBiAEVAf8BYQGxAWIB/wP+Af8D/gH/AfUB9AH1Af8D7AH/A/kB/wPsAf8D3AH/
A9kB/wPZAf8D7AH/A/4p/wP+Af8BoAHRAaEB/wEjAZkBJgH/ASIBkgEkAf8BKgGaAS0B/wF8AcIBfQH/
AdIB6gHSAf8BoAHRAaEB/wHBAeIBwgH/A/4B/wP+Af8B9QH0AfUB/wPsAf8D+QH/A+wB/wPcAf8D2QH/
A9kB/wPsAf8D/in/A/4B/wGgAdEBoQH/ASIBkgEkAf8BIgGSASQB/wEqAZoBLQH/AXwBwgF9Af8B0gHq
AdIB/wGgAdEBoQH/AcEB4gHCAf8D/gH/A/4B/wHLAegBywH/AZoB0gGbAf8B4AH4AeIB/wHFAfoByQH/
AZIB+wGZAf8BagHoAXQB/wE1AcUBPgH/AZsB4gGgAf8D/in/A/4B/wGgAdEBoQH/ASMBmQEmAf8BIgGS
ASQB/wEqAZoBLQH/AXwBwgF9Af8B0gHqAdIB/wGgAdEBoQH/AcEB4gHCAf8D/gH/A/4B/wHOAesB0AH/
AZoB0gGbAf8B3AHwAd0B/wGaAdIBmwH/AUUBsAFHAf8BJgGYASkB/wESAYQBFAH/AZABxQGRAf8D/in/
A/4B/wGgAdEBoQH/ASMBmQEmAf8BIgGSASQB/wEqAZoBLQH/AXwBwgF9Af8B0gHqAdIB/wGgAdEBoQH/
AcEB4gHCAf8D/gX/A/4B/wH1AfQB9QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A+kB/wP+Af8D/hn/
A/4B/wP+Af8BmQHLAZkB/wEcAZABHgH/ASoBmgEtAf8BLgGcATEB/wEqAZoBLQH/AR8BkgEhAf8BLgGc
ATEB/wG4Ad0BuQH/A/4J/wP+Af8B9QH0AfUB/wPcAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPpAf8D/gH/
A/4Z/wP+Af8D/gH/AZkBywGZAf8BHAGQAR4B/wEqAZoBLQH/AS4BnAExAf8BKgGaAS0B/wEfAZIBIQH/
AS4BnAExAf8BuAHdAbkB/wP+Cf8D/gH/AeoB+AHrAf8BkgH7AZkB/wGDAfkBjAH/AYMB+QGMAf8BiQH6
AZEB/wFqAegBdAH/ATUBxQE+Af8BjwHdAZQB/wP+Af8D/hn/A/4B/wP+Af8BmQHLAZkB/wEcAZABHgH/
ASoBmgEtAf8BLgGcATEB/wEqAZoBLQH/AR8BkgEhAf8BLgGcATEB/wG4Ad0BuQH/A/4J/wP+Af8B0gHq
AdIB/wFSAbIBVAH/ATIBowE0Af8BOwGpAT0B/wE/AakBQQH/AS4BnAExAf8BEgGEARQB/wF/AbwBgQH/
A/4B/wP+Gf8D/gH/A/4B/wGZAcsBmQH/ARwBkAEeAf8BKgGaAS0B/wEuAZwBMQH/ASoBmgEtAf8BHwGS
ASEB/wEuAZwBMQH/AbgB3QG5Af8D/gn/A/4B/wP5Af8D3AH/A9kB/wPZAf8D2QH/A9kB/wPWAf8D6QH/
A/EB/wPsAf8D+QH/A/4B/wP+Af8D/gH/AfkB/AH5Af8B4AHvAeAB/wGJAcIBigH/AZYByQGYAf8BqgHS
AasB/wEjAZkBJgH/AS4BnAExAf8BLgGcATEB/wEqAZoBLQH/ASYBmAEpAf8BMQGdATMB/wHSAeoB0gH/
A/4J/wP+Af8D+QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D1gH/A+kB/wPxAf8D7AH/A/kB/wP+Af8D/gH/
A/4B/wH5AfwB+QH/AeAB7wHgAf8BiQHCAYoB/wGWAckBmAH/AaoB0gGrAf8BIwGZASYB/wEuAZwBMQH/
AS4BnAExAf8BKgGaAS0B/wEmAZgBKQH/AS4BnAExAf8B0gHqAdIB/wP+Cf8D/gH/AeoB+AHrAf8BkgH7
AZkB/wGDAfkBjAH/AYkB+gGRAf8BiQH6AZEB/wGJAfoBkQH/AWoB6AF0Af8BmAHlAZwB/wH1AfQB9QH/
A+wB/wP5Af8D/gH/A/4B/wP+Af8B+QH8AfkB/wHgAfEB4QH/AYkBwgGKAf8BlgHJAZgB/wGqAdIBqwH/
ASMBmQEmAf8BLgGcATEB/wEuAZwBMQH/ASoBmgEtAf8BJgGYASkB/wEuAZwBMQH/AdIB6gHSAf8D/gn/
A/4B/wHgAfEB4QH/AUsBsAFNAf8BOAGoAToB/wE/AakBQQH/ATsBqQE9Af8BPwGpAUEB/wEjAZkBJgH/
AYkBwgGKAf8BqgHSAasB/wGCAb0BgwH/AdsB7AHbAf8B+QH8AfkB/wP+Af8D/gH/A/4B/wHgAfEB4QH/
AZ4B8wGkAf8BqQHpAa0B/wGqAdIBqwH/ASIBkgEkAf8BLgGcATEB/wEuAZwBMQH/ASoBmgEtAf8BJgGY
ASkB/wEuAZwBMQH/AdIB6gHSAf8D/g3/A/4B/wPxAf8D2QH/A9kB/wPZAf8D2QH/A+IB/wP5Af8D3AH/
A9YB/wPZAf8D3AH/AfgB8gH4Af8BqgHSAasB/wE0AZUBNgH/ASEBjAEjAf8BEwGIARUB/wEqAZoBLQH/
AdIB6gHSAf8BcgG8AXQB/wEmAZgBKQH/AS4BnAExAf8BKgGaAS0B/wEmAZgBKQH/AasB2AGsAf8D/hH/
A/4B/wPxAf8D2QH/A9kB/wPZAf8D2QH/A+IB/wP5Af8D3AH/A9YB/wPZAf8D3AH/AfgB8gH4Af8BqgHS
AasB/wE0AZUBNgH/ASEBjAEjAf8BEwGIARUB/wEqAZoBLQH/AdIB6gHSAf8BcgG8AXQB/wEmAZgBKQH/
AS4BnAExAf8BKgGaAS0B/wEmAZgBKQH/AasB2AGsAf8D/hH/A/4B/wHYAfoB2wH/AYkB+gGRAf8BiQH6
AZEB/wGJAfoBkQH/AYMB+QGMAf8BmgH5AaEB/wHwAfkB8QH/AeEB3gHhAf8D1gH/AdwB2gHcAf8D3AH/
AfgB8gH4Af8BqgHSAasB/wE0AZUBNgH/ASEBjAEjAf8BEwGIARUB/wEqAZoBLQH/AdIB6gHSAf8BcgG8
AXQB/wEmAZgBKQH/AS4BnAExAf8BKgGaAS0B/wEmAZgBKQH/AasB2AGsAf8D/hH/A/4B/wG5AeABugH/
ATsBqQE9Af8BOwGpAT0B/wE/AakBQQH/ATYBpAE5Af8BXwG6AWEB/wHgAfEB4QH/AUIBogFEAf8BEAGI
AREB/wEfAYoBIQH/ATQBlQE2Af8BmQHLAZkB/wG5AewBvAH/AUwBzQFUAf8BTAHNAVQB/wFMAc0BVAH/
AWIB4gFsAf8B4AH4AeIB/wFyAbwBdAH/ASYBmAEpAf8BLgGcATEB/wEqAZoBLQH/ASYBmAEpAf8BqwHY
AawB/wP+Ff8D/gH/A/EB/wPZAf8D2QH/A9kB/wPxAf8D7AH/A9kB/wPZAf8D2QH/A9YB/wHxAewB8QH/
AZIByQGTAf8BFwGRARoB/wEuAZwBMQH/ATIBowE0Af8BKgGaAS0B/wFyAbwBdAH/AdIB6gHSAf8BMgGj
ATQB/wEmAZgBKQH/ASoBmgEtAf8BoAHRAaEB/wP+Gf8D/gH/A/EB/wPZAf8D2QH/A9kB/wPxAf8D7AH/
A9kB/wPZAf8D2QH/A9YB/wHxAewB8QH/AZIByQGTAf8BFwGRARoB/wEuAZwBMQH/ATIBowE0Af8BKgGa
AS0B/wFyAbwBdAH/AdIB6gHSAf8BMgGjATQB/wEmAZgBKQH/ASoBmgEtAf8BoAHRAaEB/wP+Gf8D/gH/
AdEB+gHUAf8BiQH6AZEB/wGDAfkBjAH/AYMB+QGMAf8B0QH6AdQB/wHxAewB8QH/A9kB/wPZAf8D2QH/
A9YB/wHxAewB8QH/AZIByQGTAf8BFwGRARoB/wEuAZwBMQH/ATIBowE0Af8BKgGaAS0B/wFyAbwBdAH/
AdIB6gHSAf8BMgGjATQB/wEmAZgBKQH/ASoBmgEtAf8BoAHRAaEB/wP+Gf8D/gH/AbMB2wG0Af8BOwGp
AT0B/wE4AagBOgH/ATYBpAE5Af8BuQHgAboB/wGaAdIBmwH/ATIBowE0Af8BOwGpAT0B/wEyAaMBNAH/
ARwBkAEeAf8BhQHCAYYB/wG0AfMBuAH/AVQB4AFdAf8BagHoAXQB/wFxAesBegH/AWoB6AF0Af8BngHz
AaQB/wHSAeoB0gH/ATIBowE0Af8BJgGYASkB/wEqAZoBLQH/AaAB0QGhAf8D/h3/A/4B/wPxAf8D3AH/
A+IB/wH1AfQB9QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8B8QHsAfEB/wGaAdIBmwH/ASkBoAEsAf8BNgGk
ATkB/wE2AaQBOQH/ATIBowE0Af8BKgGaAS0B/wG5AeABugH/AYkByAGKAf8BNgGkATkB/wGzAdsBtAH/
A/4h/wP+Af8D8QH/A9wB/wPiAf8B9QH0AfUB/wPZAf8D2QH/A9kB/wPZAf8D2QH/AfEB7AHxAf8BmgHS
AZsB/wEpAaABLAH/ATYBpAE5Af8BNgGkATkB/wEyAaMBNAH/ASoBmgEtAf8BuQHgAboB/wGJAcgBigH/
ATYBpAE5Af8BswHbAbQB/wP+If8D/gH/AdgB+gHbAf8BkgH7AZkB/wGkAfoBqwH/AfUB9AH1Af8B3AHa
AdwB/wPZAf8D2QH/A9kB/wPZAf8B8QHsAfEB/wGaAdIBmwH/ASkBoAEsAf8BNgGkATkB/wE2AaQBOQH/
ATIBowE0Af8BKgGaAS0B/wG5AeABugH/AYkByAGKAf8BNgGkATkB/wGzAdsBtAH/A/4h/wP+Af8BwQHi
AcIB/wFLAbABTQH/AW0BwAFvAf8B0gHqAdIB/wFDAasBRQH/ATsBqQE9Af8BOwGpAT0B/wE7AakBPQH/
AS4BogEyAf8BkgHJAZMB/wHFAfoByQH/AXUB8QF+Af8BegHyAYEB/wF6AfIBgQH/AXEB6wF6Af8BagHo
AXQB/wHRAfoB1AH/AYUBwgGGAf8BNgGkATkB/wGzAdsBtAH/A/4l/wP+Af8D+QH/A/kB/wPiAf8D1gH/
A9kB/wPZAf8D2QH/A9kB/wHxAewB8QH/AZoB0gGbAf8BKQGgASwB/wE2AaQBOQH/ATYBpAE5Af8BMgGj
ATQB/wEjAZkBJgH/AVYBsQFZAf8B4AHxAeEB/wHgAfEB4QH/A/4p/wP+Af8D+QH/A/kB/wPiAf8D1gH/
A9kB/wPZAf8D2QH/A9kB/wHxAewB8QH/AZoB0gGbAf8BKQGgASwB/wE2AaQBOQH/ATYBpAE5Af8BMgGj
ATQB/wEjAZkBJgH/AVYBsQFZAf8B4AHxAeEB/wHgAfEB4QH/A/4p/wP+Af8B6gH4AesB/wHqAfgB6wH/
AegB5AHoAf8D1gH/A9kB/wPZAf8D2QH/A9kB/wHxAewB8QH/AZoB0gGbAf8BKQGgASwB/wE2AaQBOQH/
ATYBpAE5Af8BMgGjATQB/wEjAZkBJgH/AVYBsQFZAf8B4AHxAeEB/wHgAfEB4QH/A/4p/wP+Af8B4AHx
AeEB/wHcAfAB3QH/AXwBwgF9Af8BKQGgASwB/wE7AakBPQH/ATsBqQE9Af8BOwGpAT0B/wEuAaIBMgH/
AZIByQGTAf8BxQH6AckB/wF1AfEBfgH/AXoB8gGBAf8BegHyAYEB/wFxAesBegH/AWoB6AF0Af8BggHx
AYoB/wHgAfEB4QH/AdwB8AHdAf8D/i3/A/4B/wP+Af8B9QH0AfUB/wPpAf8D3AH/A9kB/wPWAf8D1gH/
AfEB7AHxAf8BmgHSAZsB/wEjAZkBJgH/ASkBoAEsAf8BMgGjATQB/wFDAasBRQH/AXwBwgF9Af8BxwHl
AcgB/wP+Af8D/jH/A/4B/wP+Af8B9QH0AfUB/wPpAf8D3AH/A9kB/wPWAf8D1gH/AfEB7AHxAf8BmgHS
AZsB/wEjAZkBJgH/ASkBoAEsAf8BMgGjATQB/wFDAasBRQH/AXwBwgF9Af8BxwHlAcgB/wP+Af8D/jH/
A/4B/wP+Af8B9QH0AfUB/wHoAeQB6AH/A9wB/wPZAf8D1gH/A9YB/wHxAewB8QH/AZoB0gGbAf8BIwGZ
ASYB/wEpAaABLAH/ATIBowE0Af8BQwGrAUUB/wF8AcIBfQH/AccB5QHIAf8D/gH/A/4x/wP+Af8D/gH/
Ac4B6wHQAf8BhAHIAYYB/wFLAbABTQH/ATgBqAE6Af8BLgGiATIB/wEnAaABKQH/AYkByAGKAf8BxQH6
AckB/wF1AfEBfgH/AXUB8QF+Af8BdQHxAX4B/wGCAfEBigH/AaUB8gGqAf8B2AH6AdsB/wP+Af8D/jn/
A/4B/wP+Af8D/gH/A/EB/wPpAf8D4gH/AfgB8gH4Af8BswHbAbQB/wFpAbsBawH/AY4BzQGQAf8BuQHg
AboB/wHoAfUB6AH/A/4B/wP+Qf8D/gH/A/4B/wP+Af8D8QH/A+kB/wPiAf8B+AHyAfgB/wGzAdsBtAH/
AWkBuwFrAf8BjgHNAZAB/wG5AeABugH/AegB9QHoAf8D/gH/A/5B/wP+Af8D/gH/A/4B/wH1AfQB9QH/
A+wB/wPiAf8B+AHyAfgB/wGzAdsBtAH/AWkBuwFrAf8BjgHNAZAB/wG5AeABugH/AegB9QHoAf8D/gH/
A/5B/wP+Af8D/gH/AeoB+AHrAf8BuQHgAboB/wGSAdABkwH/AW0BwAFvAf8BqgHSAasB/wHRAfoB1AH/
AZ4B8wGkAf8BtAHzAbgB/wHRAfoB1AH/AfAB+QHxAf8D/gH/A/5J/wP+Af8D9gH/A+wB/wPjAf8D9QH/
A/cB/wPiAf8D6wH/A/YB/wP+Sf8D/gH/A/4B/wP5Af8D8QH/A+kB/wPiAf8D7AH/A/EB/wPiAf8D4gH/
A+wB/wP5Af8D/gH/A/5B/wP+Af8D/gH/A/kB/wPxAf8D6QH/A+IB/wPsAf8D8QH/A+IB/wPiAf8D7AH/
A/kB/wP+Af8D/kH/A/4B/wP+Af8D+QH/A/EB/wPpAf8D4gH/A+wB/wPxAf8D4gH/A+IB/wPsAf8D+QH/
A/4B/wP+Qf8D+wH/A+cB/wPbAf8D2gH/A9oB/wPaAf8D8AH/A/QB/wPaAf8D2gH/A9oB/wPbAf8D5gH/
A/k5/wP+Af8D/gH/AfUB9AH1Af8D4gH/A9kB/wPZAf8D2QH/A9YB/wPpAf8D7AH/A9YB/wPZAf8D2QH/
A9kB/wPiAf8D8QH/A/4B/wP+Mf8D/gH/A/4B/wH1AfQB9QH/A+IB/wPZAf8D2QH/A9kB/wPWAf8D6QH/
A+wB/wPWAf8D2QH/A9kB/wPZAf8D4gH/A/EB/wP+Af8D/jH/A/4B/wP+Af8B9QH0AfUB/wPiAf8D2QH/
A9kB/wPZAf8D1gH/A+kB/wPsAf8D1gH/A9kB/wPZAf8D2QH/A+IB/wPxAf8D/gH/A/4x/wP9Af8D+wH/
A/MB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A/AB/wP0Af8D2gH/A9oB/wPaAf8D2gH/A9oB/wPsAf8D/QH/
A/wt/wP+Af8B9QH0AfUB/wH1AfQB9QH/A+wB/wPWAf8D2QH/A9kB/wPZAf8D2QH/A+kB/wPsAf8D2QH/
A9kB/wPZAf8D2QH/A9YB/wPiAf8B9QH0AfUB/wH1AfQB9QH/A/4p/wP+Af8B9QH0AfUB/wH1AfQB9QH/
A+wB/wPWAf8D2QH/A9kB/wPZAf8D2QH/A+kB/wPsAf8D2QH/A9kB/wPZAf8D2QH/A9YB/wPiAf8B9QH0
AfUB/wH1AfQB9QH/A/4p/wP+Af8B9QH0AfUB/wH1AfQB9QH/A+wB/wPWAf8D2QH/A9kB/wPZAf8D2QH/
A+kB/wPsAf8D2QH/A9kB/wPZAf8D2QH/A9YB/wHoAeQB6AH/AdAB8wHTAf8BzQHzAdAB/wP+Kf8D9wH/
A9sB/wPeAf8D/gH/A+IB/wPaAf8D2gH/A9oB/wPaAf8D8AH/A/QB/wPaAf8D2gH/A9oB/wPaAf8D3QH/
A/0B/wPlAf8D2gH/A/Ul/wP+Af8D8QH/A9kB/wPcAf8D+QH/A+IB/wPZAf8D2QH/A9kB/wPZAf8D6QH/
A+wB/wPZAf8D2QH/A9kB/wPZAf8D3AH/AfUB9AH1Af8D4gH/A9kB/wPsAf8D/iH/A/4B/wPxAf8D2QH/
A9wB/wP5Af8D4gH/A9kB/wPZAf8D2QH/A9kB/wPpAf8D7AH/A9kB/wPZAf8D2QH/A9kB/wPcAf8B9QH0
AfUB/wPiAf8D2QH/A+wB/wP+If8D/gH/A/EB/wPZAf8D3AH/A/kB/wPiAf8D2QH/A9kB/wPZAf8D2QH/
A+kB/wPsAf8D2QH/A9kB/wPZAf8D2QH/A9wB/wHzAfcB8wH/AWwB2wF0Af8BQgHLAUoB/wGsAeoBsAH/
A/4h/wPzAf8D2gH/A9oB/wPaAf8D8gH/A/sB/wPaAf8D2gH/A9oB/wPaAf8D8AH/A/QB/wPaAf8D2gH/
A9oB/wPaAf8D9QH/A/kB/wPaAf8D2gH/A9oB/wPwHf8D/gH/A+wB/wPZAf8D2QH/A9kB/wPsAf8D8QH/
A9kB/wPZAf8D2QH/A9YB/wPpAf8D7AH/A9YB/wPZAf8D2QH/A9kB/wPsAf8D8QH/A9kB/wPZAf8D2QH/
A+kB/wP+Gf8D/gH/A+wB/wPZAf8D2QH/A9kB/wPsAf8D8QH/A9kB/wPZAf8D2QH/A9YB/wPpAf8D7AH/
A9YB/wPZAf8D2QH/A9kB/wPsAf8D8QH/A9kB/wPZAf8D2QH/A+kB/wP+Gf8D/gH/A+wB/wPZAf8D2QH/
A9kB/wPsAf8D8QH/A9kB/wPZAf8D2QH/A9YB/wPpAf8D7AH/A9YB/wPZAf8D2QH/A9kB/wHxAewB8QH/
AbQB7AG4Af8BQgHLAUoB/wFCAcsBSgH/ATwBywFFAf8BmwHiAaAB/wP+Gf8D9wH/A9oB/wPaAf8D2gH/
A9oB/wPcAf8D/QH/A+kB/wPaAf8D3QH/A+UB/wP6Af8D+wH/A+UB/wPeAf8D2gH/A+EB/wP+Af8D4AH/
A9oB/wPaAf8D2gH/A9oB/wP0Ff8D/gH/A/EB/wPZAf8D2QH/A9kB/wPZAf8D2QH/AfUB9AH1Af8D4gH/
A9YB/wPcAf8D4gH/A/EB/wH1AfQB9QH/A+IB/wPcAf8D2QH/A9wB/wP5Af8D3AH/A9kB/wPZAf8D2QH/
A9kB/wPsAf8D/hH/A/4B/wPxAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wH1AfQB9QH/A+IB/wPWAf8D3AH/
A+IB/wPxAf8B9QH0AfUB/wPiAf8D3AH/A9kB/wPcAf8D+QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D7AH/
A/4R/wP+Af8D8QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8B9QH0AfUB/wPiAf8D1gH/A9wB/wPiAf8D8QH/
AfUB9AH1Af8D4gH/A9wB/wPZAf8B4QHeAeEB/wHqAfgB6wH/AVoB3QFjAf8BQgHQAUsB/wFJAdIBUgH/
AUIB0AFLAf8BPAHLAUUB/wGpAekBrQH/A/4R/wP+Af8D3AH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D6AH/
A/0B/wP5Gf8D+QH/A/wB/wPwAf8D2gH/A9oB/wPaAf8D2gH/A9oB/wPbAf8D/Q3/A/4B/wP5Af8D2QH/
A9kB/wPZAf8D2QH/A9kB/wPZAf8D4gH/A/kB/wPxAf8D/gH/A/4B/wP+Af8D/gH/A/4B/wP+Af8D8QH/
AfUB9AH1Af8D6QH/A9YB/wPZAf8D2QH/A9kB/wPZAf8D2QH/AfUB9AH1Af8D/gn/A/4B/wP5Af8D2QH/
A9kB/wPZAf8D2QH/A9kB/wPZAf8D4gH/A/kB/wPxAf8D/gH/A/4B/wP+Af8D/gH/A/4B/wP+Af8D8QH/
AfUB9AH1Af8D6QH/A9YB/wPZAf8D2QH/A9kB/wPZAf8D2QH/AfUB9AH1Af8D/gn/A/4B/wP5Af8D2QH/
A9kB/wPZAf8D2QH/A9kB/wPZAf8D4gH/A/kB/wPxAf8D/gH/A/4B/wP+Af8D/gH/A/4B/wP+Af8D8QH/
AfgB8gH4Af8BvAH7AcEB/wFaAeABYwH/AUkB0gFSAf8BSQHSAVIB/wFJAdIBUgH/AUIBywFKAf8BQgHL
AUoB/wHWAfQB2AH/A/4N/wP+Af8D8AH/A9sB/wPaAf8D2gH/A9oB/wPaAf8D9Cn/A/YB/wPbAf8D2gH/
A9oB/wPaAf8D2gH/A+oB/wP+Df8D/gH/A/kB/wPpAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPsAf8D/gH/
A/4Z/wP+Af8D/gH/A+wB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A+IB/wP5Af8D/gn/A/4B/wP5Af8D6QH/
A9kB/wPZAf8D2QH/A9kB/wPZAf8D7AH/A/4B/wP+Gf8D/gH/A/4B/wPsAf8D2QH/A9kB/wPZAf8D2QH/
A9kB/wPiAf8D+QH/A/4J/wP+Af8D+QH/A+kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A+wB/wP+Af8D/hn/
A/4B/wP+Af8B0QH6AdQB/wGaAfkBoQH/AWsB5QF0Af8BSAHSAVEB/wFCAdABSwH/AUIB0AFLAf8BiAHi
AY8B/wHgAfgB4gH/A/4J/wP6Af8D4QH/A/oB/wP9Af8D6QH/A9oB/wPaAf8D+TH/A/sB/wPbAf8D2gH/
A+QB/wP8Af8D/AH/A+UB/wP5Bf8D/gH/A/EB/wPiAf8B9QH0AfUB/wH1AfQB9QH/A+IB/wPZAf8D2QH/
A/EB/wP+Kf8D/gH/A/EB/wPZAf8D2QH/A+IB/wH1AfQB9QH/AfUB9AH1Af8D4gH/A/EB/wP+Af8D/gH/
A/EB/wPiAf8B9QH0AfUB/wH1AfQB9QH/A+IB/wPZAf8D2QH/A/EB/wP+Kf8D/gH/A/EB/wPZAf8D2QH/
A+IB/wH1AfQB9QH/AfUB9AH1Af8D4gH/A/EB/wP+Af8D/gH/A/EB/wPiAf8B9QH0AfUB/wH1AfQB9QH/
A+IB/wPZAf8D2QH/A/EB/wP+Kf8D/gH/Ad0B+wHgAf8BmgH5AaEB/wFaAeABYwH/AXQB3AF7Af8BzQHz
AdAB/wHJAeIByQH/AVQBpwFVAf8BqgHSAasB/wP+Bf8D6AH/A9oB/wPaAf8D6AH/A/0B/wP5Af8D9zn/
A/cB/wP2Af8D/gH/A+4B/wPbAf8D2gH/A+UF/wP+Af8D4gH/A9YB/wPZAf8D4gH/AfUB9AH1Af8D8QH/
A+wB/wP+Mf8D/gH/A+wB/wPxAf8D+QH/A+kB/wPZAf8D1gH/A+IB/wP+Af8D/gH/A+IB/wPWAf8D2QH/
A+IB/wH1AfQB9QH/A/EB/wPsAf8D/jH/A/4B/wPsAf8D8QH/A/kB/wPpAf8D2QH/A9YB/wPiAf8D/gH/
A/4B/wPiAf8D1gH/A9kB/wPiAf8B9QH0AfUB/wPxAf8D7AH/A/4x/wP+Af8B0QH6AdQB/wHUAfwB2AH/
AdsB7AHbAf8BcgG8AXQB/wEfAYoBIQH/AQoBgwEMAf8BUwGpAVUB/wP+Af8D/gH/A9wB/wPaAf8D2gH/
A9oB/wPaAf8D9kH/A/oB/wPdAf8D2gH/A9oB/wPaAf8D2wH/A/0B/wP5Af8D3AH/A9kB/wPZAf8D2QH/
A9kB/wPsAf8D/jn/A/4B/wPxAf8D3AH/A9kB/wPZAf8D2QH/A9kB/wP5Af8D+QH/A9wB/wPZAf8D2QH/
A9kB/wPZAf8D7AH/A/45/wP+Af8D8QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D+QH/A/kB/wPcAf8D2QH/
A9kB/wPZAf8D2QH/A+wB/wP+Of8D/gH/AbkB4AG6Af8BQAGnAUIB/wETAYgBFQH/AR8BigEhAf8BGgGM
ARwB/wEiAZIBJAH/AdIB6gHSAf8D+AH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D9kH/A/kB/wPaAf8D2gH/
A9oB/wPaAf8D2gH/A/UB/wPxAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPsAf8D/jn/A/4B/wPsAf8D2QH/
A9kB/wPZAf8D2QH/A9kB/wPsAf8D8QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D7AH/A/45/wP+Af8D7AH/
A9kB/wPZAf8D2QH/A9kB/wPZAf8D7AH/A/EB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A+wB/wP+Of8D/gH/
AbMB2wG0Af8BMgGjATQB/wEiAZIBJAH/ASIBkgEkAf8BIgGSASQB/wETAYgBFQH/AZIByQGTAf8D7QH/
A9oB/wPaAf8D2gH/A9oB/wPcSf8D3QH/A9oB/wPaAf8D2gH/A9oB/wPrAf8D6QH/A9kB/wPZAf8D2QH/
A9kB/wPZAf8D+UH/A/kB/wPcAf8D2QH/A9kB/wPZAf8D2QH/A+IB/wPpAf8D2QH/A9kB/wPZAf8D2QH/
A9kB/wP5Qf8D+QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D4gH/A+kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/
A/lB/wHoAfUB6AH/AUsBsAFNAf8BJgGYASkB/wEiAZIBJAH/ASIBkgEkAf8BEwGIARUB/wFqAbQBawH/
A+YB/wPaAf8D2gH/A9oB/wPaAf8D4kn/A+YB/wPaAf8D2gH/A9oB/wPaAf8D4wH/A+IB/wPZAf8D2QH/
A9kB/wPZAf8D4gH/A/5B/wP+Af8D4gH/A9kB/wPZAf8D2QH/A9kB/wPiAf8D4gH/A9kB/wPZAf8D2QH/
A9kB/wPiAf8D/kH/A/4B/wPiAf8D2QH/A9kB/wPZAf8D2QH/A+IB/wPiAf8D2QH/A9kB/wPZAf8D2QH/
A+IB/wP+Qf8D/gH/AW0BwAFvAf8BJgGYASkB/wEfAYoBIQH/AR8BkgEhAf8BFwGMARkB/wFJAaUBTAH/
A/sB/wP5Af8D+QH/A/kB/wP5Af8D/Un/A/0B/wP5Af8D+QH/A/kB/wP5Af8D+wH/AfUB9AH1Af8D8QH/
A/EB/wPxAf8D8QH/AfUB9AH1Af8D/kH/A/4B/wH1AfQB9QH/A/EB/wPxAf8D8QH/A/EB/wH1AfQB9QH/
AfUB9AH1Af8D8QH/A/EB/wPxAf8D8QH/AfUB9AH1Af8D/kH/A/4B/wH1AfQB9QH/A/EB/wPxAf8D8QH/
AfQB8QHzAf8B9QH0AfUB/wH1AfQB9QH/A/EB/wPxAf8D8QH/A/EB/wH1AfQB9QH/A/5B/wP+Af8B0gHq
AdIB/wG4Ad0BuQH/AbMB2wG0Af8BswHbAbQB/wGzAdsBtAH/AcEB4gHCAf8D8AH/A+kB/wPqAf8D6gH/
A+kB/wP0Sf8D9gH/A+kB/wPqAf8D6gH/A+kB/wPvAf8D6QH/A+IB/wPiAf8D4gH/A+IB/wPsAf8D/kH/
A/4B/wPsAf8D4gH/A+IB/wPiAf8D4gH/A+kB/wPpAf8D4gH/A+IB/wPiAf8D4gH/A+wB/wP+Qf8D/gH/
AcUB+gHJAf8BlAHwAZoB/wGDAeEBiQH/AYMB4QGJAf8BgQHgAYYB/wGSAeYBmAH/A+kB/wPiAf8D4gH/
A+IB/wPiAf8D7AH/A/5B/wP+Af8BpAHYAaUB/wFwAbkBcgH/AWoBtAFrAf8BagG0AWsB/wFqAbQBawH/
AX8BvAGBAf8D5gH/A9oB/wPaAf8D2gH/A9oB/wPhSf8D5QH/A9oB/wPaAf8D2gH/A9oB/wPjAf8D4gH/
A9YB/wPZAf8D2QH/A9YB/wPcAf8D/kH/A/4B/wPiAf8D1gH/A9kB/wPZAf8D1gH/A+IB/wPiAf8D1gH/
A9kB/wPZAf8D1gH/A9wB/wP+Qf8D/gH/AZoB+QGhAf8BXwHiAWkB/wFJAdIBUgH/AUsB2QFUAf8BQgHQ
AUsB/wFsAdsBdAH/A+IB/wPWAf8D2QH/A9kB/wPWAf8D3AH/A/5B/wP+Af8BYgG6AWMB/wEfAZIBIQH/
ARoBjAEcAf8BHAGQAR4B/wETAYgBFQH/AUkBpQFMAf8D7gH/A9oB/wPaAf8D2gH/A9oB/wPbAf8D/kX/
A90B/wPaAf8D2gH/A9oB/wPaAf8D6wH/A+kB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A/lB/wP5Af8D3AH/
A9kB/wPZAf8D2QH/A9kB/wPiAf8D6QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D+UH/Ae8B/AHwAf8BggHx
AYoB/wFiAeIBbAH/AVUB2wFeAf8BVQHbAV4B/wFJAdIBUgH/AYwB5gGSAf8D6QH/A9kB/wPZAf8D2QH/
A9kB/wPZAf8D+UH/AeAB8QHhAf8BQwGrAUUB/wEqAZoBLQH/ASIBkgEkAf8BIgGSASQB/wEaAYwBHAH/
AXABuQFyAf8D+AH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D9kH/A/kB/wPaAf8D2gH/A9oB/wPaAf8D2gH/
A/YB/wPxAf8D2QH/A9kB/wPZAf8D2QH/A9YB/wPsAf8D/jn/A/4B/wPsAf8D1gH/A9kB/wPZAf8D2QH/
A9kB/wPsAf8D8QH/A9kB/wPZAf8D2QH/A9kB/wPWAf8D7AH/A/45/wP+Af8BxQH6AckB/wFnAewBcQH/
AVoB3QFjAf8BWgHdAWMB/wFVAdsBXgH/AUsB2QFUAf8BsAHsAbQB/wPxAf8D2QH/A9kB/wPZAf8D2QH/
A9YB/wPsAf8D/jn/A/4B/wGrAdgBrAH/ASMBmQEmAf8BJwGWASkB/wEnAZYBKQH/AScBlgEpAf8BGgGM
ARwB/wGZAcsBmQH/A/4B/wPdAf8D2gH/A9oB/wPaAf8D5gH/A/1B/wP+Af8D7AH/A9sB/wPaAf8D2gH/
A9wB/wP+Af8D+QH/A9wB/wPZAf8D2QH/A9kB/wPiAf8B9QH0AfUB/wP+Of8D/gH/A/kB/wPpAf8D2QH/
A9kB/wPZAf8D2QH/A/kB/wP5Af8D3AH/A9kB/wPZAf8D2QH/A+IB/wH1AfQB9QH/A/45/wH5AfwB+QH/
AeAB+AHiAf8BpQHyAaoB/wFaAd0BYwH/AVUB2wFeAf8BVQHbAV4B/wFaAd0BYwH/AeAB+AHiAf8D+QH/
A9wB/wPZAf8D2QH/A9kB/wPiAf8B9QH0AfUB/wP+Of8B+QH8AfkB/wHbAewB2wH/AX8BwQGBAf8BJwGW
ASkB/wEfAZIBIQH/ASIBkgEkAf8BKgGaAS0B/wHbAewB2wX/A+oB/wPaAf8D4AH/A/kB/wP+Af8D6gH/
A/A5/wPzAf8D5AH/A/0B/wP8Af8D5QH/A9oB/wPnBf8D/gH/A+IB/wPWAf8D4gH/A/EB/wP5Af8D4gH/
A+kB/wP+Mf8D/gH/A+kB/wPiAf8B9QH0AfUB/wH1AfQB9QH/A+IB/wPWAf8D4gH/A/4B/wP+Af8D4gH/
A9YB/wPiAf8D8QH/A/kB/wPiAf8D6QH/A/4x/wP+Af8BiQHIAYoB/wFZAawBWwH/AckB4gHJAf8B2AH6
AdsB/wGDAesBiwH/AUsB2QFUAf8BgwHhAYkB/wP+Af8D/gH/A+IB/wPWAf8D4gH/A/EB/wP5Af8D4gH/
A+kB/wP+Mf8D/gH/AYkByAGKAf8BWwGxAV0B/wHSAeoB0gH/AckB4gHJAf8BWwGxAV0B/wETAYgBFQH/
AWEBsQFiAf8D/gX/A/wB/wPyAf8D/gH/A/MB/wPcAf8D2gH/A9oB/wP3Mf8D+QH/A9oB/wPaAf8D2gH/
A+4B/wP+Af8D9gH/A/sF/wP+Af8B9QH0AfUB/wPsAf8D+QH/A+wB/wPcAf8D2QH/A9kB/wPsAf8D/in/
A/4B/wPxAf8D2QH/A9kB/wPZAf8D6QH/A/kB/wPxAf8B9QH0AfUB/wP+Af8D/gH/AfUB9AH1Af8D7AH/
A/kB/wPsAf8D3AH/A9kB/wPZAf8D7AH/A/4p/wP+Af8BoAHRAaEB/wEjAZkBJgH/ASIBkgEkAf8BKgGa
AS0B/wF5AbwBewH/AdcB6gHYAf8BvAHxAcAB/wHQAfMB0wH/A/4B/wP+Af8B9QH0AfUB/wPsAf8D+QH/
A+wB/wPcAf8D2QH/A9kB/wPsAf8D/in/A/4B/wGgAdEBoQH/ASMBmQEmAf8BIgGSASQB/wEqAZoBLQH/
AXwBwgF9Af8B0gHqAdIB/wGgAdEBoQH/AcEB4gHCAf8D/gn/A/wB/wPeAf8D2gH/A9oB/wPaAf8D2gH/
A9oB/wPyKf8D9gH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D2wH/A/oN/wP+Af8B9QH0AfUB/wPcAf8D2QH/
A9kB/wPZAf8D2QH/A9kB/wPpAf8D/gH/A/4Z/wP+Af8D/gH/A+wB/wPZAf8D2QH/A9kB/wPZAf8D2QH/
A9kB/wPxAf8D/gn/A/4B/wH1AfQB9QH/A9wB/wPZAf8D2QH/A9kB/wPZAf8D2QH/A+kB/wP+Af8D/hn/
A/4B/wP+Af8BmQHLAZkB/wEcAZABHgH/ASoBmgEtAf8BLgGcATEB/wEqAZoBLQH/AR8BkgEhAf8BLgGc
ATEB/wG4Ad0BuQH/A/4J/wP+Af8B9QH0AfUB/wPcAf8D2QH/A9kB/wPZAf8D2QH/A9kB/wPpAf8D/gH/
A/4Z/wP+Af8D/gH/AZkBywGZAf8BHAGQAR4B/wEqAZoBLQH/AS4BnAExAf8BKgGaAS0B/wEfAZIBIQH/
AS4BnAExAf8BuAHdAbkB/wP+Df8D/gH/A90B/wPaAf8D2gH/A9oB/wPaAf8D2gH/A/IB/wP6Af8D9Rn/
A/YB/wP2Af8D+AH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D3AH/A/0N/wP+Af8D+QH/A9wB/wPZAf8D2QH/
A9kB/wPZAf8D1gH/A+kB/wPxAf8D7AH/A/kB/wP+Af8D/gH/A/4B/wH7Af4B/AH/AeAB8QHhAf8BmwHi
AaAB/wGhAeoBpgH/AfQB8AH0Af8D2QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8D+QH/A/4J/wP+Af8D+QH/
A9wB/wPZAf8D2QH/A9kB/wPZAf8D1gH/A+kB/wPxAf8D7AH/A/kB/wP+Af8D/gH/A/4B/wH5AfwB+QH/
AeAB7wHgAf8BiQHCAYoB/wGWAckBmAH/AaoB0gGrAf8BIwGZASYB/wEuAZwBMQH/AS4BnAExAf8BKgGa
AS0B/wEmAZgBKQH/ATEBnQEzAf8B0gHqAdIB/wP+Cf8D/gH/A/kB/wPcAf8D2QH/A9kB/wPZAf8D2QH/
A9YB/wPpAf8D8QH/A+wB/wP5Af8D/gH/A/4B/wP+Af8B+QH8AfkB/wHgAe8B4AH/AYkBwgGKAf8BlgHJ
AZgB/wGqAdIBqwH/ASMBmQEmAf8BLgGcATEB/wEuAZwBMQH/ASoBmgEtAf8BJgGYASkB/wExAZ0BMwH/
AdIB6gHSAf8D/hH/A/kB/wPaAf8D2gH/A9oB/wPaAf8D4gH/A/4B/wPgAf8D2gH/A9sB/wPhAf8D+AH/
A/oB/wPhAf8D3AH/A9oB/wPcAf8D/QH/A+kB/wPaAf8D2gH/A9oB/wPaAf8D9xX/A/4B/wPxAf8D2QH/
A9kB/wPZAf8D2QH/A+IB/wP5Af8D3AH/A9YB/wPZAf8D3AH/AfgB8gH4Af8BtAHsAbgB/wFTAc0BWwH/
AUgBzQFRAf8BQgHQAUsB/wFaAeABYwH/AeAB+AHiAf8B6AHkAegB/wPZAf8D2QH/A9kB/wPZAf8D8QH/
A/4R/wP+Af8D8QH/A9kB/wPZAf8D2QH/A9kB/wPiAf8D+QH/A9wB/wPWAf8D2QH/A9wB/wH4AfIB+AH/
AaoB0gGrAf8BNAGVATYB/wEhAYwBIwH/ARMBiAEVAf8BKgGaAS0B/wHSAeoB0gH/AXIBvAF0Af8BJgGY
ASkB/wEuAZwBMQH/ASoBmgEtAf8BJgGYASkB/wGrAdgBrAH/A/4R/wP+Af8D8QH/A9kB/wPZAf8D2QH/
A9kB/wPiAf8D+QH/A9wB/wPWAf8D2QH/A9wB/wH4AfIB+AH/AaoB0gGrAf8BNAGVATYB/wEhAYwBIwH/
ARMBiAEVAf8BKgGaAS0B/wHSAeoB0gH/AXIBvAF0Af8BJgGYASkB/wEuAZwBMQH/ASoBmgEtAf8BJgGY
ASkB/wGrAdgBrAH/A/4Z/wP3Af8D2gH/A9oB/wPaAf8D+gH/A/MB/wPaAf8D2gH/A9oB/wPaAf8D8AH/
A/QB/wPaAf8D2gH/A9oB/wPaAf8D6gH/A/0B/wPbAf8D2gH/A9oB/wP0Hf8D/gH/A/EB/wPZAf8D2QH/
A9kB/wPxAf8D7AH/A9kB/wPZAf8D2QH/A9YB/wHxAewB8QH/Aa0B8gGyAf8BVAHgAV0B/wFqAegBdAH/
AXEB6wF6Af8BagHoAXQB/wGYAfMBnwH/AfUB9AH1Af8B3AHaAdwB/wPZAf8D2QH/A+wB/wP+Gf8D/gH/
A/EB/wPZAf8D2QH/A9kB/wPxAf8D7AH/A9kB/wPZAf8D2QH/A9YB/wHxAewB8QH/AZIByQGTAf8BFwGR
ARoB/wEuAZwBMQH/ATIBowE0Af8BKgGaAS0B/wFyAbwBdAH/AdIB6gHSAf8BMgGjATQB/wEmAZgBKQH/
ASoBmgEtAf8BoAHRAaEB/wP+Gf8D/gH/A/EB/wPZAf8D2QH/A9kB/wPxAf8D7AH/A9kB/wPZAf8D2QH/
A9YB/wHxAewB8QH/AZIByQGTAf8BFwGRARoB/wEuAZwBMQH/ATIBowE0Af8BKgGaAS0B/wFyAbwBdAH/
AdIB6gHSAf8BMgGjATQB/wEmAZgBKQH/ASoBmgEtAf8BoAHRAaEB/wP+If8D+gH/A9wB/wPmAf8D/QH/
A9wB/wPaAf8D2gH/A9oB/wPaAf8D8AH/A/QB/wPaAf8D2gH/A9oB/wPaAf8D2gH/A/sB/wPvAf8D2wH/
A/gl/wP+Af8D8QH/A9wB/wPiAf8B9QH0AfUB/wPZAf8D2QH/A9kB/wPZAf8D2QH/AfEB7AHxAf8BwQH9
AcUB/wF1AfEBfgH/AXoB8gGBAf8BeAHyAYEB/wFxAesBegH/AWoB6AF0Af8BygH5Ac0B/wHtAegB7QH/
A9kB/wPxAf8D/iH/A/4B/wPxAf8D3AH/A+IB/wH1AfQB9QH/A9kB/wPZAf8D2QH/A9kB/wPZAf8B8QHs
AfEB/wGaAdIBmwH/ASkBoAEsAf8BNgGkATkB/wE2AaQBOQH/ATIBowE0Af8BKgGaAS0B/wG5AeABugH/
AYkByAGKAf8BNgGkATkB/wGzAdsBtAH/A/4h/wP+Af8D8QH/A9wB/wPiAf8B9QH0AfUB/wPZAf8D2QH/
A9kB/wPZAf8D2QH/AfEB7AHxAf8BmgHSAZsB/wEpAaABLAH/ATYBpAE5Af8BNgGkATkB/wEyAaMBNAH/
ASoBmgEtAf8BuQHgAboB/wGJAcgBigH/ATYBpAE5Af8BswHbAbQB/wP+Kf8D/gH/A/4B/wPrAf8D2gH/
A9oB/wPaAf8D2gH/A9oB/wPwAf8D9AH/A9oB/wPaAf8D2gH/A9oB/wPaAf8D4wH/A/4B/wP+Lf8D/gH/
A/kB/wP5Af8D4gH/A9YB/wPZAf8D2QH/A9kB/wPZAf8B8QHsAfEB/wHBAf0BxQH/AXUB8QF+Af8BegHy
AYEB/wF6AfIBgQH/AXEB6wF6Af8BagHoAXQB/wGJAfMBkAH/AfAB+QHxAf8D+QH/A/4p/wP+Af8D+QH/
A/kB/wPiAf8D1gH/A9kB/wPZAf8D2QH/A9kB/wHxAewB8QH/AZoB0gGbAf8BKQGgASwB/wE2AaQBOQH/
ATYBpAE5Af8BMgGjATQB/wEjAZkBJgH/AVYBsQFZAf8B4AHxAeEB/wHgAfEB4QH/A/4p/wP+Af8D+QH/
A/kB/wPiAf8D1gH/A9kB/wPZAf8D2QH/A9kB/wHxAewB8QH/AZoB0gGbAf8BKQGgASwB/wE2AaQBOQH/
ATYBpAE5Af8BMgGjATQB/wEjAZkBJgH/AVYBsQFZAf8B4AHxAeEB/wHgAfEB4QH/A/41/wP8Af8D6wH/
A90B/wPaAf8D2gH/A9oB/wPwAf8D9AH/A9oB/wPaAf8D2gH/A90B/wPqAf8D+zn/A/4B/wP+Af8B9QH0
AfUB/wPpAf8D3AH/A9kB/wPWAf8D1gH/AfEB7AHxAf8BvAH7AcEB/wF1AfEBfgH/AXUB8QF+Af8BdQHx
AX4B/wGCAfEBigH/AaUB8gGqAf8B2AH6AdsB/wP+Af8D/jH/A/4B/wP+Af8B9QH0AfUB/wPpAf8D3AH/
A9kB/wPWAf8D1gH/AfEB7AHxAf8BmgHSAZsB/wEjAZkBJgH/ASkBoAEsAf8BMgGjATQB/wFDAasBRQH/
AXwBwgF9Af8BxwHlAcgB/wP+Af8D/jH/A/4B/wP+Af8B9QH0AfUB/wPpAf8D3AH/A9kB/wPWAf8D1gH/
AfEB7AHxAf8BmgHSAZsB/wEjAZkBJgH/ASkBoAEsAf8BMgGjATQB/wFDAasBRQH/AXwBwgF9Af8BxwHl
AcgB/wP+Af8D/kH/A/4B/wP5Af8D7wH/A+YB/wP1Af8D+AH/A+UB/wPvAf8D+QH/A/5J/wP+Af8D/gH/
A/4B/wPxAf8D6QH/A+IB/wHxAewB8QH/Ac4B+gHRAf8BmgH5AaEB/wG0AfsBugH/AdEB+gHUAf8B8AH5
AfEB/wP+Af8D/kH/A/4B/wP+Af8D/gH/A/EB/wPpAf8D4gH/AfgB8gH4Af8BswHbAbQB/wFpAbsBawH/
AY4BzQGQAf8BuQHgAboB/wHoAfUB6AH/A/4B/wP+Qf8D/gH/A/4B/wP+Af8D8QH/A+kB/wPiAf8B+AHy
AfgB/wGzAdsBtAH/AWkBuwFrAf8BjgHNAZAB/wG5AeABugH/AegB9QHoAf8D/gH/A/4h/wFCAU0BPgcA
AT4DAAEoAwABeAMAAXgDAAEBAQABAQUAAYABBxYAA///AP8A/wD/AP8A/wD/AIgACw==
</value>
</data>
</root>

View file

@ -0,0 +1,22 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("WebsitePanel.Import.Enterprise")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyProduct("WebsitePanel.Import.Enterprise")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("fe8ffa2e-6e29-41c5-a0b2-a553119c5edb")]

View file

@ -0,0 +1,210 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.1
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace WebsitePanel.Import.Enterprise.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WebsitePanel.Import.Enterprise.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
internal static System.Drawing.Bitmap BannerImage {
get {
object obj = ResourceManager.GetObject("BannerImage", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap ConnectImage {
get {
object obj = ResourceManager.GetObject("ConnectImage", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap ConnectLogo {
get {
object obj = ResourceManager.GetObject("ConnectLogo", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Icon FolderLargeIcon {
get {
object obj = ResourceManager.GetObject("FolderLargeIcon", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
internal static System.Drawing.Icon FolderSmallIcon {
get {
object obj = ResourceManager.GetObject("FolderSmallIcon", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
internal static System.Drawing.Icon OU {
get {
object obj = ResourceManager.GetObject("OU", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
internal static System.Drawing.Bitmap ProgressImage1 {
get {
object obj = ResourceManager.GetObject("ProgressImage1", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap ProgressImage2 {
get {
object obj = ResourceManager.GetObject("ProgressImage2", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap ProgressImage3 {
get {
object obj = ResourceManager.GetObject("ProgressImage3", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap ProgressImage4 {
get {
object obj = ResourceManager.GetObject("ProgressImage4", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap ProgressImage5 {
get {
object obj = ResourceManager.GetObject("ProgressImage5", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap ProgressImage6 {
get {
object obj = ResourceManager.GetObject("ProgressImage6", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap ProgressImage7 {
get {
object obj = ResourceManager.GetObject("ProgressImage7", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap ProgressImage8 {
get {
object obj = ResourceManager.GetObject("ProgressImage8", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Bitmap RefreshImage {
get {
object obj = ResourceManager.GetObject("RefreshImage", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
internal static System.Drawing.Icon SpaceLargeIcon {
get {
object obj = ResourceManager.GetObject("SpaceLargeIcon", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
internal static System.Drawing.Icon SpaceSmallIcon {
get {
object obj = ResourceManager.GetObject("SpaceSmallIcon", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
internal static System.Drawing.Icon UserLargeIcon {
get {
object obj = ResourceManager.GetObject("UserLargeIcon", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
internal static System.Drawing.Icon UsersLargeIcon {
get {
object obj = ResourceManager.GetObject("UsersLargeIcon", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
internal static System.Drawing.Icon UserSmallIcon {
get {
object obj = ResourceManager.GetObject("UserSmallIcon", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
internal static System.Drawing.Icon UsersSmallIcon {
get {
object obj = ResourceManager.GetObject("UsersSmallIcon", resourceCulture);
return ((System.Drawing.Icon)(obj));
}
}
}
}

View file

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

View file

@ -0,0 +1,148 @@
namespace WebsitePanel.Import.Enterprise
{
partial class SpaceForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode("Node3", 3, 3);
System.Windows.Forms.TreeNode treeNode2 = new System.Windows.Forms.TreeNode("Node2", 2, 2, new System.Windows.Forms.TreeNode[] {
treeNode1});
System.Windows.Forms.TreeNode treeNode3 = new System.Windows.Forms.TreeNode("Node1", 1, 1, new System.Windows.Forms.TreeNode[] {
treeNode2});
System.Windows.Forms.TreeNode treeNode4 = new System.Windows.Forms.TreeNode("Node0", new System.Windows.Forms.TreeNode[] {
treeNode3});
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(SpaceForm));
this.spaceTree = new System.Windows.Forms.TreeView();
this.images = new System.Windows.Forms.ImageList(this.components);
this.pnlButtons = new System.Windows.Forms.Panel();
this.btnCancel = new System.Windows.Forms.Button();
this.btnSelect = new System.Windows.Forms.Button();
this.pnlButtons.SuspendLayout();
this.SuspendLayout();
//
// spaceTree
//
this.spaceTree.Dock = System.Windows.Forms.DockStyle.Fill;
this.spaceTree.ImageIndex = 0;
this.spaceTree.ImageList = this.images;
this.spaceTree.Location = new System.Drawing.Point(10, 10);
this.spaceTree.Name = "spaceTree";
treeNode1.ImageIndex = 3;
treeNode1.Name = "Node3";
treeNode1.SelectedImageIndex = 3;
treeNode1.Text = "Node3";
treeNode2.ImageIndex = 2;
treeNode2.Name = "Node2";
treeNode2.SelectedImageIndex = 2;
treeNode2.Text = "Node2";
treeNode3.ImageIndex = 1;
treeNode3.Name = "Node1";
treeNode3.SelectedImageIndex = 1;
treeNode3.Text = "Node1";
treeNode4.Name = "Node0";
treeNode4.Text = "Node0";
this.spaceTree.Nodes.AddRange(new System.Windows.Forms.TreeNode[] {
treeNode4});
this.spaceTree.SelectedImageIndex = 0;
this.spaceTree.ShowLines = false;
this.spaceTree.Size = new System.Drawing.Size(399, 319);
this.spaceTree.TabIndex = 0;
this.spaceTree.BeforeExpand += new System.Windows.Forms.TreeViewCancelEventHandler(this.OnBeforeExpand);
//
// images
//
this.images.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("images.ImageStream")));
this.images.TransparentColor = System.Drawing.Color.Transparent;
this.images.Images.SetKeyName(0, "UserSmallIcon.ico");
this.images.Images.SetKeyName(1, "UsersSmallIcon.ico");
this.images.Images.SetKeyName(2, "FolderSmallIcon.ico");
this.images.Images.SetKeyName(3, "SpaceSmallIcon.ico");
//
// pnlButtons
//
this.pnlButtons.Controls.Add(this.btnCancel);
this.pnlButtons.Controls.Add(this.btnSelect);
this.pnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom;
this.pnlButtons.Location = new System.Drawing.Point(10, 329);
this.pnlButtons.Name = "pnlButtons";
this.pnlButtons.Size = new System.Drawing.Size(399, 32);
this.pnlButtons.TabIndex = 1;
//
// btnCancel
//
this.btnCancel.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Location = new System.Drawing.Point(324, 9);
this.btnCancel.Name = "btnCancel";
this.btnCancel.Size = new System.Drawing.Size(75, 23);
this.btnCancel.TabIndex = 1;
this.btnCancel.Text = "Cancel";
this.btnCancel.UseVisualStyleBackColor = true;
//
// btnSelect
//
this.btnSelect.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom | System.Windows.Forms.AnchorStyles.Right)));
this.btnSelect.Location = new System.Drawing.Point(243, 9);
this.btnSelect.Name = "btnSelect";
this.btnSelect.Size = new System.Drawing.Size(75, 23);
this.btnSelect.TabIndex = 0;
this.btnSelect.Text = "Select";
this.btnSelect.UseVisualStyleBackColor = true;
this.btnSelect.Click += new System.EventHandler(this.OnSelectClick);
//
// SpaceForm
//
this.AcceptButton = this.btnSelect;
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnCancel;
this.ClientSize = new System.Drawing.Size(419, 371);
this.Controls.Add(this.spaceTree);
this.Controls.Add(this.pnlButtons);
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "SpaceForm";
this.Padding = new System.Windows.Forms.Padding(10);
this.ShowIcon = false;
this.ShowInTaskbar = false;
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "Select Hosting Space";
this.pnlButtons.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private System.Windows.Forms.TreeView spaceTree;
private System.Windows.Forms.Panel pnlButtons;
private System.Windows.Forms.Button btnCancel;
private System.Windows.Forms.Button btnSelect;
private System.Windows.Forms.ImageList images;
}
}

View file

@ -0,0 +1,277 @@
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using WebsitePanel.EnterpriseServer;
namespace WebsitePanel.Import.Enterprise
{
public partial class SpaceForm : BaseForm
{
public const string USER = "User";
public const string CUSTOMERS = "Customers";
public const string SPACES = "Spaces";
public const string SPACE = "Space";
public const string TMP = "Tmp";
private string username;
private string password;
public SpaceForm()
{
InitializeComponent();
}
public void InitializeForm(string username, string password)
{
this.username = username;
this.password = password;
PopulateRootNode(username, password);
}
private void PopulateRootNode(string username, string password)
{
spaceTree.Nodes.Clear();
UserInfo info = null;
try
{
info = UserController.GetUser(username);
SecurityContext.SetThreadPrincipal(info);
}
catch (Exception ex)
{
ShowError("Unable to load user.", ex);
}
if (info != null)
{
DataNode rootNode = AddTreeNode(null, info.Username, 0, USER, info, true);
rootNode.Expand();
}
}
private void OnBeforeExpand(object sender, TreeViewCancelEventArgs e)
{
DataNode node = e.Node as DataNode;
ExpandNode(node);
}
private void ExpandNode(DataNode node)
{
if (node == null || node.Populated)
return;
node.Nodes.Clear();
spaceTree.Update();
switch (node.NodeType)
{
case USER:
PopulateUser(node);
break;
case CUSTOMERS:
PopulateCustomers(node);
break;
case SPACES:
PopulateSpaces(node);
break;
}
node.Populated = true;
node.Expand();
}
private void PopulateSpaces(DataNode parentNode)
{
UserInfo info = parentNode.Tag as UserInfo;
DataSet ds = null;
try
{
ds = PackageController.GetRawMyPackages(info.UserId);
}
catch(Exception ex)
{
ShowError("Unable to load spaces.", ex);
}
if (ds != null)
{
foreach (DataRow dr in ds.Tables[0].Rows)
{
PackageInfo data = new PackageInfo();
data.PackageId = Utils.GetDbInt32(dr["PackageId"]);
data.PackageName = Utils.GetDbString(dr["PackageName"]);
data.UserId = Utils.GetDbInt32(dr["UserId"]);
AddTreeNode(parentNode, data.PackageName, 3, SPACE, data, false);
}
}
}
private void PopulateCustomers(DataNode parentNode)
{
UserInfo info = parentNode.Tag as UserInfo;
DataSet ds = null;
try
{
ds = UserController.GetRawUsers(info.UserId, false);
}
catch(Exception ex)
{
ShowError("Unable to load users.", ex);
}
if (ds != null)
{
foreach (DataRow dr in ds.Tables[0].Rows)
{
UserInfo user = new UserInfo();
user.UserId = Utils.GetDbInt32(dr["UserId"]);
user.Username = Utils.GetDbString(dr["Username"]);
user.RoleId = Utils.GetDbInt32(dr["RoleId"]);
AddTreeNode(parentNode, user.Username, 0, USER, user, true);
}
}
}
private void PopulateUser(DataNode parentNode)
{
UserInfo info = parentNode.Tag as UserInfo;
if ((UserRole)info.RoleId != UserRole.User)
{
AddTreeNode(parentNode, CUSTOMERS, 1, CUSTOMERS, info, true);
}
AddTreeNode(parentNode, SPACES, 2, SPACES, info, true);
}
private DataNode AddTreeNode(DataNode parentNode, string text, int imageIndex, string nodeType, object data, bool hasChildren)
{
DataNode node = new DataNode();
node.Text = text;
node.SelectedImageIndex = imageIndex;
node.ImageIndex = imageIndex;
node.NodeType = nodeType;
node.Tag = data;
if (hasChildren)
{
node.Populated = false;
DataNode tmpNode = new DataNode();
tmpNode.Text = "Expanding...";
tmpNode.SelectedImageIndex = 2;
tmpNode.ImageIndex = 2;
tmpNode.NodeType = TMP;
node.Nodes.Add(tmpNode);
}
else
{
node.Populated = true;
}
if (parentNode != null)
parentNode.Nodes.Add(node);
else
spaceTree.Nodes.Add(node);
return node;
}
private void OnSelectClick(object sender, EventArgs e)
{
DataNode node = spaceTree.SelectedNode as DataNode;
if (node == null || node.NodeType != SPACE)
{
ShowWarning("Please select hosting space.");
return;
}
PackageInfo data = node.Tag as PackageInfo;
if (data == null || data.PackageId == 0 || data.PackageId == 1)
{
ShowWarning("Invalid hosting space. Please select hosting space with allowed Exchange organizations.");
return;
}
PackageContext cntx = null;
try
{
cntx = PackageController.GetPackageContext(data.PackageId);
}
catch (Exception ex)
{
ShowError("Unable to load space data", ex);
return;
}
if (cntx == null)
{
ShowWarning("Invalid hosting space. Please select hosting space with allowed Exchange organizations.");
return;
}
bool exchangeEnabled = false;
bool orgEnabled = false;
foreach (HostingPlanGroupInfo group in cntx.GroupsArray)
{
if (!group.Enabled)
continue;
if (group.GroupName == ResourceGroups.Exchange)
{
exchangeEnabled = true;
continue;
}
else if (group.GroupName == ResourceGroups.HostedOrganizations)
{
orgEnabled = true;
continue;
}
}
if (!exchangeEnabled || !orgEnabled)
{
ShowWarning("Invalid hosting space. Please select hosting space with allowed Exchange organizations.");
return;
}
this.selectedSpace = data;
this.DialogResult = DialogResult.OK;
this.Close();
}
private PackageInfo selectedSpace;
public PackageInfo SelectedSpace
{
get { return selectedSpace; }
}
}
}

View file

@ -0,0 +1,201 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<metadata name="images.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
<data name="images.ImageStream" mimetype="application/x-microsoft.net.object.binary.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAACK
EAAAAk1TRnQBSQFMAgEBBAEAAQwBAAEEAQABEAEAARABAAT/ARkBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEYBgABGP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/ALoAA/sD7wHeAdsB2AHVAc8ByQHX
AdMBzgHlAeMB4gP2GAAB+QL4AcwBxgHBAbYBrAGhAaoBmQGKAaEBiwF6AaoBmQGKAbYBrAGhAckBxAG/
Ae8B7gHtIQAB+QL4AcwBxAG/AbcBqgGeAawBmAGGAaQBiwF3AawBmAGGAbcBqgGeAckBwwG9Ae8B7gHt
OQAB8gLxAb8BpQGMAdIBkgFKAeoBpAFSAe8BrQFaAe8BrgFYAekBqQFUAckBnQFnAdEByAG9A/0PAAP+
Aa8BoQGVAbEBlQF6AeYBywG0Ad4BtwGQAeMBuwGUAeABugGUAc4BqwGIAbgBmQF8AcABsgGkEgAD/QP4
A/cD+AP7Aa8BnwGRAbYBlgF3AfQB1QG6AeoBvgGRAfABwgGVAe0BwQGVAdgBsAGIAb8BmwF6AcEBsgGi
AwABdQGEAY8BbAF6AYUBYAFtAXcBUQFdAWYBQgFMAVQBMQE6AUEBIwEqATABFgEcASEBDgETARgBDgET
ARgBDgETARgBDgETARgBDgETARgBDgETARgBDgETARgGAAHzAe4B6gHiAZcBTQHnAZgBRAHiAZsBSQHh
AZ8BTgHjAaQBUwHkAacBUgHmAakBTwHvAbcBXQH2Ab0BZQHkAb0BkQP9DAAD/gHGAbkBqQHGAaUBhQHm
AdABvQHiAb0BnAHmAb8BlwHoAcMBnwHbAboBmAHAAZ8BfwG7AasBnQwAA/YBtAG/AboBZgGWAX8BWgGV
AXcBVAGSAXQBagGVAX8BWQGFAWwBrAGRAXEBzwGpAYQB9AHaAcQB7wHEAZ8B9AHHAZkB9gHLAaIB5wHB
AZoByAGiAX0BvQGqAZoDAAF3AYcBkgGiAd8B8AFwAc0B6gFJAbgB4gE3Aa4B2wEtAakB2QEmAaEB0gEh
AZgBxwEgAY4BvAEeAYMBrgEZAX8BqwEVAXwBqQEbAXcBnwEfAXIBlgEWARwBIQMAAfcB8wHvAdsBiAE6
AdUBfAEmAdUBfgEjAdcBggEjAdkBiAEmAdwBkAEuAeABmgE8AeMBoQFFAeMBoQE+AecBrQFRAeoBsgFX
AekBwAGRDAAD/wHPAcoBtwHZAbEBkAHmAdQBwQHzAdIBswHqAcEBmAHtAcwBqgHgAcIBpAHDAaMBggGu
AZwBjAwAA+cBbAHDAZkBZAHAAZEBXAG4AYkBVAGyAYQBoAHBAagBWgGnAX0BrwGgAXEB5QG3AZEB9AHf
AckB/wHdAbkB+AHJAZoB/AHWAa8B7QHKAagBywGnAYEBrwGbAYkDAAF6AYoBlQGqAegB9gGVAeUB/AGE
Ad8B+wF1AdYB+gFqAdAB9wFdAcYB9AFQAb4B8AFBAbQB7AE1AaoB6AErAaQB5gEgAZoB3wEWAZAB1wEb
AXcBnwEgAScBLQP/Ad4BrAF8AdABcgEeAdMBeAEgAdQBewEgAdYBfwEgAdcBgwEfAdkBhQEeAdoBiQEe
Ad0BkQEoAeABmgE0AeEBnAEzAecBrAFQAeQBpAFAAe4B4QHSCQAG/wHwAdABsAHQAcMBsgHIAcMBuwHX
AbcBlwHrAcQBnQHhAb4BmwHOAaYBfwHSAcoBwgwAA/YBcwHKAaABagHCAZYBZQG/AZMBbAHAAZEB0QHj
AcYBZQG1AZABjQGrAXcB/wHSAaUB2gHLAbgB0QHLAcIB4gG+AZkB+QHMAaAB7gHGAZ0B2AGqAX0B0gHJ
AcADAAF9AY4BmAGwAeoB9gGfAekB+wGSAeQB/AGBAd0B+wF1AdYB+gFoAc4B9wFdAcYB9AFNAbwB8AFB
AbQB7AE1AaoB6AEqAaMB5gEdAZYB3AEVAXwBqQEtATQBOwH0Ae8B6QHiAacBcwHTAXkBKwHSAXQBHgHU
AXoBIQHVAX4BIQHXAYEBIQHYAYUBIQHaAYgBIAHbAYoBHwHcAY8BIgHeAZQBKAHgAZoBMgHlAagBSgHi
Aa8BbwP+CQAD/wL1AfQBpAGnAawBGwFLAXwBTwFpAYMBxgGmAYcB1AGxAY4B0QHIAb8D/QwAA/sBgQHP
AagBcwHKAaABaQHEAZUBggHDAagBsgHKAb8BYAGqAYUBTQGoAXcBsgGuAY4BfAGCAYwBCgFBAXoBRgFk
AYIBzwGqAYYB3AG0AY0B0gHHAb0D/QMAAYABkQGcAbYB7QH4AaoB7AH7AZsB6AH7AY8B4wH8AYEB3QH7
AXEB1QH5AWgBzgH3AVsBxQH0AU0BvAHwAT0BsgHsATIBqQHoASQBngHiARABggG0ATsBQwFLAesB1wHB
AeoBvgGdAeEBpAFwAdEBcwEfAdIBdwEeAdQBfAEhAdYBfwEhAdcBggEhAdkBhQEgAdoBiAEgAdsBigEg
AdwBjQEhAdwBjgEhAeIBnwFAAd4BmAE3AfYB8wHvBgAG/wP6Aa0BugHHATABVQF8AScBUQF8AZUBmQGb
AeYB4QHcAwAD/g8AAdMB6AHeAXcBzAGhAWcBvAGRAWABkQGyAVcBgAGlAUEBfgFcAYABsQGWAaABrgGz
ATwBYQGKASIBTQF6ARgBSAF6AY8BlAGWAegB4QHbAwAD/gMAAYMBlQGfAb4B8AH5AasB8AH3AaUB7AH7
AZgB5wH7AYkB4QH8AX8B3QH7AXEB1QH5AWUBzQH3AVgBxAHzAUsBuwHwAT0BsgHsASwBpAHjAQwBigG/
AUkBUwFcAegBywGuAewBxQGpAekBvwGcAeABoQFqAdIBdgEhAdIBdgEcAdUBfAEgAdYBfwEhAdcBggEg
AdgBhQEgAdkBhwEgAdoBiQEgAdoBiQEdAd8BlgE1Ad8BlwE3AfEB6AHeBgAG/gH0AvUBcwGRAa8BTAFz
AZsBRwFsAZMBNQFbAYEC8AHxGAAB6AHxAe0BZwGyAZUBTwF8AagBYAGJAa0BrAHAAb0B8ALyAW0BjgGx
AUMBbwGdAT0BZwGUASgBVAGAAvAB8QwAAYYBmQGjAb4B8AH5AbYB7QH4AbAB7gH6AaQB6wH6AZUB5gH7
AYkB4QH8AX0B3AH8AXEB1QH5AWUBzQH3AVgBxAHzAUkBuQHvATUBqQHnAQwBjwHHAVcBYwFrAegBzgGv
Ae4BzQG2AesBwwGjAekBvwGbAeMBqwF4AdgBiAE8AdMBeAEfAdQBeQEbAdUBfgEeAdcBgQEfAdgBgwEg
AdkBhQEgAdkBhgEeAdwBkQEyAd4BlAE3AfEB6AHcBgAD/gMAAcwB0wHZAXUBmQG8AWoBkAG2AVsBgQGn
AUEBaQGQAbsBwgHJA/4VAAHFAdAB1wE5AWwBiQF1AaEBzAGDAasB2QFfAYQBpgHCAcsB1AFxAZoBwwFl
AZEBvAFUAYABqwE2AWQBkQG6AcEByQP+CQABiQGcAaYBvgHwAfkBtgHtAfgBtgHtAfgBqwHwAfcBogHs
AfoBlQHmAfsBiQHhAfwBfQHcAfwBbwHTAfoBYwHMAfcBVQHDAfMBSQG5Ae8BGQGZAc8BYwFwAXoB6wHY
AcEB8AHUAcEB7QHLAbEB6wHDAaIB6QG+AZoB5wG4AYwB4QGkAWsB3AGRAUgB2AGGATEB1wGBAScB1wGB
ASIB1wGCASEB1wGCAR4B2wGOATMB3AGRATcB9QHwAesGAAP+A/8B2wHhAeUBjwGxAdQBggGoAc4BagGR
AbgBTAFuAZIBMQFBAVED8xIAAfwC/QFlAZgBqgFYAYwBrwGhAcsB+QGWAcMB8QFvAZcBvwHWAd4B4wGP
AbYB3wGBAawB2AFlAZIBvwFDAWoBkwEkATYBSAPzCQABiwGgAagBvgHwAfkBvgHwAfkBvgHwAfkBvgHw
AfkBtAHyAfgBqgHsAfsBoAHpAfsBlQHlAfwBigHfAfwBfwHYAfsBdAHSAfgBaAHKAfQBXQHAAfEBYwFw
AXoB8QHqAeAB8QHUAb4B8QHWAcMB7gHMAbMB6wHDAaMB6QG8AZYB5wG3AYwB5gGxAYEB4wGpAXEB4AGh
AWEB3gGZAVIB3AGUAUYB2wGOATsB3QGWAUkB4QGpAWgB/AL7BgAG/wHDAdAB2gGkAccB6wGbAb8B5QFz
AZ0BxwFLAV8BdAEzAS8BLAPrEgAB+wL8AWwBoQG0AY4BuQHfAcwB9AH/AaoB1gH+AZYBtQHWAwABpwHQ
AfkBnQHHAfIBbwGgAdABQQFYAXEBJgEhAR4D6wkAAY0BoQGqAY0BoQGqAY0BoQGqAY0BoQGqAY0BoQGq
AYsBnwGoAYkBnAGmAYkBmwGmAYcBmgGkAYYBmQGjAYQBlgGgAYQBlgGgAYMBlQGgAYMBlQGgAXUBhAGP
Af0C/AHrAc0BqgH1AeEB1gHyAdgBxAHvAc4BtQHrAcUBpQHpAbwBlgHmAbUBiQHkAa4BfAHiAacBcAHg
AaEBYwHeAZoBVgHdAZYBUAHfAZwBVwHsAdoBwwkAA/8GAAGSAaQBtgF/AZIBpgFpAXwBjgFPAVIBVgE5
ATgBNwPyEgAD/wGbAcQBzwFsAacBwgG8AeMB9AGqAdIB+QGMAasBzgMAAZIBpwG8AX0BkwGqAWQBegGO
AUYBSgFOAS0BLAErA/IJAAGPAaQBrAGyAeQB7AG2Ae0B+AG2Ae0B+AGpAewB9gGSAeEB8wGNAaEBqgHw
AfEB8hgAAfIB6wHhAfMB2QHAAfYB5QHbAfMB2wHJAfAB0gG7Ae0ByQGsAeoBwQGeAegBugGSAeYBtAGH
AeUBrwF+AeQBrQF5AeIBqAF0AeUBuAGCA/wMAAP/AwAB1gHUAdMBkQGPAY0BbwFtAWoBZgFlAWQDxAP+
FQAB5AHtAe8BdwG+AdEBWwGgAbUBWAGTAbABQgF2AZMDAAHWAdUB1AGQAY0BjAFqAWgBZQFfAV4BXQPD
A/4JAAHsAe0B7gGPAaQBrAGPAaQBrAGPAaQBrAGPAaQBrAGPAaQBrAHwAfEB8h4AAe8B4wHRAfMB2wHE
AfcB6AHhAfQB4AHSAfIB2AHDAfAB0QG4Ae4BywGvAewByAGpAewBxgGoAeoBvwGcAecBuwGHAfgB9gHz
DAAD/QMAA/0DAAP5A/AD9RsAA/0B4AHyAfYBqQHhAe4BiAHLAdkBgwG/Ac0B0wHhAeUDAAP5Au8B8AP1
RQAB8wHuAeYB7gHUAbAB9AHdAcgB9QHhAdQB8wHdAc4B8gHXAcUB7wHQAbcB6wHFAZoB6wHVAbQC+gH5
pQAD/gH0AfEB6gHvAeEBzAHtAdoBvQHtAdoBvwHwAeYB1wH5AfcB9Q8AAUIBTQE+BwABPgMAASgDAAFA
AwABIAMAAQEBAAEBBgABARYAA/+BAAb/AfABHwHgAQ8B/gEAAv8B4AEHAcABDwHAAQABgAEAAcABAwHA
AQ8CAAGAAQABgAEDAcABDwIAAYACAAEBAcABDwIAAYADAAHgAQ8CAAGAAwABwAEvAYABAgGAAwABwAE/
AcABBwGAAwAB0AEfAcABAwGAAwABwAEfAYABAwGAAwABwAEfAYEBAwGAAgABAQHYAR8BgQEDAYABfwGA
AQEB6AEfAcEBAwGAAf8BwAEDAdQBfwHAAY8C/wHgAQcG/wHwAR8L
</value>
</data>
</root>

View file

@ -0,0 +1,149 @@
// Copyright (c) 2011, Outercurve Foundation.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without modification,
// are permitted provided that the following conditions are met:
//
// - Redistributions of source code must retain the above copyright notice, this
// list of conditions and the following disclaimer.
//
// - Redistributions in binary form must reproduce the above copyright notice,
// this list of conditions and the following disclaimer in the documentation
// and/or other materials provided with the distribution.
//
// - Neither the name of the Outercurve Foundation nor the names of its
// contributors may be used to endorse or promote products derived from this
// software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
// ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
// DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
// ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
// ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
using System;
using System.Collections.Generic;
using System.Text;
namespace WebsitePanel.Import.Enterprise
{
public class Utils
{
private Utils()
{
}
public static int ParseInt(string val, int defaultValue)
{
int result;
if (!Int32.TryParse(val, out result))
{
result = defaultValue;
}
return result;
}
public static bool IsThreadAbortException(Exception ex)
{
Exception innerException = ex;
while (innerException != null)
{
if (innerException is System.Threading.ThreadAbortException)
return true;
innerException = innerException.InnerException;
}
string str = ex.ToString();
return str.Contains("System.Threading.ThreadAbortException");
}
#region DB
/// <summary>
/// Converts db value to string
/// </summary>
/// <param name="val">Value</param>
/// <returns>string</returns>
public static string GetDbString(object val)
{
string ret = string.Empty;
if ((val != null) && (val != DBNull.Value))
ret = (string)val;
return ret;
}
/// <summary>
/// Converts db value to short
/// </summary>
/// <param name="val">Value</param>
/// <returns>short</returns>
public static short GetDbShort(object val)
{
short ret = 0;
if ((val != null) && (val != DBNull.Value))
ret = (short)val;
return ret;
}
/// <summary>
/// Converts db value to int
/// </summary>
/// <param name="val">Value</param>
/// <returns>int</returns>
public static int GetDbInt32(object val)
{
int ret = 0;
if ((val != null) && (val != DBNull.Value))
ret = (int)val;
return ret;
}
/// <summary>
/// Converts db value to bool
/// </summary>
/// <param name="val">Value</param>
/// <returns>bool</returns>
public static bool GetDbBool(object val)
{
bool ret = false;
if ((val != null) && (val != DBNull.Value))
ret = Convert.ToBoolean(val);
return ret;
}
/// <summary>
/// Converts db value to decimal
/// </summary>
/// <param name="val">Value</param>
/// <returns>decimal</returns>
public static decimal GetDbDecimal(object val)
{
decimal ret = 0;
if ((val != null) && (val != DBNull.Value))
ret = (decimal)val;
return ret;
}
/// <summary>
/// Converts db value to datetime
/// </summary>
/// <param name="val">Value</param>
/// <returns>DateTime</returns>
public static DateTime GetDbDateTime(object val)
{
DateTime ret = DateTime.MinValue;
if ((val != null) && (val != DBNull.Value))
ret = (DateTime)val;
return ret;
}
#endregion
}
}

View file

@ -0,0 +1,224 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>9.0.30729</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{3CC79CB9-C8B9-4658-A3C6-AE023445D091}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>WebsitePanel.Import.Enterprise</RootNamespace>
<AssemblyName>WebsitePanel.Import.Enterprise</AssemblyName>
<ApplicationIcon>application.ico</ApplicationIcon>
<FileUpgradeFlags>
</FileUpgradeFlags>
<UpgradeBackupLocation>
</UpgradeBackupLocation>
<OldToolsVersion>3.5</OldToolsVersion>
<IsWebBootstrapper>false</IsWebBootstrapper>
<StartupObject>WebsitePanel.Import.Enterprise.Program</StartupObject>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<PublishUrl>publish\</PublishUrl>
<Install>true</Install>
<InstallFrom>Disk</InstallFrom>
<UpdateEnabled>false</UpdateEnabled>
<UpdateMode>Foreground</UpdateMode>
<UpdateInterval>7</UpdateInterval>
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
<UpdatePeriodically>false</UpdatePeriodically>
<UpdateRequired>false</UpdateRequired>
<MapFileExtensions>true</MapFileExtensions>
<ApplicationRevision>0</ApplicationRevision>
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
<UseApplicationTrust>false</UseApplicationTrust>
<BootstrapperEnabled>true</BootstrapperEnabled>
<TargetFrameworkProfile />
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<UseVSHostingProcess>true</UseVSHostingProcess>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<CodeAnalysisRuleSet>AllRules.ruleset</CodeAnalysisRuleSet>
<UseVSHostingProcess>false</UseVSHostingProcess>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.configuration" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.DirectoryServices" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
<Reference Include="WebsitePanel.EnterpriseServer">
<HintPath>..\..\WebsitePanel.EnterpriseServer\bin\WebsitePanel.EnterpriseServer.dll</HintPath>
</Reference>
<Reference Include="WebsitePanel.EnterpriseServer.Base">
<HintPath>..\..\..\Bin\WebsitePanel.EnterpriseServer.Base.dll</HintPath>
</Reference>
<Reference Include="WebsitePanel.EnterpriseServer.Client">
<HintPath>..\..\..\Bin\WebsitePanel.EnterpriseServer.Client.dll</HintPath>
</Reference>
<Reference Include="WebsitePanel.Providers.Base">
<HintPath>..\..\..\Bin\WebsitePanel.Providers.Base.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="..\..\VersionInfo.cs">
<Link>VersionInfo.cs</Link>
</Compile>
<Compile Include="ADUtils.cs" />
<Compile Include="AnimatedIcon.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="ApplicationForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ApplicationForm.Designer.cs">
<DependentUpon>ApplicationForm.cs</DependentUpon>
</Compile>
<Compile Include="BaseForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="Global.cs" />
<Compile Include="ImportAction.cs" />
<Compile Include="OrganizationImporter.cs" />
<Compile Include="OUForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="OUForm.Designer.cs">
<DependentUpon>OUForm.cs</DependentUpon>
</Compile>
<Compile Include="DataNode.cs" />
<Compile Include="SpaceForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="SpaceForm.Designer.cs">
<DependentUpon>SpaceForm.cs</DependentUpon>
</Compile>
<Compile Include="ConnectForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="ConnectForm.Designer.cs">
<DependentUpon>ConnectForm.cs</DependentUpon>
</Compile>
<Compile Include="LineBox.cs">
<SubType>Component</SubType>
</Compile>
<Compile Include="LineBox.Designer.cs">
<DependentUpon>LineBox.cs</DependentUpon>
</Compile>
<Compile Include="Log.cs" />
<Compile Include="Program.cs" />
<Compile Include="ProgressIcon.cs">
<SubType>UserControl</SubType>
</Compile>
<Compile Include="Properties\AssemblyInfo.cs" />
<EmbeddedResource Include="ApplicationForm.resx">
<SubType>Designer</SubType>
<DependentUpon>ApplicationForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="ConnectForm.resx">
<DependentUpon>ConnectForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="OUForm.resx">
<DependentUpon>OUForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="ProgressIcon.resx">
<DependentUpon>ProgressIcon.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="SpaceForm.resx">
<SubType>Designer</SubType>
<DependentUpon>SpaceForm.cs</DependentUpon>
</EmbeddedResource>
<Compile Include="Properties\Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<None Include="App.config" />
<Compile Include="Utils.cs" />
</ItemGroup>
<ItemGroup>
<Content Include="application.ico" />
<None Include="Resources\OU.ico" />
<None Include="Resources\UsersLargeIcon.ico" />
<None Include="Resources\UsersSmallIcon.ico" />
<None Include="Resources\UserLargeIcon.ico" />
<None Include="Resources\SpaceSmallIcon.ico" />
<None Include="Resources\SpaceLargeIcon.ico" />
<None Include="Resources\RefreshImage.bmp" />
<None Include="Resources\ProgressImage8.bmp" />
<None Include="Resources\ProgressImage7.bmp" />
<None Include="Resources\ProgressImage6.bmp" />
<None Include="Resources\ProgressImage5.bmp" />
<None Include="Resources\ProgressImage4.bmp" />
<None Include="Resources\ProgressImage3.bmp" />
<None Include="Resources\ProgressImage2.bmp" />
<None Include="Resources\ProgressImage1.bmp" />
<None Include="Resources\FolderSmallIcon.ico" />
<None Include="Resources\FolderLargeIcon.ico" />
<None Include="Resources\ConnectLogo.bmp" />
<None Include="Resources\ConnectImage.bmp" />
<None Include="Resources\BannerImage.GIF" />
<None Include="Resources\UserSmallIcon.ico" />
</ItemGroup>
<ItemGroup>
<BootstrapperPackage Include="Microsoft.Net.Client.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1 Client Profile</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
<Visible>False</Visible>
<ProductName>.NET Framework 2.0 %28x86%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
<Visible>False</Visible>
<ProductName>.NET Framework 3.0 %28x86%29</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5</ProductName>
<Install>false</Install>
</BootstrapperPackage>
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
<Visible>False</Visible>
<ProductName>.NET Framework 3.5 SP1</ProductName>
<Install>false</Install>
</BootstrapperPackage>
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB