Customization enhancements (and self-branding ;) ) for the About dialog

This commit is contained in:
Michael Becker 2014-07-22 15:32:47 -04:00
parent a00d4015fe
commit 4519dabaa7
3 changed files with 840 additions and 821 deletions

View File

@ -7,97 +7,101 @@ using System.Windows.Forms;
namespace UniversalEditor.UserInterface.WindowsForms.Dialogs
{
public partial class AboutDialog : Glue.GlueWindow
{
public AboutDialog()
{
InitializeComponent();
InitializeImageLists();
InitializeInstalledComponentsTab();
public partial class AboutDialog : Glue.GlueWindow
{
public AboutDialog()
{
InitializeComponent();
InitializeImageLists();
InitializeInstalledComponentsTab();
Font = SystemFonts.MenuFont;
lblApplicationTitle.Font = new Font(Font, FontStyle.Bold);
Font = SystemFonts.MenuFont;
lblApplicationTitle.Font = new Font(Font, FontStyle.Bold);
lblApplicationTitle.Text = Engine.CurrentEngine.DefaultLanguage.GetStringTableEntry("ApplicationTitle", "Universal Editor Platform");
lblPlatform.Visible = (lblApplicationTitle.Text != "Universal Editor Platform");
lblVersion.Text = "Version " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
this.Text = "About " + lblApplicationTitle.Text;
private void InitializeImageLists()
{
IconMethods.PopulateSystemIcons(ref imlSmallIcons);
}
private void InitializeInstalledComponentsTab()
{
tvComponents.Nodes.Clear();
lblVersion.Text = "Version " + System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();
}
#region Object Models
{
TreeNode tnParent = null;
ObjectModelReference[] omrs = UniversalEditor.Common.Reflection.GetAvailableObjectModels();
foreach (ObjectModelReference omr in omrs)
{
string title = omr.ObjectModelType.Assembly.GetName().Name;
object[] atts = omr.ObjectModelType.Assembly.GetCustomAttributes(typeof(System.Reflection.AssemblyTitleAttribute), false);
if (atts.Length > 0)
{
title = (atts[0] as System.Reflection.AssemblyTitleAttribute).Title;
}
private void InitializeImageLists()
{
IconMethods.PopulateSystemIcons(ref imlSmallIcons);
}
private void InitializeInstalledComponentsTab()
{
tvComponents.Nodes.Clear();
if (tnParent == null)
{
if (tvComponents.Nodes.ContainsKey(title))
{
tnParent = tvComponents.Nodes[title];
}
else
{
tnParent = tvComponents.Nodes.Add(title, title, "LibraryClosed");
}
}
else
{
if (tvComponents.Nodes.ContainsKey(title))
{
tnParent = tnParent.Nodes[title];
}
else
{
tnParent = tnParent.Nodes.Add(title, title, "LibraryClosed", "LibraryClosed");
}
}
tnParent.Tag = omr.ObjectModelType.Assembly;
#region Object Models
{
TreeNode tnParent = null;
ObjectModelReference[] omrs = UniversalEditor.Common.Reflection.GetAvailableObjectModels();
foreach (ObjectModelReference omr in omrs)
{
string title = omr.ObjectModelType.Assembly.GetName().Name;
object[] atts = omr.ObjectModelType.Assembly.GetCustomAttributes(typeof(System.Reflection.AssemblyTitleAttribute), false);
if (atts.Length > 0)
{
title = (atts[0] as System.Reflection.AssemblyTitleAttribute).Title;
}
foreach (string s in omr.Path)
{
if (tnParent == null)
{
if (tvComponents.Nodes.ContainsKey(s))
{
tnParent = tvComponents.Nodes[s];
}
else
{
tnParent = tvComponents.Nodes.Add(s, s, "generic-folder-closed", "generic-folder-closed");
}
}
else
{
if (tnParent.Nodes.ContainsKey(s))
{
tnParent = tnParent.Nodes[s];
}
else
{
tnParent = tnParent.Nodes.Add(s, s, "generic-folder-closed", "generic-folder-closed");
}
}
if (tnParent == null)
{
if (tvComponents.Nodes.ContainsKey(title))
{
tnParent = tvComponents.Nodes[title];
}
else
{
tnParent = tvComponents.Nodes.Add(title, title, "LibraryClosed");
}
}
else
{
if (tvComponents.Nodes.ContainsKey(title))
{
tnParent = tnParent.Nodes[title];
}
else
{
tnParent = tnParent.Nodes.Add(title, title, "LibraryClosed", "LibraryClosed");
}
}
tnParent.Tag = omr.ObjectModelType.Assembly;
if (Array.IndexOf<string>(omr.Path, s) == omr.Path.Length - 1)
{
tnParent.ImageKey = "ObjectModel";
tnParent.SelectedImageKey = "ObjectModel";
tnParent.Tag = omr;
foreach (string s in omr.Path)
{
if (tnParent == null)
{
if (tvComponents.Nodes.ContainsKey(s))
{
tnParent = tvComponents.Nodes[s];
}
else
{
tnParent = tvComponents.Nodes.Add(s, s, "generic-folder-closed", "generic-folder-closed");
}
}
else
{
if (tnParent.Nodes.ContainsKey(s))
{
tnParent = tnParent.Nodes[s];
}
else
{
tnParent = tnParent.Nodes.Add(s, s, "generic-folder-closed", "generic-folder-closed");
}
}
DataFormatReference[] dfrs = UniversalEditor.Common.Reflection.GetAvailableDataFormats(omr);
if (Array.IndexOf<string>(omr.Path, s) == omr.Path.Length - 1)
{
tnParent.ImageKey = "ObjectModel";
tnParent.SelectedImageKey = "ObjectModel";
tnParent.Tag = omr;
DataFormatReference[] dfrs = UniversalEditor.Common.Reflection.GetAvailableDataFormats(omr);
if (dfrs.Length > 0)
{
TreeNode tnParentDataFormats = null;
@ -150,149 +154,149 @@ namespace UniversalEditor.UserInterface.WindowsForms.Dialogs
}
}
}
}
}
tnParent = null;
}
}
#endregion
}
}
tnParent = null;
}
}
#endregion
tvComponents.Sort();
}
}
private void tvComponents_AfterExpand(object sender, TreeViewEventArgs e)
{
UpdateNodeImage(e.Node);
}
private void tvComponents_AfterCollapse(object sender, TreeViewEventArgs e)
{
UpdateNodeImage(e.Node);
}
private void tvComponents_AfterExpand(object sender, TreeViewEventArgs e)
{
UpdateNodeImage(e.Node);
}
private void tvComponents_AfterCollapse(object sender, TreeViewEventArgs e)
{
UpdateNodeImage(e.Node);
}
private void UpdateNodeImage(TreeNode node)
{
if (node == null) return;
switch (node.ImageKey)
{
case "LibraryClosed":
{
node.ImageKey = "LibraryOpen";
node.SelectedImageKey = "LibraryOpen";
break;
}
case "LibraryOpen":
{
node.ImageKey = "LibraryClosed";
node.SelectedImageKey = "LibraryClosed";
break;
}
case "generic-folder-closed":
{
node.ImageKey = "generic-folder-open";
node.SelectedImageKey = "generic-folder-open";
break;
}
case "generic-folder-open":
{
node.ImageKey = "generic-folder-closed";
node.SelectedImageKey = "generic-folder-closed";
break;
}
}
}
private void UpdateNodeImage(TreeNode node)
{
if (node == null) return;
switch (node.ImageKey)
{
case "LibraryClosed":
{
node.ImageKey = "LibraryOpen";
node.SelectedImageKey = "LibraryOpen";
break;
}
case "LibraryOpen":
{
node.ImageKey = "LibraryClosed";
node.SelectedImageKey = "LibraryClosed";
break;
}
case "generic-folder-closed":
{
node.ImageKey = "generic-folder-open";
node.SelectedImageKey = "generic-folder-open";
break;
}
case "generic-folder-open":
{
node.ImageKey = "generic-folder-closed";
node.SelectedImageKey = "generic-folder-closed";
break;
}
}
}
private void tvComponents_AfterSelect(object sender, TreeViewEventArgs e)
{
if (e.Node == null) return;
private void tvComponents_AfterSelect(object sender, TreeViewEventArgs e)
{
if (e.Node == null) return;
pnlAssemblyInfo.Visible = false;
pnlAssemblyInfo.Enabled = false;
pnlAssemblyInfo.Visible = false;
pnlAssemblyInfo.Enabled = false;
pnlObjectModelInfo.Visible = false;
pnlObjectModelInfo.Enabled = false;
pnlObjectModelInfo.Visible = false;
pnlObjectModelInfo.Enabled = false;
pnlDataFormatInfo.Visible = false;
pnlDataFormatInfo.Enabled = false;
pnlDataFormatInfo.Visible = false;
pnlDataFormatInfo.Enabled = false;
if (e.Node.Tag is System.Reflection.Assembly)
{
System.Reflection.Assembly asm = (e.Node.Tag as System.Reflection.Assembly);
if (e.Node.Tag is System.Reflection.Assembly)
{
System.Reflection.Assembly asm = (e.Node.Tag as System.Reflection.Assembly);
txtAssemblyFullName.Text = asm.FullName;
txtAssemblyLocation.Text = asm.Location;
txtAssemblyFullName.Text = asm.FullName;
txtAssemblyLocation.Text = asm.Location;
object[] atts = asm.GetCustomAttributes(typeof(System.Reflection.AssemblyDescriptionAttribute), false);
if (atts.Length > 0)
{
txtAssemblyDescription.Text = ((atts[0] as System.Reflection.AssemblyDescriptionAttribute).Description);
}
object[] atts = asm.GetCustomAttributes(typeof(System.Reflection.AssemblyDescriptionAttribute), false);
if (atts.Length > 0)
{
txtAssemblyDescription.Text = ((atts[0] as System.Reflection.AssemblyDescriptionAttribute).Description);
}
pnlAssemblyInfo.Enabled = true;
pnlAssemblyInfo.Visible = true;
}
else if (e.Node.Tag is ObjectModelReference)
{
ObjectModelReference omr = (e.Node.Tag as ObjectModelReference);
txtObjectModelID.Text = omr.ObjectModelID.ToString("B");
if (omr.ObjectModelTypeName == null)
{
txtObjectModelTypeName.Text = "(null)";
}
else
{
txtObjectModelTypeName.Text = omr.ObjectModelTypeName;
}
txtObjectModelTitle.Text = omr.Title;
pnlAssemblyInfo.Enabled = true;
pnlAssemblyInfo.Visible = true;
}
else if (e.Node.Tag is ObjectModelReference)
{
ObjectModelReference omr = (e.Node.Tag as ObjectModelReference);
txtObjectModelID.Text = omr.ObjectModelID.ToString("B");
if (omr.ObjectModelTypeName == null)
{
txtObjectModelTypeName.Text = "(null)";
}
else
{
txtObjectModelTypeName.Text = omr.ObjectModelTypeName;
}
txtObjectModelTitle.Text = omr.Title;
pnlObjectModelInfo.Enabled = true;
pnlObjectModelInfo.Visible = true;
}
else if (e.Node.Tag is DataFormatReference)
{
DataFormatReference dfr = (e.Node.Tag as DataFormatReference);
txtDataFormatID.Text = dfr.ID.ToString("B");
if (dfr.DataFormatType != null)
{
txtDataFormatTypeName.Text = dfr.DataFormatType.FullName;
}
else
{
txtDataFormatTypeName.Text = "(null)";
}
pnlObjectModelInfo.Enabled = true;
pnlObjectModelInfo.Visible = true;
}
else if (e.Node.Tag is DataFormatReference)
{
DataFormatReference dfr = (e.Node.Tag as DataFormatReference);
txtDataFormatID.Text = dfr.ID.ToString("B");
if (dfr.DataFormatType != null)
{
txtDataFormatTypeName.Text = dfr.DataFormatType.FullName;
}
else
{
txtDataFormatTypeName.Text = "(null)";
}
lvDataFormatFilters.Items.Clear();
foreach (DataFormatFilter filter in dfr.Filters)
{
ListViewItem lvi = new ListViewItem();
lvi.Text = filter.Title;
lvDataFormatFilters.Items.Clear();
foreach (DataFormatFilter filter in dfr.Filters)
{
ListViewItem lvi = new ListViewItem();
lvi.Text = filter.Title;
StringBuilder sb = new StringBuilder();
foreach (string s in filter.FileNameFilters)
{
sb.Append(s);
if (filter.FileNameFilters.IndexOf(s) < filter.FileNameFilters.Count - 1)
{
sb.Append(", ");
}
}
lvi.SubItems.Add(sb.ToString());
lvDataFormatFilters.Items.Add(lvi);
}
foreach (string ct in dfr.ContentTypes)
{
ListViewItem lvi = new ListViewItem();
lvi.Text = ct;
lvDataFormatContentTypes.Items.Add(lvi);
}
StringBuilder sb = new StringBuilder();
foreach (string s in filter.FileNameFilters)
{
sb.Append(s);
if (filter.FileNameFilters.IndexOf(s) < filter.FileNameFilters.Count - 1)
{
sb.Append(", ");
}
}
lvi.SubItems.Add(sb.ToString());
lvDataFormatFilters.Items.Add(lvi);
}
foreach (string ct in dfr.ContentTypes)
{
ListViewItem lvi = new ListViewItem();
lvi.Text = ct;
lvDataFormatContentTypes.Items.Add(lvi);
}
pnlDataFormatInfo.Enabled = true;
pnlDataFormatInfo.Visible = true;
}
}
pnlDataFormatInfo.Enabled = true;
pnlDataFormatInfo.Visible = true;
}
}
private void cmdOpenContainingFolder_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start(System.IO.Path.GetDirectoryName(txtAssemblyLocation.Text));
}
private void cmdOpenContainingFolder_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start(System.IO.Path.GetDirectoryName(txtAssemblyLocation.Text));
}
}
}
}

View File

@ -18,7 +18,7 @@
<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="Color, System.Drawing">Blue</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>
@ -155,75 +155,75 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj0yLjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABK
EQAAAk1TRnQBSQFMAgEBBAEAASABAAEgAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
EQAAAk1TRnQBSQFMAgEBBAEAASgBAAEoAQABEAEAARABAAT/ASEBAAj/AUIBTQE2BwABNgMAASgDAAFA
AwABIAMAAQEBAAEgBgABIP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wD/AP8A/wAPAAH4Ae4B4wH/
KAADAgH/AwIB/wMCAf8sAAMCAf8DAgH/AwIB/wMCAf8DAgH/AwIB/wMCAf8DAgH/AwIB/wMCAf8DAgH/
MAADVQGqAdYBzgHJAf80AAH4Ae4B4wH/AZkBMgECAf8B+AHuAeMB/yAAAwIB/wFWAQIBVgH/AwIB/wOD
Af8DAgH/AwIB/yAAAwIB/wFiAQIBYgH/AVsBAgFbAf8BVAECAVQB/wFOAQIBTgH/AUkBAgFJAf8BRQEC
AUUB/wFAAQIBQAH/AT0BAgE9Af8BOgECAToB/wE6AQIBOgH/AwIB/xQAA1UBqgHiAd0B2QH/AeIB3QHZ
Af8IAANVAaoBygHBAboB/wF2AV8BTAH/AWcBTQE4Af8wAAH4Ae4B4wH/AbUBYgE0Af8B2AGbAVoB/wGZ
ATIBAgH/AfgB7gHjAf8YAAMCAf8BZAECAWQB/wFbAQIBWwH/AwIB/wH+Af0B/gH/AcUBxAHFAf8D/QH/
AwIB/wMCAf8UAAMCAf8BcAECAXAB/wH+Af0B/gH/AwIB/wOHAf8BhgGFAYYB/wHIAccByAH/Af4B/QH+
Af8B/gH9Af4B/wH+Af0B/gH/Af4B/QH+Af8BPAECATwB/wMCAf8QAAGoAZkBjQH/AYUBbwFeAf8BZwFN
ATgB/wGFAW8BXgH/AcoBwQG6Af8DVQGqAcABtQGtAf8BZwFNATgB/wHIAbQBpwH/AWcBTQE4Af8oAAGX
AYEBbgH/AZcBgQFuAf8B2AGbAVoC/wHNAZkB/wHpAbQBewH/AdgBmwFaAf8BmQEyAQIB/wH4Ae4B4wH/
EAADAgH/AXABAgFwAf8BaQECAWkB/wFiAQIBYgH/AwIB/wGEAYMBhAH/Af4B/QH+Af8BxQHEAcUB/wH+
Af0B/gH/AcUBxAHFAf8DAgH/AwIB/wgAAwIB/wGCAQIBggH/AXkBAgF5Af8B/gH9Af4B/wMCAf8ByAHH
AcgB/wH+Af0B/gH/AYYBhQGGAf8BhgGFAYYB/wHIAccByAH/Af4B/QH+Af8B/gH9Af4B/wFCAQIBQgH/
AwIB/wwAAWcBTQE4Af8BZwFNATgB/wG7AakBnAH/AdkBzQHFAf8BqwGXAYgB/wF2AV8BTAH/AWcBTQE4
Af8BdgFfAUwB/wHUAcQBuwH/AcgBtAGnAf8BYgFIATQB/ygAAZcBgQFuAf8EAAH4Ae4B4wH/AdgBmwFa
Av8BzQGZAf8B6QG0AXsB/wHYAZsBWgH/AZkBMgECAf8MAAMCAf8BfAECAXwB/wF3AQIBdwH/AXEBAgFx
Af8BagECAWoB/wHFAcQBxQH/AwIB/wMCAf8DgwH/AcUBxAHFAf8B/gH9Af4B/wHFAcQBxQH/AwIB/wMC
Af8DAgH/AZABHgGQAf8BigESAYoB/wH+Af0B/gH/Af4B/QH+Af8DAgH/AcgBxwHIAf8B/gH9Af4B/wH+
Af0B/gH/Af4B/QH+Af8BhgGFAYYB/wHIAccByAH/Af4B/QH+Af8BSQECAUkB/wMCAf8MAAG4AZ4BkAH/
KAADAQH/AwEB/wMBAf8sAAMBAf8DAQH/AwEB/wMBAf8DAQH/AwEB/wMBAf8DAQH/AwEB/wMBAf8DAQH/
MAADVAGqAdYBzgHJAf80AAH4Ae4B4wH/AZkBMQEBAf8B+AHuAeMB/yAAAwEB/wFVAQEBVQH/AwEB/wOD
Af8DAQH/AwEB/yAAAwEB/wFhAQEBYQH/AVoBAQFaAf8BUwEBAVMB/wFNAQEBTQH/AUgBAQFIAf8BRAEB
AUQB/wE/AQEBPwH/ATwBAQE8Af8BOQEBATkB/wE5AQEBOQH/AwEB/xQAA1QBqgHiAd0B2QH/AeIB3QHZ
Af8IAANUAaoBygHBAboB/wF1AV4BSwH/AWYBTAE3Af8wAAH4Ae4B4wH/AbUBYQEzAf8B2AGbAVkB/wGZ
ATEBAQH/AfgB7gHjAf8YAAMBAf8BYwEBAWMB/wFaAQEBWgH/AwEB/wH+Af0B/gH/AcUBxAHFAf8D/QH/
AwEB/wMBAf8UAAMBAf8BbwEBAW8B/wH+Af0B/gH/AwEB/wOHAf8BhgGFAYYB/wHIAccByAH/Af4B/QH+
Af8B/gH9Af4B/wH+Af0B/gH/Af4B/QH+Af8BOwEBATsB/wMBAf8QAAGoAZkBjQH/AYUBbgFdAf8BZgFM
ATcB/wGFAW4BXQH/AcoBwQG6Af8DVAGqAcABtQGtAf8BZgFMATcB/wHIAbQBpwH/AWYBTAE3Af8oAAGX
AYEBbQH/AZcBgQFtAf8B2AGbAVkC/wHNAZkB/wHpAbQBegH/AdgBmwFZAf8BmQExAQEB/wH4Ae4B4wH/
EAADAQH/AW8BAQFvAf8BaAEBAWgB/wFhAQEBYQH/AwEB/wGEAYMBhAH/Af4B/QH+Af8BxQHEAcUB/wH+
Af0B/gH/AcUBxAHFAf8DAQH/AwEB/wgAAwEB/wGCAQEBggH/AXgBAQF4Af8B/gH9Af4B/wMBAf8ByAHH
AcgB/wH+Af0B/gH/AYYBhQGGAf8BhgGFAYYB/wHIAccByAH/Af4B/QH+Af8B/gH9Af4B/wFBAQEBQQH/
AwEB/wwAAWYBTAE3Af8BZgFMATcB/wG7AakBnAH/AdkBzQHFAf8BqwGXAYgB/wF1AV4BSwH/AWYBTAE3
Af8BdQFeAUsB/wHUAcQBuwH/AcgBtAGnAf8BYQFHATMB/ygAAZcBgQFtAf8EAAH4Ae4B4wH/AdgBmwFZ
Av8BzQGZAf8B6QG0AXoB/wHYAZsBWQH/AZkBMQEBAf8MAAMBAf8BewEBAXsB/wF2AQEBdgH/AXABAQFw
Af8BaQEBAWkB/wHFAcQBxQH/AwEB/wMBAf8DgwH/AcUBxAHFAf8B/gH9Af4B/wHFAcQBxQH/AwEB/wMB
Af8DAQH/AZABHQGQAf8BigERAYoB/wH+Af0B/gH/Af4B/QH+Af8DAQH/AcgBxwHIAf8B/gH9Af4B/wH+
Af0B/gH/Af4B/QH+Af8BhgGFAYYB/wHIAccByAH/Af4B/QH+Af8BSAEBAUgB/wMBAf8MAAG4AZ4BkAH/
AeAB1QHPAf8B8wHvAewF/wH9AfwB+wH/AeYB3gHYAf8B2AHMAcQB/wHcAc8ByAH/AecB1QHLAf8BzAG5
Aa4B/wFiAUgBNAH/KAABlwGBAW4B/wgAAfgB7gHjAf8B2AGbAVoC/wHNAZkB/wHJAXIBQgH/AfgB7gHj
Af8IAAMCAf8BiwEUAYsB/wGGAQoBhgH/AYEBAgGBAf8BeQECAXkB/wHFAcQBxQH/AW0BAgFtAf8BZQEC
AWUB/wFeAQIBXgH/AwIB/wMCAf8DgwH/Af4B/QH+Af8DgwH/BAADAgH/AZkBMAGZAf8B/gH9Af4B/wH+
Af0B/gH/Af4B/QH+Af8DAgH/AckBxwHJAf8B/gH9Af4B/wECA/8B/gH9Af4B/wH+Af0B/gH/AYYBhQGG
Af8B/gH9Af4B/wFRAQIBUQH/AwIB/wwAAboBpQGWBf8B6gGcAXMB/wHqAZIBYwH/AeoBhwFTAf8B6AF7
AUQB/wHiAXIBOQH/AdkBaQEyAf8B6wHbAdMB/wHRAb8BtQH/AWIBSAE0Af8YAAHYAe4B9gH/DAABlwGB
AW4B/wwAAfcB3gHiAf8B2AGbAVoB/wH4Ae4B4wH/CAADAgH/AZkBMAGZAf8BlQEoAZUB/wGQAR4BkAH/
AYsBFAGLAf8BxgHEAcYB/wF9AQIBfQH/AXYBAgF2Af8BcAECAXAB/wFqAQIBagH/AWMBAgFjAf8BXAEC
AVwB/wMCAf8DAgH/AYQBgwGEAf8EAAMCAf8BoQFAAaEB/wH+Af0B/gH/Af4B/QH+Af8B/gH9Af4B/wMC
Af8ByQHHAckB/wH+Af0B/gH/Af4B/QH+Bf8BAgP/AYYBhQGGAf8B/gH9Af4B/wFZAQIBWQH/AwIB/wwA
Ab4BqQGaEf8B/gH9AfwB/wH5AfUB8gH/AfQB6wHmAf8B7gHhAdoB/wHWAcQBvAH/AWIBSAE0Af8UAAHY
Ae4B9gH/AQ0BdwGeAf8B2AHuAfYB/wgAAZcBgQFuAf8IAANJAYgBjQEsAYwB/wH3Ad4B4gH/DAADAgH/
AaQBRgGkAf8BoQFAAaEB/wGbATQBmwH/AcYBxQHGAf8BjwEcAY8B/wGIAQ4BiAH/AYIBAgGCAf8BegEC
AXoB/wF0AQIBdAH/AW4BAgFuAf8BaAECAWgB/wFjAQIBYwH/AV4BAgFeAf8DAgH/AwIB/wMCAf8BqQFQ
AakG/wH9Av8B/gH9Af4B/wMCAf8ByQHIAckB/wH+Af0B/gH/AQID/wH+Af0B/gH/Af4B/QH+Af8BhgGF
AYYF/wFjAQIBYwH/AwIB/wwAAcMBrgGeBf8B6gGbAXMB/wHqAZIBYwH/AeoBhwFTAf8B6AF7AUQB/wHi
AXIBOQH/AdkBagEyAf8B8QHnAeEB/wHaAcsBwwH/AWIBSAE0Af8QAAHYAe4B9gH/AQ0BdwGeAf8BGwG2
Ae4B/wENAXcBngH/AdgB7gH2Af8EAAGXAYEBbgH/BAADSQGIAbMBOwGyAf8B3AFvAdsB/wGNASwBjAH/
A0kBiAgAAwIB/wGvAVwBrwH/AawBVgGsAf8BxgHFAcYB/wGhAUABoQH/AZoBMgGaAf8BkgEiAZIB/wGM
ARYBjAH/AYYBCgGGAf8BfQECAX0B/wF3AQIBdwH/AXIBAgFyAf8BbgECAW4B/wFqAQIBagH/AwIB/wQA
AwIB/wGvAVwBrwb/Af4D/wH+Av8DAgH/AckByAHJAf8B/gH9Af4B/wH+Af0B/gH/Af4B/QH+Af8BAgP/
AYYBhQGGAf8B/gH9Af4B/wFtAQIBbQH/AwIB/wwAAcgBsgGjFf8D/gH/AfoB9wH1Af8B9QHtAekB/wHf
AdIBywH/AWIBSAE0Af8MAAHYAe4B9gH/AQ0BdwGeAf8BTgHLAfEB/wEzAcAB7wH/AS4BvgHvAf8BCwFh
AYEB/wGXAYEBbgH/AZcBgQFuAf8BlwGBAW4B/wHZAWsB2AH/AfoBrQH6Af8B+wGYAfoB/wHcAW8B2wH/
AY0BLAGMAf8DSQGIBAADAgH/AbkBcAG5Af8BxgHFAcYB/wGzAWQBswH/Aa0BWAGtAf8BpQFIAaUB/wGd
ATgBnQH/AZYBKgGWAf8BjwEcAY8B/wGIAQ4BiAH/AYIBAgGCAf8BewECAXsB/wF2AQIBdgH/AwIB/wgA
AwIB/wG1AWgBtQL/Af4D/wH+A/8B/gL/AwIB/wHJAcgByQL/Af4C/wECA/8B/gH9Af4B/wH+Af0B/gH/
AYYBhQGGAf8B/gH9Af4B/wF3AQIBdwH/AwIB/wwAAcwBtgGnBf8B6gGcAXMB/wHqAZIBZAH/AeoBhwFT
Af8B6AF7AUQF/wH9AfwB+wH/AeYB3AHWAf8B4wHYAdIB/wFjAUkBNQH/DAABEwGqAeEB/wGFAeEB9QH/
AWoB1wH0Af8BTwHLAfEB/wEzAcAB8AH/ARwBtQHuAf8BCwFhAYEB/wHYAe4B9gH/BAADSQGIAdMBZAHS
Af8B+gGtAfoB/wH7AZgB+gH/AdwBbwHbAf8BjQEsAYwB/wQAAwIB/wPGAf8BwQGBAcEB/wG+AXoBvgH/
AbgBbgG4Af8BsQFgAbEB/wGoAU4BqAH/AaABPgGgAf8BmAEuAZgB/wGRASABkQH/AYoBEgGKAf8BhAEG
AYQB/wMCAf8MAAMCAf8BuQFwAbkC/wH+A/8B/gL/AckByAHJAf8DhgH/A4YC/wH+A/8B/gP/Af4C/wEC
A/8BhgGFAYYB/wMCAf8DAgH/EAAB0QG7AasZ/wG3AaIBkwH/AWMBSQE1Af8BYwFJATUB/wFjAUkBNQH/
DAAB2AHuAfYB/wETAaoB4QH/AYYB4QH1Af8BawHWAfMB/wFPAcsB8gH/ATQBwAHwAf8BGwG1Ae0B/wEL
AWEBgQH/AdgB7gH2Af8EAANJAYgB0wFkAdIB/wH6Aa0B+gH/AdMBZAHSAf8DSQGICAADAgH/AwIB/wHG
AYsBxgH/AcEBgQHBAf8BuwF0AbsB/wGyAWIBsgH/AaoBUgGqAf8BoAE+AaAB/wGYAS4BmAH/AZABHgGQ
Af8DAgH/EAADAgH/AbsBdAG7Av8B/gP/Af4C/wGHAYYBhwH/CAADhgH/A4YC/wH+A/8B/gL/AYYBhQGG
Af8YAAHVAb8Brxn/AbkBpAGVAf8B1AHFAboB/wFiAUgBNAH/AcEBsgGnAf8QAAHYAe4B9gH/ARMBqgHh
Af8BhQHgAfUB/wFrAdYB8wH/AU8BywHyAf8BMwHAAe8B/wEcAbUB7QH/AQsBYQGBAf8B2AHuAfYB/wQA
A0kBiAHTAWQB0gH/A0kBiBQAAwIB/wMCAf8BwQGBAcEB/wG5AXABuQH/AbABXgGwAf8BpwFMAacB/wGe
AToBngH/AwIB/xQAAwIB/wG7AXQBuwL/Af4C/wHJAcgByQH/AYcBhgGHAf8QAAOGAf8BhgGFAYYB/wOG
Af8YAAHYAcIBshn/AcABqwGcAf8BYgFIATQB/wHCAbMBpwH/GAAB2AHuAfYB/wETAaoB4QH/AYYB4QH0
Af8BagHWAfQB/wFPAcsB8QH/ARYBmAHIAf8B2AHuAfYB/wwAA0kBiCAAAwIB/wMCAf8BswFkAbMB/wGq
AVIBqgH/AwIB/xwAAYcBhgGHAf8ByQHIAckB/wGHAYYBhwH/OAAB2AHCAbIB/wHYAcIBsgH/AdgBwgGy
Aa4B/wFhAUcBMwH/KAABlwGBAW0B/wgAAfgB7gHjAf8B2AGbAVkC/wHNAZkB/wHJAXEBQQH/AfgB7gHj
Af8IAAMBAf8BiwETAYsB/wGGAQkBhgH/AYEBAQGBAf8BeAEBAXgB/wHFAcQBxQH/AWwBAQFsAf8BZAEB
AWQB/wFdAQEBXQH/AwEB/wMBAf8DgwH/Af4B/QH+Af8DgwH/BAADAQH/AZkBLwGZAf8B/gH9Af4B/wH+
Af0B/gH/Af4B/QH+Af8DAQH/AckBxwHJAf8B/gH9Af4B/wEBA/8B/gH9Af4B/wH+Af0B/gH/AYYBhQGG
Af8B/gH9Af4B/wFQAQEBUAH/AwEB/wwAAboBpQGWBf8B6gGcAXIB/wHqAZIBYgH/AeoBhwFSAf8B6AF6
AUMB/wHiAXEBOAH/AdkBaAExAf8B6wHbAdMB/wHRAb8BtQH/AWEBRwEzAf8YAAHYAe4B9gH/DAABlwGB
AW0B/wwAAfcB3gHiAf8B2AGbAVkB/wH4Ae4B4wH/CAADAQH/AZkBLwGZAf8BlQEnAZUB/wGQAR0BkAH/
AYsBEwGLAf8BxgHEAcYB/wF8AQEBfAH/AXUBAQF1Af8BbwEBAW8B/wFpAQEBaQH/AWIBAQFiAf8BWwEB
AVsB/wMBAf8DAQH/AYQBgwGEAf8EAAMBAf8BoQE/AaEB/wH+Af0B/gH/Af4B/QH+Af8B/gH9Af4B/wMB
Af8ByQHHAckB/wH+Af0B/gH/Af4B/QH+Bf8BAQP/AYYBhQGGAf8B/gH9Af4B/wFYAQEBWAH/AwEB/wwA
Ab4BqQGaEf8B/gH9AfwB/wH5AfUB8gH/AfQB6wHmAf8B7gHhAdoB/wHWAcQBvAH/AWEBRwEzAf8UAAHY
Ae4B9gH/AQwBdgGeAf8B2AHuAfYB/wgAAZcBgQFtAf8IAANJAYgBjQErAYwB/wH3Ad4B4gH/DAADAQH/
AaQBRQGkAf8BoQE/AaEB/wGbATMBmwH/AcYBxQHGAf8BjwEbAY8B/wGIAQ0BiAH/AYIBAQGCAf8BeQEB
AXkB/wFzAQEBcwH/AW0BAQFtAf8BZwEBAWcB/wFiAQEBYgH/AV0BAQFdAf8DAQH/AwEB/wMBAf8BqQFP
AakG/wH9Av8B/gH9Af4B/wMBAf8ByQHIAckB/wH+Af0B/gH/AQED/wH+Af0B/gH/Af4B/QH+Af8BhgGF
AYYF/wFiAQEBYgH/AwEB/wwAAcMBrgGeBf8B6gGbAXIB/wHqAZIBYgH/AeoBhwFSAf8B6AF6AUMB/wHi
AXEBOAH/AdkBaQExAf8B8QHnAeEB/wHaAcsBwwH/AWEBRwEzAf8QAAHYAe4B9gH/AQwBdgGeAf8BGgG2
Ae4B/wEMAXYBngH/AdgB7gH2Af8EAAGXAYEBbQH/BAADSQGIAbMBOgGyAf8B3AFuAdsB/wGNASsBjAH/
A0kBiAgAAwEB/wGvAVsBrwH/AawBVQGsAf8BxgHFAcYB/wGhAT8BoQH/AZoBMQGaAf8BkgEhAZIB/wGM
ARUBjAH/AYYBCQGGAf8BfAEBAXwB/wF2AQEBdgH/AXEBAQFxAf8BbQEBAW0B/wFpAQEBaQH/AwEB/wQA
AwEB/wGvAVsBrwb/Af4D/wH+Av8DAQH/AckByAHJAf8B/gH9Af4B/wH+Af0B/gH/Af4B/QH+Af8BAQP/
AYYBhQGGAf8B/gH9Af4B/wFsAQEBbAH/AwEB/wwAAcgBsgGjFf8D/gH/AfoB9wH1Af8B9QHtAekB/wHf
AdIBywH/AWEBRwEzAf8MAAHYAe4B9gH/AQwBdgGeAf8BTQHLAfEB/wEyAcAB7wH/AS0BvgHvAf8BCgFg
AYEB/wGXAYEBbQH/AZcBgQFtAf8BlwGBAW0B/wHZAWoB2AH/AfoBrQH6Af8B+wGYAfoB/wHcAW4B2wH/
AY0BKwGMAf8DSQGIBAADAQH/AbkBbwG5Af8BxgHFAcYB/wGzAWMBswH/Aa0BVwGtAf8BpQFHAaUB/wGd
ATcBnQH/AZYBKQGWAf8BjwEbAY8B/wGIAQ0BiAH/AYIBAQGCAf8BegEBAXoB/wF1AQEBdQH/AwEB/wgA
AwEB/wG1AWcBtQL/Af4D/wH+A/8B/gL/AwEB/wHJAcgByQL/Af4C/wEBA/8B/gH9Af4B/wH+Af0B/gH/
AYYBhQGGAf8B/gH9Af4B/wF2AQEBdgH/AwEB/wwAAcwBtgGnBf8B6gGcAXIB/wHqAZIBYwH/AeoBhwFS
Af8B6AF6AUMF/wH9AfwB+wH/AeYB3AHWAf8B4wHYAdIB/wFiAUgBNAH/DAABEgGqAeEB/wGFAeEB9QH/
AWkB1wH0Af8BTgHLAfEB/wEyAcAB8AH/ARsBtQHuAf8BCgFgAYEB/wHYAe4B9gH/BAADSQGIAdMBYwHS
Af8B+gGtAfoB/wH7AZgB+gH/AdwBbgHbAf8BjQErAYwB/wQAAwEB/wPGAf8BwQGBAcEB/wG+AXkBvgH/
AbgBbQG4Af8BsQFfAbEB/wGoAU0BqAH/AaABPQGgAf8BmAEtAZgB/wGRAR8BkQH/AYoBEQGKAf8BhAEF
AYQB/wMBAf8MAAMBAf8BuQFvAbkC/wH+A/8B/gL/AckByAHJAf8DhgH/A4YC/wH+A/8B/gP/Af4C/wEB
A/8BhgGFAYYB/wMBAf8DAQH/EAAB0QG7AasZ/wG3AaIBkwH/AWIBSAE0Af8BYgFIATQB/wFiAUgBNAH/
DAAB2AHuAfYB/wESAaoB4QH/AYYB4QH1Af8BagHWAfMB/wFOAcsB8gH/ATMBwAHwAf8BGgG1Ae0B/wEK
AWABgQH/AdgB7gH2Af8EAANJAYgB0wFjAdIB/wH6Aa0B+gH/AdMBYwHSAf8DSQGICAADAQH/AwEB/wHG
AYsBxgH/AcEBgQHBAf8BuwFzAbsB/wGyAWEBsgH/AaoBUQGqAf8BoAE9AaAB/wGYAS0BmAH/AZABHQGQ
Af8DAQH/EAADAQH/AbsBcwG7Av8B/gP/Af4C/wGHAYYBhwH/CAADhgH/A4YC/wH+A/8B/gL/AYYBhQGG
Af8YAAHVAb8Brxn/AbkBpAGVAf8B1AHFAboB/wFhAUcBMwH/AcEBsgGnAf8QAAHYAe4B9gH/ARIBqgHh
Af8BhQHgAfUB/wFqAdYB8wH/AU4BywHyAf8BMgHAAe8B/wEbAbUB7QH/AQoBYAGBAf8B2AHuAfYB/wQA
A0kBiAHTAWMB0gH/A0kBiBQAAwEB/wMBAf8BwQGBAcEB/wG5AW8BuQH/AbABXQGwAf8BpwFLAacB/wGe
ATkBngH/AwEB/xQAAwEB/wG7AXMBuwL/Af4C/wHJAcgByQH/AYcBhgGHAf8QAAOGAf8BhgGFAYYB/wOG
Af8YAAHYAcIBshn/AcABqwGcAf8BYQFHATMB/wHCAbMBpwH/GAAB2AHuAfYB/wESAaoB4QH/AYYB4QH0
Af8BaQHWAfQB/wFOAcsB8QH/ARUBmAHIAf8B2AHuAfYB/wwAA0kBiCAAAwEB/wMBAf8BswFjAbMB/wGq
AVEBqgH/AwEB/xwAAYcBhgGHAf8ByQHIAckB/wGHAYYBhwH/OAAB2AHCAbIB/wHYAcIBsgH/AdgBwgGy
Af8B2AHCAbIB/wHYAcIBsgH/AdQBvgGuAf8BzwG5AakB/wHJAbMBpAH/AeIB1gHNAf8gAAHYAe4B9gH/
ARMBqgHhAf8BhQHhAfUB/wEWAZgByAH/AdgB7gH2Af88AAMCAf8DAgH/JAADhgH/hAAB2AHuAfYB/wET
ARIBqgHhAf8BhQHhAfUB/wEVAZgByAH/AdgB7gH2Af88AAMBAf8DAQH/JAADhgH/hAAB2AHuAfYB/wES
AaoB4QH/AdgB7gH2Af8kAAFCAU0BPgcAAT4DAAEoAwABQAMAASADAAEBAQABAQYAAQEWAAP/gQAH/wHv
AfwBfwHwAQEB/wHnAf8BxwH4AR8B4AEBAfEBhwH/AYMB8AEHAcABAQHgAQcB/gEBAeABAQGAAQEBwAEH
Af4BgQHAAgABAQHAAQcB/gHBAYABAQEAAQEBwAEHAe4B4wEAAQEBAAEBAcABBwHGAccDAAEBAcABBwGC